From 22a8bccad9c29392f9856a12425920f4be5f66c3 Mon Sep 17 00:00:00 2001 From: Acbox Date: Fri, 9 Jan 2026 12:33:04 +0800 Subject: [PATCH] feat: initialize project structure --- .env.example | 11 + .gitignore | 92 + README.md | 0 eslint.config.mjs | 43 + package.json | 41 + packages/agent/.gitignore | 1 + packages/agent/README.md | 3 + packages/agent/package.json | 22 + packages/agent/src/index.ts | 0 packages/api/.gitignore | 42 + packages/api/README.md | 1 + packages/api/bun.lock | 56 + packages/api/package.json | 16 + packages/api/src/index.ts | 9 + packages/api/tsconfig.json | 103 + packages/db/README.md | 21 + packages/db/drizzle.config.ts | 13 + packages/db/package.json | 25 + packages/db/src/index.ts | 3 + packages/db/src/model.ts | 10 + packages/db/src/schema.ts | 1 + packages/db/tsconfig.json | 3 + packages/shared/README.md | 1 + packages/shared/package.json | 16 + packages/shared/src/index.ts | 0 packages/ui/.gitignore | 36 + packages/ui/README.md | 1 + packages/ui/env.d.ts | 1 + packages/ui/package.json | 50 + packages/ui/src/components/alert/Alert.vue | 21 + .../src/components/alert/AlertDescription.vue | 17 + .../ui/src/components/alert/AlertTitle.vue | 17 + packages/ui/src/components/alert/index.ts | 24 + packages/ui/src/components/avatar/Avatar.vue | 18 + .../src/components/avatar/AvatarFallback.vue | 21 + .../ui/src/components/avatar/AvatarImage.vue | 16 + packages/ui/src/components/avatar/index.ts | 3 + packages/ui/src/components/badge/Badge.vue | 26 + packages/ui/src/components/badge/index.ts | 26 + .../components/button-group/ButtonGroup.vue | 22 + .../button-group/ButtonGroupSeparator.vue | 24 + .../button-group/ButtonGroupText.vue | 29 + .../ui/src/components/button-group/index.ts | 25 + packages/ui/src/components/button/Button.vue | 29 + packages/ui/src/components/button/index.ts | 38 + packages/ui/src/components/card/Card.vue | 22 + .../ui/src/components/card/CardAction.vue | 17 + .../ui/src/components/card/CardContent.vue | 17 + .../src/components/card/CardDescription.vue | 17 + .../ui/src/components/card/CardFooter.vue | 17 + .../ui/src/components/card/CardHeader.vue | 17 + packages/ui/src/components/card/CardTitle.vue | 17 + packages/ui/src/components/card/index.ts | 7 + .../ui/src/components/checkbox/Checkbox.vue | 40 + packages/ui/src/components/checkbox/index.ts | 1 + .../ui/src/components/combobox/Combobox.vue | 19 + .../components/combobox/ComboboxAnchor.vue | 23 + .../src/components/combobox/ComboboxEmpty.vue | 21 + .../src/components/combobox/ComboboxGroup.vue | 30 + .../src/components/combobox/ComboboxInput.vue | 44 + .../src/components/combobox/ComboboxItem.vue | 31 + .../combobox/ComboboxItemIndicator.vue | 23 + .../src/components/combobox/ComboboxList.vue | 39 + .../components/combobox/ComboboxSeparator.vue | 21 + .../components/combobox/ComboboxTrigger.vue | 24 + .../components/combobox/ComboboxViewport.vue | 23 + packages/ui/src/components/combobox/index.ts | 12 + .../components/context-menu/ContextMenu.vue | 18 + .../context-menu/ContextMenuCheckboxItem.vue | 39 + .../context-menu/ContextMenuContent.vue | 40 + .../context-menu/ContextMenuGroup.vue | 15 + .../context-menu/ContextMenuItem.vue | 44 + .../context-menu/ContextMenuLabel.vue | 22 + .../context-menu/ContextMenuPortal.vue | 15 + .../context-menu/ContextMenuRadioGroup.vue | 21 + .../context-menu/ContextMenuRadioItem.vue | 39 + .../context-menu/ContextMenuSeparator.vue | 21 + .../context-menu/ContextMenuShortcut.vue | 17 + .../context-menu/ContextMenuSub.vue | 21 + .../context-menu/ContextMenuSubContent.vue | 32 + .../context-menu/ContextMenuSubTrigger.vue | 32 + .../context-menu/ContextMenuTrigger.vue | 17 + .../ui/src/components/context-menu/index.ts | 14 + packages/ui/src/components/dialog/Dialog.vue | 19 + .../ui/src/components/dialog/DialogClose.vue | 15 + .../src/components/dialog/DialogContent.vue | 55 + .../components/dialog/DialogDescription.vue | 23 + .../ui/src/components/dialog/DialogFooter.vue | 15 + .../ui/src/components/dialog/DialogHeader.vue | 17 + .../src/components/dialog/DialogOverlay.vue | 21 + .../components/dialog/DialogScrollContent.vue | 59 + .../ui/src/components/dialog/DialogTitle.vue | 23 + .../src/components/dialog/DialogTrigger.vue | 15 + packages/ui/src/components/dialog/index.ts | 10 + .../components/dropdown-menu/DropdownMenu.vue | 19 + .../DropdownMenuCheckboxItem.vue | 39 + .../dropdown-menu/DropdownMenuContent.vue | 45 + .../dropdown-menu/DropdownMenuGroup.vue | 15 + .../dropdown-menu/DropdownMenuItem.vue | 40 + .../dropdown-menu/DropdownMenuLabel.vue | 23 + .../dropdown-menu/DropdownMenuRadioGroup.vue | 21 + .../dropdown-menu/DropdownMenuRadioItem.vue | 40 + .../dropdown-menu/DropdownMenuSeparator.vue | 23 + .../dropdown-menu/DropdownMenuShortcut.vue | 17 + .../dropdown-menu/DropdownMenuSub.vue | 22 + .../dropdown-menu/DropdownMenuSubContent.vue | 27 + .../dropdown-menu/DropdownMenuSubTrigger.vue | 30 + .../dropdown-menu/DropdownMenuTrigger.vue | 17 + .../ui/src/components/dropdown-menu/index.ts | 16 + .../src/components/input-group/InputGroup.vue | 35 + .../input-group/InputGroupAddon.vue | 36 + .../input-group/InputGroupButton.vue | 21 + .../input-group/InputGroupInput.vue | 19 + .../components/input-group/InputGroupText.vue | 19 + .../input-group/InputGroupTextarea.vue | 19 + .../ui/src/components/input-group/index.ts | 59 + packages/ui/src/components/input/Input.vue | 36 + packages/ui/src/components/input/index.ts | 1 + packages/ui/src/components/kbd/Kbd.vue | 21 + packages/ui/src/components/kbd/KbdGroup.vue | 17 + packages/ui/src/components/kbd/index.ts | 2 + packages/ui/src/components/label/Label.vue | 28 + packages/ui/src/components/label/index.ts | 1 + .../src/components/radio-group/RadioGroup.vue | 25 + .../components/radio-group/RadioGroupItem.vue | 42 + .../ui/src/components/radio-group/index.ts | 2 + packages/ui/src/components/select/Select.vue | 19 + .../src/components/select/SelectContent.vue | 54 + .../ui/src/components/select/SelectGroup.vue | 15 + .../ui/src/components/select/SelectItem.vue | 49 + .../src/components/select/SelectItemText.vue | 15 + .../ui/src/components/select/SelectLabel.vue | 17 + .../select/SelectScrollDownButton.vue | 26 + .../select/SelectScrollUpButton.vue | 26 + .../src/components/select/SelectSeparator.vue | 19 + .../src/components/select/SelectTrigger.vue | 41 + .../ui/src/components/select/SelectValue.vue | 15 + packages/ui/src/components/select/index.ts | 11 + .../ui/src/components/separator/Separator.vue | 29 + packages/ui/src/components/separator/index.ts | 1 + packages/ui/src/components/sheet/Sheet.vue | 19 + .../ui/src/components/sheet/SheetClose.vue | 15 + .../ui/src/components/sheet/SheetContent.vue | 64 + .../src/components/sheet/SheetDescription.vue | 21 + .../ui/src/components/sheet/SheetFooter.vue | 16 + .../ui/src/components/sheet/SheetHeader.vue | 15 + .../ui/src/components/sheet/SheetOverlay.vue | 21 + .../ui/src/components/sheet/SheetTitle.vue | 21 + .../ui/src/components/sheet/SheetTrigger.vue | 15 + packages/ui/src/components/sheet/index.ts | 8 + .../ui/src/components/sidebar/Sidebar.vue | 101 + .../src/components/sidebar/SidebarContent.vue | 18 + .../src/components/sidebar/SidebarFooter.vue | 18 + .../src/components/sidebar/SidebarGroup.vue | 18 + .../components/sidebar/SidebarGroupAction.vue | 27 + .../sidebar/SidebarGroupContent.vue | 18 + .../components/sidebar/SidebarGroupLabel.vue | 25 + .../src/components/sidebar/SidebarHeader.vue | 18 + .../src/components/sidebar/SidebarInput.vue | 22 + .../src/components/sidebar/SidebarInset.vue | 21 + .../ui/src/components/sidebar/SidebarMenu.vue | 18 + .../components/sidebar/SidebarMenuAction.vue | 35 + .../components/sidebar/SidebarMenuBadge.vue | 26 + .../components/sidebar/SidebarMenuButton.vue | 54 + .../sidebar/SidebarMenuButtonChild.vue | 36 + .../components/sidebar/SidebarMenuItem.vue | 18 + .../sidebar/SidebarMenuSkeleton.vue | 35 + .../src/components/sidebar/SidebarMenuSub.vue | 22 + .../sidebar/SidebarMenuSubButton.vue | 36 + .../components/sidebar/SidebarMenuSubItem.vue | 18 + .../components/sidebar/SidebarProvider.vue | 82 + .../ui/src/components/sidebar/SidebarRail.vue | 33 + .../components/sidebar/SidebarSeparator.vue | 19 + .../src/components/sidebar/SidebarTrigger.vue | 27 + packages/ui/src/components/sidebar/index.ts | 60 + packages/ui/src/components/sidebar/utils.ts | 19 + .../ui/src/components/skeleton/Skeleton.vue | 17 + packages/ui/src/components/skeleton/index.ts | 1 + packages/ui/src/components/slider/Slider.vue | 43 + packages/ui/src/components/slider/index.ts | 1 + packages/ui/src/components/sonner/Sonner.vue | 42 + packages/ui/src/components/sonner/index.ts | 1 + .../ui/src/components/spinner/Spinner.vue | 17 + packages/ui/src/components/spinner/index.ts | 1 + packages/ui/src/components/switch/Switch.vue | 48 + packages/ui/src/components/switch/index.ts | 1 + packages/ui/src/components/tabs/Tabs.vue | 24 + .../ui/src/components/tabs/TabsContent.vue | 21 + packages/ui/src/components/tabs/TabsList.vue | 24 + .../ui/src/components/tabs/TabsTrigger.vue | 31 + packages/ui/src/components/tabs/index.ts | 4 + .../ui/src/components/textarea/Textarea.vue | 35 + packages/ui/src/components/textarea/index.ts | 1 + .../ui/src/components/tooltip/Tooltip.vue | 19 + .../src/components/tooltip/TooltipContent.vue | 41 + .../components/tooltip/TooltipProvider.vue | 14 + .../src/components/tooltip/TooltipTrigger.vue | 15 + packages/ui/src/components/tooltip/index.ts | 4 + packages/ui/src/index.ts | 30 + packages/ui/src/lib/utils.ts | 7 + packages/ui/src/style.css | 144 + packages/ui/tsconfig.json | 13 + packages/web/.gitignore | 24 + packages/web/README.md | 1 + packages/web/index.html | 13 + packages/web/package.json | 31 + packages/web/public/vite.svg | 1 + packages/web/src/App.vue | 10 + packages/web/src/assets/vue.svg | 1 + packages/web/src/components/README.md | 0 packages/web/src/composables/README.md | 0 packages/web/src/i18n.ts | 7 + packages/web/src/i18n/locales/en.json | 0 packages/web/src/layout/README.md | 0 packages/web/src/main.ts | 13 + packages/web/src/pages/index.vue | 0 packages/web/src/router.ts | 8 + packages/web/src/style.css | 2 + packages/web/src/types/index.ts | 0 packages/web/src/utils/index.ts | 0 packages/web/tsconfig.app.json | 16 + packages/web/tsconfig.json | 7 + packages/web/tsconfig.node.json | 26 + packages/web/vite.config.ts | 30 + pnpm-lock.yaml | 5394 +++++++++++++++++ pnpm-workspace.yaml | 2 + tsconfig.json | 20 + vitest.config.ts | 15 + 228 files changed, 10511 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 README.md create mode 100644 eslint.config.mjs create mode 100644 package.json create mode 100644 packages/agent/.gitignore create mode 100644 packages/agent/README.md create mode 100644 packages/agent/package.json create mode 100644 packages/agent/src/index.ts create mode 100644 packages/api/.gitignore create mode 100644 packages/api/README.md create mode 100644 packages/api/bun.lock create mode 100644 packages/api/package.json create mode 100644 packages/api/src/index.ts create mode 100644 packages/api/tsconfig.json create mode 100644 packages/db/README.md create mode 100644 packages/db/drizzle.config.ts create mode 100644 packages/db/package.json create mode 100644 packages/db/src/index.ts create mode 100644 packages/db/src/model.ts create mode 100644 packages/db/src/schema.ts create mode 100644 packages/db/tsconfig.json create mode 100644 packages/shared/README.md create mode 100644 packages/shared/package.json create mode 100644 packages/shared/src/index.ts create mode 100644 packages/ui/.gitignore create mode 100644 packages/ui/README.md create mode 100644 packages/ui/env.d.ts create mode 100644 packages/ui/package.json create mode 100644 packages/ui/src/components/alert/Alert.vue create mode 100644 packages/ui/src/components/alert/AlertDescription.vue create mode 100644 packages/ui/src/components/alert/AlertTitle.vue create mode 100644 packages/ui/src/components/alert/index.ts create mode 100644 packages/ui/src/components/avatar/Avatar.vue create mode 100644 packages/ui/src/components/avatar/AvatarFallback.vue create mode 100644 packages/ui/src/components/avatar/AvatarImage.vue create mode 100644 packages/ui/src/components/avatar/index.ts create mode 100644 packages/ui/src/components/badge/Badge.vue create mode 100644 packages/ui/src/components/badge/index.ts create mode 100644 packages/ui/src/components/button-group/ButtonGroup.vue create mode 100644 packages/ui/src/components/button-group/ButtonGroupSeparator.vue create mode 100644 packages/ui/src/components/button-group/ButtonGroupText.vue create mode 100644 packages/ui/src/components/button-group/index.ts create mode 100644 packages/ui/src/components/button/Button.vue create mode 100644 packages/ui/src/components/button/index.ts create mode 100644 packages/ui/src/components/card/Card.vue create mode 100644 packages/ui/src/components/card/CardAction.vue create mode 100644 packages/ui/src/components/card/CardContent.vue create mode 100644 packages/ui/src/components/card/CardDescription.vue create mode 100644 packages/ui/src/components/card/CardFooter.vue create mode 100644 packages/ui/src/components/card/CardHeader.vue create mode 100644 packages/ui/src/components/card/CardTitle.vue create mode 100644 packages/ui/src/components/card/index.ts create mode 100644 packages/ui/src/components/checkbox/Checkbox.vue create mode 100644 packages/ui/src/components/checkbox/index.ts create mode 100644 packages/ui/src/components/combobox/Combobox.vue create mode 100644 packages/ui/src/components/combobox/ComboboxAnchor.vue create mode 100644 packages/ui/src/components/combobox/ComboboxEmpty.vue create mode 100644 packages/ui/src/components/combobox/ComboboxGroup.vue create mode 100644 packages/ui/src/components/combobox/ComboboxInput.vue create mode 100644 packages/ui/src/components/combobox/ComboboxItem.vue create mode 100644 packages/ui/src/components/combobox/ComboboxItemIndicator.vue create mode 100644 packages/ui/src/components/combobox/ComboboxList.vue create mode 100644 packages/ui/src/components/combobox/ComboboxSeparator.vue create mode 100644 packages/ui/src/components/combobox/ComboboxTrigger.vue create mode 100644 packages/ui/src/components/combobox/ComboboxViewport.vue create mode 100644 packages/ui/src/components/combobox/index.ts create mode 100644 packages/ui/src/components/context-menu/ContextMenu.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuCheckboxItem.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuContent.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuGroup.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuItem.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuLabel.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuPortal.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuRadioGroup.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuRadioItem.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuSeparator.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuShortcut.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuSub.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuSubContent.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuSubTrigger.vue create mode 100644 packages/ui/src/components/context-menu/ContextMenuTrigger.vue create mode 100644 packages/ui/src/components/context-menu/index.ts create mode 100644 packages/ui/src/components/dialog/Dialog.vue create mode 100644 packages/ui/src/components/dialog/DialogClose.vue create mode 100644 packages/ui/src/components/dialog/DialogContent.vue create mode 100644 packages/ui/src/components/dialog/DialogDescription.vue create mode 100644 packages/ui/src/components/dialog/DialogFooter.vue create mode 100644 packages/ui/src/components/dialog/DialogHeader.vue create mode 100644 packages/ui/src/components/dialog/DialogOverlay.vue create mode 100644 packages/ui/src/components/dialog/DialogScrollContent.vue create mode 100644 packages/ui/src/components/dialog/DialogTitle.vue create mode 100644 packages/ui/src/components/dialog/DialogTrigger.vue create mode 100644 packages/ui/src/components/dialog/index.ts create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenu.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuCheckboxItem.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuContent.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuGroup.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuItem.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuLabel.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuRadioGroup.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuRadioItem.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuSeparator.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuShortcut.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuSub.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuSubContent.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuSubTrigger.vue create mode 100644 packages/ui/src/components/dropdown-menu/DropdownMenuTrigger.vue create mode 100644 packages/ui/src/components/dropdown-menu/index.ts create mode 100644 packages/ui/src/components/input-group/InputGroup.vue create mode 100644 packages/ui/src/components/input-group/InputGroupAddon.vue create mode 100644 packages/ui/src/components/input-group/InputGroupButton.vue create mode 100644 packages/ui/src/components/input-group/InputGroupInput.vue create mode 100644 packages/ui/src/components/input-group/InputGroupText.vue create mode 100644 packages/ui/src/components/input-group/InputGroupTextarea.vue create mode 100644 packages/ui/src/components/input-group/index.ts create mode 100644 packages/ui/src/components/input/Input.vue create mode 100644 packages/ui/src/components/input/index.ts create mode 100644 packages/ui/src/components/kbd/Kbd.vue create mode 100644 packages/ui/src/components/kbd/KbdGroup.vue create mode 100644 packages/ui/src/components/kbd/index.ts create mode 100644 packages/ui/src/components/label/Label.vue create mode 100644 packages/ui/src/components/label/index.ts create mode 100644 packages/ui/src/components/radio-group/RadioGroup.vue create mode 100644 packages/ui/src/components/radio-group/RadioGroupItem.vue create mode 100644 packages/ui/src/components/radio-group/index.ts create mode 100644 packages/ui/src/components/select/Select.vue create mode 100644 packages/ui/src/components/select/SelectContent.vue create mode 100644 packages/ui/src/components/select/SelectGroup.vue create mode 100644 packages/ui/src/components/select/SelectItem.vue create mode 100644 packages/ui/src/components/select/SelectItemText.vue create mode 100644 packages/ui/src/components/select/SelectLabel.vue create mode 100644 packages/ui/src/components/select/SelectScrollDownButton.vue create mode 100644 packages/ui/src/components/select/SelectScrollUpButton.vue create mode 100644 packages/ui/src/components/select/SelectSeparator.vue create mode 100644 packages/ui/src/components/select/SelectTrigger.vue create mode 100644 packages/ui/src/components/select/SelectValue.vue create mode 100644 packages/ui/src/components/select/index.ts create mode 100644 packages/ui/src/components/separator/Separator.vue create mode 100644 packages/ui/src/components/separator/index.ts create mode 100644 packages/ui/src/components/sheet/Sheet.vue create mode 100644 packages/ui/src/components/sheet/SheetClose.vue create mode 100644 packages/ui/src/components/sheet/SheetContent.vue create mode 100644 packages/ui/src/components/sheet/SheetDescription.vue create mode 100644 packages/ui/src/components/sheet/SheetFooter.vue create mode 100644 packages/ui/src/components/sheet/SheetHeader.vue create mode 100644 packages/ui/src/components/sheet/SheetOverlay.vue create mode 100644 packages/ui/src/components/sheet/SheetTitle.vue create mode 100644 packages/ui/src/components/sheet/SheetTrigger.vue create mode 100644 packages/ui/src/components/sheet/index.ts create mode 100644 packages/ui/src/components/sidebar/Sidebar.vue create mode 100644 packages/ui/src/components/sidebar/SidebarContent.vue create mode 100644 packages/ui/src/components/sidebar/SidebarFooter.vue create mode 100644 packages/ui/src/components/sidebar/SidebarGroup.vue create mode 100644 packages/ui/src/components/sidebar/SidebarGroupAction.vue create mode 100644 packages/ui/src/components/sidebar/SidebarGroupContent.vue create mode 100644 packages/ui/src/components/sidebar/SidebarGroupLabel.vue create mode 100644 packages/ui/src/components/sidebar/SidebarHeader.vue create mode 100644 packages/ui/src/components/sidebar/SidebarInput.vue create mode 100644 packages/ui/src/components/sidebar/SidebarInset.vue create mode 100644 packages/ui/src/components/sidebar/SidebarMenu.vue create mode 100644 packages/ui/src/components/sidebar/SidebarMenuAction.vue create mode 100644 packages/ui/src/components/sidebar/SidebarMenuBadge.vue create mode 100644 packages/ui/src/components/sidebar/SidebarMenuButton.vue create mode 100644 packages/ui/src/components/sidebar/SidebarMenuButtonChild.vue create mode 100644 packages/ui/src/components/sidebar/SidebarMenuItem.vue create mode 100644 packages/ui/src/components/sidebar/SidebarMenuSkeleton.vue create mode 100644 packages/ui/src/components/sidebar/SidebarMenuSub.vue create mode 100644 packages/ui/src/components/sidebar/SidebarMenuSubButton.vue create mode 100644 packages/ui/src/components/sidebar/SidebarMenuSubItem.vue create mode 100644 packages/ui/src/components/sidebar/SidebarProvider.vue create mode 100644 packages/ui/src/components/sidebar/SidebarRail.vue create mode 100644 packages/ui/src/components/sidebar/SidebarSeparator.vue create mode 100644 packages/ui/src/components/sidebar/SidebarTrigger.vue create mode 100644 packages/ui/src/components/sidebar/index.ts create mode 100644 packages/ui/src/components/sidebar/utils.ts create mode 100644 packages/ui/src/components/skeleton/Skeleton.vue create mode 100644 packages/ui/src/components/skeleton/index.ts create mode 100644 packages/ui/src/components/slider/Slider.vue create mode 100644 packages/ui/src/components/slider/index.ts create mode 100644 packages/ui/src/components/sonner/Sonner.vue create mode 100644 packages/ui/src/components/sonner/index.ts create mode 100644 packages/ui/src/components/spinner/Spinner.vue create mode 100644 packages/ui/src/components/spinner/index.ts create mode 100644 packages/ui/src/components/switch/Switch.vue create mode 100644 packages/ui/src/components/switch/index.ts create mode 100644 packages/ui/src/components/tabs/Tabs.vue create mode 100644 packages/ui/src/components/tabs/TabsContent.vue create mode 100644 packages/ui/src/components/tabs/TabsList.vue create mode 100644 packages/ui/src/components/tabs/TabsTrigger.vue create mode 100644 packages/ui/src/components/tabs/index.ts create mode 100644 packages/ui/src/components/textarea/Textarea.vue create mode 100644 packages/ui/src/components/textarea/index.ts create mode 100644 packages/ui/src/components/tooltip/Tooltip.vue create mode 100644 packages/ui/src/components/tooltip/TooltipContent.vue create mode 100644 packages/ui/src/components/tooltip/TooltipProvider.vue create mode 100644 packages/ui/src/components/tooltip/TooltipTrigger.vue create mode 100644 packages/ui/src/components/tooltip/index.ts create mode 100644 packages/ui/src/index.ts create mode 100644 packages/ui/src/lib/utils.ts create mode 100644 packages/ui/src/style.css create mode 100644 packages/ui/tsconfig.json create mode 100644 packages/web/.gitignore create mode 100644 packages/web/README.md create mode 100644 packages/web/index.html create mode 100644 packages/web/package.json create mode 100644 packages/web/public/vite.svg create mode 100644 packages/web/src/App.vue create mode 100644 packages/web/src/assets/vue.svg create mode 100644 packages/web/src/components/README.md create mode 100644 packages/web/src/composables/README.md create mode 100644 packages/web/src/i18n.ts create mode 100644 packages/web/src/i18n/locales/en.json create mode 100644 packages/web/src/layout/README.md create mode 100644 packages/web/src/main.ts create mode 100644 packages/web/src/pages/index.vue create mode 100644 packages/web/src/router.ts create mode 100644 packages/web/src/style.css create mode 100644 packages/web/src/types/index.ts create mode 100644 packages/web/src/utils/index.ts create mode 100644 packages/web/tsconfig.app.json create mode 100644 packages/web/tsconfig.json create mode 100644 packages/web/tsconfig.node.json create mode 100644 packages/web/vite.config.ts create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 tsconfig.json create mode 100644 vitest.config.ts diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..2e0eb385 --- /dev/null +++ b/.env.example @@ -0,0 +1,11 @@ +# Server +API_SERVER_PORT=7002 +DEVICE_API_SERVER_PORT=7001 +WEB_PORT=7003 + +API_BASE_URL=http://localhost:7002 +DEVICE_API_BASE_URL=http://localhost:7001 +WEB_URL=http://localhost:7003 + +# Database (PostgreSQL) +DATABASE_URL= diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..d4ab8547 --- /dev/null +++ b/.gitignore @@ -0,0 +1,92 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +venv/ +ENV/ +.venv +pip-log.txt +pip-delete-this-directory.txt +.pytest_cache/ +.mypy_cache/ +.dmypy.json +dmypy.json +*.egg-info/ +dist/ +build/ +.eggs/ +*.egg +.coverage +htmlcov/ +.tox/ +.nox/ +.hypothesis/ +.pytype/ +pytype.cache +.ruff_cache/ +.python-version +*.pyc +*.pyo +*.pyd + +# Node.js +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* +.npm +.eslintcache +.yarn/ +.pnp.* +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.yarn/patches +.next/ +.nuxt/ +.cache/ +.parcel-cache/ +.turbo/ +.vite/ +*.tsbuildinfo + +# Environment variables +.env +.env.local +.env.*.local +.env.development.local +.env.test.local +.env.production.local + +# IDE +.idea/ +.vscode/ +*.swp +*.swo +*~ +.DS_Store + +# Logs +*.log +logs/ + +# OS +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Temporary files +*.tmp +*.temp +.cache/ + diff --git a/README.md b/README.md new file mode 100644 index 00000000..e69de29b diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..34584998 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,43 @@ +// @ts-check +import vueParser from 'vue-eslint-parser' +import tseslint from 'typescript-eslint' +import vue from 'eslint-plugin-vue' + +export default [ + ...tseslint.configs.recommended, + ...vue.configs['flat/recommended'], + { ignores: ['**/node_modules/**', '**/dist/**'] }, + { + files: ['packages/**/*.{js,jsx,ts,tsx}'], + languageOptions: { + parserOptions: { + ecmaVersion: 2022, + sourceType: 'module', + projectService: true, + }, + }, + rules: { + quotes: ['error', 'single'], + semi: ['error', 'never'], + }, + }, + { + files: ['packages/**/*.vue'], + languageOptions: { + parser: vueParser, + parserOptions: { + ecmaVersion: 2022, + sourceType: 'module', + parser: { + js: 'espree', + ts: tseslint.parser, + }, + }, + }, + rules: { + quotes: ['error', 'single'], + semi: ['error', 'never'], + 'vue/multi-word-component-names': 'off', + }, + }, +] diff --git a/package.json b/package.json new file mode 100644 index 00000000..8bab0db5 --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "@byteagent/monorepo", + "private": true, + "version": "1.0.0", + "scripts": { + "dev": "pnpm --parallel --filter @byteagent/* dev", + "build": "pnpm --parallel --filter @byteagent/* build", + "start": "pnpm --parallel --filter @byteagent/* start", + "api:dev": "pnpm --filter @byteagent/api dev", + "api:build": "pnpm --filter @byteagent/api build", + "api:start": "pnpm --filter @byteagent/api start", + "web:dev": "pnpm --filter @byteagent/web dev", + "web:build": "pnpm --filter @byteagent/web build", + "web:start": "pnpm --filter @byteagent/web start", + "device-api:dev": "pnpm --filter @byteagent/device-api dev", + "device-api:build": "pnpm --filter @byteagent/device-api build", + "device-api:start": "pnpm --filter @byteagent/device-api start", + "db:push": "pnpm --filter @byteagent/db push", + "db:migrate": "pnpm --filter @byteagent/db migrate", + "db:generate": "pnpm --filter @byteagent/db generate", + "db:studio": "pnpm --filter @byteagent/db studio", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "test": "vitest" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@types/node": "^25.0.3", + "eslint": "^9.39.2", + "eslint-plugin-vue": "^10.6.2", + "typescript": "^5.9.3", + "typescript-eslint": "^8.52.0", + "vitest": "^4.0.16", + "vue-eslint-parser": "^10.2.0" + }, + "dependencies": { + "dotenv": "^17.2.3" + } +} diff --git a/packages/agent/.gitignore b/packages/agent/.gitignore new file mode 100644 index 00000000..3d535857 --- /dev/null +++ b/packages/agent/.gitignore @@ -0,0 +1 @@ +screenshot-*.png \ No newline at end of file diff --git a/packages/agent/README.md b/packages/agent/README.md new file mode 100644 index 00000000..9a729114 --- /dev/null +++ b/packages/agent/README.md @@ -0,0 +1,3 @@ +# @byteagent/agent + +Agent for PhoneTutor. \ No newline at end of file diff --git a/packages/agent/package.json b/packages/agent/package.json new file mode 100644 index 00000000..01ae29e5 --- /dev/null +++ b/packages/agent/package.json @@ -0,0 +1,22 @@ +{ + "name": "@byteagent/agent", + "version": "1.0.0", + "description": "Agent package for the phonetutor monorepo", + "scripts": { + "test": "vitest", + "start": "bun run src/client/index.ts" + }, + "keywords": [], + "author": "Phonetutor", + "license": "ISC", + "packageManager": "pnpm@10.27.0", + "dependencies": { + "@ai-sdk/anthropic": "^3.0.7", + "@ai-sdk/google": "^3.0.6", + "@ai-sdk/openai": "^3.0.7", + "@byteagent/shared": "workspace:*", + "ai": "^6.0.14", + "dotenv": "^17.2.3", + "zod": "^4.3.5" + } +} diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/api/.gitignore b/packages/api/.gitignore new file mode 100644 index 00000000..87e56100 --- /dev/null +++ b/packages/api/.gitignore @@ -0,0 +1,42 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel + +**/*.trace +**/*.zip +**/*.tar.gz +**/*.tgz +**/*.log +package-lock.json +**/*.bun \ No newline at end of file diff --git a/packages/api/README.md b/packages/api/README.md new file mode 100644 index 00000000..53480c12 --- /dev/null +++ b/packages/api/README.md @@ -0,0 +1 @@ +# @byteagent/api \ No newline at end of file diff --git a/packages/api/bun.lock b/packages/api/bun.lock new file mode 100644 index 00000000..593fd77b --- /dev/null +++ b/packages/api/bun.lock @@ -0,0 +1,56 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "api", + "dependencies": { + "elysia": "latest", + }, + "devDependencies": { + "bun-types": "latest", + }, + }, + }, + "packages": { + "@borewit/text-codec": ["@borewit/text-codec@0.2.1", "https://registry.npmmirror.com/@borewit/text-codec/-/text-codec-0.2.1.tgz", {}, "sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.34.47", "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.34.47.tgz", {}, "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw=="], + + "@tokenizer/inflate": ["@tokenizer/inflate@0.4.1", "https://registry.npmmirror.com/@tokenizer/inflate/-/inflate-0.4.1.tgz", { "dependencies": { "debug": "^4.4.3", "token-types": "^6.1.1" } }, "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA=="], + + "@tokenizer/token": ["@tokenizer/token@0.3.0", "https://registry.npmmirror.com/@tokenizer/token/-/token-0.3.0.tgz", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + + "@types/node": ["@types/node@25.0.3", "https://registry.npmmirror.com/@types/node/-/node-25.0.3.tgz", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="], + + "bun-types": ["bun-types@1.3.5", "https://registry.npmmirror.com/bun-types/-/bun-types-1.3.5.tgz", { "dependencies": { "@types/node": "*" } }, "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw=="], + + "cookie": ["cookie@1.1.1", "https://registry.npmmirror.com/cookie/-/cookie-1.1.1.tgz", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], + + "debug": ["debug@4.4.3", "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "elysia": ["elysia@1.4.21", "https://registry.npmmirror.com/elysia/-/elysia-1.4.21.tgz", { "dependencies": { "cookie": "^1.1.1", "exact-mirror": "^0.2.6", "fast-decode-uri-component": "^1.0.1", "memoirist": "^0.4.0" }, "peerDependencies": { "@sinclair/typebox": ">= 0.34.0 < 1", "@types/bun": ">= 1.2.0", "file-type": ">= 20.0.0", "openapi-types": ">= 12.0.0", "typescript": ">= 5.0.0" }, "optionalPeers": ["@types/bun", "typescript"] }, "sha512-bGSbPSGnkWbO0qUDKS5Q+6iEewBdMmIiJ8F0li4djZ6WjpixUQouOzePYscG1Lemdv6pZpFi1YPfI/kjeq2voA=="], + + "exact-mirror": ["exact-mirror@0.2.6", "https://registry.npmmirror.com/exact-mirror/-/exact-mirror-0.2.6.tgz", { "peerDependencies": { "@sinclair/typebox": "^0.34.15" }, "optionalPeers": ["@sinclair/typebox"] }, "sha512-7s059UIx9/tnOKSySzUk5cPGkoILhTE4p6ncf6uIPaQ+9aRBQzQjc9+q85l51+oZ+P6aBxh084pD0CzBQPcFUA=="], + + "fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "https://registry.npmmirror.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", {}, "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="], + + "file-type": ["file-type@21.3.0", "https://registry.npmmirror.com/file-type/-/file-type-21.3.0.tgz", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-8kPJMIGz1Yt/aPEwOsrR97ZyZaD1Iqm8PClb1nYFclUCkBi0Ma5IsYNQzvSFS9ib51lWyIw5mIT9rWzI/xjpzA=="], + + "ieee754": ["ieee754@1.2.1", "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "memoirist": ["memoirist@0.4.0", "https://registry.npmmirror.com/memoirist/-/memoirist-0.4.0.tgz", {}, "sha512-zxTgA0mSYELa66DimuNQDvyLq36AwDlTuVRbnQtB+VuTcKWm5Qc4z3WkSpgsFWHNhexqkIooqpv4hdcqrX5Nmg=="], + + "ms": ["ms@2.1.3", "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "openapi-types": ["openapi-types@12.1.3", "https://registry.npmmirror.com/openapi-types/-/openapi-types-12.1.3.tgz", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], + + "strtok3": ["strtok3@10.3.4", "https://registry.npmmirror.com/strtok3/-/strtok3-10.3.4.tgz", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg=="], + + "token-types": ["token-types@6.1.2", "https://registry.npmmirror.com/token-types/-/token-types-6.1.2.tgz", { "dependencies": { "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww=="], + + "uint8array-extras": ["uint8array-extras@1.5.0", "https://registry.npmmirror.com/uint8array-extras/-/uint8array-extras-1.5.0.tgz", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], + + "undici-types": ["undici-types@7.16.0", "https://registry.npmmirror.com/undici-types/-/undici-types-7.16.0.tgz", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + } +} diff --git a/packages/api/package.json b/packages/api/package.json new file mode 100644 index 00000000..ca2764d8 --- /dev/null +++ b/packages/api/package.json @@ -0,0 +1,16 @@ +{ + "name": "@byteagent/api", + "version": "1.0.50", + "scripts": { + "dev": "bun run --env-file=../../.env --watch src/index.ts", + "build": "bun build src/index.ts --outfile dist/index.js --target bun --minify", + "start": "bun run dist/index.js" + }, + "dependencies": { + "elysia": "latest" + }, + "devDependencies": { + "bun-types": "latest" + }, + "module": "src/index.js" +} diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts new file mode 100644 index 00000000..b9414ea6 --- /dev/null +++ b/packages/api/src/index.ts @@ -0,0 +1,9 @@ +import { Elysia } from 'elysia' + +const port = process.env.API_SERVER_PORT || 7002 + +const app = new Elysia().get('/', () => 'Hello Elysia').listen(port) + +console.log( + `🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}` +) diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json new file mode 100644 index 00000000..1ca2350a --- /dev/null +++ b/packages/api/tsconfig.json @@ -0,0 +1,103 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "ES2021", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "ES2022", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + "types": ["bun-types"], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/packages/db/README.md b/packages/db/README.md new file mode 100644 index 00000000..226d4850 --- /dev/null +++ b/packages/db/README.md @@ -0,0 +1,21 @@ +# @byteagent/db + +## Quick Start + +### Initialize Database + +```bash +pnpm push +``` + +### Generate Schema + +```bash +pnpm generate +``` + +### Start Studio + +```bash +pnpm studio +``` \ No newline at end of file diff --git a/packages/db/drizzle.config.ts b/packages/db/drizzle.config.ts new file mode 100644 index 00000000..11c30e13 --- /dev/null +++ b/packages/db/drizzle.config.ts @@ -0,0 +1,13 @@ +import { config } from 'dotenv' +import { defineConfig } from 'drizzle-kit' + +config({ path: '../../.env' }) + +export default defineConfig({ + out: './drizzle', + schema: './src/schema.ts', + dialect: 'postgresql', + dbCredentials: { + url: process.env.DATABASE_URL!, + }, +}) diff --git a/packages/db/package.json b/packages/db/package.json new file mode 100644 index 00000000..63293f34 --- /dev/null +++ b/packages/db/package.json @@ -0,0 +1,25 @@ +{ + "name": "@byteagent/db", + "version": "1.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./schema": "./src/schema.ts" + }, + "scripts": { + "push": "drizzle-kit push", + "generate": "drizzle-kit generate", + "migrate": "drizzle-kit migrate", + "studio": "drizzle-kit studio" + }, + "dependencies": { + "dotenv": "^17.2.3", + "drizzle-orm": "^0.45.1", + "pg": "^8.16.3" + }, + "devDependencies": { + "@types/pg": "^8.16.0", + "drizzle-kit": "^0.31.8", + "tsx": "^4.21.0" + } +} diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts new file mode 100644 index 00000000..d884a390 --- /dev/null +++ b/packages/db/src/index.ts @@ -0,0 +1,3 @@ +import { drizzle } from 'drizzle-orm/node-postgres' + +export const db = drizzle(process.env.DATABASE_URL!) \ No newline at end of file diff --git a/packages/db/src/model.ts b/packages/db/src/model.ts new file mode 100644 index 00000000..64d5abcf --- /dev/null +++ b/packages/db/src/model.ts @@ -0,0 +1,10 @@ +import { pgTable, text, uuid } from 'drizzle-orm/pg-core' + +export const model = pgTable('model', { + id: uuid('id').primaryKey(), + modelId: text('model_id').notNull(), + name: text('name'), + baseUrl: text('base_url').notNull(), + apiKey: text('api_key').notNull(), + clientType: text('client_type').notNull() +}) \ No newline at end of file diff --git a/packages/db/src/schema.ts b/packages/db/src/schema.ts new file mode 100644 index 00000000..bc4e2a78 --- /dev/null +++ b/packages/db/src/schema.ts @@ -0,0 +1 @@ +export * from './model' \ No newline at end of file diff --git a/packages/db/tsconfig.json b/packages/db/tsconfig.json new file mode 100644 index 00000000..01bddbfc --- /dev/null +++ b/packages/db/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json", +} \ No newline at end of file diff --git a/packages/shared/README.md b/packages/shared/README.md new file mode 100644 index 00000000..7e2ea738 --- /dev/null +++ b/packages/shared/README.md @@ -0,0 +1 @@ +# @byteagent/shared diff --git a/packages/shared/package.json b/packages/shared/package.json new file mode 100644 index 00000000..25a48ba7 --- /dev/null +++ b/packages/shared/package.json @@ -0,0 +1,16 @@ +{ + "name": "@byteagent/shared", + "version": "1.0.0", + "description": "", + "exports": { + ".": "./src/index.ts" + }, + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "packageManager": "pnpm@10.27.0" +} diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/ui/.gitignore b/packages/ui/.gitignore new file mode 100644 index 00000000..a3f7a519 --- /dev/null +++ b/packages/ui/.gitignore @@ -0,0 +1,36 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo + +.eslintcache + +# Cypress +/cypress/videos/ +/cypress/screenshots/ + +# Vitest +__screenshots__/ diff --git a/packages/ui/README.md b/packages/ui/README.md new file mode 100644 index 00000000..2be4c217 --- /dev/null +++ b/packages/ui/README.md @@ -0,0 +1 @@ +# @byteagent/ui diff --git a/packages/ui/env.d.ts b/packages/ui/env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/packages/ui/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/ui/package.json b/packages/ui/package.json new file mode 100644 index 00000000..88ec18bb --- /dev/null +++ b/packages/ui/package.json @@ -0,0 +1,50 @@ +{ + "name": "@byteagent/ui", + "version": "0.0.0", + "private": true, + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "scripts": { + "dev": "vite", + "prebuild": "tsx ./scripts/gen-entry.ts", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build" + }, + "dependencies": { + "@tailwindcss/vite": "^4.1.18", + "@vueuse/core": "^14.1.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-vue-next": "^0.562.0", + "reka-ui": "^2.7.0", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^4.1.18", + "vue-sonner": "^2.0.9" + }, + "peerDependencies": { + "vue": "^3.5.26" + }, + "devDependencies": { + "@microsoft/api-extractor": "^7.55.2", + "@tsconfig/node24": "^24.0.3", + "@types/node": "^24.10.4", + "@vitejs/plugin-vue": "^6.0.3", + "@vue/language-core": "^3.2.1", + "@vue/tsconfig": "^0.8.1", + "npm-run-all2": "^8.0.4", + "tsx": "^4.21.0", + "tw-animate-css": "^1.4.0", + "typescript": "~5.9.3", + "unplugin-dts": "1.0.0-beta.6", + "vite": "^7.3.0", + "vite-plugin-vue-devtools": "^8.0.5", + "vue-tsc": "^3.2.1" + } +} diff --git a/packages/ui/src/components/alert/Alert.vue b/packages/ui/src/components/alert/Alert.vue new file mode 100644 index 00000000..e673308f --- /dev/null +++ b/packages/ui/src/components/alert/Alert.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui/src/components/alert/AlertDescription.vue b/packages/ui/src/components/alert/AlertDescription.vue new file mode 100644 index 00000000..e287c21d --- /dev/null +++ b/packages/ui/src/components/alert/AlertDescription.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/alert/AlertTitle.vue b/packages/ui/src/components/alert/AlertTitle.vue new file mode 100644 index 00000000..0899a26a --- /dev/null +++ b/packages/ui/src/components/alert/AlertTitle.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/alert/index.ts b/packages/ui/src/components/alert/index.ts new file mode 100644 index 00000000..03368280 --- /dev/null +++ b/packages/ui/src/components/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-xl 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 shadow-sm', + { + variants: { + variant: { + default: 'bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 border-gray-200 dark:border-gray-700', + destructive: + 'text-destructive bg-red-50 dark:bg-red-950/20 border-red-200 dark:border-red-900 [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90', + }, + }, + defaultVariants: { + variant: 'default', + }, + }, +) + +export type AlertVariants = VariantProps diff --git a/packages/ui/src/components/avatar/Avatar.vue b/packages/ui/src/components/avatar/Avatar.vue new file mode 100644 index 00000000..745f6cd9 --- /dev/null +++ b/packages/ui/src/components/avatar/Avatar.vue @@ -0,0 +1,18 @@ + + + diff --git a/packages/ui/src/components/avatar/AvatarFallback.vue b/packages/ui/src/components/avatar/AvatarFallback.vue new file mode 100644 index 00000000..4519c716 --- /dev/null +++ b/packages/ui/src/components/avatar/AvatarFallback.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui/src/components/avatar/AvatarImage.vue b/packages/ui/src/components/avatar/AvatarImage.vue new file mode 100644 index 00000000..801392b5 --- /dev/null +++ b/packages/ui/src/components/avatar/AvatarImage.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/ui/src/components/avatar/index.ts b/packages/ui/src/components/avatar/index.ts new file mode 100644 index 00000000..6a90410e --- /dev/null +++ b/packages/ui/src/components/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/packages/ui/src/components/badge/Badge.vue b/packages/ui/src/components/badge/Badge.vue new file mode 100644 index 00000000..00e982a4 --- /dev/null +++ b/packages/ui/src/components/badge/Badge.vue @@ -0,0 +1,26 @@ + + + diff --git a/packages/ui/src/components/badge/index.ts b/packages/ui/src/components/badge/index.ts new file mode 100644 index 00000000..0a19e79e --- /dev/null +++ b/packages/ui/src/components/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-full border px-2.5 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none transition-all overflow-hidden', + { + variants: { + variant: { + default: + 'border-transparent bg-primary text-primary-foreground shadow-sm [a&]:hover:bg-primary/90', + secondary: + 'border-transparent bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-gray-100 shadow-sm [a&]:hover:bg-gray-200 dark:[a&]:hover:bg-gray-600', + destructive: + 'border-transparent bg-destructive text-white shadow-sm [a&]:hover:bg-destructive/90', + outline: + 'text-gray-900 dark:text-gray-100 border-gray-200 dark:border-gray-700 [a&]:hover:bg-gray-100 dark:[a&]:hover:bg-gray-700', + }, + }, + defaultVariants: { + variant: 'default', + }, + }, +) +export type BadgeVariants = VariantProps diff --git a/packages/ui/src/components/button-group/ButtonGroup.vue b/packages/ui/src/components/button-group/ButtonGroup.vue new file mode 100644 index 00000000..d2493fc1 --- /dev/null +++ b/packages/ui/src/components/button-group/ButtonGroup.vue @@ -0,0 +1,22 @@ + + + diff --git a/packages/ui/src/components/button-group/ButtonGroupSeparator.vue b/packages/ui/src/components/button-group/ButtonGroupSeparator.vue new file mode 100644 index 00000000..313e6a9b --- /dev/null +++ b/packages/ui/src/components/button-group/ButtonGroupSeparator.vue @@ -0,0 +1,24 @@ + + + diff --git a/packages/ui/src/components/button-group/ButtonGroupText.vue b/packages/ui/src/components/button-group/ButtonGroupText.vue new file mode 100644 index 00000000..dd965a45 --- /dev/null +++ b/packages/ui/src/components/button-group/ButtonGroupText.vue @@ -0,0 +1,29 @@ + + + diff --git a/packages/ui/src/components/button-group/index.ts b/packages/ui/src/components/button-group/index.ts new file mode 100644 index 00000000..c9e791a4 --- /dev/null +++ b/packages/ui/src/components/button-group/index.ts @@ -0,0 +1,25 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export { default as ButtonGroup } from './ButtonGroup.vue' +export { default as ButtonGroupSeparator } from './ButtonGroupSeparator.vue' +export { default as ButtonGroupText } from './ButtonGroupText.vue' + +export const buttonGroupVariants = cva( + 'flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*=\'w-\'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md has-[>[data-slot=button-group]]:gap-2', + { + variants: { + orientation: { + horizontal: + '[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none', + vertical: + 'flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none', + }, + }, + defaultVariants: { + orientation: 'horizontal', + }, + }, +) + +export type ButtonGroupVariants = VariantProps diff --git a/packages/ui/src/components/button/Button.vue b/packages/ui/src/components/button/Button.vue new file mode 100644 index 00000000..e413cd47 --- /dev/null +++ b/packages/ui/src/components/button/Button.vue @@ -0,0 +1,29 @@ + + + diff --git a/packages/ui/src/components/button/index.ts b/packages/ui/src/components/button/index.ts new file mode 100644 index 00000000..3ee6d55e --- /dev/null +++ b/packages/ui/src/components/button/index.ts @@ -0,0 +1,38 @@ +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-lg 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:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', + { + variants: { + variant: { + default: + 'bg-primary text-primary-foreground shadow hover:bg-primary/90', + destructive: + 'bg-destructive text-white shadow hover:bg-destructive/90', + outline: + 'border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800 shadow-sm hover:bg-gray-50 dark:hover:bg-gray-700', + secondary: + 'bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-gray-100 shadow-sm hover:bg-gray-200 dark:hover:bg-gray-600', + ghost: + 'hover:bg-gray-100 dark:hover:bg-gray-700 hover:text-gray-900 dark:hover:text-gray-100', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + 'default': 'h-9 px-4 py-2 has-[>svg]:px-3', + 'sm': 'h-8 rounded-lg gap-1.5 px-3 has-[>svg]:px-2.5', + 'lg': 'h-10 rounded-lg px-6 has-[>svg]:px-4', + 'icon': 'size-9', + 'icon-sm': 'size-8', + 'icon-lg': 'size-10', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) +export type ButtonVariants = VariantProps diff --git a/packages/ui/src/components/card/Card.vue b/packages/ui/src/components/card/Card.vue new file mode 100644 index 00000000..042d8761 --- /dev/null +++ b/packages/ui/src/components/card/Card.vue @@ -0,0 +1,22 @@ + + + diff --git a/packages/ui/src/components/card/CardAction.vue b/packages/ui/src/components/card/CardAction.vue new file mode 100644 index 00000000..cfa45c9d --- /dev/null +++ b/packages/ui/src/components/card/CardAction.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/card/CardContent.vue b/packages/ui/src/components/card/CardContent.vue new file mode 100644 index 00000000..eb030cf7 --- /dev/null +++ b/packages/ui/src/components/card/CardContent.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/card/CardDescription.vue b/packages/ui/src/components/card/CardDescription.vue new file mode 100644 index 00000000..e6da6ff3 --- /dev/null +++ b/packages/ui/src/components/card/CardDescription.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/card/CardFooter.vue b/packages/ui/src/components/card/CardFooter.vue new file mode 100644 index 00000000..688bbe2a --- /dev/null +++ b/packages/ui/src/components/card/CardFooter.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/card/CardHeader.vue b/packages/ui/src/components/card/CardHeader.vue new file mode 100644 index 00000000..2911b83f --- /dev/null +++ b/packages/ui/src/components/card/CardHeader.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/card/CardTitle.vue b/packages/ui/src/components/card/CardTitle.vue new file mode 100644 index 00000000..2ba297f0 --- /dev/null +++ b/packages/ui/src/components/card/CardTitle.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/card/index.ts b/packages/ui/src/components/card/index.ts new file mode 100644 index 00000000..73d985f2 --- /dev/null +++ b/packages/ui/src/components/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/packages/ui/src/components/checkbox/Checkbox.vue b/packages/ui/src/components/checkbox/Checkbox.vue new file mode 100644 index 00000000..d7bc748a --- /dev/null +++ b/packages/ui/src/components/checkbox/Checkbox.vue @@ -0,0 +1,40 @@ + + + diff --git a/packages/ui/src/components/checkbox/index.ts b/packages/ui/src/components/checkbox/index.ts new file mode 100644 index 00000000..8c28c286 --- /dev/null +++ b/packages/ui/src/components/checkbox/index.ts @@ -0,0 +1 @@ +export { default as Checkbox } from './Checkbox.vue' diff --git a/packages/ui/src/components/combobox/Combobox.vue b/packages/ui/src/components/combobox/Combobox.vue new file mode 100644 index 00000000..7d01e7ba --- /dev/null +++ b/packages/ui/src/components/combobox/Combobox.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/ui/src/components/combobox/ComboboxAnchor.vue b/packages/ui/src/components/combobox/ComboboxAnchor.vue new file mode 100644 index 00000000..3046115c --- /dev/null +++ b/packages/ui/src/components/combobox/ComboboxAnchor.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/ui/src/components/combobox/ComboboxEmpty.vue b/packages/ui/src/components/combobox/ComboboxEmpty.vue new file mode 100644 index 00000000..f95bd56f --- /dev/null +++ b/packages/ui/src/components/combobox/ComboboxEmpty.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui/src/components/combobox/ComboboxGroup.vue b/packages/ui/src/components/combobox/ComboboxGroup.vue new file mode 100644 index 00000000..1d18c4b6 --- /dev/null +++ b/packages/ui/src/components/combobox/ComboboxGroup.vue @@ -0,0 +1,30 @@ + + + diff --git a/packages/ui/src/components/combobox/ComboboxInput.vue b/packages/ui/src/components/combobox/ComboboxInput.vue new file mode 100644 index 00000000..4eb4db71 --- /dev/null +++ b/packages/ui/src/components/combobox/ComboboxInput.vue @@ -0,0 +1,44 @@ + + + diff --git a/packages/ui/src/components/combobox/ComboboxItem.vue b/packages/ui/src/components/combobox/ComboboxItem.vue new file mode 100644 index 00000000..d4b530ac --- /dev/null +++ b/packages/ui/src/components/combobox/ComboboxItem.vue @@ -0,0 +1,31 @@ + + + diff --git a/packages/ui/src/components/combobox/ComboboxItemIndicator.vue b/packages/ui/src/components/combobox/ComboboxItemIndicator.vue new file mode 100644 index 00000000..e847e368 --- /dev/null +++ b/packages/ui/src/components/combobox/ComboboxItemIndicator.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/ui/src/components/combobox/ComboboxList.vue b/packages/ui/src/components/combobox/ComboboxList.vue new file mode 100644 index 00000000..89c6c9ec --- /dev/null +++ b/packages/ui/src/components/combobox/ComboboxList.vue @@ -0,0 +1,39 @@ + + + diff --git a/packages/ui/src/components/combobox/ComboboxSeparator.vue b/packages/ui/src/components/combobox/ComboboxSeparator.vue new file mode 100644 index 00000000..8567f89e --- /dev/null +++ b/packages/ui/src/components/combobox/ComboboxSeparator.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui/src/components/combobox/ComboboxTrigger.vue b/packages/ui/src/components/combobox/ComboboxTrigger.vue new file mode 100644 index 00000000..cbdab5f8 --- /dev/null +++ b/packages/ui/src/components/combobox/ComboboxTrigger.vue @@ -0,0 +1,24 @@ + + + diff --git a/packages/ui/src/components/combobox/ComboboxViewport.vue b/packages/ui/src/components/combobox/ComboboxViewport.vue new file mode 100644 index 00000000..84d48df0 --- /dev/null +++ b/packages/ui/src/components/combobox/ComboboxViewport.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/ui/src/components/combobox/index.ts b/packages/ui/src/components/combobox/index.ts new file mode 100644 index 00000000..8fdeff4b --- /dev/null +++ b/packages/ui/src/components/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/packages/ui/src/components/context-menu/ContextMenu.vue b/packages/ui/src/components/context-menu/ContextMenu.vue new file mode 100644 index 00000000..0692a983 --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenu.vue @@ -0,0 +1,18 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuCheckboxItem.vue b/packages/ui/src/components/context-menu/ContextMenuCheckboxItem.vue new file mode 100644 index 00000000..7dc8794e --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuCheckboxItem.vue @@ -0,0 +1,39 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuContent.vue b/packages/ui/src/components/context-menu/ContextMenuContent.vue new file mode 100644 index 00000000..ef0daff7 --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuContent.vue @@ -0,0 +1,40 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuGroup.vue b/packages/ui/src/components/context-menu/ContextMenuGroup.vue new file mode 100644 index 00000000..040644be --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuGroup.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuItem.vue b/packages/ui/src/components/context-menu/ContextMenuItem.vue new file mode 100644 index 00000000..9a52fda7 --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuItem.vue @@ -0,0 +1,44 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuLabel.vue b/packages/ui/src/components/context-menu/ContextMenuLabel.vue new file mode 100644 index 00000000..a2744c5a --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuLabel.vue @@ -0,0 +1,22 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuPortal.vue b/packages/ui/src/components/context-menu/ContextMenuPortal.vue new file mode 100644 index 00000000..fcf70aac --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuPortal.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuRadioGroup.vue b/packages/ui/src/components/context-menu/ContextMenuRadioGroup.vue new file mode 100644 index 00000000..396214bb --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuRadioGroup.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuRadioItem.vue b/packages/ui/src/components/context-menu/ContextMenuRadioItem.vue new file mode 100644 index 00000000..c0269269 --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuRadioItem.vue @@ -0,0 +1,39 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuSeparator.vue b/packages/ui/src/components/context-menu/ContextMenuSeparator.vue new file mode 100644 index 00000000..6d1e5a12 --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuSeparator.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuShortcut.vue b/packages/ui/src/components/context-menu/ContextMenuShortcut.vue new file mode 100644 index 00000000..1303f473 --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuShortcut.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuSub.vue b/packages/ui/src/components/context-menu/ContextMenuSub.vue new file mode 100644 index 00000000..55d02912 --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuSub.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuSubContent.vue b/packages/ui/src/components/context-menu/ContextMenuSubContent.vue new file mode 100644 index 00000000..fb9b9cde --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuSubContent.vue @@ -0,0 +1,32 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuSubTrigger.vue b/packages/ui/src/components/context-menu/ContextMenuSubTrigger.vue new file mode 100644 index 00000000..270cd6b7 --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuSubTrigger.vue @@ -0,0 +1,32 @@ + + + diff --git a/packages/ui/src/components/context-menu/ContextMenuTrigger.vue b/packages/ui/src/components/context-menu/ContextMenuTrigger.vue new file mode 100644 index 00000000..cabf0bc7 --- /dev/null +++ b/packages/ui/src/components/context-menu/ContextMenuTrigger.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/context-menu/index.ts b/packages/ui/src/components/context-menu/index.ts new file mode 100644 index 00000000..3ed59e63 --- /dev/null +++ b/packages/ui/src/components/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/packages/ui/src/components/dialog/Dialog.vue b/packages/ui/src/components/dialog/Dialog.vue new file mode 100644 index 00000000..315b5ca3 --- /dev/null +++ b/packages/ui/src/components/dialog/Dialog.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/ui/src/components/dialog/DialogClose.vue b/packages/ui/src/components/dialog/DialogClose.vue new file mode 100644 index 00000000..b1e1167d --- /dev/null +++ b/packages/ui/src/components/dialog/DialogClose.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/ui/src/components/dialog/DialogContent.vue b/packages/ui/src/components/dialog/DialogContent.vue new file mode 100644 index 00000000..a90bb5f5 --- /dev/null +++ b/packages/ui/src/components/dialog/DialogContent.vue @@ -0,0 +1,55 @@ + + + diff --git a/packages/ui/src/components/dialog/DialogDescription.vue b/packages/ui/src/components/dialog/DialogDescription.vue new file mode 100644 index 00000000..a16eb508 --- /dev/null +++ b/packages/ui/src/components/dialog/DialogDescription.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/ui/src/components/dialog/DialogFooter.vue b/packages/ui/src/components/dialog/DialogFooter.vue new file mode 100644 index 00000000..b3a2117a --- /dev/null +++ b/packages/ui/src/components/dialog/DialogFooter.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/ui/src/components/dialog/DialogHeader.vue b/packages/ui/src/components/dialog/DialogHeader.vue new file mode 100644 index 00000000..01b59fba --- /dev/null +++ b/packages/ui/src/components/dialog/DialogHeader.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/dialog/DialogOverlay.vue b/packages/ui/src/components/dialog/DialogOverlay.vue new file mode 100644 index 00000000..e002ade4 --- /dev/null +++ b/packages/ui/src/components/dialog/DialogOverlay.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui/src/components/dialog/DialogScrollContent.vue b/packages/ui/src/components/dialog/DialogScrollContent.vue new file mode 100644 index 00000000..a73e6e31 --- /dev/null +++ b/packages/ui/src/components/dialog/DialogScrollContent.vue @@ -0,0 +1,59 @@ + + + diff --git a/packages/ui/src/components/dialog/DialogTitle.vue b/packages/ui/src/components/dialog/DialogTitle.vue new file mode 100644 index 00000000..09d4382c --- /dev/null +++ b/packages/ui/src/components/dialog/DialogTitle.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/ui/src/components/dialog/DialogTrigger.vue b/packages/ui/src/components/dialog/DialogTrigger.vue new file mode 100644 index 00000000..44ea981d --- /dev/null +++ b/packages/ui/src/components/dialog/DialogTrigger.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/ui/src/components/dialog/index.ts b/packages/ui/src/components/dialog/index.ts new file mode 100644 index 00000000..baa7d612 --- /dev/null +++ b/packages/ui/src/components/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/packages/ui/src/components/dropdown-menu/DropdownMenu.vue b/packages/ui/src/components/dropdown-menu/DropdownMenu.vue new file mode 100644 index 00000000..c08018ba --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenu.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuCheckboxItem.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuCheckboxItem.vue new file mode 100644 index 00000000..42fd488d --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuCheckboxItem.vue @@ -0,0 +1,39 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuContent.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuContent.vue new file mode 100644 index 00000000..e2cb5c39 --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuContent.vue @@ -0,0 +1,45 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuGroup.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuGroup.vue new file mode 100644 index 00000000..ab71e1ad --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuGroup.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuItem.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuItem.vue new file mode 100644 index 00000000..7973cb53 --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuItem.vue @@ -0,0 +1,40 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuLabel.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuLabel.vue new file mode 100644 index 00000000..16895259 --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuLabel.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuRadioGroup.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuRadioGroup.vue new file mode 100644 index 00000000..8306812c --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuRadioGroup.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuRadioItem.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuRadioItem.vue new file mode 100644 index 00000000..1e161d2a --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuRadioItem.vue @@ -0,0 +1,40 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuSeparator.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuSeparator.vue new file mode 100644 index 00000000..903fe2d1 --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuSeparator.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuShortcut.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuShortcut.vue new file mode 100644 index 00000000..620b67f1 --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuShortcut.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuSub.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuSub.vue new file mode 100644 index 00000000..209d6bd9 --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuSub.vue @@ -0,0 +1,22 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuSubContent.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuSubContent.vue new file mode 100644 index 00000000..943bccc3 --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuSubContent.vue @@ -0,0 +1,27 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuSubTrigger.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuSubTrigger.vue new file mode 100644 index 00000000..9581117b --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuSubTrigger.vue @@ -0,0 +1,30 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/DropdownMenuTrigger.vue b/packages/ui/src/components/dropdown-menu/DropdownMenuTrigger.vue new file mode 100644 index 00000000..39be3ff3 --- /dev/null +++ b/packages/ui/src/components/dropdown-menu/DropdownMenuTrigger.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/ui/src/components/dropdown-menu/index.ts b/packages/ui/src/components/dropdown-menu/index.ts new file mode 100644 index 00000000..f488d396 --- /dev/null +++ b/packages/ui/src/components/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/packages/ui/src/components/input-group/InputGroup.vue b/packages/ui/src/components/input-group/InputGroup.vue new file mode 100644 index 00000000..7903ca8a --- /dev/null +++ b/packages/ui/src/components/input-group/InputGroup.vue @@ -0,0 +1,35 @@ + + + diff --git a/packages/ui/src/components/input-group/InputGroupAddon.vue b/packages/ui/src/components/input-group/InputGroupAddon.vue new file mode 100644 index 00000000..dc6822ff --- /dev/null +++ b/packages/ui/src/components/input-group/InputGroupAddon.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/ui/src/components/input-group/InputGroupButton.vue b/packages/ui/src/components/input-group/InputGroupButton.vue new file mode 100644 index 00000000..3f6f997e --- /dev/null +++ b/packages/ui/src/components/input-group/InputGroupButton.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/ui/src/components/input-group/InputGroupInput.vue b/packages/ui/src/components/input-group/InputGroupInput.vue new file mode 100644 index 00000000..591a261d --- /dev/null +++ b/packages/ui/src/components/input-group/InputGroupInput.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/ui/src/components/input-group/InputGroupText.vue b/packages/ui/src/components/input-group/InputGroupText.vue new file mode 100644 index 00000000..a4a03cc8 --- /dev/null +++ b/packages/ui/src/components/input-group/InputGroupText.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/ui/src/components/input-group/InputGroupTextarea.vue b/packages/ui/src/components/input-group/InputGroupTextarea.vue new file mode 100644 index 00000000..adf36ea9 --- /dev/null +++ b/packages/ui/src/components/input-group/InputGroupTextarea.vue @@ -0,0 +1,19 @@ + + +