diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs new file mode 100644 index 0000000..0b9956d --- /dev/null +++ b/frontend/.eslintrc.cjs @@ -0,0 +1,11 @@ +module.exports = { + root: true, + extends: [ + '@nuxtjs/eslint-config-typescript', + 'plugin:prettier/recommended', + ], + rules: { + 'vue/multi-word-component-names': 'off', + 'vue/no-multiple-template-root': 'off', + }, +} diff --git a/frontend/.prettierignore b/frontend/.prettierignore new file mode 100644 index 0000000..611cb09 --- /dev/null +++ b/frontend/.prettierignore @@ -0,0 +1,7 @@ +node_modules +.nuxt +.output +dist +.data +*.log +package-lock.json diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 0000000..2a9a851 --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,13 @@ +{ + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "useTabs": false, + "trailingComma": "es5", + "printWidth": 100, + "arrowParens": "always", + "endOfLine": "lf", + "vueIndentScriptAndStyle": false, + "htmlWhitespaceSensitivity": "ignore", + "singleAttributePerLine": false +} diff --git a/frontend/assets/css/main.css b/frontend/assets/css/main.css index 5b9dde0..322151b 100644 --- a/frontend/assets/css/main.css +++ b/frontend/assets/css/main.css @@ -22,6 +22,14 @@ --input: 214.3 31.8% 91.4%; --ring: 222.2 84% 4.9%; --radius: 0.5rem; + --sidebar-background: 0 0% 98%; + --sidebar-foreground: 240 5.3% 26.1%; + --sidebar-primary: 240 5.9% 10%; + --sidebar-primary-foreground: 0 0% 98%; + --sidebar-accent: 240 4.8% 95.9%; + --sidebar-accent-foreground: 240 5.9% 10%; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8%; } .dark { @@ -42,6 +50,14 @@ --border: 217.2 32.6% 17.5%; --input: 217.2 32.6% 17.5%; --ring: 212.7 26.8% 83.9%; + --sidebar-background: 240 5.9% 10%; + --sidebar-foreground: 240 4.8% 95.9%; + --sidebar-primary: 224.3 76.3% 48%; + --sidebar-primary-foreground: 0 0% 100%; + --sidebar-accent: 240 3.7% 15.9%; + --sidebar-accent-foreground: 240 4.8% 95.9%; + --sidebar-border: 240 3.7% 15.9%; + --sidebar-ring: 217.2 91.2% 59.8%; } } diff --git a/frontend/components/AppSidebar.vue b/frontend/components/AppSidebar.vue new file mode 100644 index 0000000..e7fa169 --- /dev/null +++ b/frontend/components/AppSidebar.vue @@ -0,0 +1,136 @@ + + + diff --git a/frontend/components/LoginForm.vue b/frontend/components/LoginForm.vue index 106d6f8..34e3494 100644 --- a/frontend/components/LoginForm.vue +++ b/frontend/components/LoginForm.vue @@ -54,9 +54,7 @@ const handleLogin = async () => { diff --git a/frontend/components/ui/breadcrumb/Breadcrumb.vue b/frontend/components/ui/breadcrumb/Breadcrumb.vue new file mode 100644 index 0000000..72ca143 --- /dev/null +++ b/frontend/components/ui/breadcrumb/Breadcrumb.vue @@ -0,0 +1,13 @@ + + + diff --git a/frontend/components/ui/breadcrumb/BreadcrumbEllipsis.vue b/frontend/components/ui/breadcrumb/BreadcrumbEllipsis.vue new file mode 100644 index 0000000..4925600 --- /dev/null +++ b/frontend/components/ui/breadcrumb/BreadcrumbEllipsis.vue @@ -0,0 +1,22 @@ + + + diff --git a/frontend/components/ui/breadcrumb/BreadcrumbItem.vue b/frontend/components/ui/breadcrumb/BreadcrumbItem.vue new file mode 100644 index 0000000..1fc8f84 --- /dev/null +++ b/frontend/components/ui/breadcrumb/BreadcrumbItem.vue @@ -0,0 +1,14 @@ + + + diff --git a/frontend/components/ui/breadcrumb/BreadcrumbLink.vue b/frontend/components/ui/breadcrumb/BreadcrumbLink.vue new file mode 100644 index 0000000..8195fa7 --- /dev/null +++ b/frontend/components/ui/breadcrumb/BreadcrumbLink.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/components/ui/breadcrumb/BreadcrumbList.vue b/frontend/components/ui/breadcrumb/BreadcrumbList.vue new file mode 100644 index 0000000..e7758ee --- /dev/null +++ b/frontend/components/ui/breadcrumb/BreadcrumbList.vue @@ -0,0 +1,21 @@ + + + diff --git a/frontend/components/ui/breadcrumb/BreadcrumbPage.vue b/frontend/components/ui/breadcrumb/BreadcrumbPage.vue new file mode 100644 index 0000000..fe43bda --- /dev/null +++ b/frontend/components/ui/breadcrumb/BreadcrumbPage.vue @@ -0,0 +1,19 @@ + + + diff --git a/frontend/components/ui/breadcrumb/BreadcrumbSeparator.vue b/frontend/components/ui/breadcrumb/BreadcrumbSeparator.vue new file mode 100644 index 0000000..a79ec19 --- /dev/null +++ b/frontend/components/ui/breadcrumb/BreadcrumbSeparator.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/components/ui/breadcrumb/index.ts b/frontend/components/ui/breadcrumb/index.ts new file mode 100644 index 0000000..0590983 --- /dev/null +++ b/frontend/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/frontend/components/ui/button/Button.vue b/frontend/components/ui/button/Button.vue index 029e7b7..093188c 100644 --- a/frontend/components/ui/button/Button.vue +++ b/frontend/components/ui/button/Button.vue @@ -1,21 +1,19 @@ diff --git a/frontend/components/ui/button/index.ts b/frontend/components/ui/button/index.ts index 3b23ad4..ae37e95 100644 --- a/frontend/components/ui/button/index.ts +++ b/frontend/components/ui/button/index.ts @@ -1,38 +1,36 @@ -import type { VariantProps } from "class-variance-authority" -import { cva } from "class-variance-authority" +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' -export { default as Button } from "./Button.vue" +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-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', { variants: { variant: { - default: "bg-primary text-primary-foreground shadow hover:bg-primary/90", - destructive: - "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90', + destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90', outline: - "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", - secondary: - "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", - ghost: "hover:bg-accent hover:text-accent-foreground", - link: "text-primary underline-offset-4 hover:underline", + 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground', + secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground', + link: 'text-primary underline-offset-4 hover:underline', }, size: { - "default": "h-9 px-4 py-2", - "xs": "h-7 rounded px-2", - "sm": "h-8 rounded-md px-3 text-xs", - "lg": "h-10 rounded-md px-8", - "icon": "h-9 w-9", - "icon-sm": "size-8", - "icon-lg": "size-10", + default: 'h-9 px-4 py-2', + xs: 'h-7 rounded px-2', + sm: 'h-8 rounded-md px-3 text-xs', + lg: 'h-10 rounded-md px-8', + icon: 'h-9 w-9', + 'icon-sm': 'size-8', + 'icon-lg': 'size-10', }, }, defaultVariants: { - variant: "default", - size: "default", + variant: 'default', + size: 'default', }, - }, + } ) export type ButtonVariants = VariantProps diff --git a/frontend/components/ui/card/Card.vue b/frontend/components/ui/card/Card.vue index 9b0be92..a3f643c 100644 --- a/frontend/components/ui/card/Card.vue +++ b/frontend/components/ui/card/Card.vue @@ -1,21 +1,14 @@ diff --git a/frontend/components/ui/card/CardContent.vue b/frontend/components/ui/card/CardContent.vue index 4c4dfc7..785913a 100644 --- a/frontend/components/ui/card/CardContent.vue +++ b/frontend/components/ui/card/CardContent.vue @@ -1,9 +1,9 @@ diff --git a/frontend/components/ui/card/CardDescription.vue b/frontend/components/ui/card/CardDescription.vue index 02bddba..d5faedd 100644 --- a/frontend/components/ui/card/CardDescription.vue +++ b/frontend/components/ui/card/CardDescription.vue @@ -1,9 +1,9 @@ diff --git a/frontend/components/ui/card/CardFooter.vue b/frontend/components/ui/card/CardFooter.vue index fad3928..1ed2efe 100644 --- a/frontend/components/ui/card/CardFooter.vue +++ b/frontend/components/ui/card/CardFooter.vue @@ -1,9 +1,9 @@ diff --git a/frontend/components/ui/card/CardHeader.vue b/frontend/components/ui/card/CardHeader.vue index 119700c..951d227 100644 --- a/frontend/components/ui/card/CardHeader.vue +++ b/frontend/components/ui/card/CardHeader.vue @@ -1,9 +1,9 @@ diff --git a/frontend/components/ui/card/CardTitle.vue b/frontend/components/ui/card/CardTitle.vue index 66d04ad..6aa6c0f 100644 --- a/frontend/components/ui/card/CardTitle.vue +++ b/frontend/components/ui/card/CardTitle.vue @@ -1,18 +1,14 @@ diff --git a/frontend/components/ui/card/index.ts b/frontend/components/ui/card/index.ts index e5c7cb2..9ff6d5e 100644 --- a/frontend/components/ui/card/index.ts +++ b/frontend/components/ui/card/index.ts @@ -1,6 +1,6 @@ -export { default as Card } from "./Card.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" +export { default as Card } from './Card.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/frontend/components/ui/collapsible/Collapsible.vue b/frontend/components/ui/collapsible/Collapsible.vue new file mode 100644 index 0000000..8a8c61a --- /dev/null +++ b/frontend/components/ui/collapsible/Collapsible.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/components/ui/collapsible/CollapsibleContent.vue b/frontend/components/ui/collapsible/CollapsibleContent.vue new file mode 100644 index 0000000..6bc93c5 --- /dev/null +++ b/frontend/components/ui/collapsible/CollapsibleContent.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/components/ui/collapsible/CollapsibleTrigger.vue b/frontend/components/ui/collapsible/CollapsibleTrigger.vue new file mode 100644 index 0000000..ded7bcb --- /dev/null +++ b/frontend/components/ui/collapsible/CollapsibleTrigger.vue @@ -0,0 +1,12 @@ + + + diff --git a/frontend/components/ui/collapsible/index.ts b/frontend/components/ui/collapsible/index.ts new file mode 100644 index 0000000..abab956 --- /dev/null +++ b/frontend/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/frontend/components/ui/input/Input.vue b/frontend/components/ui/input/Input.vue index f924222..9736a7f 100644 --- a/frontend/components/ui/input/Input.vue +++ b/frontend/components/ui/input/Input.vue @@ -1,24 +1,32 @@ diff --git a/frontend/components/ui/input/index.ts b/frontend/components/ui/input/index.ts index 9976b86..a691dd6 100644 --- a/frontend/components/ui/input/index.ts +++ b/frontend/components/ui/input/index.ts @@ -1 +1 @@ -export { default as Input } from "./Input.vue" +export { default as Input } from './Input.vue' diff --git a/frontend/components/ui/label/Label.vue b/frontend/components/ui/label/Label.vue index 2291316..fc5798b 100644 --- a/frontend/components/ui/label/Label.vue +++ b/frontend/components/ui/label/Label.vue @@ -1,17 +1,17 @@ diff --git a/frontend/pages/register.vue b/frontend/pages/register.vue index 7ebaefe..9425ad6 100644 --- a/frontend/pages/register.vue +++ b/frontend/pages/register.vue @@ -19,13 +19,7 @@
- +
@@ -55,40 +49,24 @@
- +
- +
-

- Already have an account? - - Login - + Already have an account? + Login

@@ -134,7 +112,7 @@ const handleRegister = async () => { } success.value = true - + // Redirect to login after 2 seconds setTimeout(() => { router.push('/login') diff --git a/frontend/pages/setup/apps/[slug].vue b/frontend/pages/setup/apps/[slug].vue index a5be91b..969f3ee 100644 --- a/frontend/pages/setup/apps/[slug].vue +++ b/frontend/pages/setup/apps/[slug].vue @@ -1,43 +1,36 @@ diff --git a/frontend/pages/setup/apps/index.vue b/frontend/pages/setup/apps/index.vue index 6525fb1..c5c99c5 100644 --- a/frontend/pages/setup/apps/index.vue +++ b/frontend/pages/setup/apps/index.vue @@ -1,105 +1,88 @@