From 1c3ca344c02f2c8ed2359f9d2ea2959b34bd40a7 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Sat, 26 Jul 2025 01:12:25 +0200 Subject: [PATCH] feat: add UI components for skeleton, slider, sonner, switch, table, tabs, textarea, toggle group, toggle, tooltip, and mobile detection hook - Implemented Skeleton component for loading states. - Created Slider component using Radix UI for customizable sliders. - Added Sonner component for toast notifications with theme support. - Developed Switch component for toggle functionality. - Introduced Table component with subcomponents for structured data display. - Built Tabs component for tabbed navigation. - Created Textarea component for multi-line text input. - Implemented ToggleGroup and Toggle components for grouped toggle buttons. - Added Tooltip component for displaying additional information on hover. - Created useIsMobile hook for mobile device detection. - Added utility functions for class name merging. - Configured TypeScript settings for the project. --- config/development.yaml | 16 + music-metadata-manager-frontend/.gitignore | 41 + music-metadata-manager-frontend/README.md | 36 + music-metadata-manager-frontend/bun.lockb | Bin 0 -> 225942 bytes .../components.json | 21 + .../eslint.config.mjs | 16 + .../next.config.ts | 7 + music-metadata-manager-frontend/package.json | 71 ++ .../postcss.config.mjs | 5 + .../public/file.svg | 1 + .../public/globe.svg | 1 + .../public/next.svg | 1 + .../public/vercel.svg | 1 + .../public/window.svg | 1 + .../src/app/favicon.ico | Bin 0 -> 25931 bytes .../src/app/globals.css | 123 +++ .../src/app/layout.tsx | 34 + .../src/app/page.tsx | 17 + .../src/components/add-library-form.tsx | 50 ++ .../src/components/login-form.tsx | 76 ++ .../src/components/music-files.tsx | 47 ++ .../src/components/ui/accordion.tsx | 64 ++ .../src/components/ui/alert-dialog.tsx | 157 ++++ .../src/components/ui/alert.tsx | 66 ++ .../src/components/ui/aspect-ratio.tsx | 9 + .../src/components/ui/avatar.tsx | 53 ++ .../src/components/ui/badge.tsx | 46 ++ .../src/components/ui/breadcrumb.tsx | 109 +++ .../src/components/ui/button.tsx | 59 ++ .../src/components/ui/calendar.tsx | 211 +++++ .../src/components/ui/card.tsx | 92 +++ .../src/components/ui/carousel.tsx | 241 ++++++ .../src/components/ui/chart.tsx | 351 +++++++++ .../src/components/ui/checkbox.tsx | 32 + .../src/components/ui/collapsible.tsx | 31 + .../src/components/ui/command.tsx | 184 +++++ .../src/components/ui/context-menu.tsx | 252 ++++++ .../src/components/ui/dialog.tsx | 141 ++++ .../src/components/ui/drawer.tsx | 133 ++++ .../src/components/ui/dropdown-menu.tsx | 257 +++++++ .../src/components/ui/form.tsx | 165 ++++ .../src/components/ui/hover-card.tsx | 42 + .../src/components/ui/input-otp.tsx | 77 ++ .../src/components/ui/input.tsx | 21 + .../src/components/ui/label.tsx | 24 + .../src/components/ui/menubar.tsx | 274 +++++++ .../src/components/ui/navigation-menu.tsx | 168 ++++ .../src/components/ui/pagination.tsx | 127 +++ .../src/components/ui/popover.tsx | 48 ++ .../src/components/ui/progress.tsx | 29 + .../src/components/ui/radio-group.tsx | 45 ++ .../src/components/ui/resizable.tsx | 54 ++ .../src/components/ui/scroll-area.tsx | 58 ++ .../src/components/ui/select.tsx | 183 +++++ .../src/components/ui/separator.tsx | 28 + .../src/components/ui/sheet.tsx | 137 ++++ .../src/components/ui/sidebar.tsx | 726 ++++++++++++++++++ .../src/components/ui/skeleton.tsx | 13 + .../src/components/ui/slider.tsx | 63 ++ .../src/components/ui/sonner.tsx | 23 + .../src/components/ui/switch.tsx | 31 + .../src/components/ui/table.tsx | 114 +++ .../src/components/ui/tabs.tsx | 66 ++ .../src/components/ui/textarea.tsx | 18 + .../src/components/ui/toggle-group.tsx | 73 ++ .../src/components/ui/toggle.tsx | 45 ++ .../src/components/ui/tooltip.tsx | 59 ++ .../src/hooks/use-mobile.ts | 19 + .../src/lib/api.ts | 24 + .../src/lib/utils.ts | 6 + music-metadata-manager-frontend/tsconfig.json | 31 + 71 files changed, 5844 insertions(+) create mode 100644 music-metadata-manager-frontend/.gitignore create mode 100644 music-metadata-manager-frontend/README.md create mode 100755 music-metadata-manager-frontend/bun.lockb create mode 100644 music-metadata-manager-frontend/components.json create mode 100644 music-metadata-manager-frontend/eslint.config.mjs create mode 100644 music-metadata-manager-frontend/next.config.ts create mode 100644 music-metadata-manager-frontend/package.json create mode 100644 music-metadata-manager-frontend/postcss.config.mjs create mode 100644 music-metadata-manager-frontend/public/file.svg create mode 100644 music-metadata-manager-frontend/public/globe.svg create mode 100644 music-metadata-manager-frontend/public/next.svg create mode 100644 music-metadata-manager-frontend/public/vercel.svg create mode 100644 music-metadata-manager-frontend/public/window.svg create mode 100644 music-metadata-manager-frontend/src/app/favicon.ico create mode 100644 music-metadata-manager-frontend/src/app/globals.css create mode 100644 music-metadata-manager-frontend/src/app/layout.tsx create mode 100644 music-metadata-manager-frontend/src/app/page.tsx create mode 100644 music-metadata-manager-frontend/src/components/add-library-form.tsx create mode 100644 music-metadata-manager-frontend/src/components/login-form.tsx create mode 100644 music-metadata-manager-frontend/src/components/music-files.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/accordion.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/alert-dialog.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/alert.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/aspect-ratio.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/avatar.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/badge.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/breadcrumb.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/button.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/calendar.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/card.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/carousel.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/chart.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/checkbox.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/collapsible.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/command.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/context-menu.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/dialog.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/drawer.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/dropdown-menu.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/form.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/hover-card.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/input-otp.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/input.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/label.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/menubar.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/navigation-menu.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/pagination.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/popover.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/progress.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/radio-group.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/resizable.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/scroll-area.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/select.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/separator.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/sheet.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/sidebar.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/skeleton.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/slider.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/sonner.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/switch.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/table.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/tabs.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/textarea.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/toggle-group.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/toggle.tsx create mode 100644 music-metadata-manager-frontend/src/components/ui/tooltip.tsx create mode 100644 music-metadata-manager-frontend/src/hooks/use-mobile.ts create mode 100644 music-metadata-manager-frontend/src/lib/api.ts create mode 100644 music-metadata-manager-frontend/src/lib/utils.ts create mode 100644 music-metadata-manager-frontend/tsconfig.json diff --git a/config/development.yaml b/config/development.yaml index c6cf9c8..056844e 100644 --- a/config/development.yaml +++ b/config/development.yaml @@ -24,6 +24,22 @@ server: host: http://localhost # Out of the box middleware configuration. to disable middleware you can changed the `enable` field to `false` of comment the middleware block middlewares: + cors: + enable: true + allow_origins: + - "http://localhost:3000" + allow_credentials: true + max_age: 3600 + allow_headers: + - "Content-Type" + - "Authorization" + allow_methods: + - "GET" + - "POST" + - "PUT" + - "DELETE" + - "OPTIONS" + # Worker Configuration workers: diff --git a/music-metadata-manager-frontend/.gitignore b/music-metadata-manager-frontend/.gitignore new file mode 100644 index 0000000..5ef6a52 --- /dev/null +++ b/music-metadata-manager-frontend/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/music-metadata-manager-frontend/README.md b/music-metadata-manager-frontend/README.md new file mode 100644 index 0000000..e215bc4 --- /dev/null +++ b/music-metadata-manager-frontend/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/music-metadata-manager-frontend/bun.lockb b/music-metadata-manager-frontend/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..dc8e7559d33955af5358f7228e7701b2deb679da GIT binary patch literal 225942 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

