From 35ff602a2f788a996824ed884ecf777682e4aa04 Mon Sep 17 00:00:00 2001 From: Josh Daniel Date: Sun, 14 Apr 2024 21:30:51 +0800 Subject: [PATCH 01/54] feat: re-initialize with next --- .eslintrc.json | 3 + .gitignore | 40 +- .prettierignore | 5 - .prettierrc | 7 - bun.lockb | Bin 0 -> 143335 bytes index.html | 46 -- next.config.mjs | 4 + package.json | 36 +- postcss.config.js | 6 - postcss.config.mjs | 8 + public/next.svg | 1 + public/vercel.svg | 1 + src/App.tsx | 123 ---- src/app/favicon.ico | Bin 0 -> 25931 bytes src/app/globals.css | 33 + src/app/layout.tsx | 22 + src/app/page.tsx | 113 ++++ src/components/Footer.tsx | 20 - src/components/Header.tsx | 17 - src/components/Preview.tsx | 21 - src/components/Result.tsx | 105 ---- src/components/Select.tsx | 84 --- src/components/index.ts | 5 - src/data/index.ts | 21 - src/favicon.svg | 1 - src/hooks/index.ts | 1 - src/hooks/useGitHubStats.ts | 18 - src/main.tsx | 15 - src/tailwind.css | 35 -- src/themes.json | 178 ------ src/vite-env.d.ts | 1 - tailwind.config.js | 8 - tailwind.config.ts | 20 + tsconfig.json | 28 +- vite.config.ts | 7 - yarn.lock | 1141 ----------------------------------- 36 files changed, 275 insertions(+), 1899 deletions(-) create mode 100644 .eslintrc.json delete mode 100644 .prettierignore delete mode 100644 .prettierrc create mode 100755 bun.lockb delete mode 100644 index.html create mode 100644 next.config.mjs delete mode 100644 postcss.config.js create mode 100644 postcss.config.mjs create mode 100644 public/next.svg create mode 100644 public/vercel.svg delete mode 100644 src/App.tsx create mode 100644 src/app/favicon.ico create mode 100644 src/app/globals.css create mode 100644 src/app/layout.tsx create mode 100644 src/app/page.tsx delete mode 100644 src/components/Footer.tsx delete mode 100644 src/components/Header.tsx delete mode 100644 src/components/Preview.tsx delete mode 100644 src/components/Result.tsx delete mode 100644 src/components/Select.tsx delete mode 100644 src/components/index.ts delete mode 100644 src/data/index.ts delete mode 100644 src/favicon.svg delete mode 100644 src/hooks/index.ts delete mode 100644 src/hooks/useGitHubStats.ts delete mode 100644 src/main.tsx delete mode 100644 src/tailwind.css delete mode 100644 src/themes.json delete mode 100644 src/vite-env.d.ts delete mode 100644 tailwind.config.js create mode 100644 tailwind.config.ts delete mode 100644 vite.config.ts delete mode 100644 yarn.lock diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..bffb357 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/.gitignore b/.gitignore index f1d58e6..fd3dbb5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,36 @@ -node_modules +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc .DS_Store -dist -dist-ssr -*.local -*.log +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 6f982f2..0000000 --- a/.prettierignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -dist -yarn.lock -*.config.js -*.config.ts \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index ef3a671..0000000 --- a/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 2, - "semi": true, - "singleQuote": true, - "jsxSingleQuote": true -} diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..cbac3b44cfb8cafdf642e8cdde8305eeba493fdf GIT binary patch literal 143335 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html deleted file mode 100644 index 2e533bb..0000000 --- a/index.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - GitHub README Stats Generator - - -
- - - diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..4678774 --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {}; + +export default nextConfig; diff --git a/package.json b/package.json index d58fef9..e558474 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,26 @@ { - "name": "readme-stats", - "version": "0.0.0", + "name": "stats", + "version": "0.1.0", + "private": true, "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "serve": "vite preview" + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" }, "dependencies": { - "@headlessui/react": "^1.6.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-hot-toast": "^2.3.0", - "react-icons": "^4.4.0" + "next": "^14.2.1", + "react": "^18", + "react-dom": "^18" }, "devDependencies": { - "@types/react": "^18.0.17", - "@types/react-dom": "^18.0.6", - "@vitejs/plugin-react-refresh": "^1.3.1", - "autoprefixer": "^10.4.8", - "postcss": "^8.4.16", - "tailwindcss": "^3.1.8", - "typescript": "^4.7.4", - "vite": "^3.0.7" + "typescript": "^5", + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "eslint": "^8", + "eslint-config-next": "14.2.0" } } diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 33ad091..0000000 --- a/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..1a69fd2 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/public/next.svg b/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/vercel.svg b/public/vercel.svg new file mode 100644 index 0000000..d2f8422 --- /dev/null +++ b/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx deleted file mode 100644 index edcba6a..0000000 --- a/src/App.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import React, { useState } from 'react'; -import toast from 'react-hot-toast'; - -import themes from './themes.json'; -import { countPrivateCommits, showBorder, darkToast } from './data'; -import { Footer, Header, Preview, Result, Select } from './components'; - -const App: React.FC = () => { - const [username, setUsername] = useState(''); - const [theme, setTheme] = useState(themes[14]); - const [border, setBorder] = useState(showBorder[0]); - const [countPrivate, setCountPrivate] = useState(countPrivateCommits[0]); - const [showResult, setShowResult] = useState(false); - - const handleShowResult = () => { - if (!username) { - toast('enter your github username', { - icon: '๐Ÿ”ฅ', - ...darkToast, - }); - } else { - toast('click on one of the stats to copy', { - icon: 'โ“', - ...darkToast, - }); - - setShowResult(true); - } - }; - - return ( -
-
- - -
-
-
- - setUsername(e.target.value)} - value={username} - /> -
- - setCountPrivate(e)} - label='private commits' - options={countPrivateCommits} - /> - - + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx new file mode 100644 index 0000000..5341821 --- /dev/null +++ b/src/components/ui/label.tsx @@ -0,0 +1,26 @@ +"use client" + +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const labelVariants = cva( + "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" +) + +const Label = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, ...props }, ref) => ( + +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } From 00adbd67d35d5fde4fa0ebc39e6741a42dcdcf59 Mon Sep 17 00:00:00 2001 From: hyamero Date: Tue, 7 May 2024 14:11:49 +0800 Subject: [PATCH 11/54] chore(deps): install react-hook-form and zod for form validation --- bun.lockb | Bin 170033 -> 170033 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 55fc550d67c91e7837283894b65bf56edb56e150..16ba8379a57cfa9a80153d71932ee11b434a0dd2 100755 GIT binary patch delta 40 scmdnEfotOiu7)j)$Jetn#u@1u=oxK4x1Ld)k%Nf=0=B>1!07TE03DDFuK)l5 delta 40 tcmdnEfotOiu7)j)$JetnF@VALbL$z!895l^%=JtS^-Q+E-N5Mb8~_b34D0{^ From 6864f978ef08bb5d2a8f399816501c8b13851db1 Mon Sep 17 00:00:00 2001 From: hyamero Date: Tue, 7 May 2024 14:17:38 +0800 Subject: [PATCH 12/54] feat: add sonner toast --- bun.lockb | Bin 170033 -> 170446 bytes package.json | 1 + src/app/layout.tsx | 2 ++ src/components/ui/sonner.tsx | 31 +++++++++++++++++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 src/components/ui/sonner.tsx diff --git a/bun.lockb b/bun.lockb index 16ba8379a57cfa9a80153d71932ee11b434a0dd2..161938aeaf165ad02e3aa1a283457bd33f4a63e4 100755 GIT binary patch delta 22991 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 diff --git a/package.json b/package.json index c58ddd3..b974607 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "react": "^18", "react-dom": "^18", "react-hook-form": "^7.51.4", + "sonner": "^1.4.41", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", "vaul": "^0.9.0", diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 8a81aed..7d34515 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -3,6 +3,7 @@ import { Inter } from "next/font/google"; import { ThemeProvider } from "@/components/theme-provider"; import Navbar from "@/components/navbar"; import "./globals.css"; +import { Toaster } from "@/components/ui/sonner"; const inter = Inter({ subsets: ["latin"] }); @@ -21,6 +22,7 @@ export default function RootLayout({ + {children} diff --git a/src/components/ui/sonner.tsx b/src/components/ui/sonner.tsx new file mode 100644 index 0000000..452f4d9 --- /dev/null +++ b/src/components/ui/sonner.tsx @@ -0,0 +1,31 @@ +"use client" + +import { useTheme } from "next-themes" +import { Toaster as Sonner } from "sonner" + +type ToasterProps = React.ComponentProps + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme() + + return ( + + ) +} + +export { Toaster } From d7e32d806104b327133cdaa564a236bbb7742b45 Mon Sep 17 00:00:00 2001 From: hyamero Date: Wed, 8 May 2024 09:55:57 +0800 Subject: [PATCH 13/54] fix: add value to disabled data --- src/components/ui/command.tsx | 56 +++++++++++++++++------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/components/ui/command.tsx b/src/components/ui/command.tsx index 17cc641..4d5ee3e 100644 --- a/src/components/ui/command.tsx +++ b/src/components/ui/command.tsx @@ -1,12 +1,12 @@ -"use client" +"use client"; -import * as React from "react" -import { type DialogProps } from "@radix-ui/react-dialog" -import { Command as CommandPrimitive } from "cmdk" -import { Search } from "lucide-react" +import * as React from "react"; +import { type DialogProps } from "@radix-ui/react-dialog"; +import { Command as CommandPrimitive } from "cmdk"; +import { Search } from "lucide-react"; -import { cn } from "@/lib/utils" -import { Dialog, DialogContent } from "@/components/ui/dialog" +import { cn } from "@/lib/utils"; +import { Dialog, DialogContent } from "@/components/ui/dialog"; const Command = React.forwardRef< React.ElementRef, @@ -20,8 +20,8 @@ const Command = React.forwardRef< )} {...props} /> -)) -Command.displayName = CommandPrimitive.displayName +)); +Command.displayName = CommandPrimitive.displayName; interface CommandDialogProps extends DialogProps {} @@ -34,8 +34,8 @@ const CommandDialog = ({ children, ...props }: CommandDialogProps) => { - ) -} + ); +}; const CommandInput = React.forwardRef< React.ElementRef, @@ -52,9 +52,9 @@ const CommandInput = React.forwardRef< {...props} />
-)) +)); -CommandInput.displayName = CommandPrimitive.Input.displayName +CommandInput.displayName = CommandPrimitive.Input.displayName; const CommandList = React.forwardRef< React.ElementRef, @@ -65,9 +65,9 @@ const CommandList = React.forwardRef< className={cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)} {...props} /> -)) +)); -CommandList.displayName = CommandPrimitive.List.displayName +CommandList.displayName = CommandPrimitive.List.displayName; const CommandEmpty = React.forwardRef< React.ElementRef, @@ -78,9 +78,9 @@ const CommandEmpty = React.forwardRef< className="py-6 text-center text-sm" {...props} /> -)) +)); -CommandEmpty.displayName = CommandPrimitive.Empty.displayName +CommandEmpty.displayName = CommandPrimitive.Empty.displayName; const CommandGroup = React.forwardRef< React.ElementRef, @@ -94,9 +94,9 @@ const CommandGroup = React.forwardRef< )} {...props} /> -)) +)); -CommandGroup.displayName = CommandPrimitive.Group.displayName +CommandGroup.displayName = CommandPrimitive.Group.displayName; const CommandSeparator = React.forwardRef< React.ElementRef, @@ -107,8 +107,8 @@ const CommandSeparator = React.forwardRef< className={cn("-mx-1 h-px bg-border", className)} {...props} /> -)) -CommandSeparator.displayName = CommandPrimitive.Separator.displayName +)); +CommandSeparator.displayName = CommandPrimitive.Separator.displayName; const CommandItem = React.forwardRef< React.ElementRef, @@ -117,14 +117,14 @@ const CommandItem = React.forwardRef< -)) +)); -CommandItem.displayName = CommandPrimitive.Item.displayName +CommandItem.displayName = CommandPrimitive.Item.displayName; const CommandShortcut = ({ className, @@ -138,9 +138,9 @@ const CommandShortcut = ({ )} {...props} /> - ) -} -CommandShortcut.displayName = "CommandShortcut" + ); +}; +CommandShortcut.displayName = "CommandShortcut"; export { Command, @@ -152,4 +152,4 @@ export { CommandItem, CommandShortcut, CommandSeparator, -} +}; From f0cb35d16ceb4251796e233a8eb2d1e8564c43e6 Mon Sep 17 00:00:00 2001 From: hyamero Date: Wed, 8 May 2024 09:57:48 +0800 Subject: [PATCH 14/54] feat: form with validation --- src/app/page.tsx | 11 ++++-- src/components/gh-stats-form.tsx | 65 ++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 src/components/gh-stats-form.tsx diff --git a/src/app/page.tsx b/src/app/page.tsx index 1df29da..dacf5c2 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,9 +1,14 @@ +import { GhStatsForm } from "@/components/gh-stats-form"; + export default function Home() { return (
-
-

GitHub Stats Generator

-

by Omsimos

+
+
+

GitHub Stats Generator

+

by Omsimos

+
+
); diff --git a/src/components/gh-stats-form.tsx b/src/components/gh-stats-form.tsx new file mode 100644 index 0000000..c57e303 --- /dev/null +++ b/src/components/gh-stats-form.tsx @@ -0,0 +1,65 @@ +"use client"; + +import { zodResolver } from "@hookform/resolvers/zod"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; + +import { Button } from "@/components/ui/button"; +import { + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form"; + +import { Input } from "@/components/ui/input"; +import { toast } from "sonner"; + +const FormSchema = z.object({ + username: z.string().min(2, { + message: "Username must be at least 2 characters.", + }), +}); + +export function GhStatsForm() { + const form = useForm>({ + resolver: zodResolver(FormSchema), + defaultValues: { + username: "", + }, + }); + + function onSubmit(data: z.infer) { + toast("You submitted the following values:", { + description: JSON.stringify(data, null, 2), + }); + } + + return ( +
+ + ( + + Username + + + + GitHub Account + + + )} + /> + + + + ); +} From 09b54c6a781d0bfb4827a6d7e2aea3e15176e673 Mon Sep 17 00:00:00 2001 From: hyamero Date: Wed, 8 May 2024 15:53:13 +0800 Subject: [PATCH 15/54] feat: select theme dropdown with search --- src/app/page.tsx | 5 +- src/components/gh-stats-form.tsx | 120 +++++++++++++++++---- src/themes.json | 178 +++++++++++++++++++++++++++++++ 3 files changed, 280 insertions(+), 23 deletions(-) create mode 100644 src/themes.json diff --git a/src/app/page.tsx b/src/app/page.tsx index dacf5c2..361139c 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -4,10 +4,7 @@ export default function Home() { return (
-
-

GitHub Stats Generator

-

by Omsimos

-
+

GitHub Stats Generator

diff --git a/src/components/gh-stats-form.tsx b/src/components/gh-stats-form.tsx index c57e303..bb46d5a 100644 --- a/src/components/gh-stats-form.tsx +++ b/src/components/gh-stats-form.tsx @@ -3,6 +3,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; +import { Check, ChevronsUpDown } from "lucide-react"; import { Button } from "@/components/ui/button"; import { @@ -15,13 +16,34 @@ import { FormMessage, } from "@/components/ui/form"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; + +import { + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, +} from "@/components/ui/command"; + import { Input } from "@/components/ui/input"; import { toast } from "sonner"; +import themes from "@/themes.json"; +import { cn } from "@/lib/utils"; + const FormSchema = z.object({ username: z.string().min(2, { message: "Username must be at least 2 characters.", }), + theme: z.string({ + required_error: "Please select a theme.", + }), }); export function GhStatsForm() { @@ -40,25 +62,85 @@ export function GhStatsForm() { return (
- - ( - - Username - - - - GitHub Account - - - )} - /> - + +
+ ( + + GitHub Username + + + + + + )} + /> + ( + + Theme + + + + + + + + + + No theme found. + + + {themes.map((theme) => ( + { + form.setValue("theme", theme.value); + }} + > + + {theme.label} + + ))} + + + + + + + + )} + /> +
+ + ); diff --git a/src/themes.json b/src/themes.json new file mode 100644 index 0000000..54ba51d --- /dev/null +++ b/src/themes.json @@ -0,0 +1,178 @@ +[ + { + "label": "Default", + "value": "default" + }, + { + "label": "Dark", + "value": "dark" + }, + { + "label": "Radical", + "value": "radical" + }, + { + "label": "Merko", + "value": "merko" + }, + { + "label": "Gruvbox", + "value": "gruvbox" + }, + { + "label": "Tokyo Night", + "value": "tokyonight" + }, + { + "label": "One Dark", + "value": "onedark" + }, + { + "label": "Cobalt", + "value": "cobalt" + }, + { + "label": "Synthwave", + "value": "synthwave" + }, + { + "label": "High Contrast", + "value": "highcontrast" + }, + { + "label": "Dracula", + "value": "dracula" + }, + { + "label": "Prussian", + "value": "prussian" + }, + { + "label": "Monokai", + "value": "monokai" + }, + { + "label": "Vue", + "value": "vue" + }, + { + "label": "Vue Dark", + "value": "vue-dark" + }, + { + "label": "Shades of Purple", + "value": "shades-of-purple" + }, + { + "label": "Nightowl", + "value": "nightowl" + }, + { + "label": "Buefy", + "value": "buefy" + }, + { + "label": "Blue-Green", + "value": "blue-green" + }, + { + "label": "Algolia", + "value": "algolia" + }, + { + "label": "Great Gatsby", + "value": "great-gatsby" + }, + { + "label": "Darcula", + "value": "darcula" + }, + { + "label": "Bear", + "value": "bear" + }, + { + "label": "Solarized Dark", + "value": "solarized-dark" + }, + { + "label": "Solarized Light", + "value": "solarized-light" + }, + { + "label": "Chartreuse Dark", + "value": "chartreuse-dark" + }, + { + "label": "Nord", + "value": "nord" + }, + { + "label": "Gotham", + "value": "gotham" + }, + { + "label": "Material Palenight", + "value": "material-palenight" + }, + { + "label": "Graywhite", + "value": "graywhite" + }, + { + "label": "Vision Friendly Dark", + "value": "vision-friendly-dark" + }, + { + "label": "Ayu Mirage", + "value": "ayu-mirage" + }, + { + "label": "Midnight Purple", + "value": "midnight-purple" + }, + { + "label": "Calm", + "value": "calm" + }, + { + "label": "Flag India", + "value": "flag-india" + }, + { + "label": "Omni", + "value": "omni" + }, + { + "label": "React", + "value": "react" + }, + { + "label": "Jolly", + "value": "jolly" + }, + { + "label": "Maroongold", + "value": "maroongold" + }, + { + "label": "Yeblu", + "value": "yeblu" + }, + { + "label": "Blueberry", + "value": "blueberry" + }, + { + "label": "Slateorange", + "value": "slateorange" + }, + { + "label": "Kacho Ga", + "value": "kacho_ga" + }, + { + "label": "Outrun", + "value": "outrun" + } +] From acfe7035094bb344ce6416838ecd8ee893318b0a Mon Sep 17 00:00:00 2001 From: hyamero Date: Wed, 8 May 2024 16:54:31 +0800 Subject: [PATCH 16/54] chore: setup switch component --- bun.lockb | Bin 170446 -> 171648 bytes package.json | 1 + src/components/icons.tsx | 21 +++++++++++++++++++++ src/components/ui/switch.tsx | 29 +++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 src/components/icons.tsx create mode 100644 src/components/ui/switch.tsx diff --git a/bun.lockb b/bun.lockb index 161938aeaf165ad02e3aa1a283457bd33f4a63e4..b7fdd7e94913e8b59f164dd0025d82e1610c722e 100755 GIT binary patch delta 30610 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 delta 29880 zcmeHwcYGDq*7n&$4lsdG(@q+M5IT_rLIQzvC{jb0kOT-AAdpZ(Lg>XLD2j?#allP4 zDvDP@Q4qKwQq&6;1Qi7Yq)P7~MS<^mX7)hf!oA-2eZT)aKc2JpT6^uX)?T~J%wbaS ziTC!8ykCi`ImY|>WiNkw>Q4O=RhJ|leR8Ij@luERhpL=Aa$?r0`Ip{EcF)!v{LG!6 zTuFQXwdrFk=NA(Whwg9`jL1muKN4AI!IuU<1)7xKQ2FV|^9TR5m%~vJw6fFTChh z*4fZTRPGC!4S5J?Bj~$8!$AW<=X*OG;h?3!vx7IFR{`_@XfWtzRc?mT9_`~}z$nw+%#7@;f#Vz#6#p!!4@$p* za^*n>4INH*I0m8*)E}0Wot2ZGm-hj9`m?2?17RDA6s!ZK-x^!;{DSTEB-%S_K3J|^4Yn1xI>R7O?ou59J^ z&&$im>yI8mPW_zWc_Sfnw8QXI|0@VtUv_%-@T>s{dGL(1ap}W`qJ4*BAq4F45vAxI zVHMm39{&nH1kVa`7zp?*0M8KJh)lZvL#4MAlzI&#t@`?nNbir3ax4Q+`DIYn*9!5^ z_Ry|T-^;INgX&iP3{~HYpv)hZF=9|g3_Pvmnvv@jP;*NStNYK?v;txWC@e3ygjzUm z1BQ-fCmn^x3a?7}#cNw_ZUtq$re}{EmOiq7X8MRhrdBTMW~pFd>E#X2&dwNtn!&Ty z>(HW&*%@O;vOvAZtZ5hk%2B-)K2y&)&x1(fmLZ&Y5t;c)xO`W7FjW<2BEC5e^L(!bNLx=arq6wNcENi60 zXl><}LOl$rs%@+ejmR1{B7LC4VJ($dw)eC#UM*2Ae>?J7AJ&Y~u-lQ>&f*6SO&>Wj zV}Roiw`FKX-l&mT=ubvo?x>6r;~a0cx9ZKv%Ndb@exHOM=W|%1)!+2~!$;7Q`yr_GJo`aRo;kW>vK6nlK z4Bi)dlE*Gk0D(UQ)m6r{URFbS;Ms5oP)1!mC_AvWk5z$RUrRo4_=vhVQe-}xX61j| z+p4d@la@#S4t3@9ra21>nTQ0g@UWrw0w{?II|qm{t3AffIZI37&e+qu)QzlC0PxbM>ebg1HrSSsfxA%Wdn^s>6to8er=dF*1fW=n3&Vu z%GZ(4SnE98Dz|KSCCh?<982&aD0}9cYc=d`OfMCXKOa&*NS_6zomde}2de3maS_$C z`#*tl05*bBZ>f?GZfdm>ILhk&AW-T%LD`*aBdzWY$jBX)KGfkzADdAZGdbg=CC@MT z1qnL52P*OfJvPQFkUiE4B_6$oW#x?=j6EzCvEC1I4%kmh?=w&~G$5njC~kg1sE2-k z8}d-lSn%PXPfW1NEd-?-TADNwXW#Uk^nOD#90H1*#jZ)#fo18+V=%1sdaj|rzZlb{I_B2F41N;+|t_-@ZiRHHyp!81wy2@@q$212=n~~#k zG8|V5E&oGo&B)0g_466%G!9k>EcwTp>F@j)Ib`lf*DEY4A(|MogFIr0u?OED8m?fE zQ_~!d`bKDQf`~O{2Yd9tfp3g9yo^INUHcBDsNfK{ZuZJ&0%yb)B* zEpm<2Y94(pre!>`N*L+kar#AY3E;eq@ZdPT4nmPG*Uh|9;IMttk#N#BaE}|Il@pvk z2=vCreAqg`aMkeWZ;^*yNh7>+oIcpk;!1GX^!LFbW(tb44*ja)oa98bky_KE8(62X zeisxohxw$j2eRsjFAk5FkscXe5)6(JRyV{3V|Fc%eiJgQ$@I`Ty#Yd!jliU?@g)^w zwfG*mX2^0HheG1Cn}NpO+HO4_6XkIT9j4I}!LhO8#v#=84{&Y46*Cq`#_54UcRPZ- z9*QerEQX<g|R;*K^!+`M|+$dDysq2=O9HrtAE=m2WL7^R4``8c=R4vgJ=Qf z3&La;IQkns!OT2tq}KQ7{#7s)AoHR(5Ey$Pn*mv4$ShxO2gg#-h>I_Y%N15=#+IH6 z4hOh`vId89J-EBo>({~6Gc^~Fi7$zztcz6#`Y{$9M^5<_9Q$o?H^Eu0rNeigNUJAk zu5)}zFqXND*VW*th~PnlifUFRW`ydUz|jCJmZvHXm0$qAFQgI8{sUcq7&A z5iO0`ZjZjOu4SjgtnU`MXp|{qPQ1a7IUG;i|SyvM;$tHH(EjcI2Z7(tJ_^+ZU} zd20sg6BK8K&AZ@Itjem!>BSIT)YLfFob|zV;0$-pM5?_pKOsSD8)x(kb2}%;*?ZBB zyQwe?c3We9k>k)eAasQ3pn-y zLyul0B61mMCg(f|4jUP^w1%*{i@9q(i&QtWsoe?2-ga&*XRh{Gg5cSXC|HIIhjzKC zF{iy-pN=S{$IbOu`^IAgCA#(22y3f(HuyJiG#fp{{MZ1_DzF&QbyIQXLZ~%tZuIQn z)(a4Qa0v=5t`+C}7+h;(esF^R2U6Cw!y2kJY+>~5=+>XZ(xd9@6kieyYUH{U8s{w5 z5{Fz`q(6-mYs4mm3A+{?yh#sWnYakv`ZfwJ|Xw=9z6}q9V^F-$IN{P94j!7I{Iz5!z_vkRpiFhn3v;qNN zIZn%NZ_G(@>&qeJpkV36Vsi={JFFYwZR4EPF?l-~^CJ@UQAlw-FR}fHhq*+1a9*4a&dmkE`7KhI0!Zm8Or=F8I9pmN4Cw1f(FW8} zJI)!Bie<-)yOBs?$S6nuH-f8Y>~GzKHxarR^J^vO&Co|{b239393730)r`~5^)!O| zx%C#kEEUuNe@k$jEjZj`V(tP5kDvzu7!t;&*^-vl+vwTft$o?Ym;+L^uMt$)tq<;N z4JvkpCUM&9eT|+2+|Gj#;$)8+Iz4HPD{4-T7f-T?vs^kCM9d)POr&5nmdkIg6qawj zpE>7{>WWl*9?P6_k+Sr5A>}r`P_e)51+I#H!CC$euNvok6I>6og_~vyvE%GAfExr` zorhF!BW-jOFCAR5N*ep>bz%*MF9~Ro)zx}23sOl&znfKh8V#Z9_MV9$$|`liAZ&4 z721wWBWS2wua;$de{r*TFEF?Y3Q5p6AjRP~qhI$PYz3$l486&j3)XU^%%w~J4XHlR z$N0y`dkry7MmN?X#kpCWi?Mcgh%qPIjcL0l+oKN}3U?!`oEf}}!O>7_G9DpkMp@)A zyC3P9aa!&$BPhqMuY!=uSWBYfoTakOkPJ<5W+T;!#_8*kdfe0q&xsQbBQ@9KOdrm% z!AR>{km_zWhEa9a%%L1xxpOm8ZO!swxz=K6ncwp+$54L_9Bs1lzAVaVw{wj-d2VOd z5h^tFw~=aZDq|Yy7r|MJ6DGg2W**(dh6|DEZ3f|fqHM_=poMXoGayxBQg1!eSgbZ@Azi53Y7<CSpPu`*F-0jZ_&Yac~X6S=&`;zLlpN*dq00a5xqglrlFC3C^;NW4a9--D~c*x_5z9 z&Z^~caBk#T8_r~KN#M*rI)4I(vt+ddJ)+RE#5$ynE;ND)+}hegqh|rO*2z|{%#B-1 zm~8AtUcqD|sL-u_KH2D5*f>ALVcvkow?&JARsu+?00M|mv??e+q?AVj6#*FFC;@l? zFQ6sBPf^PHu%tMg08RmBc`OkyA0H&lg4hGhjIN4@y=F&JlpNcK`5|RP7$r0RNzmfJ zK!6>=3^(PNk)|9`Yw9Cx93=s`#mt|=_PxQp46s52pk*@v_E;)@7N|e49AE>h0Dg*6 z>aPJSDcw*dT*QvY)@_>j`_uK;#nJ3#$!0e(m+ z|BehkMJe_2zsDC7KLGrYvcOLO<+}lXNGboB3_cH|?AU%Y*P_%v2(X?*06(PU50inz z?>y}^V?gnyoaK%ItnWC$&%-G7PMNv)Q`UbPAU&hn&XQ@*-GV;GTAy` z30i~tLeLYmENB)evj*df1+x_$0m@lA7L*;E0Lq3Zf$~Gj6HHcHnnVivCdYe@Cfu3tuRg z@3^B1JdB!Iteu}fL8&j49x0Q>6i>>0FGZau#rPLj3Zzsh0ZP|+E4~ycEiMnr4=MF3 zD84AA$XCfpspqHohf-tM)PSyR&84(RSt>~Jq)dh=d8m?;QZG!=N=i*5Xv5F^UZyG8d)S6ioP!_Kg8i8V!a&!P?T&94sqrE}- zA?1>kuK0&h<_|KA5!YCRy--|Usn|g7Tl;5HYvJU(Ji2wu}lW!(~hr|^czs}--ELB zZcujXXGISvdI*%w98>%WQ2cY8Qu1?T@FAt%B~W(rvZ7a1KImXG<0=G{T~i9zLD}%{ zpse7I;x!0aQ87^F7gtnQw6vmSLAmw^fTF0w1?n))z8GM}MJ1(GMbSu5wo+5^brfGu z(FUMwH5QcaNdVIBNuR1zq|Djk&dWq`8vL7@DAT5(xKU{;(71vZeS=wL;M zfURQa3ok>F<&C|$Ef@uV!UP07Dfa#9ZD_n>U( z2Ss-&`XeYmq|E;bl=bXaa#G6qBS?Po?F1=1a8PBCQt^Ho`%4_5aluRSpSyy)PElwo)_WTL3funP7p>0e(msH2>3!kMB{I4g85~j}~T7JnW(a z<;{x`cI@9?d>Ch+wwAHOEP@Xy{dNps>4#lnKy1pX_t&MyUzZxZW?`)Sb*aHij=wH7 zxP1L}sbO7u{B^0pX!z?=!`jsUy3{bwMt@yu{I{1H?f%a$H9kt6+a$r5|5Kt^W}N&f z*@*wi$LP2_QM_*)`Z3u!0d5Jn6~@Kg$;PbRK1R}>MDdZacu%s?c8`zY+?yy?8C~}# z8`r_D0=L=_KPMYY_xczaKPQT{#tLvLKl>Pd`x5cfzw~{{M#+6X#^>NZG0N{xHr9X} zwLejOYHR|Rxxb82?Ld36$;dsBYy=+gF?JnD6kCk&Uy_Zj;HLbNC_XoKf*bpbj}dz? zQT)>=JeX|MIOt;>1GmkHK9p?i1~>CiqWH=<1a9gfAEVXbMEss@`eE32*vGgE?pvez z5!eTA$&o~{)3^w3))CluG*NtSEItbRj>5iUiDH-0^%(2}w+h@(hWHis9fN(pCW<}A z3UDdE!oK5);%6iMIP5zP`@rot%AbIJ;6|ND6u%goz-6BBF(OYUibF>3N!WK1_JKQM zgr9NiA0_?k(C~g=lz@=P-eU}o&??(D1*mnu`fxBgtzYP1pjk=tu-EkP3FZVDqFT=nq ziTK$??iCn#1qOn{Gsvqj5ZsijiNa~@1UL374E!xolrRc^gMq)nKybPdeGLYJn|Uo! zlrj#1n|cifUQZN0#`Nnj@Hz|xSJr5L0|tUyawAccH!gykbpr<8OcWK3#W!K#O&Iul zqVO}i{tg4dtpXQdh(BQ9?=bL>L_9TJ0WRea7EM6#?Q zAUH-rO&P60u$zLJ8U(fFAqu8y5VR@=L0vh$7zFXfAh=4wW3ssy1Scq1;srspyhy<; zF9?#H5Y(58oe;EjLf|Y8L9Far9D?f`aqB<4^c4H2ZB~*Am}Kkmw_O@ z3Z4nL0`Fvf=pkyu$muS zm@aeuAPDq>#x6f-^q1lO5NxGjia!Jyawi32{UL}AfMAd;41l0U00hS<$db{45bUO4 zW*`JZC213xv1;H>m-339s3xcZ@442J=AUHw6k{}3j7z8E5Ao!euNwRz; z2-Z+AsuBeGauWral^}?$3_+pHtqeh6We9dr@U#raT#;KTm=X@b6uFavvEdNJR)OF- zSy%;v8dV@TM#1wkIs$^-6wHi(;6-_ef~gS@w5kfhOLBTu2;!?kaFv3WW%Eb~PEfEU z5`yXSA_cP|AxNqQfgu-HgP?6Sj9l^R7`d6UYjp^&SA)i?>d=r<)PP`VbqF$QKrmab zpdh6N1b#KeyQS^_#@&BtR@CbBXwg!v&S@g*3fZKN_(7alUB0eJ(0twqGVfs(ECVek zyEehL^h%JIZvRIkFBx4=EEKQEo%KY2=MUky{Y#|)Dy{AwEqV*FdG(4I@tEekP!~@w zS0gj7n0!25G;sdfR0)Cw)#bcKqNH{W_5vu&@n-clC7Y&Xyt6h3 zFz>zn4MOJg{@;8G@p)Ovc%SzjQ(`?aq#m!ucx#rQ=}M13bogA!UWJSe^9p{glFd+h zycMrA6Q7xonNK@?z^n&YG2MfIrU!PQFe{cy#>b#Lm28%hm4j>xz|U;R=mFk-x9=m) zS96t%=czve ztm7>u3q<;BfOYU$EB-kG*;9PhER^Twh*!gSBbzt3j{tnUx*hly*a7Smvf4aRt@zJK z?-TNGb4AZI-XGZldOf6-W1gs*~Wg8_da05G4xf@%PVtQhLyV_`mHz6tP| z@)h7JaGk#$*bY6$CZAn=1~4YS0Nw}I0F1|V03WUxzzkp}Fb7xwECdz-i-FexJ{y?~ zJPkYpOaYz+o&%l-_IUmySo1e`!g;0`*=pLE;= z_>+$-z!~5yZ~{09@W%Z6zzX0);3HrqkODjpya0>=x&ZNL-_Zz20Ga@tiJWB&_+CJ7 zpdZj57y$4`3QYmtd5nNQAL2Fu%7W)lJ@~NrJIKR94}l&8N+4Yl;4J17bUwDf4g3Rn z`RnlY39td!4!3*`uXybbUnnFnYAv;-ap zS^=$rHb7e-3gE-GP(H~EL!ujcl?3zvk^xS+AmA2~hk+x&QGm}nRs(H-wtxp13%yvB z;SXB)2*DR={ytzI(p!MffKLHF)7lN}1JaS70gTt4a5yF+Q3y;1o(84>&jQZ@(}0(N zmjMaP0{GICIlx?C9=|DfAKQI7jg~BxeK6!i%kboQI+5#0JF9BRe#a#2b#&b>QQ%i5;Z-R_h z^?azv^_t7`Rt7WIU#_?O)!9zqC*TKw>n+#UZve^&>YP}JR`8klKG)c4v0QSwxo|#k z1R0{~KqSDBWoNkCF(N(&-U9+whrcc^d&yT`7v;n=u#Xx*2s=aMMN|wkXIBHw$FXVIiEYO0r2-elK}3tBY`0R=QfvQ+D%_@ ziRSYcFMvxdql&ZUDUdtBP2d`k2wVlO035)Jz&U^m7N_qifQ!~XMhpjLJitNv9^gX4 zfg1}Tq|Bw7gSG|W05UYU0-J!wz(#-}%Lrg3aOzQaGe9|cQU*pW@D;#;-v#VO`(`BU z0kaqQ8Q2eSS^X6_0Q>?R1C9bm0CwOIa1c1G(xk@$F3T5y^8hVo`Vv4nLCb#wJiv9} z2HH1WaU1j&@H_Aaz==f{vN5`qX}XVIqKAqjpPLx-?R|ptMF-gMrwXay2Lo9^CNKyX z2=M1(>`;CWBv?rjXm{WVpc~Ky=nQZtF9WbbKhQ9s3c!sj9N@;~0=Riq210>gfO`Y= zsYe~IluY+VJ)GRs@5S-wPG@IO(I4P4TvWye>|K#Mgk6q#wtk4xvpdQ<*cs-td?kP~ zG;DUzSHS-rA?N^92Usu>Xb-dl>_%v5Tc9<-Ws4nn9B2vHohxFM>4_G|s|GX&ngNXg z4^Rh)0l2G{qg&W3Zm)D*g52~T-r&>#$@)MvP!os%?EXa}%{Hq7^dj5fGRnT!11PHn zJO)Gobpf_n8(<#G5!5GT8K&)eVMo5%L00;(hG{4bc%aZ-89i+0GhFCA>OPoe7}sfl0sw zfJ4Jr;9kahx~t$X)|K3y{DZ;Dh(^h0i75)nBX-bA%lKk!Y`-amX(| z5-}C8Bc~Ls>HqNp!y}q#xYm=0){B5rn&=Z9Zx$>j>#h_oQChZHDQfYQXnlg^1d40Q znJdM(s&mmu0O~0Qs)J4lOt_i#T=#+Hgq?F%$bwZOP`e>yhgBj*Q+x=|=qzz!=?i6l z{IPhBCPqP04icro8>t&bkZk@vn#-2rV~`i*`2!$}<)mF8n`LJT56BhZv>V0b*SkcZ zC?)TJ4GzbdFA%l88u{ACyV^BR)vx#{KfnYlKU$ zjg>1D-Fa5#t`V)o3{#5Coomn)OUL5E#U|N&Eqe5&?6vl8`KosLvv722)T8~BTOgaq z)Hd6z$M&oq)s+j^h=2!bG(G9!-R=FtB^z%Lb#&WMD@z{yp@>Y#-~WLQs8W{e|8pr- z)6sR}$v@%7`zjanW%vd>6}W(&{pqsz_gU3vj;%|+vRAbJ(-m2*w|c-OcF0*Z-u2z? z|DxiD^zi<0zOQbvQkLELr$SKK`sm?QLua;s*A0yj`keCZuWuXbJpV@ba>Bn1_A5wo z<%CV5BW{0h+k{|zQQq2w(Vrm~9!0R!+bkLc+pj+y8vO^1Up?*b_uUi}i-#XzpZzw_rQ>c7ufHg` zxfd;u=3pF@K3||~#r&*g^!m*SnVVB)EYZXnUu%)BD4RneKL!dIm4X4OTQ)B!yU3}D zP)P9a?i)dqzCTlS{P1$AW~=5nry<)18qwYtPuFVg>!pcykf7eXF9q%N*yh(=UvBY5 z8IBl+{vfisRNWdXKFF!^_+B$7I?4-K73F?*)qZnnPciT3*4Gwd59kwXjdrdq|4)qe zL|L1pqAc|*NQUeSF4lg3>CTkD?`U^r;W14-1(!x)v$S7OTBI)xtvEd>msu6j10fG- zx1rVUnLzo+Ke37A%DQDS8kWa`wIFK{yF4{?{k|0+y@!6rSvLB}{#y}kGo;*#XtQ5* z>U}af)U#;XP3WmZ>XEeoL_y34sFePm}Z%_X;Q6G38@48MdqtbK{JTZVp#>@qU$OU!k1 z^11Ldb0LKb<=QXBAmJ^;zY_I>7erViyX5&r5w$wK?nWooh<+%CejuGQq7!@}RIKJEj{O~?@D z8saZYeS=4OTV%~|;7I#Tr7sScv10w+ZNF$D2L6u43igbg{tfEfA>XB*{od0B&#r5^ z^j4X-5DKvva7>fpvf_5s{h@5L9p;)n_AQP@3%5Ju``gj&M=x1QxgI0RTxxw~`ENxf zQA|dEiw*e&nf9%4HQkTP5H6nodQz}+?Dvi?UwZkuZgW;_!wIB8l-Y$i`O&vh`S78|3F5EJ^_O3TZ>>To8Z*y9htKCW2^g9f9j!gazr=}=5 z|2vdYoBZzY5Y}ehE?N3}q|L#)e~0}O2gYFgHLvfrS^4;h>ZP{wq=+*dx6A*(M@efR zkF{SP>zb0%GSu1U2UyQ&hyUys%$D}faED}8x@MhW*|Yo4!}p&f%)^vR^Ny3}e!{`K zN}N3KJ!s=NxqG*W`R@){_94)$^T8vMs`Bv%PflulcnJFw7YNJZ<>oyiCgfiylDlbi z!zgTf*W+cmy&^Eyey{GH5-%N3e(t5Ea1?@sj(T*CIx7|F(%l2mzczT^q4;5eWM5=x zagF7~pRt%J&zsj0f9C3;NQi3F8_V?vP{(~^8En4`czn{p64U#ZpLXxM<=2MxQ}W!>Bl}_61GlA1Ldq z-UVFHW8}GUsdxOgXu@bJYaA9aRd+ST4Ie1lZw<~{pY-l>t?WhA!7T@UZS9s%9Y*{1 z`-n51Iyq)U>Y=yI_RYhS{l;Q{XKHAt(5JCo#Ye^Bn1dTCZuvFJ2HWpCZXBK1J*e;( z9)r|1wYjIev=7}f=!ocmEq>4u(J{n+o$}unf0%S@(zi)wZ_I^lzgzA&f;H)+Tb?>1 z1_s+Na&~Q_XA91 z!TmhefiwF?qw5_9cMCS#Ysk|;OZh&IbFub|vHi-eSU3LV>{+G(INRVJ6N+-DtvtH@ z2P1sjZ$wVLs7Blbtg~mZ{Z8(rJ%?&nsFXO~RIt__>G>6Vb;V}p!=ZvT%@%G?bgaK> z){Scd+&YvmQK2Ce%Atv|Yp=#R8@Hp4T;>rQI%{wR*MS225dT`;8R1(hU;v)N8N^)P zECu^71f+g?&N=VE*&1dO(NS@Dx^7-IXp>sVKF2YIU2^(y?BGT#`QCAOc|j}r#c|Og z*na)?V{f}R{yL=}&KtaRU;|ZU-4miv+ulZga026Jy31cyJSjr8J#A#nNii_Qe)smU znqmF^KBHe}P4H;Tv&ft6<;s&-!0oqd&zjNfvme%^1fu#_>zWM1teq0Is=l9ST@9yO-92 zj=_j}BIKuMgsWk_ZdRO~x!!Mo--;z0nB6zy+J1}o>C%;5r6xzlm_^MTxS-5gxM1EB z=2Odp4E&Xh?2&ku*u7xF`{kD6mwx5D;|4E=e@=JV`>Y5IvEPa;BRqBXW;b=AE}U$6 zDBajyzCsQAJ<1X9+U*zo9@ zNYfcpbHCrm`&Jw*xYK?)boZaf*Qgy5KTs1PNmk@qvq)={B%eG7Z?;L23(9MOA@*CQ z&m3=|N3068>qN4Ob(NU7jVj} zE_dS6MT_qtD?7D7tz{3{>@rGs=piqV@6|)*+!2BD=y?&OW%hXO0&DIexBmuOfHK!X zU+W<|K^|laRAI7NZQZS0RjOU?A$PDs)u_63(xxWMg5QLn6N7KH zD7#!l>yuLC(2M`7tttz#-?4sS_0(5pmpm44wr-yMFQmwGk1lAMhR4^#an*LW4ZDY+ z8!n;E2ilh2m(igI>eXK8DfLzVfl{Tli}qd>m}Q^?g^!#(ht${OnET zFPQBm%U(fmruC9%uHCa(_P&BS`3Nr~MD64zu-Oe`q?{(yAZy9wJRoQPz-~05YK>zI*?V&~FKHwQU za6~2f{#8s{`?c$52OK^5+tdji?v0B5V)j0r4nA?RYmMe+PBf#%9#Q)h?q$6e9PS$v zQlPqptz}r+Yu;L*Z2ucBK-9=tK@+HAlo1o)grv zoA~a={Dd+}0S_PS7xV{KJ05=El{pdja#H%p^_b=%_AC8;o5!{owfWnhl?KAKu#da| zjfVCg18`Otxn|Ma)^@;QNbSEfaG`X-;LPuCc2s3y{@Om$eFHImFC=qs;O2p!{PYH9 zfHnU^9y&(mS)e(Ca+ zo9Ob8bjz2e4kw&SG^YEQ1VL}MU$qi)-31w zdo?IBqaRiP6a5il?g94tYgez91$%2yTfv`_VjEd>8>4w&8S^Zz7AIN!4(9BA9-wp7 z24OF|YT19?)SbBrHwD!aszy=G6}ui)T6srF)z;HeiFNx*E$j^+5rzl}`>#rbv@RTdVz*XFg#wzMmM-7preF;}Yqp!TLR?nRG&%$W zQPfYGT70aWd;Psn{ICL=TK$D-r|q|U*3{=VQBdse*6vpc@%rf1aao$&4rQyh;798{ z?0#tQL!XxY>l$5{O@yBnTGZs*YFFRU&mkjhPPFD zti+0B{~3XKI*bRro$USbAm4 zjm5Q?2W)$wyY{&%_|ZGZznE)IEH#bP_G+J)?0IADix1xt?PFW4{Rc*xM`@Wu2VDzM zc44u4^v0rw#A>I=$t+~qaO=;9ICgaT>{gp2_MV6-p-wsf>Ic~2k4b5tR_^b6to_$c zwm$ypx2s=vcT&AWkUrwTfQ`|bTa7Tc?7x08;o7CToBF3Ruvd2hGr=m@px1M~%WBB~f{u3~5mt-&BU8#5p7_P2s)OD4nuAa1$Bjp!mw3t}? zugZj6FDSM0)AtHd0u^!g*?)KDWby5%11e7ZPI((A6!myWmu<>o>8K+o@Ve3dvo$Z) z-Wl{}Y-e8l@r;XSjSs(Yl7E!dDtO!1K!Zlfz;ap#&F<#gV`M=&TwOh4aljN&hRCnW zX$|l@3EXMIO}sHOq&#N4xdsNvf#tOj>uTP0_j1ktV>eBzEsZYM;+4g!o3K}1uE|s7 zwIJ=-7+Ji6R?GYH82r`t#On&=yzc7KCqt;_Tn#_`)Q%tCllq9 zeu(q^6Jl3`_`Qa&#OcG)x){_Dt5^(fm#FYN}+r

ZR$cCvNHLLc7bi&I_atTUgJ#Wch< zM>9Y5%N~EZFHq~w|L^J2DuHwb36Csmone1Yn($`wyOmw_!1IxAVL(!uJH8DLG{OJv z(>y^TxZO$dGx4!si?L;H!&j!08_t%eT-r@}rn45fx<{9 diff --git a/package.json b/package.json index b974607..8efe39e 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@radix-ui/react-label": "^2.0.2", "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-switch": "^1.0.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "^1.0.0", diff --git a/src/components/icons.tsx b/src/components/icons.tsx new file mode 100644 index 0000000..268e685 --- /dev/null +++ b/src/components/icons.tsx @@ -0,0 +1,21 @@ +type IconProps = React.HTMLAttributes; + +export const Icons = { + adjust: (props: IconProps) => ( + + + + ), +}; diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx new file mode 100644 index 0000000..bc69cf2 --- /dev/null +++ b/src/components/ui/switch.tsx @@ -0,0 +1,29 @@ +"use client" + +import * as React from "react" +import * as SwitchPrimitives from "@radix-ui/react-switch" + +import { cn } from "@/lib/utils" + +const Switch = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +Switch.displayName = SwitchPrimitives.Root.displayName + +export { Switch } From f9fad43932b0bdb7570200248d0fb8154259b46b Mon Sep 17 00:00:00 2001 From: hyamero Date: Wed, 8 May 2024 16:55:23 +0800 Subject: [PATCH 17/54] feat: card preferences popover --- src/app/page.tsx | 4 +- src/components/gh-stats-form.tsx | 91 +++++++++++++++++++++++++++----- 2 files changed, 79 insertions(+), 16 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 361139c..cffc20b 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -2,9 +2,9 @@ import { GhStatsForm } from "@/components/gh-stats-form"; export default function Home() { return ( -

+
-

GitHub Stats Generator

+

GH Stats Generator

diff --git a/src/components/gh-stats-form.tsx b/src/components/gh-stats-form.tsx index bb46d5a..f924a76 100644 --- a/src/components/gh-stats-form.tsx +++ b/src/components/gh-stats-form.tsx @@ -1,19 +1,18 @@ "use client"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { useForm } from "react-hook-form"; import { z } from "zod"; -import { Check, ChevronsUpDown } from "lucide-react"; +import { toast } from "sonner"; +import { cn } from "@/lib/utils"; +import themes from "@/themes.json"; +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; -import { Button } from "@/components/ui/button"; import { Form, FormControl, - FormDescription, FormField, FormItem, FormLabel, - FormMessage, } from "@/components/ui/form"; import { @@ -31,11 +30,12 @@ import { CommandList, } from "@/components/ui/command"; +import { Icons } from "./icons"; +import { Label } from "./ui/label"; import { Input } from "@/components/ui/input"; -import { toast } from "sonner"; - -import themes from "@/themes.json"; -import { cn } from "@/lib/utils"; +import { Switch } from "@/components/ui/switch"; +import { Button } from "@/components/ui/button"; +import { Check, ChevronsUpDown } from "lucide-react"; const FormSchema = z.object({ username: z.string().min(2, { @@ -44,6 +44,8 @@ const FormSchema = z.object({ theme: z.string({ required_error: "Please select a theme.", }), + showBorder: z.boolean(), + showCommits: z.boolean(), }); export function GhStatsForm() { @@ -51,6 +53,8 @@ export function GhStatsForm() { resolver: zodResolver(FormSchema), defaultValues: { username: "", + showBorder: false, + showCommits: true, }, }); @@ -62,7 +66,10 @@ export function GhStatsForm() { return (
- +
- + {/* */} )} /> @@ -102,7 +109,7 @@ export function GhStatsForm() { - + No theme found. @@ -132,10 +139,66 @@ export function GhStatsForm() { - + {/* */} )} /> + + + + + +

+ Update card preferences. +

+ +
+ ( +
+ + + + + + +
+ )} + /> + + ( +
+ + + + + + +
+ )} + /> +
+
+
From 7d7873ee1ebfa512522779ecbfb9430d40496061 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 00:51:41 +0800 Subject: [PATCH 34/54] chore: add icons --- src/components/icons.tsx | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/src/components/icons.tsx b/src/components/icons.tsx index 84406a8..3a1ed5d 100644 --- a/src/components/icons.tsx +++ b/src/components/icons.tsx @@ -1,6 +1,77 @@ type IconProps = React.HTMLAttributes; export const Icons = { + back: (props: IconProps) => ( + + + + ), + + code: (props: IconProps) => ( + + + + ), + + link: (props: IconProps) => ( + + + + ), + clipboard: (props: IconProps) => ( + + + + ), + adjust: (props: IconProps) => ( Date: Fri, 10 May 2024 00:52:19 +0800 Subject: [PATCH 35/54] chore(ui): display copy to clipboard icons on card --- src/app/globals.css | 108 ++++++++++++++-------------- src/app/user/[username]/page.tsx | 4 +- src/components/preview.tsx | 119 ++++++++++++++++++++++--------- 3 files changed, 141 insertions(+), 90 deletions(-) diff --git a/src/app/globals.css b/src/app/globals.css index ca51706..a9e8d03 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,76 +1,76 @@ @tailwind base; - @tailwind components; - @tailwind utilities; +@tailwind components; +@tailwind utilities; - @layer base { - :root { - --background: 0 0% 100%; - --foreground: 224 71.4% 4.1%; +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 224 71.4% 4.1%; - --card: 0 0% 100%; - --card-foreground: 224 71.4% 4.1%; + --card: 0 0% 100%; + --card-foreground: 224 71.4% 4.1%; - --popover: 0 0% 100%; - --popover-foreground: 224 71.4% 4.1%; + --popover: 0 0% 100%; + --popover-foreground: 224 71.4% 4.1%; - --primary: 220.9 39.3% 11%; - --primary-foreground: 210 20% 98%; + --primary: 220.9 39.3% 11%; + --primary-foreground: 210 20% 98%; - --secondary: 220 14.3% 95.9%; - --secondary-foreground: 220.9 39.3% 11%; + --secondary: 220 14.3% 95.9%; + --secondary-foreground: 220.9 39.3% 11%; - --muted: 220 14.3% 95.9%; - --muted-foreground: 220 8.9% 46.1%; + --muted: 220 14.3% 95.9%; + --muted-foreground: 220 8.9% 46.1%; - --accent: 220 14.3% 95.9%; - --accent-foreground: 220.9 39.3% 11%; + --accent: 220 14.3% 95.9%; + --accent-foreground: 220.9 39.3% 11%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 20% 98%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 20% 98%; - --border: 220 13% 91%; - --input: 220 13% 91%; - --ring: 224 71.4% 4.1%; + --border: 220 13% 91%; + --input: 220 13% 91%; + --ring: 224 71.4% 4.1%; - --radius: 0.5rem; - } + --radius: 0.5rem; + } - .dark { - --background: 224 71.4% 4.1%; - --foreground: 210 20% 98%; + .dark { + --background: 224 71.4% 4.1%; + --foreground: 210 20% 98%; - --card: 224 71.4% 4.1%; - --card-foreground: 210 20% 98%; + --card: 224 71.4% 4.1%; + --card-foreground: 210 20% 98%; - --popover: 224 71.4% 4.1%; - --popover-foreground: 210 20% 98%; + --popover: 224 71.4% 4.1%; + --popover-foreground: 210 20% 98%; - --primary: 210 20% 98%; - --primary-foreground: 220.9 39.3% 11%; + --primary: 210 20% 98%; + --primary-foreground: 220.9 39.3% 11%; - --secondary: 215 27.9% 16.9%; - --secondary-foreground: 210 20% 98%; + --secondary: 215 27.9% 16.9%; + --secondary-foreground: 210 20% 98%; - --muted: 215 27.9% 16.9%; - --muted-foreground: 217.9 10.6% 64.9%; + --muted: 215 27.9% 16.9%; + --muted-foreground: 217.9 10.6% 64.9%; - --accent: 215 27.9% 16.9%; - --accent-foreground: 210 20% 98%; + --accent: 215 27.9% 16.9%; + --accent-foreground: 210 20% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 210 20% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 20% 98%; - --border: 215 27.9% 16.9%; - --input: 215 27.9% 16.9%; - --ring: 216 12.2% 83.9%; - } + --border: 215 27.9% 16.9%; + --input: 215 27.9% 16.9%; + --ring: 216 12.2% 83.9%; } +} - @layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - } - } \ No newline at end of file +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/src/app/user/[username]/page.tsx b/src/app/user/[username]/page.tsx index 89f6eb2..2595238 100644 --- a/src/app/user/[username]/page.tsx +++ b/src/app/user/[username]/page.tsx @@ -2,7 +2,7 @@ import { Preview } from "@/components/preview"; export default function Home({ params }: { params: { username: string } }) { return ( -
+

@@ -20,7 +20,7 @@ export default function Home({ params }: { params: { username: string } }) { Generate your GitHub stats for your README with ease!

-
+
diff --git a/src/components/preview.tsx b/src/components/preview.tsx index 07636c0..a3a1a1b 100644 --- a/src/components/preview.tsx +++ b/src/components/preview.tsx @@ -7,6 +7,8 @@ import { useParams, useSearchParams } from "next/navigation"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Icons } from "./icons"; import { Dialog, DialogContent } from "./ui/dialog"; +import { Button } from "./ui/button"; +import Link from "next/link"; export const Preview = () => { const searchParams = useSearchParams(); @@ -66,25 +68,15 @@ export const Preview = () => {

)} {tabsData.map(({ value, imgSrc, alt }) => ( - - - setOpenDialog(openDialog === value ? "" : value) - } - > - - - - -
setOpenDialog(value)} - > - -
-
+
+ +
))} ); @@ -94,29 +86,88 @@ const ImgPreview = ({ value, imgSrc, alt, + openDialog, + setOpenDialog, }: { value: string; imgSrc: string; alt: string; + openDialog: string; + setOpenDialog: React.Dispatch>; }) => { const [imgLoad, setImgLoad] = useState(true); + const { username } = useParams<{ username: string }>(); + return ( - - {imgLoad && ( - - )} + <> + setOpenDialog(openDialog === value ? "" : value)} + > + +
+ {imgLoad && ( + + )} + + {alt} setImgLoad(true)} + onLoad={() => setImgLoad(false)} + /> +
+
+
+ + + {imgLoad && ( + + )} - {alt} setImgLoad(true)} - onLoad={() => setImgLoad(false)} - /> - + {alt} setImgLoad(true)} + onLoad={() => setImgLoad(false)} + onClick={() => setOpenDialog(value)} + /> + + {username && ( +
+
+ + + +
+ + +
+ )} +
+ ); }; From d99b44975893df78d80c26bf39ad481e2a811af3 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 10:30:21 +0800 Subject: [PATCH 36/54] chore: fix ui issues --- src/app/page.tsx | 10 ++++---- src/components/navbar.tsx | 2 +- src/components/preview.tsx | 11 +++++---- src/components/ui/dialog.tsx | 46 ++++++++++++++++++------------------ 4 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index f1f7048..99370d4 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -3,17 +3,17 @@ import { Preview } from "@/components/preview"; export default function Home() { return ( -
-
+
+
-

+

GitHub Stats Generator

-

+

Generate your GitHub stats for your README with ease!

-
+
diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index 21eeac2..89613d4 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -3,7 +3,7 @@ import { ToggleTheme } from "./toggle-theme"; export default function Navbar() { return ( -
+
gh-stats.omsimos
diff --git a/src/components/preview.tsx b/src/components/preview.tsx index a3a1a1b..c700ccf 100644 --- a/src/components/preview.tsx +++ b/src/components/preview.tsx @@ -2,13 +2,14 @@ import React, { useState } from "react"; import Image from "next/image"; +import Link from "next/link"; + +import { Icons } from "./icons"; +import { Button } from "./ui/button"; +import { Dialog, DialogContent } from "./ui/dialog"; import { useGithubStats } from "@/hooks/use-github-stats"; import { useParams, useSearchParams } from "next/navigation"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { Icons } from "./icons"; -import { Dialog, DialogContent } from "./ui/dialog"; -import { Button } from "./ui/button"; -import Link from "next/link"; export const Preview = () => { const searchParams = useSearchParams(); @@ -105,7 +106,7 @@ const ImgPreview = ({ open={openDialog === value} onOpenChange={() => setOpenDialog(openDialog === value ? "" : value)} > - +
{imgLoad && ( diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx index 01ff19c..df97cd5 100644 --- a/src/components/ui/dialog.tsx +++ b/src/components/ui/dialog.tsx @@ -1,18 +1,18 @@ -"use client" +"use client"; -import * as React from "react" -import * as DialogPrimitive from "@radix-ui/react-dialog" -import { X } from "lucide-react" +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { X } from "lucide-react"; -import { cn } from "@/lib/utils" +import { cn } from "@/lib/utils"; -const Dialog = DialogPrimitive.Root +const Dialog = DialogPrimitive.Root; -const DialogTrigger = DialogPrimitive.Trigger +const DialogTrigger = DialogPrimitive.Trigger; -const DialogPortal = DialogPrimitive.Portal +const DialogPortal = DialogPrimitive.Portal; -const DialogClose = DialogPrimitive.Close +const DialogClose = DialogPrimitive.Close; const DialogOverlay = React.forwardRef< React.ElementRef, @@ -26,8 +26,8 @@ const DialogOverlay = React.forwardRef< )} {...props} /> -)) -DialogOverlay.displayName = DialogPrimitive.Overlay.displayName +)); +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; const DialogContent = React.forwardRef< React.ElementRef, @@ -38,7 +38,7 @@ const DialogContent = React.forwardRef< -)) -DialogContent.displayName = DialogPrimitive.Content.displayName +)); +DialogContent.displayName = DialogPrimitive.Content.displayName; const DialogHeader = ({ className, @@ -64,8 +64,8 @@ const DialogHeader = ({ )} {...props} /> -) -DialogHeader.displayName = "DialogHeader" +); +DialogHeader.displayName = "DialogHeader"; const DialogFooter = ({ className, @@ -78,8 +78,8 @@ const DialogFooter = ({ )} {...props} /> -) -DialogFooter.displayName = "DialogFooter" +); +DialogFooter.displayName = "DialogFooter"; const DialogTitle = React.forwardRef< React.ElementRef, @@ -93,8 +93,8 @@ const DialogTitle = React.forwardRef< )} {...props} /> -)) -DialogTitle.displayName = DialogPrimitive.Title.displayName +)); +DialogTitle.displayName = DialogPrimitive.Title.displayName; const DialogDescription = React.forwardRef< React.ElementRef, @@ -105,8 +105,8 @@ const DialogDescription = React.forwardRef< className={cn("text-sm text-muted-foreground", className)} {...props} /> -)) -DialogDescription.displayName = DialogPrimitive.Description.displayName +)); +DialogDescription.displayName = DialogPrimitive.Description.displayName; export { Dialog, @@ -119,4 +119,4 @@ export { DialogFooter, DialogTitle, DialogDescription, -} +}; From 5b83ce763440bcc8a12796e7150f158031f31deb Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 10:48:20 +0800 Subject: [PATCH 37/54] chore(ui): add tooltip component --- bun.lockb | Bin 173651 -> 175113 bytes package.json | 1 + src/components/ui/tooltip.tsx | 30 ++++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 src/components/ui/tooltip.tsx diff --git a/bun.lockb b/bun.lockb index a06aaaa95a25bc8c1290797cce64fb06fb56607a..5c84a726a0abb32a91914f198c25cf9e855b13ff 100755 GIT binary patch delta 31185 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 delta 30510 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 diff --git a/package.json b/package.json index 77e498b..bc2a665 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-tabs": "^1.0.4", + "@radix-ui/react-tooltip": "^1.0.7", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "^1.0.0", diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx new file mode 100644 index 0000000..30fc44d --- /dev/null +++ b/src/components/ui/tooltip.tsx @@ -0,0 +1,30 @@ +"use client" + +import * as React from "react" +import * as TooltipPrimitive from "@radix-ui/react-tooltip" + +import { cn } from "@/lib/utils" + +const TooltipProvider = TooltipPrimitive.Provider + +const Tooltip = TooltipPrimitive.Root + +const TooltipTrigger = TooltipPrimitive.Trigger + +const TooltipContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + +)) +TooltipContent.displayName = TooltipPrimitive.Content.displayName + +export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } From d9004170bbb00013f8632700cff632a7326bfa46 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 11:09:05 +0800 Subject: [PATCH 38/54] feat: copy to clipboard with different variants --- src/components/preview.tsx | 51 +++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/src/components/preview.tsx b/src/components/preview.tsx index c700ccf..b225792 100644 --- a/src/components/preview.tsx +++ b/src/components/preview.tsx @@ -1,6 +1,7 @@ "use client"; import React, { useState } from "react"; +import { toast } from "sonner"; import Image from "next/image"; import Link from "next/link"; @@ -100,6 +101,37 @@ const ImgPreview = ({ const { username } = useParams<{ username: string }>(); + const copyVariants = [ + { + type: "markdown", + Icon: () => , + }, + { + type: "link", + Icon: () => , + }, + { + type: "code", + Icon: () => , + }, + ]; + + const copyToClipboard = (type: string) => { + if (username) { + let copiedText = ""; + + if (type === "markdown") { + copiedText = `![GitHub Stats](${imgSrc})`; + } else if (type === "link") { + copiedText = imgSrc; + } else if (type === "code") { + copiedText = `${username}'s GitHub Stats`; + } + navigator.clipboard.writeText(copiedText); + toast.success("Copied to Clipboard!"); + } + }; + return ( <>
- - - + {copyVariants.map(({ type, Icon }) => ( + + ))}
+ + + + + + Copy as {type} + + ))}
From 9ece257d221a854e8d49ac07539ba86b560b6446 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 11:26:56 +0800 Subject: [PATCH 40/54] chore: add github repo link --- src/components/navbar.tsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index 89613d4..b550140 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -1,11 +1,24 @@ import Link from "next/link"; import { ToggleTheme } from "./toggle-theme"; +import { GithubIcon } from "lucide-react"; +import { Button } from "./ui/button"; export default function Navbar() { return (
gh-stats.omsimos - +
+ + +
); } From 87128e9dd477cab8d5f4f543d4acede94521a7a7 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 11:36:12 +0800 Subject: [PATCH 41/54] chore: minor fixes --- src/app/user/[username]/loading.tsx | 9 +++++++++ src/components/gh-stats-form.tsx | 4 +--- src/components/preview.tsx | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 src/app/user/[username]/loading.tsx diff --git a/src/app/user/[username]/loading.tsx b/src/app/user/[username]/loading.tsx new file mode 100644 index 0000000..aa8572b --- /dev/null +++ b/src/app/user/[username]/loading.tsx @@ -0,0 +1,9 @@ +import { Icons } from "@/components/icons"; + +export default function Loading() { + return ( +
+ +
+ ); +} diff --git a/src/components/gh-stats-form.tsx b/src/components/gh-stats-form.tsx index 73c5a5e..359d301 100644 --- a/src/components/gh-stats-form.tsx +++ b/src/components/gh-stats-form.tsx @@ -72,9 +72,7 @@ export function GhStatsForm() { setLoading(true); - toast("You submitted the following values:", { - description: JSON.stringify(data, null, 2), - }); + toast.success("Generated GitHub Stats!"); push( `/user/${username}?theme=${theme}&hide_border=${hideBorder}&count_private=${countPrivate}` diff --git a/src/components/preview.tsx b/src/components/preview.tsx index 1592e88..df7a989 100644 --- a/src/components/preview.tsx +++ b/src/components/preview.tsx @@ -191,7 +191,7 @@ const ImgPreview = ({ {copyVariants.map(({ type, Icon }) => ( - +
-
+ ); } diff --git a/tailwind.config.ts b/tailwind.config.ts index 84287e8..bac1482 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,13 +1,13 @@ -import type { Config } from "tailwindcss" +import type { Config } from "tailwindcss"; const config = { darkMode: ["class"], content: [ - './pages/**/*.{ts,tsx}', - './components/**/*.{ts,tsx}', - './app/**/*.{ts,tsx}', - './src/**/*.{ts,tsx}', - ], + "./pages/**/*.{ts,tsx}", + "./components/**/*.{ts,tsx}", + "./app/**/*.{ts,tsx}", + "./src/**/*.{ts,tsx}", + ], prefix: "", theme: { container: { @@ -18,6 +18,10 @@ const config = { }, }, extend: { + fontFamily: { + sans: ["var(--font-geist-sans)"], + mono: ["var(--font-geist-mono)"], + }, colors: { border: "hsl(var(--border))", input: "hsl(var(--input))", @@ -75,6 +79,6 @@ const config = { }, }, plugins: [require("tailwindcss-animate")], -} satisfies Config +} satisfies Config; -export default config \ No newline at end of file +export default config; From 879c866e6476f55f87c572f02ca0020c3ab2cef1 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 12:32:08 +0800 Subject: [PATCH 46/54] feat: update initial card preview color based on light modes theme --- src/components/preview.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/preview.tsx b/src/components/preview.tsx index 3c5070f..6a93ce4 100644 --- a/src/components/preview.tsx +++ b/src/components/preview.tsx @@ -1,6 +1,7 @@ "use client"; import React, { useState } from "react"; +import { useTheme } from "next-themes"; import { toast } from "sonner"; import Image from "next/image"; import Link from "next/link"; @@ -20,13 +21,16 @@ import { } from "@/components/ui/tooltip"; export const Preview = () => { + const { theme: currentTheme } = useTheme(); + const searchParams = useSearchParams(); const themePreview = searchParams.get("theme_preview"); + const baseTheme = currentTheme === "dark" ? "tokyonight" : "github"; const [openDialog, setOpenDialog] = useState(""); const { username } = useParams<{ username: string }>(); - const theme = searchParams.get("theme") || themePreview || "tokyonight"; + const theme = searchParams.get("theme") || themePreview || baseTheme; const countPrivate = searchParams.get("count_private") || "true"; const hideBorder = searchParams.get("hide_border") || "true"; From 0e6d575b2775fc0d9e2b1b0d790f098c2b09ec51 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 12:38:05 +0800 Subject: [PATCH 47/54] feat: page not found --- src/app/not-found.tsx | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/app/not-found.tsx diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx new file mode 100644 index 0000000..7465abb --- /dev/null +++ b/src/app/not-found.tsx @@ -0,0 +1,20 @@ +import Link from "next/link"; +import { Button } from "@/components/ui/button"; + +export default function NotFound() { + return ( +
+
+
+

+ Page Not Found! +

+

Are you lost? ๐Ÿฅน

+
+ +
+
+ ); +} From dba7a7b041956d8e154ae3ab44960cc5e2cae665 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 12:58:26 +0800 Subject: [PATCH 48/54] chore(ui): add components for org hover card --- bun.lockb | Bin 175113 -> 176581 bytes package.json | 2 ++ src/components/ui/avatar.tsx | 50 +++++++++++++++++++++++++++++++ src/components/ui/hover-card.tsx | 29 ++++++++++++++++++ 4 files changed, 81 insertions(+) create mode 100644 src/components/ui/avatar.tsx create mode 100644 src/components/ui/hover-card.tsx diff --git a/bun.lockb b/bun.lockb index 5c84a726a0abb32a91914f198c25cf9e855b13ff..5cd2b7f38dedb23f1c688d0ecae72ab4c07b8ae4 100755 GIT binary patch delta 31200 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 delta 30378 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, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +Avatar.displayName = AvatarPrimitive.Root.displayName + +const AvatarImage = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AvatarImage.displayName = AvatarPrimitive.Image.displayName + +const AvatarFallback = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName + +export { Avatar, AvatarImage, AvatarFallback } diff --git a/src/components/ui/hover-card.tsx b/src/components/ui/hover-card.tsx new file mode 100644 index 0000000..e54d91c --- /dev/null +++ b/src/components/ui/hover-card.tsx @@ -0,0 +1,29 @@ +"use client" + +import * as React from "react" +import * as HoverCardPrimitive from "@radix-ui/react-hover-card" + +import { cn } from "@/lib/utils" + +const HoverCard = HoverCardPrimitive.Root + +const HoverCardTrigger = HoverCardPrimitive.Trigger + +const HoverCardContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, align = "center", sideOffset = 4, ...props }, ref) => ( + +)) +HoverCardContent.displayName = HoverCardPrimitive.Content.displayName + +export { HoverCard, HoverCardTrigger, HoverCardContent } From 46797b1512af53ed7af79c20403d4acc08fc1266 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 12:59:03 +0800 Subject: [PATCH 49/54] feat: footer hover card --- src/components/footer.tsx | 55 +++++++++++++++++++++++++++++++++++--- src/components/preview.tsx | 8 +++--- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/components/footer.tsx b/src/components/footer.tsx index 849961a..784d714 100644 --- a/src/components/footer.tsx +++ b/src/components/footer.tsx @@ -1,9 +1,56 @@ +import { + HoverCard, + HoverCardContent, + HoverCardTrigger, +} from "@/components/ui/hover-card"; + +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { Button } from "./ui/button"; + export default function Footer() { return ( -
-

- © 2024 OMSIMOS ยท MIT License -

+
); } diff --git a/src/components/preview.tsx b/src/components/preview.tsx index 6a93ce4..f95c799 100644 --- a/src/components/preview.tsx +++ b/src/components/preview.tsx @@ -25,7 +25,7 @@ export const Preview = () => { const searchParams = useSearchParams(); const themePreview = searchParams.get("theme_preview"); - const baseTheme = currentTheme === "dark" ? "tokyonight" : "github"; + const baseTheme = currentTheme === "light" ? "github" : "tokyonight"; const [openDialog, setOpenDialog] = useState(""); @@ -118,7 +118,7 @@ const ImgPreview = ({ Icon: () => , }, { - type: "link", + type: "url", Icon: () => , }, { @@ -133,13 +133,13 @@ const ImgPreview = ({ if (type === "markdown") { copiedText = `![GitHub Stats](${imgSrc})`; - } else if (type === "link") { + } else if (type === "url") { copiedText = imgSrc; } else if (type === "code") { copiedText = `${username}'s GitHub Stats`; } navigator.clipboard.writeText(copiedText); - toast.success("Copied to Clipboard!"); + toast.success(`Copied to Clipboard as ${type}.`); } }; From dac048bf1fd329d88cfc5f535a932b77a5b27be4 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 13:10:23 +0800 Subject: [PATCH 50/54] fix: patch card layout shifting --- src/components/preview.tsx | 101 ++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 47 deletions(-) diff --git a/src/components/preview.tsx b/src/components/preview.tsx index f95c799..df8e4c2 100644 --- a/src/components/preview.tsx +++ b/src/components/preview.tsx @@ -171,56 +171,63 @@ const ImgPreview = ({ - -
- {imgLoad && ( -
- -
- )} + +
+
+ {imgLoad && ( +
+ +
+ )} - {alt} setImgLoad(true)} - onLoad={() => setImgLoad(false)} - onClick={() => setOpenDialog(value)} - /> -
+ {alt} setImgLoad(true)} + onLoad={() => setImgLoad(false)} + onClick={() => setOpenDialog(value)} + /> +
- {username && ( -
-
- {copyVariants.map(({ type, Icon }) => ( - - - - - - Copy as {type} - - - ))} -
+ {username && ( +
+
+ {copyVariants.map(({ type, Icon }) => ( + + + + + + Copy as {type} + + + ))} +
- -
- )} + +
+ )} +
); From 916826f462279b5064e3c1bb8824ec006fee1da3 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 13:15:05 +0800 Subject: [PATCH 51/54] chore: footer responsiveness --- src/app/layout.tsx | 2 -- src/app/page.tsx | 4 +++- src/app/user/[username]/page.tsx | 5 ++++- src/components/footer.tsx | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index c709a76..6a35bc2 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -6,7 +6,6 @@ import { Toaster } from "@/components/ui/sonner"; import NextTopLoader from "nextjs-toploader"; import Navbar from "@/components/navbar"; import "./globals.css"; -import Footer from "@/components/footer"; export const metadata: Metadata = { metadataBase: new URL("https://www.github-stats.omsimos.com"), @@ -41,7 +40,6 @@ export default function RootLayout({ {children} -
diff --git a/src/app/page.tsx b/src/app/page.tsx index 99370d4..8fe4b8c 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,9 +1,10 @@ +import Footer from "@/components/footer"; import { GhStatsForm } from "@/components/gh-stats-form"; import { Preview } from "@/components/preview"; export default function Home() { return ( -
+

@@ -18,6 +19,7 @@ export default function Home() {

+
); } diff --git a/src/app/user/[username]/page.tsx b/src/app/user/[username]/page.tsx index 2595238..46a6b70 100644 --- a/src/app/user/[username]/page.tsx +++ b/src/app/user/[username]/page.tsx @@ -1,8 +1,9 @@ +import Footer from "@/components/footer"; import { Preview } from "@/components/preview"; export default function Home({ params }: { params: { username: string } }) { return ( -
+

@@ -24,6 +25,8 @@ export default function Home({ params }: { params: { username: string } }) {

+ +
); } diff --git a/src/components/footer.tsx b/src/components/footer.tsx index 784d714..7c22bc2 100644 --- a/src/components/footer.tsx +++ b/src/components/footer.tsx @@ -9,7 +9,7 @@ import { Button } from "./ui/button"; export default function Footer() { return ( -
+

From 9ce0a0015f0fee2a74fab7bee892fbc83b53a4cc Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 13:29:41 +0800 Subject: [PATCH 52/54] fix: wrap useSearchParams in suspense boundary --- src/app/loading.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/app/loading.tsx diff --git a/src/app/loading.tsx b/src/app/loading.tsx new file mode 100644 index 0000000..aa8572b --- /dev/null +++ b/src/app/loading.tsx @@ -0,0 +1,9 @@ +import { Icons } from "@/components/icons"; + +export default function Loading() { + return ( +

+ +
+ ); +} From bb0050756d0cbb466d9c660bfc5fdd4d5cd09cbe Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 13:30:40 +0800 Subject: [PATCH 53/54] chore: update website url --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0e895e2..6150fd0 100644 --- a/README.md +++ b/README.md @@ -4,23 +4,27 @@
-This website makes it easier for you to generate beautiful stats for your GitHub profile README with over 40 themes to choose from! If you like the project, consider giving this repository a star! ๐Ÿ’š [Visit website →](https://gh-stats-gen.vercel.app) +This website makes it easier for you to generate beautiful stats for your GitHub profile README with over 40 themes to choose from! If you like the project, consider giving this repository a star! ๐Ÿ’š [Visit website →](https://github-stats.omsimos.com) ## APIs Used + - [anuraghazra/github-readme-stats](https://github.com/anuraghazra/github-readme-stats) - [DenverCoder1/github-readme-streak-stats](https://github.com/DenverCoder1/github-readme-streak-stats) ## How to Use + 1. Copy stat(s) from the generator. It looks someting like `![alt](image url)`. 2. Create a repository with your username as the name and initialize it with a `README.md` file. - - If you already created it, go to your profile and click the pencil icon on your `README.md`. -4. Paste the stat(s) you copied and click `Preview` to see the changes. -5. Commit the changes after you're done editing. + - If you already created it, go to your profile and click the pencil icon on your `README.md`. +3. Paste the stat(s) you copied and click `Preview` to see the changes. +4. Commit the changes after you're done editing. ## Stats Available + ## License + This repository is licensed under the [MIT](https://github.com/joshxfi/github-stats-generator/blob/main/LICENSE) license. From 402bc5188f1af273dac501c317507baec1e68da8 Mon Sep 17 00:00:00 2001 From: hyamero Date: Fri, 10 May 2024 13:32:47 +0800 Subject: [PATCH 54/54] chore(deps): install sharp for image optimization --- bun.lockb | Bin 176581 -> 186989 bytes package.json | 1 + 2 files changed, 1 insertion(+) diff --git a/bun.lockb b/bun.lockb index 5cd2b7f38dedb23f1c688d0ecae72ab4c07b8ae4..5e3e079c9fe8a987c3b86d1b4e3876018f55a7ab 100755 GIT binary patch delta 31263 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 LDDi8fsoQ@6z-d*z diff --git a/package.json b/package.json index 2201228..ff95d38 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "react": "^18", "react-dom": "^18", "react-hook-form": "^7.51.4", + "sharp": "^0.33.3", "sonner": "^1.4.41", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7",