From 47effeada9ca5eae472a7d7d6fd07f89d383f766 Mon Sep 17 00:00:00 2001 From: jonasschultheiss Date: Sun, 29 Oct 2023 02:23:09 +0200 Subject: [PATCH] feat: many things --- components.json | 16 ++++ package.json | 14 ++- src/app/_components/background-wrapper.tsx | 22 +++++ src/app/_components/form.tsx | 62 +++++++++++++ src/app/_components/ui/skeleton.tsx | 15 +++ src/app/layout.tsx | 23 +++-- src/app/page.tsx | 7 -- src/app/sign-up/layout.tsx | 16 ++++ src/app/sign-up/loading.tsx | 13 +++ src/app/sign-up/page.tsx | 51 +++++++++++ src/app/utils/util.ts | 6 ++ src/lib/utils.ts | 6 ++ src/middleware.ts | 15 ++- src/styles/globals.css | 73 +++++++++++++++ tailwind.config.ts | 80 ++++++++++++++-- tsconfig.json | 5 +- yarn.lock | 101 +++++++++++++++++++-- 17 files changed, 491 insertions(+), 34 deletions(-) create mode 100644 components.json create mode 100644 src/app/_components/background-wrapper.tsx create mode 100644 src/app/_components/form.tsx create mode 100644 src/app/_components/ui/skeleton.tsx create mode 100644 src/app/sign-up/layout.tsx create mode 100644 src/app/sign-up/loading.tsx create mode 100644 src/app/sign-up/page.tsx create mode 100644 src/app/utils/util.ts create mode 100644 src/lib/utils.ts diff --git a/components.json b/components.json new file mode 100644 index 0000000..fb7ad76 --- /dev/null +++ b/components.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/styles/globals.css", + "baseColor": "slate", + "cssVariables": true + }, + "aliases": { + "components": "src/app/_components", + "utils": "src/lib/utils" + } +} \ No newline at end of file diff --git a/package.json b/package.json index ac63ac4..bddbe52 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,8 @@ }, "dependencies": { "@clerk/nextjs": "^4.26.1", + "@clerk/themes": "^1.7.9", + "@heroicons/react": "^2.0.18", "@planetscale/database": "^1.11.0", "@t3-oss/env-nextjs": "^0.7.0", "@tanstack/react-query": "^4.32.6", @@ -19,16 +21,25 @@ "@trpc/next": "^10.37.1", "@trpc/react-query": "^10.37.1", "@trpc/server": "^10.37.1", + "class-variance-authority": "^0.7.0", + "clsx": "^2.0.0", "drizzle-orm": "^0.28.6", + "lucide-react": "^0.290.0", "next": "^13.5.4", "react": "18.2.0", "react-dom": "18.2.0", + "react-hook-form": "^7.47.0", "superjson": "^1.13.1", + "tailwind-merge": "^1.14.0", + "tailwindcss-animate": "^1.0.7", "zod": "^3.22.4" }, "devDependencies": { + "@tailwindcss/aspect-ratio": "^0.4.2", + "@tailwindcss/forms": "^0.5.6", + "@tailwindcss/typography": "^0.5.10", "@types/eslint": "^8.44.2", - "@types/node": "^18.16.0", + "@types/node": "^20.8.9", "@types/react": "^18.2.20", "@types/react-dom": "^18.2.7", "@typescript-eslint/eslint-plugin": "^6.3.0", @@ -42,6 +53,7 @@ "postcss": "^8.4.27", "prettier": "^3.0.0", "prettier-plugin-tailwindcss": "^0.5.1", + "server-only": "^0.0.1", "tailwindcss": "^3.3.3", "typescript": "^5.1.6" }, diff --git a/src/app/_components/background-wrapper.tsx b/src/app/_components/background-wrapper.tsx new file mode 100644 index 0000000..dc617b6 --- /dev/null +++ b/src/app/_components/background-wrapper.tsx @@ -0,0 +1,22 @@ +import Image from "next/image"; +import type { ReactNode } from "react"; + +export type WrapperProps = { + children: ReactNode; +}; + +export const BackgroundWrapper: React.FC = ({ + children, +}): JSX.Element => { + return ( +
+ A background pattern + {children} +
+ ); +}; diff --git a/src/app/_components/form.tsx b/src/app/_components/form.tsx new file mode 100644 index 0000000..3359f1c --- /dev/null +++ b/src/app/_components/form.tsx @@ -0,0 +1,62 @@ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +import type { DetailedHTMLProps, FormHTMLAttributes, ReactNode } from "react"; +import type { + FieldValues, + SubmitHandler, + UseFormHandleSubmit, + UseFormReset, +} from "react-hook-form"; + +export type FeaturesProps = { + children: ReactNode; +}; + +interface FormProps + extends Omit< + DetailedHTMLProps, HTMLFormElement>, + "onSubmit" + > { + submitText?: string; + resetButton: boolean; + handleSubmit: UseFormHandleSubmit; + reset: UseFormReset; + onSubmit: SubmitHandler; + loading: boolean; +} + +export function Form({ + children, + submitText = "Submit", + resetButton, + handleSubmit, + reset, + onSubmit, + loading, +}: FormProps): JSX.Element { + return ( +
+
{children}
+ +
+ {resetButton && ( + + )} + +
+
+ ); +} diff --git a/src/app/_components/ui/skeleton.tsx b/src/app/_components/ui/skeleton.tsx new file mode 100644 index 0000000..4607955 --- /dev/null +++ b/src/app/_components/ui/skeleton.tsx @@ -0,0 +1,15 @@ +import { cn } from "src/lib/utils" + +function Skeleton({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
+ ) +} + +export { Skeleton } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index a50586b..3655f9d 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,12 +1,14 @@ -import "~/styles/globals.css"; +import "@styles/globals.css"; import { ClerkProvider } from "@clerk/nextjs"; -import { Inter } from "next/font/google"; +import { Inter as FontSans } from "next/font/google"; import { headers } from "next/headers"; -import { TRPCReactProvider } from "~/trpc/react"; +import { BackgroundWrapper } from "@components/background-wrapper"; +import { cn } from "@lib/utils"; +import { TRPCReactProvider } from "@trpc/react"; -const inter = Inter({ +export const fontSans = FontSans({ subsets: ["latin"], variable: "--font-sans", }); @@ -25,8 +27,17 @@ export default function RootLayout({ return ( - - {children} + + + + {children} + + diff --git a/src/app/page.tsx b/src/app/page.tsx index 890be95..44d36bd 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -5,13 +5,6 @@ export default function Home() { return (
- A background pattern - A background pattern +

+ Fill in your bio to get started +

+

+ Data will get displayed to other users +

+ }>{children} +
+ ); +} diff --git a/src/app/sign-up/loading.tsx b/src/app/sign-up/loading.tsx new file mode 100644 index 0000000..ced9587 --- /dev/null +++ b/src/app/sign-up/loading.tsx @@ -0,0 +1,13 @@ +import { Skeleton } from "@components/ui/skeleton"; + +export default function Loading() { + return ( +
+ +
+ + +
+
+ ); +} diff --git a/src/app/sign-up/page.tsx b/src/app/sign-up/page.tsx new file mode 100644 index 0000000..9c69191 --- /dev/null +++ b/src/app/sign-up/page.tsx @@ -0,0 +1,51 @@ +import { currentUser } from "@clerk/nextjs"; +import { useState } from "react"; +import { useForm, type SubmitHandler } from "react-hook-form"; +import { Form } from "../_components/form"; + +interface IPersonalInput { + username: string; + firstName: string; + lastName: string; + yearsAtWork: number; +} + +export default async function SignUp() { + // const hello = await api.post.hello.query({ text: "from tRPC" }); + const user = await currentUser(); + const defaultValues: IPersonalInput = { + username: user?.username ?? "", + firstName: user?.firstName ?? "", + lastName: user?.lastName ?? "", + yearsAtWork: 0, + }; + + const [loading] = useState(false); + + const { + handleSubmit, + reset, + register, + formState: { errors }, + watch, + } = useForm({ + defaultValues, + }); + + const onSubmit: SubmitHandler = async (data, event) => { + event?.preventDefault(); + }; + + return ( +
+
+
+ ); +} diff --git a/src/app/utils/util.ts b/src/app/utils/util.ts new file mode 100644 index 0000000..a5ef193 --- /dev/null +++ b/src/app/utils/util.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..ec79801 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/middleware.ts b/src/middleware.ts index 8ab7835..421fb43 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,9 +1,20 @@ -import { authMiddleware } from "@clerk/nextjs"; +import { authMiddleware, redirectToSignIn } from "@clerk/nextjs"; +import { NextResponse } from "next/server"; // This example protects all routes including api/trpc routes // Please edit this to allow other routes to be public as needed. // See https://clerk.com/docs/references/nextjs/auth-middleware for more information about configuring your Middleware -export default authMiddleware({}); +export default authMiddleware({ + afterAuth(auth, req, _evt) { + if (!auth.userId && !auth.isPublicRoute) { + redirectToSignIn({ returnBackUrl: req.url }); + } + if (auth.userId && !auth.orgId && req.nextUrl.pathname !== "/sign-up") { + const signUp = new URL("/sign-up", req.url); + return NextResponse.redirect(signUp); + } + }, +}); export const config = { matcher: ["/((?!.+\\.[\\w]+$|_next).*)", "/", "/(api|trpc)(.*)"], diff --git a/src/styles/globals.css b/src/styles/globals.css index b5c61c9..6a75725 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,3 +1,76 @@ @tailwind base; @tailwind components; @tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/tailwind.config.ts b/tailwind.config.ts index f06488f..0377ea1 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,14 +1,76 @@ -import { type Config } from "tailwindcss"; -import { fontFamily } from "tailwindcss/defaultTheme"; - -export default { - content: ["./src/**/*.tsx"], +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: [ + './pages/**/*.{ts,tsx}', + './components/**/*.{ts,tsx}', + './app/**/*.{ts,tsx}', + './src/**/*.{ts,tsx}', + ], theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, extend: { - fontFamily: { - sans: ["var(--font-sans)", ...fontFamily.sans], + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: 0 }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: 0 }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", }, }, }, - plugins: [], -} satisfies Config; + plugins: [require("tailwindcss-animate")], +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 1dfa3a8..588a4b0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,7 +18,10 @@ "noUncheckedIndexedAccess": true, "baseUrl": ".", "paths": { - "~/*": ["./src/*"] + "@components/*": ["src/app/_components/*"], + "@styles/*": ["src/styles/*"], + "@trpc/*": ["src/trpc/*"], + "@lib/*": ["src/lib/*"] }, "plugins": [{ "name": "next" }] }, diff --git a/yarn.lock b/yarn.lock index 6f6986f..5d04ed4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -80,6 +80,11 @@ js-cookie "3.0.1" swr "2.2.0" +"@clerk/themes@^1.7.9": + version "1.7.9" + resolved "https://registry.yarnpkg.com/@clerk/themes/-/themes-1.7.9.tgz#b2650a6b3c36109e077ff12891425192e8f5a801" + integrity sha512-9hXxgoPuUSlZ7sH9diJEK1rTWEnk0zGKBYw4Tqaqp0RA1dtB+OHE02DK5pnTypZTnreBJYac3VmxFVTxVV35xg== + "@clerk/types@3.57.0": version "3.57.0" resolved "https://registry.yarnpkg.com/@clerk/types/-/types-3.57.0.tgz#6209b5a5ab76fd501e87fefe112525328ecfa799" @@ -250,6 +255,11 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== +"@heroicons/react@^2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.0.18.tgz#f80301907c243df03c7e9fd76c0286e95361f7c1" + integrity sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw== + "@humanwhocodes/config-array@^0.11.13": version "0.11.13" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" @@ -435,6 +445,28 @@ dependencies: "@t3-oss/env-core" "0.7.1" +"@tailwindcss/aspect-ratio@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz#9ffd52fee8e3c8b20623ff0dcb29e5c21fb0a9ba" + integrity sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ== + +"@tailwindcss/forms@^0.5.6": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.6.tgz#29c6c2b032b363e0c5110efed1499867f6d7e868" + integrity sha512-Fw+2BJ0tmAwK/w01tEFL5TiaJBX1NLT1/YbWgvm7ws3Qcn11kiXxzNTEQDMs5V3mQemhB56l3u0i9dwdzSQldA== + dependencies: + mini-svg-data-uri "^1.2.3" + +"@tailwindcss/typography@^0.5.10": + version "0.5.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.10.tgz#2abde4c6d5c797ab49cf47610830a301de4c1e0a" + integrity sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw== + dependencies: + lodash.castarray "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + postcss-selector-parser "6.0.10" + "@tanstack/query-core@4.36.1": version "4.36.1" resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.36.1.tgz#79f8c1a539d47c83104210be2388813a7af2e524" @@ -576,7 +608,7 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*": +"@types/node@*", "@types/node@^20.8.9": version "20.8.9" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.9.tgz#646390b4fab269abce59c308fc286dcd818a2b08" integrity sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg== @@ -588,13 +620,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.6.tgz#87846192fd51b693368fad3e99123169225621d4" integrity sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA== -"@types/node@^18.16.0": - version "18.18.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.7.tgz#bb3a7068dc4ba421b6968f2a259298b3a4e129e8" - integrity sha512-bw+lEsxis6eqJYW8Ql6+yTqkE6RuFtsQPSe5JxXbqYRFQEER5aJA9a5UH9igqDWm3X4iLHIKOHlnAXLM4mi7uQ== - dependencies: - undici-types "~5.26.4" - "@types/prop-types@*": version "15.7.9" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.9.tgz#b6f785caa7ea1fe4414d9df42ee0ab67f23d8a6d" @@ -1064,6 +1089,13 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +class-variance-authority@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.0.tgz#1c3134d634d80271b1837452b06d821915954522" + integrity sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A== + dependencies: + clsx "2.0.0" + cli-color@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.3.tgz#73769ba969080629670f3f2ef69a4bf4e7cc1879" @@ -1080,6 +1112,11 @@ client-only@0.0.1: resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== +clsx@2.0.0, clsx@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" + integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -2407,6 +2444,16 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.castarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" + integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -2460,6 +2507,11 @@ lru-queue@^0.1.0: dependencies: es5-ext "~0.10.2" +lucide-react@^0.290.0: + version "0.290.0" + resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.290.0.tgz#fb68c8b4db179b6c4befe913a8d96d6d79d664c9" + integrity sha512-CBDPRLOPjdo+bVlxhaa7FVWaB8OrZZQ34mwm0Fsz9ut6JltN/Td55640ur8bRWSJuz6+nX2klKrpBpV7ktwD3Q== + map-obj@^4.0.0, map-obj@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" @@ -2504,6 +2556,11 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +mini-svg-data-uri@^1.2.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz#8ab0aabcdf8c29ad5693ca595af19dd2ead09939" + integrity sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg== + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -2832,6 +2889,14 @@ postcss-nested@^6.0.1: dependencies: postcss-selector-parser "^6.0.11" +postcss-selector-parser@6.0.10: + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-selector-parser@^6.0.11: version "6.0.13" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" @@ -2913,6 +2978,11 @@ react-dom@18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" +react-hook-form@^7.47.0: + version "7.47.0" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.47.0.tgz#a42f07266bd297ddf1f914f08f4b5f9783262f31" + integrity sha512-F/TroLjTICipmHeFlMrLtNLceO2xr1jU3CyiNla5zdwsGUGu2UOxxR4UyJgLlhMwLW/Wzp4cpJ7CPfgJIeKdSg== + react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -3065,6 +3135,11 @@ seq-queue@^0.0.5: resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== +server-only@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/server-only/-/server-only-0.0.1.tgz#0f366bb6afb618c37c9255a314535dc412cd1c9e" + integrity sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA== + set-function-length@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" @@ -3273,6 +3348,16 @@ swr@2.2.0: dependencies: use-sync-external-store "^1.2.0" +tailwind-merge@^1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-1.14.0.tgz#e677f55d864edc6794562c63f5001f45093cdb8b" + integrity sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ== + +tailwindcss-animate@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" + integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== + tailwindcss@^3.3.3: version "3.3.5" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.5.tgz#22a59e2fbe0ecb6660809d9cc5f3976b077be3b8"