2BRH}qkU+doyIM*nVcBa&Y0QpSOOsc@ z-X>Ado@<6ln*_#+C*fODYEH$xkgCx!r;$)R{T`m(#7*NEFVupZGXON@l`vFoZE)gI z%uTE8d8ODa_%(9vu(!w;)PaEZ$O5aG{$z{AX+q}je#>`?)%4sW#Q5Z}dJa;~0OrbT zqyegBg=q&AZAMe74M}&;E<}DmfQs)TOvE6US`8+74`viZ^bd4<>sZ= zHcZ{$a7<^4Ub6muaqYP_V6TUFgX7|V7ys9D}Q zmXnPDOW!(Xq@<9_{gE=)HBw7HL%0GDQt@79b1EH#oRUG0f*Me1>c%DEQeRn=;<9L~ z)NLWxAva2JNJRnOhDa!@w*9ZMiY*Kgv;et!e4HJNN6v^)L7b5HwU5?N7;ystwX@|mXL&IICi!wBwE#y5{4qot2GaP(?h(E% zg>}jxuBsAL9k=#I4ihw_BQNg|!GnFW^ZJN|U=^$O zboiHa;XC4l^k^3?B4B(j1=w?6BX_l@Y*!g|1}M@nkEl##=cg@|@PP`%2BiTKp?Juj zs#z#nb{`kzR!}Cf^8S~}O%P?WB6@YTG+eDBPINUG9|M6}y8Afkk-laLdLUb64`!?h ztVUi2$f1c@jnW#PHJQ7;2!)Cz3}L#oNP1?FPfuiCz2ZBAjhzM_ zuN>%VAeM#~zj9a*y$~Oi13mrO$LAM3EdwpL(xo;Cg4D4Y)5|TAWy?r)`tjxRRdB2j z2yO`naD4?)cWFFxHWY7uMf|IFqm&DQ0@LR!v`@H#5S^FB=PlSb6CeF3fLVwIa4;ks znCOcn$}EV)y(J-5iG{_Q7R#AYDF2#^H1j5a#w8f(#o;zH<2IgjRJs8rFPHCbalkcS z;^6?coQ8LR8%N7=+}jn-_t-da7mk8C?ToXMf`0hlBZq4##=&hjD#pb?wQ5H!D{CKQ zhbZ(LB1H2!z)bC3yK=;#ccU)40@(o>m!NZN+$mtIh6L0}3F0Dw^aAMq09tYM{`QWS zR@o$^DO<+W4W*YiWSE&}>bN+g4ydO~hKTQvTrAyL7mFn|W4_InL?>-d%$Tytg6V`! zX*H#5z2ym%hz1{7z>J7am$*Ab4mQJNcy-21X*Ffc_>htu3JhznlQoiRMil|vz{S75 zK5&b9LQ@b<`u%|<&V=G{WHgN99&RIS6~;X=iIY#5pvxWqAf@9Y;yseMoD}EA-0z_% zorqJT6fzLu~0il{$LKHb|kP=aj|5}0_X(KOdV zoFHHlE*eT+ZBbJLZ}y1{(-#RBm!zUNBm>8!)L$G9$nd#P6q}>;SrzH37x+u#*lnW| z_wdWGP!k7^ThUJWQ3V|rlTf+vUoasN4i<+hLb#I=5i}G7M8wU>bQ}g3HF}q7B4xor z$(DDq6w6Mbxg71>A?}1WCnsZNi2zj^%Voh(z^&RQ25eYh!IlDVT5jakkfMn_7A1f1 z%SRVj)6#^O9-3=pk~1io-dHf6^EbP8fQCH@Jvyha;0Z@!1EHd_h_A@aCZupi3`@cw zC7+-n-m9u6+EfvvByy7R?<96wI$^U!p+f!IEs4TT8Mr z@?#XXK!o$9xfTu}!(p=k%>$$bV0Oanh3PQES5@MYi{b#(+!PDQG \ No newline at end of file diff --git a/music-metadata-manager-frontend/public/globe.svg b/music-metadata-manager-frontend/public/globe.svg new file mode 100644 index 0000000..567f17b --- /dev/null +++ b/music-metadata-manager-frontend/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/music-metadata-manager-frontend/public/next.svg b/music-metadata-manager-frontend/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/music-metadata-manager-frontend/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/music-metadata-manager-frontend/public/vercel.svg b/music-metadata-manager-frontend/public/vercel.svg new file mode 100644 index 0000000..7705396 --- /dev/null +++ b/music-metadata-manager-frontend/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/music-metadata-manager-frontend/public/window.svg b/music-metadata-manager-frontend/public/window.svg new file mode 100644 index 0000000..b2b2a44 --- /dev/null +++ b/music-metadata-manager-frontend/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/music-metadata-manager-frontend/src/app/favicon.ico b/music-metadata-manager-frontend/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/music-metadata-manager-frontend/src/app/globals.css b/music-metadata-manager-frontend/src/app/globals.css new file mode 100644 index 0000000..0ad90d5 --- /dev/null +++ b/music-metadata-manager-frontend/src/app/globals.css @@ -0,0 +1,123 @@ +@import "tailwindcss"; +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); + +:root { + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --destructive-foreground: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --radius: 0.625rem; + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.145 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.145 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.985 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.396 0.141 25.723); + --destructive-foreground: oklch(0.637 0.237 25.331); + --border: oklch(0.269 0 0); + --input: oklch(0.269 0 0); + --ring: oklch(0.439 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(0.269 0 0); + --sidebar-ring: oklch(0.439 0 0); +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/music-metadata-manager-frontend/src/app/layout.tsx b/music-metadata-manager-frontend/src/app/layout.tsx new file mode 100644 index 0000000..f7fa87e --- /dev/null +++ b/music-metadata-manager-frontend/src/app/layout.tsx @@ -0,0 +1,34 @@ +import type { Metadata } from "next"; +import { Geist, Geist_Mono } from "next/font/google"; +import "./globals.css"; + +const geistSans = Geist({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = Geist_Mono({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: "Create Next App", + description: "Generated by create next app", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} diff --git a/music-metadata-manager-frontend/src/app/page.tsx b/music-metadata-manager-frontend/src/app/page.tsx new file mode 100644 index 0000000..f271b2b --- /dev/null +++ b/music-metadata-manager-frontend/src/app/page.tsx @@ -0,0 +1,17 @@ +"use client"; + +import { AddLibraryForm } from "@/components/add-library-form"; +import { LoginForm } from "@/components/login-form"; +import MusicFilesPage from "@/components/music-files"; +import { Toaster } from "@/components/ui/sonner"; + +export default function Home() { + return ( +

