From fa6ad5c4fc388ea0f5d11623f4f56cdb8703cec3 Mon Sep 17 00:00:00 2001 From: FleetAdmiralJakob Date: Mon, 12 May 2025 22:56:34 +0200 Subject: [PATCH 1/6] update a few things tailwind to v4 removed forward ref via codemod --- .idea/git_toolbox_blame.xml | 6 + .idea/git_toolbox_prj.xml | 15 + .idea/misc.xml | 4 + convex/README.md | 2 +- convex/chats.ts | 16 +- convex/clearRequests.ts | 14 +- convex/crons.ts | 2 +- convex/lib/functions.ts | 8 +- convex/messages.ts | 6 +- convex/schema.ts | 6 +- eslint.config.mjs | 4 +- next.config.js | 2 +- package.json | 30 +- pnpm-lock.yaml | 617 +++++++++++------- postcss.config.cjs | 3 +- src/app/(auth)/sign-in/signin-form.tsx | 16 +- src/app/(auth)/sign-up/page.tsx | 2 +- src/app/(auth)/sign-up/signup-form.tsx | 8 +- .../(internal-sites)/chats/[chatId]/page.tsx | 86 +-- src/app/(internal-sites)/profile/page.tsx | 4 +- .../profile/settings/page.tsx | 62 +- src/app/api/sign-up/route.ts | 22 +- src/app/contributors/page.tsx | 24 +- src/app/layout.tsx | 2 +- src/components/add-user-dialog.tsx | 8 +- src/components/chat-overview.tsx | 103 ++- src/components/dev-mode-info.tsx | 2 +- src/components/forward-message-dialog.tsx | 14 +- src/components/login-dialog.tsx | 164 ++--- src/components/message.tsx | 121 ++-- src/components/navbar.tsx | 2 +- src/components/reactions.tsx | 48 +- src/components/ui/aurora-background.tsx | 27 +- src/components/ui/avatar.tsx | 69 +- src/components/ui/badge.tsx | 2 +- src/components/ui/button.tsx | 37 +- src/components/ui/checkbox.tsx | 39 +- src/components/ui/dialog.tsx | 135 ++-- src/components/ui/form.tsx | 83 ++- src/components/ui/input.tsx | 37 +- src/components/ui/label.tsx | 14 +- src/components/ui/popover.tsx | 39 +- src/components/ui/progress.tsx | 40 +- src/components/ui/resize.tsx | 8 +- src/components/ui/select.tsx | 250 +++---- src/components/ui/skeleton.tsx | 2 +- src/components/ui/tooltip.tsx | 32 +- src/middleware.ts | 2 +- src/styles/globals.css | 110 ++-- tailwind.config.ts | 58 +- 50 files changed, 1338 insertions(+), 1069 deletions(-) create mode 100644 .idea/git_toolbox_blame.xml create mode 100644 .idea/git_toolbox_prj.xml create mode 100644 .idea/misc.xml diff --git a/.idea/git_toolbox_blame.xml b/.idea/git_toolbox_blame.xml new file mode 100644 index 00000000..7dc12496 --- /dev/null +++ b/.idea/git_toolbox_blame.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml new file mode 100644 index 00000000..02b915b8 --- /dev/null +++ b/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..3c1d9a89 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/convex/README.md b/convex/README.md index 63537b3c..b67aca14 100644 --- a/convex/README.md +++ b/convex/README.md @@ -80,7 +80,7 @@ function handleButtonPress() { // OR // use the result once the mutation has completed mutation({ first: "Hello!", second: "me" }).then((result) => - console.log(result), + console.log(result) ); } ``` diff --git a/convex/chats.ts b/convex/chats.ts index c8bae8f2..2cba68fb 100644 --- a/convex/chats.ts +++ b/convex/chats.ts @@ -19,13 +19,13 @@ export const createChat = mutation({ if (!user1) { throw new ConvexError( - "User not found: " + args.friendsUsername + args.friendsUsernameId, + "User not found: " + args.friendsUsername + args.friendsUsernameId ); } if (!user2) { throw new ConvexError( - "Mismatch between Clerk and Convex. This is an error by us.", + "Mismatch between Clerk and Convex. This is an error by us." ); } else if (user1.clerkId === identity.tokenIdentifier) { throw new ConvexError("Cannot create a chat with yourself."); @@ -65,10 +65,10 @@ export const initialConvexSetup = mutation({ if (!identity.nickname) { console.error( "Username is not defined. This is likely an error by us", - identity, + identity ); throw new ConvexError( - "Username is not defined. This is likely an error by us.", + "Username is not defined. This is likely an error by us." ); } @@ -134,7 +134,7 @@ export const getChats = query({ const allMessages = [...textMessages, ...requests]; const sortedMessages = allMessages.sort( - (a, b) => b._creationTime - a._creationTime, + (a, b) => b._creationTime - a._creationTime ); const latestMessage = sortedMessages[0]; @@ -149,7 +149,7 @@ export const getChats = query({ } const isReadMessage = message.readBy.some( - (user) => user.clerkId === identity.tokenIdentifier, + (user) => user.clerkId === identity.tokenIdentifier ) && (message.type !== "message" || !message.deleted); if (isReadMessage) { @@ -201,14 +201,14 @@ export const getChatInfoFromId = query({ !usersInChat.some((user) => user.clerkId === identity.tokenIdentifier) ) { throw new ConvexError( - "UNAUTHORIZED REQUEST: User requested chat info from a chat in which he is not in.", + "UNAUTHORIZED REQUEST: User requested chat info from a chat in which he is not in." ); } return { basicChatInfo: chat, otherUser: usersInChat.filter( - (user) => user.clerkId !== identity.tokenIdentifier, + (user) => user.clerkId !== identity.tokenIdentifier ), }; }, diff --git a/convex/clearRequests.ts b/convex/clearRequests.ts index d244a1a7..db82f952 100644 --- a/convex/clearRequests.ts +++ b/convex/clearRequests.ts @@ -23,7 +23,7 @@ export const createClearRequest = mutation({ if (!convexUser) { throw new ConvexError( - "Mismatch between Clerk and Convex. This is an error by us.", + "Mismatch between Clerk and Convex. This is an error by us." ); } @@ -36,7 +36,7 @@ export const createClearRequest = mutation({ !usersInChat.some((user) => user.clerkId === identity.tokenIdentifier) ) { throw new ConvexError( - "UNAUTHORIZED REQUEST: User tried to create a request in a chat in which he is not in.", + "UNAUTHORIZED REQUEST: User tried to create a request in a chat in which he is not in." ); } @@ -91,13 +91,13 @@ export const rejectClearRequest = mutation({ !usersInChat.some((user) => user.clerkId === identity.tokenIdentifier) ) { throw new ConvexError( - "UNAUTHORIZED REQUEST: User tried to reject a clear request in a chat in which he is not in.", + "UNAUTHORIZED REQUEST: User tried to reject a clear request in a chat in which he is not in." ); } if ((await request.edge("user")).clerkId === identity.tokenIdentifier) { throw new ConvexError( - "UNAUTHORIZED REQUEST: User tried to reject his own clear request.", + "UNAUTHORIZED REQUEST: User tried to reject his own clear request." ); } @@ -136,13 +136,13 @@ export const acceptClearRequest = mutation({ !usersInChat.some((user) => user.clerkId === identity.tokenIdentifier) ) { throw new ConvexError( - "UNAUTHORIZED REQUEST: User tried to accept a clear request in a chat in which he is not in.", + "UNAUTHORIZED REQUEST: User tried to accept a clear request in a chat in which he is not in." ); } if ((await request.edge("user")).clerkId === identity.tokenIdentifier) { throw new ConvexError( - "UNAUTHORIZED REQUEST: User tried to accept his own clear request.", + "UNAUTHORIZED REQUEST: User tried to accept his own clear request." ); } @@ -164,7 +164,7 @@ export const expirePendingRequests = internalMutation({ handler: async (ctx) => { for (const q1 of await ctx .table("clearRequests", "by_creation_time", (q) => - q.lte("_creationTime", Date.now() - 24 * 60 * 60 * 1000), + q.lte("_creationTime", Date.now() - 24 * 60 * 60 * 1000) ) .filter((q) => q.eq(q.field("status"), "pending"))) { if (q1) { diff --git a/convex/crons.ts b/convex/crons.ts index 7f9276c1..a29cb4b6 100644 --- a/convex/crons.ts +++ b/convex/crons.ts @@ -6,7 +6,7 @@ const crons = cronJobs(); crons.interval( "expire open requests", { minutes: 1 }, - internal.clearRequests.expirePendingRequests, + internal.clearRequests.expirePendingRequests ); export default crons; diff --git a/convex/lib/functions.ts b/convex/lib/functions.ts index 0883c84c..babe49d5 100644 --- a/convex/lib/functions.ts +++ b/convex/lib/functions.ts @@ -19,7 +19,7 @@ export const query = customQuery( table: entsTableFactory(ctx, entDefinitions), db: undefined, }; - }), + }) ); export const internalQuery = customQuery( @@ -29,7 +29,7 @@ export const internalQuery = customQuery( table: entsTableFactory(ctx, entDefinitions), db: undefined, }; - }), + }) ); export const mutation = customMutation( @@ -39,7 +39,7 @@ export const mutation = customMutation( table: entsTableFactory(ctx, entDefinitions), db: undefined, }; - }), + }) ); export const internalMutation = customMutation( @@ -49,5 +49,5 @@ export const internalMutation = customMutation( table: entsTableFactory(ctx, entDefinitions), db: undefined, }; - }), + }) ); diff --git a/convex/messages.ts b/convex/messages.ts index ab4f19b4..1c969dff 100644 --- a/convex/messages.ts +++ b/convex/messages.ts @@ -407,14 +407,14 @@ export const reactToMessage = mutation({ throw new ConvexError("messageId was invalid"); } - // Check if user already reacted to this message + // Check if the user already reacted to this message const existingReaction = await ctx .table("reactions", "messageId", (q) => q.eq("messageId", messageId)) .filter((q) => q.eq(q.field("userId"), convexUser._id)) .first(); if (existingReaction && existingReaction.emoji === trimmedReaction) { - // Remove existing reaction + // Remove the existing reaction await existingReaction.delete(); return null; } else if (existingReaction) { @@ -425,7 +425,7 @@ export const reactToMessage = mutation({ return existingReaction; } - // Create new reaction if none exists + // Create a new reaction if none exists const reaction = await ctx.table("reactions").insert({ emoji: trimmedReaction, userId: convexUser._id, diff --git a/convex/schema.ts b/convex/schema.ts index 37197e5c..964a5215 100644 --- a/convex/schema.ts +++ b/convex/schema.ts @@ -32,11 +32,7 @@ const schema = defineEntSchema({ clearRequests: defineEnt({}) .field( "status", - v.union( - v.literal("pending"), - v.literal("rejected"), - v.literal("expired"), - ), + v.union(v.literal("pending"), v.literal("rejected"), v.literal("expired")) ) .edges("readBy", { to: "users", diff --git a/eslint.config.mjs b/eslint.config.mjs index 9133b9ee..ed94917c 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -23,8 +23,8 @@ export default [ "next/core-web-vitals", "plugin:@typescript-eslint/recommended-type-checked", "plugin:@typescript-eslint/stylistic-type-checked", - "plugin:react-hooks/recommended", - ), + "plugin:react-hooks/recommended" + ) ), { languageOptions: { diff --git a/next.config.js b/next.config.js index 9589f907..dcc2f6c5 100644 --- a/next.config.js +++ b/next.config.js @@ -66,7 +66,7 @@ const baseConfig = withAxiom( // eslint-disable-next-line @typescript-eslint/no-unsafe-return return config; }, - }), + }) ); const config = withSentryConfig(baseConfig, { diff --git a/package.json b/package.json index c0a1b9b7..07f91c95 100644 --- a/package.json +++ b/package.json @@ -23,21 +23,22 @@ "@ianvs/prettier-plugin-sort-imports": "^4.4.0", "@icons-pack/react-simple-icons": "^12.0.0", "@legendapp/state": "^3.0.0-beta.16", - "@radix-ui/react-alert-dialog": "^1.1.11", - "@radix-ui/react-avatar": "^1.1.1", - "@radix-ui/react-checkbox": "^1.1.4", - "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-alert-dialog": "^1.1.13", + "@radix-ui/react-avatar": "^1.1.9", + "@radix-ui/react-checkbox": "^1.3.1", + "@radix-ui/react-dialog": "^1.1.13", "@radix-ui/react-icons": "^1.3.2", - "@radix-ui/react-label": "^2.1.0", - "@radix-ui/react-popover": "^1.1.2", - "@radix-ui/react-progress": "^1.1.0", - "@radix-ui/react-select": "^2.1.2", - "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-tooltip": "^1.1.4", + "@radix-ui/react-label": "^2.1.6", + "@radix-ui/react-popover": "^1.1.13", + "@radix-ui/react-progress": "^1.1.6", + "@radix-ui/react-select": "^2.2.4", + "@radix-ui/react-slot": "^1.2.2", + "@radix-ui/react-tooltip": "^1.2.6", "@reactuses/core": "^6.0.0", "@sentry/nextjs": "^9.0.0", "@serwist/next": "9.0.14", "@t3-oss/env-nextjs": "^0.13.0", + "@tailwindcss/postcss": "^4.1.6", "babel-plugin-react-compiler": "19.0.0-beta-e993439-20250328", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", @@ -65,8 +66,8 @@ "react-responsive": "^10.0.0", "react-scan": "^0.3.0", "sonner": "^2.0.0", - "tailwind-merge": "^3.0.0", - "tailwindcss-animate": "^1.0.7", + "tailwind-merge": "^3.3.0", + "tw-animate-css": "^1.2.9", "zod": "^3.23.8" }, "devDependencies": { @@ -86,9 +87,9 @@ "eslint-plugin-react-hooks": "^5.0.0", "postcss": "^8.4.49", "prettier": "^3.3.3", - "prettier-plugin-tailwindcss": "^0.6.8", + "prettier-plugin-tailwindcss": "^0.6.11", "serwist": "^9.0.10", - "tailwindcss": "^3.4.15", + "tailwindcss": "^4.1.6", "typescript": "^5.6.3" }, "ct3aMetadata": { @@ -103,6 +104,7 @@ "onlyBuiltDependencies": [ "@clerk/shared", "@sentry/cli", + "@tailwindcss/oxide", "core-js", "esbuild", "sharp", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0699df98..048604c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,37 +33,37 @@ importers: specifier: ^3.0.0-beta.16 version: 3.0.0-beta.30(react@19.1.0) '@radix-ui/react-alert-dialog': - specifier: ^1.1.11 + specifier: ^1.1.13 version: 1.1.13(@types/react-dom@19.1.4(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-avatar': - specifier: ^1.1.1 + specifier: ^1.1.9 version: 1.1.9(@types/react-dom@19.1.4(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-checkbox': - specifier: ^1.1.4 + specifier: ^1.3.1 version: 1.3.1(@types/react-dom@19.1.4(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-dialog': - specifier: ^1.1.2 + specifier: ^1.1.13 version: 1.1.13(@types/react-dom@19.1.4(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.1.0) '@radix-ui/react-label': - specifier: ^2.1.0 + specifier: ^2.1.6 version: 2.1.6(@types/react-dom@19.1.4(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-popover': - specifier: ^1.1.2 + specifier: ^1.1.13 version: 1.1.13(@types/react-dom@19.1.4(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-progress': - specifier: ^1.1.0 + specifier: ^1.1.6 version: 1.1.6(@types/react-dom@19.1.4(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-select': - specifier: ^2.1.2 + specifier: ^2.2.4 version: 2.2.4(@types/react-dom@19.1.4(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': - specifier: ^1.1.0 + specifier: ^1.2.2 version: 1.2.2(@types/react@19.1.3)(react@19.1.0) '@radix-ui/react-tooltip': - specifier: ^1.1.4 + specifier: ^1.2.6 version: 1.2.6(@types/react-dom@19.1.4(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@reactuses/core': specifier: ^6.0.0 @@ -77,6 +77,9 @@ importers: '@t3-oss/env-nextjs': specifier: ^0.13.0 version: 0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.4) + '@tailwindcss/postcss': + specifier: ^4.1.6 + version: 4.1.6 babel-plugin-react-compiler: specifier: 19.0.0-beta-e993439-20250328 version: 19.0.0-beta-e993439-20250328 @@ -159,11 +162,11 @@ importers: specifier: ^2.0.0 version: 2.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) tailwind-merge: - specifier: ^3.0.0 + specifier: ^3.3.0 version: 3.3.0 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.17) + tw-animate-css: + specifier: ^1.2.9 + version: 1.2.9 zod: specifier: ^3.23.8 version: 3.24.4 @@ -217,14 +220,14 @@ importers: specifier: ^3.3.3 version: 3.5.3 prettier-plugin-tailwindcss: - specifier: ^0.6.8 + specifier: ^0.6.11 version: 0.6.11(@ianvs/prettier-plugin-sort-imports@4.4.1(prettier@3.5.3))(prettier@3.5.3) serwist: specifier: ^9.0.10 version: 9.0.14(typescript@5.8.3) tailwindcss: - specifier: ^3.4.15 - version: 3.4.17 + specifier: ^4.1.6 + version: 4.1.6 typescript: specifier: ^5.6.3 version: 5.8.3 @@ -1052,6 +1055,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -2091,6 +2098,94 @@ packages: zod: optional: true + '@tailwindcss/node@4.1.6': + resolution: {integrity: sha512-ed6zQbgmKsjsVvodAS1q1Ld2BolEuxJOSyyNc+vhkjdmfNUDCmQnlXBfQkHrlzNmslxHsQU/bFmzcEbv4xXsLg==} + + '@tailwindcss/oxide-android-arm64@4.1.6': + resolution: {integrity: sha512-VHwwPiwXtdIvOvqT/0/FLH/pizTVu78FOnI9jQo64kSAikFSZT7K4pjyzoDpSMaveJTGyAKvDjuhxJxKfmvjiQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.6': + resolution: {integrity: sha512-weINOCcqv1HVBIGptNrk7c6lWgSFFiQMcCpKM4tnVi5x8OY2v1FrV76jwLukfT6pL1hyajc06tyVmZFYXoxvhQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.6': + resolution: {integrity: sha512-3FzekhHG0ww1zQjQ1lPoq0wPrAIVXAbUkWdWM8u5BnYFZgb9ja5ejBqyTgjpo5mfy0hFOoMnMuVDI+7CXhXZaQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.6': + resolution: {integrity: sha512-4m5F5lpkBZhVQJq53oe5XgJ+aFYWdrgkMwViHjRsES3KEu2m1udR21B1I77RUqie0ZYNscFzY1v9aDssMBZ/1w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.6': + resolution: {integrity: sha512-qU0rHnA9P/ZoaDKouU1oGPxPWzDKtIfX7eOGi5jOWJKdxieUJdVV+CxWZOpDWlYTd4N3sFQvcnVLJWJ1cLP5TA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.6': + resolution: {integrity: sha512-jXy3TSTrbfgyd3UxPQeXC3wm8DAgmigzar99Km9Sf6L2OFfn/k+u3VqmpgHQw5QNfCpPe43em6Q7V76Wx7ogIQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.6': + resolution: {integrity: sha512-8kjivE5xW0qAQ9HX9reVFmZj3t+VmljDLVRJpVBEoTR+3bKMnvC7iLcoSGNIUJGOZy1mLVq7x/gerVg0T+IsYw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.6': + resolution: {integrity: sha512-A4spQhwnWVpjWDLXnOW9PSinO2PTKJQNRmL/aIl2U/O+RARls8doDfs6R41+DAXK0ccacvRyDpR46aVQJJCoCg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.6': + resolution: {integrity: sha512-YRee+6ZqdzgiQAHVSLfl3RYmqeeaWVCk796MhXhLQu2kJu2COHBkqlqsqKYx3p8Hmk5pGCQd2jTAoMWWFeyG2A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.6': + resolution: {integrity: sha512-qAp4ooTYrBQ5pk5jgg54/U1rCJ/9FLYOkkQ/nTE+bVMseMfB6O7J8zb19YTpWuu4UdfRf5zzOrNKfl6T64MNrQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.6': + resolution: {integrity: sha512-nqpDWk0Xr8ELO/nfRUDjk1pc9wDJ3ObeDdNMHLaymc4PJBWj11gdPCWZFKSK2AVKjJQC7J2EfmSmf47GN7OuLg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.6': + resolution: {integrity: sha512-5k9xF33xkfKpo9wCvYcegQ21VwIBU1/qEbYlVukfEIyQbEA47uK8AAwS7NVjNE3vHzcmxMYwd0l6L4pPjjm1rQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.6': + resolution: {integrity: sha512-0bpEBQiGx+227fW4G0fLQ8vuvyy5rsB1YIYNapTq3aRsJ9taF3f5cCaovDjN5pUGKKzcpMrZst/mhNaKAPOHOA==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.6': + resolution: {integrity: sha512-ELq+gDMBuRXPJlpE3PEen+1MhnHAQQrh2zF0dI1NXOlEWfr2qWf2CQdr5jl9yANv8RErQaQ2l6nIFO9OSCVq/g==} + '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} @@ -2407,16 +2502,10 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -2526,6 +2615,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.5: + resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2553,10 +2647,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - caniuse-lite@1.0.30001707: resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} @@ -2579,6 +2669,10 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -2613,10 +2707,6 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} @@ -2704,11 +2794,6 @@ packages: css-mediaquery@0.1.2: resolution: {integrity: sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==} - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -2773,12 +2858,6 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -2806,6 +2885,9 @@ packages: electron-to-chromium@1.5.127: resolution: {integrity: sha512-Ke5OggqOtEqzCzcUyV+9jgO6L6sv1gQVKGtSExXHjD/FK0p4qzPZbrDsrCdy0DptcQprD0V80RCBYSWLMhTTgQ==} + electron-to-chromium@1.5.152: + resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==} + emoji-mart@5.6.0: resolution: {integrity: sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow==} @@ -3443,10 +3525,6 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true @@ -3521,12 +3599,69 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} + lightningcss-darwin-arm64@1.29.2: + resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.29.2: + resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.29.2: + resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.29.2: + resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.29.2: + resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.29.2: + resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.29.2: + resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.29.2: + resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.29.2: + resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.2: + resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lightningcss@1.29.2: + resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} + engines: {node: '>= 12.0.0'} loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} @@ -3650,9 +3785,18 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} + mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} @@ -3669,9 +3813,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3780,10 +3921,6 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -3892,14 +4029,6 @@ packages: engines: {node: '>=0.10'} hasBin: true - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - pkce-challenge@5.0.0: resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} engines: {node: '>=16.20.0'} @@ -3918,40 +4047,6 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -4196,9 +4291,6 @@ packages: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - read-package-json-fast@4.0.0: resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4496,11 +4588,6 @@ packages: babel-plugin-macros: optional: true - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -4524,20 +4611,17 @@ packages: tailwind-merge@3.3.0: resolution: {integrity: sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==} - tailwindcss-animate@1.0.7: - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - - tailwindcss@3.4.17: - resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} - engines: {node: '>=14.0.0'} - hasBin: true + tailwindcss@4.1.6: + resolution: {integrity: sha512-j0cGLTreM6u4OWzBeLBpycK0WIh8w7kSwcUsQZoGLHZ7xDTdM69lN64AgoIEEwFi0tnhs4wSykUa5YWxAzgFYg==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + terser-webpack-plugin@5.3.14: resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} @@ -4559,13 +4643,6 @@ packages: engines: {node: '>=10'} hasBin: true - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - tinyglobby@0.2.13: resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} @@ -4590,9 +4667,6 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -4604,6 +4678,9 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tw-animate-css@1.2.9: + resolution: {integrity: sha512-9O4k1at9pMQff9EAcCEuy1UNO43JmaPQvq+0lwza9Y0BQ6LB38NiMj+qHqjoQf40355MX+gs6wtlR6H9WsSXFg==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -4709,9 +4786,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -4810,10 +4884,9 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} - hasBin: true + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -5457,6 +5530,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -6541,6 +6618,78 @@ snapshots: transitivePeerDependencies: - arktype + '@tailwindcss/node@4.1.6': + dependencies: + '@ampproject/remapping': 2.3.0 + enhanced-resolve: 5.18.1 + jiti: 2.4.2 + lightningcss: 1.29.2 + magic-string: 0.30.17 + source-map-js: 1.2.1 + tailwindcss: 4.1.6 + + '@tailwindcss/oxide-android-arm64@4.1.6': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.6': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.6': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.6': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.6': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.6': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.6': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.6': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.6': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.6': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.6': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.6': + optional: true + + '@tailwindcss/oxide@4.1.6': + dependencies: + detect-libc: 2.0.4 + tar: 7.4.3 + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.6 + '@tailwindcss/oxide-darwin-arm64': 4.1.6 + '@tailwindcss/oxide-darwin-x64': 4.1.6 + '@tailwindcss/oxide-freebsd-x64': 4.1.6 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.6 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.6 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.6 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.6 + '@tailwindcss/oxide-linux-x64-musl': 4.1.6 + '@tailwindcss/oxide-wasm32-wasi': 4.1.6 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.6 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.6 + + '@tailwindcss/postcss@4.1.6': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.6 + '@tailwindcss/oxide': 4.1.6 + postcss: 8.5.3 + tailwindcss: 4.1.6 + '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.26.2 @@ -6891,15 +7040,11 @@ snapshots: ansi-styles@6.2.1: {} - any-promise@1.3.0: {} - anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - arg@5.0.2: {} - argparse@2.0.1: {} aria-hidden@1.2.4: @@ -7053,6 +7198,13 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) + browserslist@4.24.5: + dependencies: + caniuse-lite: 1.0.30001717 + electron-to-chromium: 1.5.152 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.5) + buffer-from@1.1.2: {} busboy@1.6.0: @@ -7080,8 +7232,6 @@ snapshots: callsites@3.1.0: {} - camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001707: {} caniuse-lite@1.0.30001717: {} @@ -7110,6 +7260,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chownr@3.0.0: {} + chrome-trace-event@1.0.4: {} cjs-module-lexer@1.4.3: {} @@ -7142,8 +7294,6 @@ snapshots: commander@2.20.3: {} - commander@4.1.1: {} - common-tags@1.8.2: {} commondir@1.0.1: {} @@ -7200,8 +7350,6 @@ snapshots: css-mediaquery@0.1.2: {} - cssesc@3.0.0: {} - csstype@3.1.3: {} damerau-levenshtein@1.0.8: {} @@ -7252,15 +7400,10 @@ snapshots: dequal@2.0.3: {} - detect-libc@2.0.4: - optional: true + detect-libc@2.0.4: {} detect-node-es@1.1.0: {} - didyoumean@1.2.2: {} - - dlv@1.1.3: {} - doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -7286,6 +7429,8 @@ snapshots: electron-to-chromium@1.5.127: {} + electron-to-chromium@1.5.152: {} + emoji-mart@5.6.0: {} emoji-regex@10.4.0: {} @@ -8166,8 +8311,6 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@1.21.7: {} - jiti@2.4.2: {} js-cookie@3.0.5: {} @@ -8224,9 +8367,50 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@3.1.3: {} + lightningcss-darwin-arm64@1.29.2: + optional: true - lines-and-columns@1.2.4: {} + lightningcss-darwin-x64@1.29.2: + optional: true + + lightningcss-freebsd-x64@1.29.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.29.2: + optional: true + + lightningcss-linux-arm64-gnu@1.29.2: + optional: true + + lightningcss-linux-arm64-musl@1.29.2: + optional: true + + lightningcss-linux-x64-gnu@1.29.2: + optional: true + + lightningcss-linux-x64-musl@1.29.2: + optional: true + + lightningcss-win32-arm64-msvc@1.29.2: + optional: true + + lightningcss-win32-x64-msvc@1.29.2: + optional: true + + lightningcss@1.29.2: + dependencies: + detect-libc: 2.0.4 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.2 + lightningcss-darwin-x64: 1.29.2 + lightningcss-freebsd-x64: 1.29.2 + lightningcss-linux-arm-gnueabihf: 1.29.2 + lightningcss-linux-arm64-gnu: 1.29.2 + lightningcss-linux-arm64-musl: 1.29.2 + lightningcss-linux-x64-gnu: 1.29.2 + lightningcss-linux-x64-musl: 1.29.2 + lightningcss-win32-arm64-msvc: 1.29.2 + lightningcss-win32-x64-msvc: 1.29.2 loader-runner@4.3.0: {} @@ -8325,8 +8509,14 @@ snapshots: minipass@7.1.2: {} + minizlib@3.0.2: + dependencies: + minipass: 7.1.2 + mitt@3.0.1: {} + mkdirp@3.0.1: {} + module-details-from-path@1.0.4: {} motion-dom@12.11.0: @@ -8339,12 +8529,6 @@ snapshots: ms@2.1.3: {} - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - nanoid@3.3.11: {} napi-postinstall@0.2.3: {} @@ -8431,8 +8615,6 @@ snapshots: object-assign@4.1.1: {} - object-hash@3.0.0: {} - object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -8545,10 +8727,6 @@ snapshots: pidtree@0.6.0: {} - pify@2.3.0: {} - - pirates@4.0.7: {} - pkce-challenge@5.0.0: {} playwright-core@1.51.1: {} @@ -8561,35 +8739,6 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-import@15.1.0(postcss@8.5.3): - dependencies: - postcss: 8.5.3 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.10 - - postcss-js@4.0.1(postcss@8.5.3): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.5.3 - - postcss-load-config@4.0.2(postcss@8.5.3): - dependencies: - lilconfig: 3.1.3 - yaml: 2.7.0 - optionalDependencies: - postcss: 8.5.3 - - postcss-nested@6.2.0(postcss@8.5.3): - dependencies: - postcss: 8.5.3 - postcss-selector-parser: 6.1.2 - - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - postcss-value-parser@4.2.0: {} postcss@8.4.31: @@ -8769,10 +8918,6 @@ snapshots: react@19.1.0: {} - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - read-package-json-fast@4.0.0: dependencies: json-parse-even-better-errors: 4.0.0 @@ -9177,16 +9322,6 @@ snapshots: optionalDependencies: '@babel/core': 7.26.10 - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - ts-interface-checker: 0.1.13 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -9207,39 +9342,19 @@ snapshots: tailwind-merge@3.3.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.17): - dependencies: - tailwindcss: 3.4.17 - - tailwindcss@3.4.17: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.3 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 3.1.3 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.5.3 - postcss-import: 15.1.0(postcss@8.5.3) - postcss-js: 4.0.1(postcss@8.5.3) - postcss-load-config: 4.0.2(postcss@8.5.3) - postcss-nested: 6.2.0(postcss@8.5.3) - postcss-selector-parser: 6.1.2 - resolve: 1.22.10 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node + tailwindcss@4.1.6: {} tapable@2.2.1: {} + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.2 + mkdirp: 3.0.1 + yallist: 5.0.0 + terser-webpack-plugin@5.3.14(webpack@5.98.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -9256,14 +9371,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - tinyglobby@0.2.13: dependencies: fdir: 6.4.4(picomatch@4.0.2) @@ -9285,8 +9392,6 @@ snapshots: dependencies: typescript: 5.8.3 - ts-interface-checker@0.1.13: {} - tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -9303,6 +9408,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + tw-animate-css@1.2.9: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -9406,6 +9513,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.1.3(browserslist@4.24.5): + dependencies: + browserslist: 4.24.5 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -9438,8 +9551,6 @@ snapshots: dependencies: react: 19.1.0 - util-deprecate@1.0.2: {} - uuid@9.0.1: {} vary@1.1.2: {} @@ -9470,7 +9581,7 @@ snapshots: '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.14.1 - browserslist: 4.24.4 + browserslist: 4.24.5 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.1 es-module-lexer: 1.7.0 @@ -9574,7 +9685,7 @@ snapshots: yallist@3.1.1: {} - yaml@2.7.0: {} + yallist@5.0.0: {} yocto-queue@0.1.0: {} diff --git a/postcss.config.cjs b/postcss.config.cjs index e305dd92..19afca40 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -1,7 +1,6 @@ const config = { plugins: { - tailwindcss: {}, - autoprefixer: {}, + "@tailwindcss/postcss": {}, }, }; diff --git a/src/app/(auth)/sign-in/signin-form.tsx b/src/app/(auth)/sign-in/signin-form.tsx index 82439c25..3b295f69 100644 --- a/src/app/(auth)/sign-in/signin-form.tsx +++ b/src/app/(auth)/sign-in/signin-form.tsx @@ -103,7 +103,7 @@ export function SignInForm() { }, { keepErrors: false, - }, + } ); }, [isEmailLogin, form]); @@ -152,13 +152,15 @@ export function SignInForm() { home page . - , + ); } else if ( err.errors.some((err) => err.code === "form_identifier_not_found") ) { setWholeFormError( - `The ${isEmailLogin ? "email" : "username + id"} you entered does not exist. Please try again.`, + `The ${ + isEmailLogin ? "email" : "username + id" + } you entered does not exist. Please try again.` ); } else if ( err.errors.some((err) => err.code === "form_password_incorrect") @@ -187,7 +189,9 @@ export function SignInForm() { @@ -787,13 +787,13 @@ export default function Page() { setReplyToMessageId={setReplyToMessageId} scrollToMessage={scrollToMessage} /> -
+
( { @@ -832,15 +832,15 @@ export default function Page() {
{ fullyResetInput(); @@ -851,19 +851,19 @@ export default function Page() { onClick={(e) => { setAnimationInput(!animationInput); void textMessageForm.handleSubmit( - onTextMessageFormSubmit, + onTextMessageFormSubmit )(e); }} className={cn( - "h-11 w-11 cursor-pointer rounded-sm border-2 border-secondary-foreground bg-primary p-2 lg:h-14 lg:w-14 lg:p-3", - { hidden: inputValue === "" }, + "border-secondary-foreground bg-primary h-11 w-11 cursor-pointer rounded-xs border-2 p-2 lg:h-14 lg:w-14 lg:p-3", + { hidden: inputValue === "" } )} /> diff --git a/src/app/(internal-sites)/profile/page.tsx b/src/app/(internal-sites)/profile/page.tsx index dfef8a11..cafe095f 100644 --- a/src/app/(internal-sites)/profile/page.tsx +++ b/src/app/(internal-sites)/profile/page.tsx @@ -20,7 +20,7 @@ interface settingsCard { export default function Profile() { const clerkUser = useUser(); - const username = clerkUser.user ? (clerkUser.user.username ?? "") : ""; + const username = clerkUser.user ? clerkUser.user.username ?? "" : ""; const settings: settingsCard[] = [ { title: username }, @@ -69,7 +69,7 @@ export default function Profile() { { "rounded-t-lg border-t-0": item.title == "Settings", "rounded-b-lg": item.title == "Chats", - }, + } )} >
diff --git a/src/app/(internal-sites)/profile/settings/page.tsx b/src/app/(internal-sites)/profile/settings/page.tsx index 151694e7..fc526634 100644 --- a/src/app/(internal-sites)/profile/settings/page.tsx +++ b/src/app/(internal-sites)/profile/settings/page.tsx @@ -86,7 +86,7 @@ const SettingsPage = () => { useState(""); const [newPasswordErrorMessage, setNewPasswordErrorMessage] = useState(""); const [emailValue, setEmailValue] = useState( - clerkUser.user?.primaryEmailAddress?.emailAddress ?? "", + clerkUser.user?.primaryEmailAddress?.emailAddress ?? "" ); const [emailError, setEmailError] = useState(false); const [firstNameError, setFirstNameError] = useState(""); @@ -115,12 +115,12 @@ const SettingsPage = () => { } const parsedResponseBody = signUpResponseSchema.safeParse( - JSON.parse(responseBody), + JSON.parse(responseBody) ); if (parsedResponseBody.data?.message) { const parsedJson = parsedJsonSchema.safeParse( - JSON.parse(parsedResponseBody.data.message), + JSON.parse(parsedResponseBody.data.message) ); if (parsedJson.success) { @@ -171,7 +171,7 @@ const SettingsPage = () => { setEmailError(true); if (error instanceof ZodError) { const errorFound = error.errors.find( - (error) => error.path[0] == "email", + (error) => error.path[0] == "email" ); if (errorFound) { setEmailError(true); @@ -181,7 +181,7 @@ const SettingsPage = () => { } } }, - [], + [] ); const handleFirstNameChange = useCallback( @@ -194,7 +194,7 @@ const SettingsPage = () => { } catch (error) { if (error instanceof ZodError) { const errorFound = error.errors.find( - (error) => error.path[0] == "firstName", + (error) => error.path[0] == "firstName" ); if (errorFound) { setFirstNameError(errorFound.message); @@ -204,7 +204,7 @@ const SettingsPage = () => { } } }, - [], + [] ); const handleLastNameChange = useCallback( @@ -217,7 +217,7 @@ const SettingsPage = () => { } catch (error) { if (error instanceof ZodError) { const errorFound = error.errors.find( - (error) => error.path[0] == "lastName", + (error) => error.path[0] == "lastName" ); if (errorFound) { setLastNameError(errorFound.message); @@ -227,7 +227,7 @@ const SettingsPage = () => { } } }, - [], + [] ); const handleCurrentPassword = (e: React.ChangeEvent) => { @@ -270,7 +270,7 @@ const SettingsPage = () => { async function checkPasswordAgainstClerkRules( currentPassword: string, - newPassword: string, + newPassword: string ) { try { try { @@ -300,12 +300,12 @@ const SettingsPage = () => { if (isClerkAPIResponseError(e)) { if (e.errors.some((error) => error.code === "form_password_pwned")) { setNewPasswordErrorMessage( - "Password has been found in an online data breach.", + "Password has been found in an online data breach." ); } if ( e.errors.some( - (error) => error.code === "form_password_validation_failed", + (error) => error.code === "form_password_validation_failed" ) ) { setCurrentPasswordErrorMessage("Invalid Current Password"); @@ -358,10 +358,10 @@ const SettingsPage = () => { return ( <> -
+

Settings

{ router.back(); }} @@ -375,22 +375,22 @@ const SettingsPage = () => { placeholder="First name" value={firstName} onChange={handleFirstNameChange} - className="border-2 border-secondary" + className="border-secondary border-2" /> {firstName != "" ? ( firstNameError == "" ? ( ) : ( - + ) ) : ( "" )}
-
+
{firstNameError != "" && firstName != "" ? (

{firstNameError}

) : ( @@ -404,22 +404,22 @@ const SettingsPage = () => { placeholder="Last name" value={lastName} onChange={handleLastNameChange} - className="border-2 border-secondary" + className="border-secondary border-2" /> {lastName != "" ? ( lastNameError == "" ? ( ) : ( - + ) ) : ( "" )}
-
+
{lastNameError != "" && lastName != "" ? (

{lastNameError}

) : ( @@ -433,22 +433,22 @@ const SettingsPage = () => { value={emailValue} onChange={handleEmailChange} placeholder="Email" - className="w-full border-2 border-secondary" + className="border-secondary w-full border-2" /> {emailValue != "" ? ( !emailError ? ( ) : ( - + ) ) : ( "" )}
-

+

If you forgott your password we can send you a Email

@@ -457,7 +457,7 @@ const SettingsPage = () => { onOpenChange={() => setDialogOpen((prevState) => !prevState)} > -
+

Update Password

@@ -482,7 +482,7 @@ const SettingsPage = () => { /> @@ -499,7 +499,7 @@ const SettingsPage = () => { /> @@ -511,7 +511,7 @@ const SettingsPage = () => { onClick={() => { void checkPasswordAgainstClerkRules( currentPassword, - newPassword, + newPassword ); }} > @@ -529,7 +529,7 @@ const SettingsPage = () => { .map((email) => email.emailAddress) .toString()) || "" ? ( -
+

Save Changes

diff --git a/src/app/api/sign-up/route.ts b/src/app/api/sign-up/route.ts index 540bb2cd..cc15a292 100644 --- a/src/app/api/sign-up/route.ts +++ b/src/app/api/sign-up/route.ts @@ -12,17 +12,17 @@ import { after } from "next/server"; export async function OPTIONS(request: Request) { const unparsedSignUpHeaders = (await request.json()) as FormSchemaUserUpdate; const parsedSignUpHeaders = formSchemaUserUpdate.safeParse( - unparsedSignUpHeaders, + unparsedSignUpHeaders ); if (!parsedSignUpHeaders.success) { return Response.json( { message: parsedSignUpHeaders.error.message }, - { status: 400 }, + { status: 400 } ); } else { return Response.json( { message: parsedSignUpHeaders.error }, - { status: 200 }, + { status: 200 } ); } } @@ -35,13 +35,13 @@ export async function POST(request: Request) { after(() => { log.error( "Could not parse the sign-up headers", - parsedSignUpHeaders.error, + parsedSignUpHeaders.error ); }); return Response.json( { message: parsedSignUpHeaders.error.message }, - { status: 400 }, + { status: 400 } ); } @@ -72,7 +72,7 @@ export async function POST(request: Request) { message: "Failed to create an account. Email already exists.", statusText: "email_is_taken", }, - { status: 400 }, + { status: 400 } ); } @@ -86,14 +86,14 @@ export async function POST(request: Request) { message: "Failed to create an account. Username already exists.", statusText: "username_is_taken", }, - { status: 400 }, + { status: 400 } ); } } if (e.errors.some((error) => error.code === "form_password_pwned")) { after(() => { log.error( - "Failed to create an account. Password has been found in an online data breach.", + "Failed to create an account. Password has been found in an online data breach." ); }); @@ -103,7 +103,7 @@ export async function POST(request: Request) { "Failed to create an account. Password has been found in an online data breach.", statusText: "form_password_pwned", }, - { status: 400 }, + { status: 400 } ); } } @@ -117,7 +117,7 @@ export async function POST(request: Request) { return Response.json( { message: "Failed to create an account" }, - { status: 400 }, + { status: 400 } ); } @@ -127,6 +127,6 @@ export async function POST(request: Request) { return Response.json( { message: "User created successfully" }, - { status: 200 }, + { status: 200 } ); } diff --git a/src/app/contributors/page.tsx b/src/app/contributors/page.tsx index 6b8032cc..9593d387 100644 --- a/src/app/contributors/page.tsx +++ b/src/app/contributors/page.tsx @@ -46,7 +46,7 @@ const contributorList: ContributorsProps[] = [ const ContributorCard = (props: { contributor: ContributorsProps }) => { const [cardOpen, setCardOpen] = useState(false); return ( -
+
{ className="order-0 rounded-full lg:flex" /> -
+

{props.contributor.name}

-

+

{props.contributor.job}

@@ -69,22 +69,22 @@ const ContributorCard = (props: { contributor: ContributorsProps }) => { setCardOpen(!cardOpen)} className={cn( - "ml-5 mt-2.5 hidden h-7 w-7 cursor-pointer transition-transform duration-300 ease-in-out lg:flex", + "mt-2.5 ml-5 hidden h-7 w-7 cursor-pointer transition-transform duration-300 ease-in-out lg:flex", { "rotate-180 transform": cardOpen, - }, + } )} />
{props.contributor.website ? ( @@ -95,14 +95,14 @@ const ContributorCard = (props: { contributor: ContributorsProps }) => { href={props.contributor.website} >

Website

- + ) : null} {props.contributor.linkedin ? (

LinkedIn

- + ) : null} @@ -112,7 +112,7 @@ const ContributorCard = (props: { contributor: ContributorsProps }) => { href={props.contributor.github} >

GitHub

- + ) : null}
@@ -126,12 +126,12 @@ const Contributors = () => { return (
-
+
{ router.back(); }} - className="absolute left-4 top-6 flex cursor-pointer items-center gap-1 text-xl font-bold" + className="absolute top-6 left-4 flex cursor-pointer items-center gap-1 text-xl font-bold" > Back diff --git a/src/app/layout.tsx b/src/app/layout.tsx index cbb86f32..e5c5eb6c 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -78,7 +78,7 @@ export default function RootLayout({ >({ @@ -124,7 +124,7 @@ export function AddUserDialog({
)} @@ -255,7 +253,7 @@ const Chats: React.FC<{ chat.lastMessage.readBy.some( (user) => user.username === - clerkUser.user?.username, + clerkUser.user?.username ) ? ( chat.lastMessage.content ) : ( @@ -296,18 +294,17 @@ const Chats: React.FC<{ ? "You've sent a request to clear the chat" : `Your notes have sent a request to clear the chat` : chat.lastMessage?.type === - "expiredRequest" - ? chat.lastMessage.clerkId - .split("|") - .pop() === clerkUser.user?.id - ? "Your request to clear the chat has expired" - : `Your notes' request to clear the chat has expired` - : chat.lastMessage.clerkId - .split("|") - .pop() === - clerkUser.user?.username - ? "Your notes have rejected your request to clear the chat" - : "You have rejected the request to clear the chat"} + "expiredRequest" + ? chat.lastMessage.clerkId + .split("|") + .pop() === clerkUser.user?.id + ? "Your request to clear the chat has expired" + : `Your notes' request to clear the chat has expired` + : chat.lastMessage.clerkId + .split("|") + .pop() === clerkUser.user?.username + ? "Your notes have rejected your request to clear the chat" + : "You have rejected the request to clear the chat"}
)} {chat.lastMessage ? ( @@ -316,7 +313,7 @@ const Chats: React.FC<{ chat.lastMessage.readBy.some( (user) => user.username === - clerkUser.user?.username, + clerkUser.user?.username ) ? ( chat.lastMessage.content ) : ( diff --git a/src/components/dev-mode-info.tsx b/src/components/dev-mode-info.tsx index 323dad53..000d9089 100644 --- a/src/components/dev-mode-info.tsx +++ b/src/components/dev-mode-info.tsx @@ -19,5 +19,5 @@ export const DevMode = observer( {children}
); - }, + } ); diff --git a/src/components/forward-message-dialog.tsx b/src/components/forward-message-dialog.tsx index 7288ed97..0046a22c 100644 --- a/src/components/forward-message-dialog.tsx +++ b/src/components/forward-message-dialog.tsx @@ -45,11 +45,11 @@ export const ForwardDialog = ({ } else { if ( chatsToForwardTo.some( - (forwardObject) => forwardObject.userId === user.userId, + (forwardObject) => forwardObject.userId === user.userId ) ) { setChatsToForwardTo((prev) => - prev.filter((filteredUser) => filteredUser.userId !== user.userId), + prev.filter((filteredUser) => filteredUser.userId !== user.userId) ); } else { setChatsToForwardTo((prev) => [...prev, user]); @@ -88,7 +88,7 @@ export const ForwardDialog = ({
{chats === undefined ? ( @@ -113,7 +113,7 @@ export const ForwardDialog = ({ chatsToForwardTo.length > 0 ? chatsToForwardTo.some( (forwardObject) => - forwardObject.userId === userInfos[0]!._id, + forwardObject.userId === userInfos[0]!._id ) : false } @@ -139,7 +139,7 @@ export const ForwardDialog = ({ "flex cursor-pointer rounded-xl bg-secondary p-5", user.username == userInfos[0]?.username ? "h-0 p-0" - : null, + : null )} > 0 ? chatsToForwardTo.some( (forwardObject) => - forwardObject.userId === user._id, + forwardObject.userId === user._id ) : false } @@ -155,7 +155,7 @@ export const ForwardDialog = ({ "mr-3 mt-1 flex", user.username == userInfos[0]?.username ? "hidden" - : null, + : null )} /> {user.username != userInfos[0]?.username ? ( diff --git a/src/components/login-dialog.tsx b/src/components/login-dialog.tsx index efd7dfb6..0819ded0 100644 --- a/src/components/login-dialog.tsx +++ b/src/components/login-dialog.tsx @@ -11,37 +11,43 @@ const AlertDialogTrigger = AlertDialogPrimitive.Trigger; const AlertDialogPortal = AlertDialogPrimitive.Portal; -const AlertDialogOverlay = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - & { + ref: React.RefObject>; + } +) => (); +AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName; + +const AlertDialogContent = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => ( + + -)); -AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName; - -const AlertDialogContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - - - - -)); +); AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName; const AlertDialogHeader = ({ @@ -51,7 +57,7 @@ const AlertDialogHeader = ({
@@ -65,64 +71,76 @@ const AlertDialogFooter = ({
); AlertDialogFooter.displayName = "AlertDialogFooter"; -const AlertDialogTitle = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); +const AlertDialogTitle = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => (); AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName; -const AlertDialogDescription = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); +const AlertDialogDescription = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => (); AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName; -const AlertDialogAction = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); +const AlertDialogAction = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => (); AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName; -const AlertDialogCancel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); +const AlertDialogCancel = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => (); AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName; export { diff --git a/src/components/message.tsx b/src/components/message.tsx index d1852402..dfb60e35 100644 --- a/src/components/message.tsx +++ b/src/components/message.tsx @@ -44,11 +44,11 @@ export type UserInfos = [ | NonNullable< FunctionReturnType >["otherUser"] - ), + ) ]; const EditedLabel = ({ message }: { message: Message }) => ( -
+
{message.type === "message" && message.modified && "Edited"}
); @@ -68,10 +68,10 @@ const ReplyToMessage = ({ scrollToMessage(message.replyTo._id); } }} - className="mb-2 cursor-pointer rounded-lg border border-secondary-foreground bg-primary p-2" + className="border-secondary-foreground bg-primary mb-2 cursor-pointer rounded-lg border p-2" >
-

Replied to:

+

Replied to:

@@ -132,7 +132,7 @@ export const Message = ({ const clerkUser = useUser(); const deleteMessage = useMutation( - api.messages.deleteMessage, + api.messages.deleteMessage ).withOptimisticUpdate((localStore, args) => { const messageId: Id<"messages"> = args.messageId as Id<"messages">; const chatId: Id<"privateChats"> = args.chatId as Id<"privateChats">; @@ -167,7 +167,7 @@ export const Message = ({ }; } return message; - }), + }) ); localStore.setQuery( @@ -186,13 +186,13 @@ export const Message = ({ } else { return chat; } - }), + }) ); } }); const checkClickPosition = ( - e: React.MouseEvent | TouchEvent | MouseEvent, + e: React.MouseEvent | TouchEvent | MouseEvent ) => { const clickPosition = "touches" in e && e.touches[0] @@ -217,8 +217,8 @@ export const Message = ({ ? "top-end" : "bottom-end" : isInBottomHalf - ? "top-start" - : "bottom-start", + ? "top-start" + : "bottom-start", }); const { @@ -231,8 +231,8 @@ export const Message = ({ ? "bottom-end" : "top-end" : isInBottomHalf - ? "bottom-start" - : "top-start", + ? "bottom-start" + : "top-start", }); const markRead = useMutation(api.messages.markMessageRead); @@ -299,7 +299,7 @@ export const Message = ({ const [ForwardedMessageId, setForwardedMessageId] = useQueryState( // It is used to show if the forward dialog should be shown. If the string is empty the dialog should be not shown if there is an id inside it should "forward", - parseAsString.withDefault(""), + parseAsString.withDefault("") ); const handleForward = () => { @@ -347,7 +347,7 @@ export const Message = ({ style={floatingStylesEmojiPickerQuickReaction} className="z-50 py-3 opacity-100" > -

+
reactToMessageHandler(message._id, "😂")} role="button" @@ -359,15 +359,15 @@ export const Message = ({ } }} className={cn( - "flex aspect-square h-10 items-center justify-center rounded-full bg-card p-1 pt-1.5 hover:cursor-pointer dark:bg-primary", + "bg-card dark:bg-primary flex aspect-square h-10 items-center justify-center rounded-full p-1 pt-1.5 hover:cursor-pointer", { "bg-muted-foreground dark:bg-card": message.reactions.find( (reaction) => reaction.emoji === "😂" && - reaction.userId === userInfos[0]?._id, + reaction.userId === userInfos[0]?._id ), - }, + } )} > @@ -385,15 +385,15 @@ export const Message = ({ } }} className={cn( - "flex aspect-square h-10 items-center justify-center rounded-full bg-card p-1 pt-1.5 hover:cursor-pointer dark:bg-primary", + "bg-card dark:bg-primary flex aspect-square h-10 items-center justify-center rounded-full p-1 pt-1.5 hover:cursor-pointer", { "bg-muted-foreground dark:bg-card": message.reactions.find( (reaction) => reaction.emoji === "❤️" && - reaction.userId === userInfos[0]?._id, + reaction.userId === userInfos[0]?._id ), - }, + } )} > @@ -411,15 +411,15 @@ export const Message = ({ } }} className={cn( - "flex aspect-square h-10 items-center justify-center rounded-full bg-card p-1 pt-1.5 hover:cursor-pointer dark:bg-primary", + "bg-card dark:bg-primary flex aspect-square h-10 items-center justify-center rounded-full p-1 pt-1.5 hover:cursor-pointer", { "bg-muted-foreground dark:bg-card": message.reactions.find( (reaction) => reaction.emoji === "👍" && - reaction.userId === userInfos[0]?._id, + reaction.userId === userInfos[0]?._id ), - }, + } )} > @@ -437,15 +437,15 @@ export const Message = ({ } }} className={cn( - "flex aspect-square h-10 items-center justify-center rounded-full bg-card p-1 pt-1.5 hover:cursor-pointer dark:bg-primary", + "bg-card dark:bg-primary flex aspect-square h-10 items-center justify-center rounded-full p-1 pt-1.5 hover:cursor-pointer", { "bg-muted-foreground dark:bg-card": message.reactions.find( (reaction) => reaction.emoji === "👎" && - reaction.userId === userInfos[0]?._id, + reaction.userId === userInfos[0]?._id ), - }, + } )} > @@ -463,15 +463,15 @@ export const Message = ({ } }} className={cn( - "flex aspect-square h-10 items-center justify-center rounded-full bg-card p-1 pt-1.5 hover:cursor-pointer dark:bg-primary", + "bg-card dark:bg-primary flex aspect-square h-10 items-center justify-center rounded-full p-1 pt-1.5 hover:cursor-pointer", { "bg-muted-foreground dark:bg-card": message.reactions.find( (reaction) => reaction.emoji === "😮" && - reaction.userId === userInfos[0]?._id, + reaction.userId === userInfos[0]?._id ), - }, + } )} > @@ -488,13 +488,13 @@ export const Message = ({ onKeyDown={() => { setShowFullEmojiPicker((prevValue) => !prevValue); }} - className="flex aspect-square h-10 items-center justify-center rounded-full bg-card p-1 hover:cursor-pointer dark:bg-primary" + className="bg-card dark:bg-primary flex aspect-square h-10 items-center justify-center rounded-full p-1 hover:cursor-pointer" >
, - chatContainerElement, + chatContainerElement ) : null} {message.from.username == clerkUser.user?.username ? ( @@ -507,7 +507,7 @@ export const Message = ({ > -
+
{message.type == "message" && !message.deleted ? ( message.forwarded == undefined ? ( "" @@ -544,16 +544,16 @@ export const Message = ({ }} id={`message-${message._id}`} className={cn( - "max-w-[66.6667%] cursor-default break-words rounded-sm bg-accent p-3", + "bg-accent max-w-[66.6667%] cursor-default rounded-xs p-3 break-words", { "sticky z-50 opacity-100": message._id === selectedMessageId, - "my-2 max-w-[80%] border-2 border-secondary bg-primary": + "border-secondary bg-primary my-2 max-w-[80%] border-2": message.type == "pendingRequest" || message.type == "rejectedRequest", "mb-3": message.type === "message" && message.reactions.length > 0, "animate-pulse": highlightedMessageId === message._id, - }, + } )} > {message.type === "message" && message.deleted ? ( @@ -564,7 +564,7 @@ export const Message = ({ ) : (
{message.type != "message" ? ( -
+
{message.type === "pendingRequest" ? ( <>

You've sent a request to clear the chat

@@ -596,7 +596,7 @@ export const Message = ({ side="right" /> -
+
{message.type == "message" && !message.deleted ? message.readBy ? message.readBy.map((user) => { @@ -625,8 +625,8 @@ export const Message = ({ style={floatingStylesContextModal} className="z-50 overflow-x-visible py-3 opacity-100" > -
-
+
+
{ @@ -641,13 +641,13 @@ export const Message = ({
{" "} -
+

{sentInfo()}

, - chatContainerElement, + chatContainerElement ) : null}
@@ -730,16 +730,16 @@ export const Message = ({ }} id={`message-${message._id}`} className={cn( - "max-w-[66.6667%] cursor-default break-words rounded-sm bg-secondary p-3", + "bg-secondary max-w-[66.6667%] cursor-default rounded-xs p-3 break-words", { "sticky z-50 opacity-100": message._id == selectedMessageId, - "my-2 max-w-[80%] border-2 border-secondary bg-primary": + "border-secondary bg-primary my-2 max-w-[80%] border-2": message.type === "pendingRequest" || message.type === "rejectedRequest", "mb-3": message.type === "message" && message.reactions.length > 0, "animate-pulse": highlightedMessageId === message._id, - }, + } )} > {message.type === "message" && message.deleted ? ( @@ -748,7 +748,7 @@ export const Message = ({

This message was deleted

) : message.type != "message" ? ( -
+
{message.type === "pendingRequest" ? ( <> @@ -762,7 +762,10 @@ export const Message = ({
) : message.type === "expiredRequest" ? ( - `The request of ${chatInfo.data?.otherUser[0]?.username + " to clear the chat"} has expired` + `The request of ${ + chatInfo.data?.otherUser[0]?.username + + " to clear the chat" + } has expired` ) : ( "You have rejected the request to clear the chat" )} @@ -772,7 +775,7 @@ export const Message = ({ <>
, - chatContainerElement, + chatContainerElement ) : null}
diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index 6980c612..fdfa8314 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -25,7 +25,7 @@ const Navbar = () => { className={cn( "fixed bottom-0 flex h-24 w-full items-center justify-around border-t-2 border-secondary bg-primary text-2xl text-secondary-foreground lg:h-full lg:w-24 lg:flex-col lg:justify-start lg:border-r-2 lg:border-t-0 lg:border-secondary", { "pb-3": isIOS }, - { "hidden lg:flex": isChatPath }, + { "hidden lg:flex": isChatPath } )} >
diff --git a/src/components/reactions.tsx b/src/components/reactions.tsx index 4ce99f6e..406e012c 100644 --- a/src/components/reactions.tsx +++ b/src/components/reactions.tsx @@ -39,7 +39,7 @@ export const useReactToMessage = (chatId: string, userInfo: UserInfos[0]) => { // Check if user already has the exact same emoji reaction const existingReaction = message.reactions?.find( - (r) => r.userId === userInfo?._id && r.emoji === emoji, + (r) => r.userId === userInfo?._id && r.emoji === emoji ); // If user already reacted with this emoji, remove it (toggle off) @@ -47,14 +47,14 @@ export const useReactToMessage = (chatId: string, userInfo: UserInfos[0]) => { return { ...message, reactions: message.reactions.filter( - (r) => !(r.userId === userInfo?._id && r.emoji === emoji), + (r) => !(r.userId === userInfo?._id && r.emoji === emoji) ), }; } // Check if user has reacted with a different emoji const hasOtherReaction = message.reactions?.find( - (r) => r.userId === userInfo?._id, + (r) => r.userId === userInfo?._id ); // If user has different reaction, update existing one to new emoji @@ -62,7 +62,7 @@ export const useReactToMessage = (chatId: string, userInfo: UserInfos[0]) => { return { ...message, reactions: message.reactions.map((r) => - r.userId === userInfo?._id ? { ...r, emoji } : r, + r.userId === userInfo?._id ? { ...r, emoji } : r ), }; } @@ -77,10 +77,10 @@ export const useReactToMessage = (chatId: string, userInfo: UserInfos[0]) => { localStore.setQuery( api.messages.getMessages, { chatId: chatId }, - existingMessages.map(updateMessageReactions), + existingMessages.map(updateMessageReactions) ); } - }, + } ); }; @@ -111,7 +111,7 @@ export const ReactionHandler = (props: { className={cn( "absolute flex -translate-x-[0%] select-none items-center justify-center gap-1 rounded-full bg-secondary px-1 lg:select-auto", { "z-50": message._id === selectedMessageId }, - props.side === "left" ? "bottom-0 left-0" : "bottom-4 right-0", + props.side === "left" ? "bottom-0 left-0" : "bottom-4 right-0" )} > { - acc[reaction.emoji] = (acc[reaction.emoji] ?? 0) + 1; - return acc; - }, - {} as Record, - ); + const currentReactionCounts = reactions.reduce((acc, reaction) => { + acc[reaction.emoji] = (acc[reaction.emoji] ?? 0) + 1; + return acc; + }, {} as Record); // Render each emoji and its count with animations return Object.entries(currentReactionCounts).map(([emoji, count]) => { @@ -199,7 +196,7 @@ const ReactionDetails = ({ | NonNullable< FunctionReturnType >["otherUser"] - ), + ) ]; chatId: Id<"privateChats">; }) => { @@ -207,15 +204,12 @@ const ReactionDetails = ({ // Group reactions by emoji // Creates object like: { "👍": [reaction1, reaction2], "❤️": [reaction3] } - const reactionsByEmoji = reactions.reduce( - (acc, reaction) => { - const emojiArray = acc[reaction.emoji] ?? []; - emojiArray.push(reaction); - acc[reaction.emoji] = emojiArray; - return acc; - }, - {} as Record, - ); + const reactionsByEmoji = reactions.reduce((acc, reaction) => { + const emojiArray = acc[reaction.emoji] ?? []; + emojiArray.push(reaction); + acc[reaction.emoji] = emojiArray; + return acc; + }, {} as Record); return (
@@ -225,7 +219,7 @@ const ReactionDetails = ({ className={cn( "flex items-center gap-2", reactions.some((r) => r.userId === userInfos[0]?._id) && - "cursor-pointer hover:opacity-70", + "cursor-pointer hover:opacity-70" )} onClick={() => { if (reactions.some((r) => r.userId === userInfos[0]?._id)) { @@ -249,8 +243,8 @@ const ReactionDetails = ({ userInfos[0]?._id === reaction.userId ? userInfos[0] : Array.isArray(userInfos[1]) - ? userInfos[1].find((u) => u._id === reaction.userId) - : userInfos[1]; + ? userInfos[1].find((u) => u._id === reaction.userId) + : userInfos[1]; return user?.username; }) .join(", ")} diff --git a/src/components/ui/aurora-background.tsx b/src/components/ui/aurora-background.tsx index d3d205ca..5ab65795 100644 --- a/src/components/ui/aurora-background.tsx +++ b/src/components/ui/aurora-background.tsx @@ -23,11 +23,32 @@ export const AuroraBackground = ({ )} {...props} > -
+
, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => { +const Avatar = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => { const pathname = usePathname(); return ( @@ -19,39 +24,45 @@ const Avatar = React.forwardRef< className, { "h-11 w-11 lg:h-14 lg:w-14": pathname.startsWith("/chats/"), - }, + } )} {...props} /> ); -}); +}; Avatar.displayName = AvatarPrimitive.Root.displayName; -const AvatarImage = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); +const AvatarImage = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => (); AvatarImage.displayName = AvatarPrimitive.Image.displayName; -const AvatarFallback = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); +const AvatarFallback = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => (); AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName; export { Avatar, AvatarImage, AvatarFallback }; diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx index e4e4224d..5196a548 100644 --- a/src/components/ui/badge.tsx +++ b/src/components/ui/badge.tsx @@ -3,7 +3,7 @@ import { type ReactNode } from "react"; const Badge = ({ children }: { children: ReactNode }) => { return ( -

+

{" "} {children}

diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index 7e22378f..18b24bf4 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -4,7 +4,7 @@ import { cva, type VariantProps } from "class-variance-authority"; import * as React from "react"; const buttonVariants = cva( - "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-slate-950 dark:focus-visible:ring-slate-300", + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-white transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-slate-950 dark:focus-visible:ring-slate-300", { variants: { variant: { @@ -31,7 +31,7 @@ const buttonVariants = cva( variant: "default", size: "default", }, - }, + } ); export interface ButtonProps @@ -40,18 +40,27 @@ export interface ButtonProps asChild?: boolean; } -const Button = React.forwardRef( - ({ className, variant, size, asChild = false, ...props }, ref) => { - const Comp = asChild ? Slot : "button"; - return ( - - ); - }, -); +const Button = ( + { + ref, + className, + variant, + size, + asChild = false, + ...props + }: ButtonProps & { + ref: React.RefObject; + } +) => { + const Comp = asChild ? Slot : "button"; + return ( + + ); +}; Button.displayName = "Button"; export { Button, buttonVariants }; diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx index 799395ea..02880f1a 100644 --- a/src/components/ui/checkbox.tsx +++ b/src/components/ui/checkbox.tsx @@ -5,25 +5,28 @@ import { cn } from "~/lib/utils"; import { Check } from "lucide-react"; import * as React from "react"; -const Checkbox = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - & { + ref: React.RefObject>; + } +) => ( + - - - - -)); + + +); Checkbox.displayName = CheckboxPrimitive.Root.displayName; export { Checkbox }; diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx index ff0e5c99..bddaa9bb 100644 --- a/src/components/ui/dialog.tsx +++ b/src/components/ui/dialog.tsx @@ -13,43 +13,50 @@ const DialogPortal = DialogPrimitive.Portal; const DialogClose = DialogPrimitive.Close; -const DialogOverlay = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - & { + ref: React.RefObject>; + } +) => (); +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; + +const DialogContent = ( + { + ref, + className, + children, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => ( + + -)); -DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; - -const DialogContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - - {children} - - - Close - - - -)); + > + {children} + + + Close + + +); DialogContent.displayName = DialogPrimitive.Content.displayName; const DialogHeader = ({ @@ -59,7 +66,7 @@ const DialogHeader = ({
@@ -73,41 +80,47 @@ const DialogFooter = ({
); DialogFooter.displayName = "DialogFooter"; -const DialogTitle = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); +const DialogTitle = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => (); DialogTitle.displayName = DialogPrimitive.Title.displayName; -const DialogDescription = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); +const DialogDescription = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => (); DialogDescription.displayName = DialogPrimitive.Description.displayName; export { diff --git a/src/components/ui/form.tsx b/src/components/ui/form.tsx index 1b27fc58..b3b0cb16 100644 --- a/src/components/ui/form.tsx +++ b/src/components/ui/form.tsx @@ -16,18 +16,18 @@ const Form = FormProvider; type FormFieldContextValue< TFieldValues extends FieldValues = FieldValues, - TName extends FieldPath = FieldPath, + TName extends FieldPath = FieldPath > = { name: TName; }; const FormFieldContext = React.createContext( - {} as FormFieldContextValue, + {} as FormFieldContextValue ); const FormField = < TFieldValues extends FieldValues = FieldValues, - TName extends FieldPath = FieldPath, + TName extends FieldPath = FieldPath >({ ...props }: ControllerProps) => { @@ -66,13 +66,18 @@ type FormItemContextValue = { }; const FormItemContext = React.createContext( - {} as FormItemContextValue, + {} as FormItemContextValue ); -const FormItem = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => { +const FormItem = ( + { + ref, + className, + ...props + }: React.HTMLAttributes & { + ref: React.RefObject; + } +) => { const id = React.useId(); return ( @@ -80,25 +85,34 @@ const FormItem = React.forwardRef<
); -}); +}; FormItem.displayName = "FormItem"; -const FormLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => { +const FormLabel = ( + { + ref, + className, + ...props + }: React.ComponentPropsWithoutRef & { + ref: React.RefObject>; + } +) => { const { formItemId } = useFormField(); return (