+ + + ; + ; +
+ ); +} diff --git a/music-metadata-manager-frontend/src/components/add-library-form.tsx b/music-metadata-manager-frontend/src/components/add-library-form.tsx new file mode 100644 index 0000000..30d13f1 --- /dev/null +++ b/music-metadata-manager-frontend/src/components/add-library-form.tsx @@ -0,0 +1,50 @@ +"use client"; + +import { useState } from "react"; +import { fetchFromApi } from "@/lib/api"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { toast } from "sonner"; + +export function AddLibraryForm() { + const [path, setPath] = useState(""); + const [loading, setLoading] = useState(false); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + if (!path) return; + + try { + setLoading(true); + await fetchFromApi("/music_libraries", { + method: "POST", + body: JSON.stringify({ path }), + }); + toast.success("Library added!"); + setPath(""); + } catch (err: any) { + console.error(err); + toast.error("Failed to add library"); + } finally { + setLoading(false); + } + }; + + return ( +
+
+ + setPath(e.target.value)} + placeholder="/home/username/Music" + /> +
+ +
+ ); +} diff --git a/music-metadata-manager-frontend/src/components/login-form.tsx b/music-metadata-manager-frontend/src/components/login-form.tsx new file mode 100644 index 0000000..a28539a --- /dev/null +++ b/music-metadata-manager-frontend/src/components/login-form.tsx @@ -0,0 +1,76 @@ +"use client"; + +import { useState } from "react"; +import { Input } from "@/components/ui/input"; +import { Button } from "@/components/ui/button"; +import { Label } from "@/components/ui/label"; +import { toast } from "sonner"; +import { fetchFromApi } from "@/lib/api"; + +type LoginResponse = { + token: string; + pid: string; + name: string; + is_verified: boolean; +}; + +export function LoginForm({ onLogin }: { onLogin?: () => void }) { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [loading, setLoading] = useState(false); + + const handleLogin = async (e: React.FormEvent) => { + e.preventDefault(); + + try { + setLoading(true); + const res = await fetchFromApi("/auth/login", { + method: "POST", + body: JSON.stringify({ email, password }), + }); + + const { token } = res; + if (!token) { + throw new Error("Login failed: No token received"); + } + + localStorage.setItem("auth_token", token); + toast.success("Logged in!"); + if (onLogin) onLogin(); + } catch (err: any) { + console.error(err); + toast.error(err.message); + } finally { + setLoading(false); + } + }; + + return ( +
+
+ + setEmail(e.target.value)} + placeholder="user@example.com" + /> +
+ +
+ + setPassword(e.target.value)} + /> +
+ + +
+ ); +} diff --git a/music-metadata-manager-frontend/src/components/music-files.tsx b/music-metadata-manager-frontend/src/components/music-files.tsx new file mode 100644 index 0000000..7f0578b --- /dev/null +++ b/music-metadata-manager-frontend/src/components/music-files.tsx @@ -0,0 +1,47 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { fetchFromApi } from "@/lib/api"; + +type MusicFile = { + id: number; + title: string; + artist?: string; + album?: string; + path: string; + metadata: object; + music_library_id: number; +}; + +export default function MusicFilesPage() { + const [files, setFiles] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + fetchFromApi("/music_files") + .then(setFiles) + .catch((err) => console.error(err)) + .finally(() => setLoading(false)); + }, []); + + if (loading) return
Loading...
; + + return ( +
+

Music Files

+
    + {files.map((file) => ( +
  • +

    + {file.title} +

    +

    + {file.artist} – {file.album} +

    +

    {file.path}

    +
  • + ))} +
+
+ ); +} diff --git a/music-metadata-manager-frontend/src/components/ui/accordion.tsx b/music-metadata-manager-frontend/src/components/ui/accordion.tsx new file mode 100644 index 0000000..d21b65f --- /dev/null +++ b/music-metadata-manager-frontend/src/components/ui/accordion.tsx @@ -0,0 +1,64 @@ +import * as React from "react" +import * as AccordionPrimitive from "@radix-ui/react-accordion" +import { ChevronDownIcon } from "lucide-react" + +import { cn } from "@/lib/utils" + +function Accordion({ + ...props +}: React.ComponentProps) { + return +} + +function AccordionItem({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AccordionTrigger({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + + svg]:rotate-180", + className + )} + {...props} + > + {children} + + + + ) +} + +function AccordionContent({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + +
{children}
+
+ ) +} + +export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } diff --git a/music-metadata-manager-frontend/src/components/ui/alert-dialog.tsx b/music-metadata-manager-frontend/src/components/ui/alert-dialog.tsx new file mode 100644 index 0000000..0863e40 --- /dev/null +++ b/music-metadata-manager-frontend/src/components/ui/alert-dialog.tsx @@ -0,0 +1,157 @@ +"use client" + +import * as React from "react" +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog" + +import { cn } from "@/lib/utils" +import { buttonVariants } from "@/components/ui/button" + +function AlertDialog({ + ...props +}: React.ComponentProps) { + return +} + +function AlertDialogTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogPortal({ + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogContent({ + className, + ...props +}: React.ComponentProps) { + return ( + + + + + ) +} + +function AlertDialogHeader({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AlertDialogFooter({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AlertDialogTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogAction({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AlertDialogCancel({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +} diff --git a/music-metadata-manager-frontend/src/components/ui/alert.tsx b/music-metadata-manager-frontend/src/components/ui/alert.tsx new file mode 100644 index 0000000..1421354 --- /dev/null +++ b/music-metadata-manager-frontend/src/components/ui/alert.tsx @@ -0,0 +1,66 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const alertVariants = cva( + "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", + { + variants: { + variant: { + default: "bg-card text-card-foreground", + destructive: + "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function Alert({ + className, + variant, + ...props +}: React.ComponentProps<"div"> & VariantProps) { + return ( +
+ ) +} + +function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AlertDescription({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ) +} + +export { Alert, AlertTitle, AlertDescription } diff --git a/music-metadata-manager-frontend/src/components/ui/aspect-ratio.tsx b/music-metadata-manager-frontend/src/components/ui/aspect-ratio.tsx new file mode 100644 index 0000000..9b491fb --- /dev/null +++ b/music-metadata-manager-frontend/src/components/ui/aspect-ratio.tsx @@ -0,0 +1,9 @@ +import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" + +function AspectRatio({ + ...props +}: React.ComponentProps) { + return +} + +export { AspectRatio } diff --git a/music-metadata-manager-frontend/src/components/ui/avatar.tsx b/music-metadata-manager-frontend/src/components/ui/avatar.tsx new file mode 100644 index 0000000..71e428b --- /dev/null +++ b/music-metadata-manager-frontend/src/components/ui/avatar.tsx @@ -0,0 +1,53 @@ +"use client" + +import * as React from "react" +import * as AvatarPrimitive from "@radix-ui/react-avatar" + +import { cn } from "@/lib/utils" + +function Avatar({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { Avatar, AvatarImage, AvatarFallback } diff --git a/music-metadata-manager-frontend/src/components/ui/badge.tsx b/music-metadata-manager-frontend/src/components/ui/badge.tsx new file mode 100644 index 0000000..0205413 --- /dev/null +++ b/music-metadata-manager-frontend/src/components/ui/badge.tsx @@ -0,0 +1,46 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", + secondary: + "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", + destructive: + "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function Badge({ + className, + variant, + asChild = false, + ...props +}: React.ComponentProps<"span"> & + VariantProps & { asChild?: boolean }) { + const Comp = asChild ? Slot : "span" + + return ( + + ) +} + +export { Badge, badgeVariants } diff --git a/music-metadata-manager-frontend/src/components/ui/breadcrumb.tsx b/music-metadata-manager-frontend/src/components/ui/breadcrumb.tsx new file mode 100644 index 0000000..eb88f32 --- /dev/null +++ b/music-metadata-manager-frontend/src/components/ui/breadcrumb.tsx @@ -0,0 +1,109 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { ChevronRight, MoreHorizontal } from "lucide-react" + +import { cn } from "@/lib/utils" + +function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { + return