From 851f730151099b3a3f8fa8b12d2612b95f059701 Mon Sep 17 00:00:00 2001 From: Sat Naing Date: Sun, 25 Aug 2024 09:58:32 +0700 Subject: [PATCH] feat: implement chat page (#21) - responsive - chat search - interactive chat UI --- pnpm-lock.yaml | 467 ++++++++++++++----------- src/components/custom/search-input.tsx | 104 ++++++ src/data/conversations.json | 309 ++++++++++++++++ src/hooks/use-previous.tsx | 9 + src/pages/chats/index.tsx | 306 ++++++++++++++++ src/router.tsx | 2 +- 6 files changed, 987 insertions(+), 210 deletions(-) create mode 100644 src/components/custom/search-input.tsx create mode 100644 src/data/conversations.json create mode 100644 src/hooks/use-previous.tsx create mode 100644 src/pages/chats/index.tsx diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed524f16..f6ab79af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,61 +10,61 @@ importers: dependencies: '@hookform/resolvers': specifier: ^3.3.4 - version: 3.3.4(react-hook-form@7.51.3) + version: 3.3.4(react-hook-form@7.51.3(react@18.2.0)) '@radix-ui/react-avatar': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-checkbox': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-collapsible': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-dialog': specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-dropdown-menu': specifier: ^2.0.6 - version: 2.0.6(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.6(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-icons': specifier: ^1.3.0 version: 1.3.0(react@18.2.0) '@radix-ui/react-label': specifier: ^2.0.2 - version: 2.0.2(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.2(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-popover': specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-radio-group': specifier: ^1.1.3 - version: 1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-select': specifier: ^2.0.0 - version: 2.0.0(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.0(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-separator': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.0.2(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-switch': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-tabs': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-toast': specifier: ^1.1.5 - version: 1.1.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.1.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-tooltip': specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tabler/icons-react': specifier: ^3.2.0 version: 3.2.0(react@18.2.0) '@tanstack/react-table': specifier: ^8.16.0 - version: 8.16.0(react-dom@18.2.0)(react@18.2.0) + version: 8.16.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -73,7 +73,7 @@ importers: version: 2.1.0 cmdk: specifier: ^0.2.1 - version: 0.2.1(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + version: 0.2.1(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) dayjs: specifier: ^1.11.10 version: 1.11.10 @@ -91,13 +91,13 @@ importers: version: 7.51.3(react@18.2.0) react-router-dom: specifier: ^6.22.3 - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + version: 6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-syntax-highlighter: specifier: ^15.5.0 version: 15.5.0(react@18.2.0) recharts: specifier: ^2.12.5 - version: 2.12.5(react-dom@18.2.0)(react@18.2.0) + version: 2.12.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) tailwind-merge: specifier: ^2.2.2 version: 2.2.2 @@ -122,13 +122,13 @@ importers: version: 15.5.11 '@typescript-eslint/eslint-plugin': specifier: ^6.14.0 - version: 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.4.5) + version: 6.19.1(@typescript-eslint/parser@6.19.1(eslint@8.56.0)(typescript@5.4.5))(eslint@8.56.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^6.14.0 version: 6.19.1(eslint@8.56.0)(typescript@5.4.5) '@vitejs/plugin-react-swc': specifier: ^3.6.0 - version: 3.6.0(vite@5.2.9) + version: 3.6.0(vite@5.2.9(@types/node@20.12.7)) autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) @@ -2510,7 +2510,7 @@ snapshots: '@floating-ui/core': 1.6.0 '@floating-ui/utils': 0.2.1 - '@floating-ui/react-dom@2.0.7(react-dom@18.2.0)(react@18.2.0)': + '@floating-ui/react-dom@2.0.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/dom': 1.6.0 react: 18.2.0 @@ -2518,7 +2518,7 @@ snapshots: '@floating-ui/utils@0.2.1': {} - '@hookform/resolvers@3.3.4(react-hook-form@7.51.3)': + '@hookform/resolvers@3.3.4(react-hook-form@7.51.3(react@18.2.0))': dependencies: react-hook-form: 7.51.3(react@18.2.0) @@ -2587,70 +2587,75 @@ snapshots: dependencies: '@babel/runtime': 7.23.9 - '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-avatar@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-avatar@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 '@radix-ui/react-compose-refs@1.0.0(react@18.2.0)': dependencies: @@ -2660,8 +2665,9 @@ snapshots: '@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.79)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 '@radix-ui/react-context@1.0.0(react@18.2.0)': dependencies: @@ -2671,22 +2677,23 @@ snapshots: '@radix-ui/react-context@1.0.1(@types/react@18.2.79)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 - '@radix-ui/react-dialog@1.0.0(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-dialog@1.0.0(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-portal': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.0.0(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) aria-hidden: 1.2.3 @@ -2696,72 +2703,76 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(@types/react@18.2.79)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 '@radix-ui/react-direction@1.0.1(@types/react@18.2.79)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 - '@radix-ui/react-dismissable-layer@1.0.0(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-dismissable-layer@1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) '@radix-ui/react-use-escape-keydown': 1.0.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 '@radix-ui/react-focus-guards@1.0.0(react@18.2.0)': dependencies: @@ -2771,28 +2782,30 @@ snapshots: '@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.79)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 - '@radix-ui/react-focus-scope@1.0.0(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-focus-scope@1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 '@radix-ui/react-icons@1.3.0(react@18.2.0)': dependencies: @@ -2808,102 +2821,108 @@ snapshots: dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 - '@radix-ui/react-label@2.0.2(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-label@2.0.2(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(@types/react@18.2.79)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(@types/react@18.2.79)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@floating-ui/react-dom': 2.0.7(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.0.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-portal@1.0.0(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-portal@1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-presence@1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) @@ -2911,104 +2930,110 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-primitive@1.0.0(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-primitive@1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-slot': 1.0.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-select@2.0.0(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-select@2.0.0(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(@types/react@18.2.79)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 '@radix-ui/react-slot@1.0.0(react@18.2.0)': dependencies: @@ -3020,79 +3045,84 @@ snapshots: dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 - '@radix-ui/react-switch@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-switch@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-toast@1.1.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-toast@1.1.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 - '@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.2.79)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 '@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0)': dependencies: @@ -3102,8 +3132,9 @@ snapshots: '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.79)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 '@radix-ui/react-use-controllable-state@1.0.0(react@18.2.0)': dependencies: @@ -3115,8 +3146,9 @@ snapshots: dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 '@radix-ui/react-use-escape-keydown@1.0.0(react@18.2.0)': dependencies: @@ -3128,8 +3160,9 @@ snapshots: dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 '@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0)': dependencies: @@ -3139,37 +3172,42 @@ snapshots: '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.79)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 '@radix-ui/react-use-previous@1.0.1(@types/react@18.2.79)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 '@radix-ui/react-use-rect@1.0.1(@types/react@18.2.79)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 '@radix-ui/react-use-size@1.0.1(@types/react@18.2.79)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.79)(react@18.2.0) - '@types/react': 18.2.79 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.79 - '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)': + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.79 - '@types/react-dom': 18.2.25 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 + '@types/react-dom': 18.2.25 '@radix-ui/rect@1.0.1': dependencies: @@ -3282,7 +3320,7 @@ snapshots: '@tabler/icons@3.2.0': {} - '@tanstack/react-table@8.16.0(react-dom@18.2.0)(react@18.2.0)': + '@tanstack/react-table@8.16.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@tanstack/table-core': 8.16.0 react: 18.2.0 @@ -3345,7 +3383,7 @@ snapshots: '@types/unist@2.0.10': {} - '@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1(eslint@8.56.0)(typescript@5.4.5))(eslint@8.56.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.4.5) @@ -3360,6 +3398,7 @@ snapshots: natural-compare: 1.4.0 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -3372,6 +3411,7 @@ snapshots: '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4 eslint: 8.56.0 + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -3388,6 +3428,7 @@ snapshots: debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -3404,6 +3445,7 @@ snapshots: minimatch: 9.0.3 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -3429,7 +3471,7 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react-swc@3.6.0(vite@5.2.9)': + '@vitejs/plugin-react-swc@3.6.0(vite@5.2.9(@types/node@20.12.7))': dependencies: '@swc/core': 1.4.15 vite: 5.2.9(@types/node@20.12.7) @@ -3547,9 +3589,9 @@ snapshots: clsx@2.1.0: {} - cmdk@0.2.1(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0): + cmdk@0.2.1(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@radix-ui/react-dialog': 1.0.0(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.0(@types/react@18.2.79)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -4107,8 +4149,9 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.38): dependencies: lilconfig: 3.0.0 - postcss: 8.4.38 yaml: 2.3.4 + optionalDependencies: + postcss: 8.4.38 postcss-nested@6.0.1(postcss@8.4.38): dependencies: @@ -4173,32 +4216,35 @@ snapshots: react-remove-scroll-bar@2.3.4(@types/react@18.2.79)(react@18.2.0): dependencies: - '@types/react': 18.2.79 react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.2.79)(react@18.2.0) tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.2.79 react-remove-scroll@2.5.4(@types/react@18.2.79)(react@18.2.0): dependencies: - '@types/react': 18.2.79 react: 18.2.0 react-remove-scroll-bar: 2.3.4(@types/react@18.2.79)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.79)(react@18.2.0) tslib: 2.6.2 use-callback-ref: 1.3.1(@types/react@18.2.79)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.79)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 react-remove-scroll@2.5.5(@types/react@18.2.79)(react@18.2.0): dependencies: - '@types/react': 18.2.79 react: 18.2.0 react-remove-scroll-bar: 2.3.4(@types/react@18.2.79)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.79)(react@18.2.0) tslib: 2.6.2 use-callback-ref: 1.3.1(@types/react@18.2.79)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.79)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.79 - react-router-dom@6.22.3(react-dom@18.2.0)(react@18.2.0): + react-router-dom@6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@remix-run/router': 1.15.3 react: 18.2.0 @@ -4210,21 +4256,22 @@ snapshots: '@remix-run/router': 1.15.3 react: 18.2.0 - react-smooth@4.0.1(react-dom@18.2.0)(react@18.2.0): + react-smooth@4.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: fast-equals: 5.0.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-style-singleton@2.2.1(@types/react@18.2.79)(react@18.2.0): dependencies: - '@types/react': 18.2.79 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.2.79 react-syntax-highlighter@15.5.0(react@18.2.0): dependencies: @@ -4235,7 +4282,7 @@ snapshots: react: 18.2.0 refractor: 3.6.0 - react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.23.9 dom-helpers: 5.2.1 @@ -4260,7 +4307,7 @@ snapshots: dependencies: decimal.js-light: 2.5.1 - recharts@2.12.5(react-dom@18.2.0)(react@18.2.0): + recharts@2.12.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: clsx: 2.1.0 eventemitter3: 4.0.7 @@ -4268,7 +4315,7 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-is: 16.13.1 - react-smooth: 4.0.1(react-dom@18.2.0)(react@18.2.0) + react-smooth: 4.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) recharts-scale: 0.4.5 tiny-invariant: 1.3.1 victory-vendor: 36.8.2 @@ -4462,16 +4509,18 @@ snapshots: use-callback-ref@1.3.1(@types/react@18.2.79)(react@18.2.0): dependencies: - '@types/react': 18.2.79 react: 18.2.0 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.2.79 use-sidecar@1.1.2(@types/react@18.2.79)(react@18.2.0): dependencies: - '@types/react': 18.2.79 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.2.79 util-deprecate@1.0.2: {} @@ -4494,11 +4543,11 @@ snapshots: vite@5.2.9(@types/node@20.12.7): dependencies: - '@types/node': 20.12.7 esbuild: 0.20.2 postcss: 8.4.38 rollup: 4.14.3 optionalDependencies: + '@types/node': 20.12.7 fsevents: 2.3.3 which@2.0.2: diff --git a/src/components/custom/search-input.tsx b/src/components/custom/search-input.tsx new file mode 100644 index 00000000..251ba78e --- /dev/null +++ b/src/components/custom/search-input.tsx @@ -0,0 +1,104 @@ +import * as React from 'react' +import { useNavigate } from 'react-router-dom' +import { IconLoader2, IconSearch, IconX } from '@tabler/icons-react' +import { cn } from '@/lib/utils' +import usePrevious from '@/hooks/use-previous' +import { Separator } from '../ui/separator' +import { Button } from './button' + +interface SearchInputProps { + name?: string + className?: string + defaultSearchValue?: string + isPending?: boolean + placeholder?: string + searchText?: string + disableSearchParam?: boolean + onSubmit: (text: string) => void + searchParam?: 'search' | 'q' +} + +const SearchInput = ({ + name = 'search', + className, + defaultSearchValue = '', + isPending = false, + placeholder = 'Search', + searchText = 'Search', + onSubmit, + // disableSearchParam = false, + // searchParam = 'search', +}: SearchInputProps) => { + const navigate = useNavigate() + const [value, setValue] = React.useState(defaultSearchValue) + const previous = usePrevious(value) + + const reset = React.useCallback(() => { + setValue('') + onSubmit('') + + // if (!disableSearchParam) + // navigate({ + // search: (prev) => ({ ...prev, [searchParam]: '' }), + // }) + }, [onSubmit]) + + React.useEffect(() => { + if (previous && previous?.trim().length > 0 && value.trim().length < 1) + reset() + }, [previous, reset, value]) + + return ( +
{ + e.preventDefault() + onSubmit(value) + // if (!disableSearchParam) + // navigate({ search: (prev) => ({ ...prev, [searchParam]: value }) }) + }} + > + {isPending && value.trim().length > 0 ? ( + + ) : ( + + )} +
+ setValue(e.target.value)} + type='text' + className={'w-full text-sm focus-visible:outline-none'} + /> + {value.trim().length > 0 && ( + + )} +
+ + + + ) +} +SearchInput.displayName = 'SearchInput' + +export { SearchInput } diff --git a/src/data/conversations.json b/src/data/conversations.json new file mode 100644 index 00000000..310160fe --- /dev/null +++ b/src/data/conversations.json @@ -0,0 +1,309 @@ +{ + "conversations": [ + { + "id": "conv1", + "profile": "https://randomuser.me/api/portraits/men/32.jpg", + "username": "alex_dev", + "fullName": "Alex John", + "title": "Senior Backend Dev", + "messages": [ + { + "sender": "You", + "message": "See you later, Alex!", + "timestamp": "2024-08-24T11:15:15" + }, + { + "sender": "Alex", + "message": "Alright, talk to you later!", + "timestamp": "2024-08-24T11:11:30" + }, + { + "sender": "You", + "message": "For sure. Anyway, I should get back to reviewing the project.", + "timestamp": "2024-08-23T09:26:50" + }, + { + "sender": "Alex", + "message": "Yeah, let me know what you think.", + "timestamp": "2024-08-23T09:25:15" + }, + { + "sender": "You", + "message": "Oh, nice! I've been waiting for that. I'll check it out later.", + "timestamp": "2024-08-23T09:24:30" + }, + { + "sender": "Alex", + "message": "They've added a dark mode option! It looks really sleek.", + "timestamp": "2024-08-23T09:23:10" + }, + { + "sender": "You", + "message": "No, not yet. What's new?", + "timestamp": "2024-08-23T09:22:00" + }, + { + "sender": "Alex", + "message": "By the way, have you seen the new feature update?", + "timestamp": "2024-08-23T09:21:05" + }, + { + "sender": "You", + "message": "Will do! Thanks, Alex.", + "timestamp": "2024-08-23T09:20:10" + }, + { + "sender": "Alex", + "message": "Great! Let me know if you need any help.", + "timestamp": "2024-08-23T09:19:20" + }, + { + "sender": "You", + "message": "Almost done. Just need to review a few things.", + "timestamp": "2024-08-23T09:18:45" + }, + { + "sender": "Alex", + "message": "I'm good, thanks! Did you finish the project?", + "timestamp": "2024-08-23T09:17:10" + }, + { + "sender": "You", + "message": "Hey Alex, I'm doing well! How about you?", + "timestamp": "2024-08-23T09:16:30" + }, + { + "sender": "Alex", + "message": "Hey Bob, how are you doing?", + "timestamp": "2024-08-23T09:15:00" + } + ] + }, + { + "id": "conv2", + "profile": "https://randomuser.me/api/portraits/women/45.jpg", + "username": "taylor.codes", + "fullName": "Taylor Grande", + "title": "Tech Lead", + "messages": [ + { + "sender": "Taylor", + "message": "Yeah, it's really well-explained. You should give it a try.", + "timestamp": "2024-08-23T10:35:00" + }, + { + "sender": "You", + "message": "Not yet, is it good?", + "timestamp": "2024-08-23T10:32:00" + }, + { + "sender": "Taylor", + "message": "Hey, did you check out that new tutorial?", + "timestamp": "2024-08-23T10:30:00" + } + ] + }, + { + "id": "conv3", + "profile": "https://randomuser.me/api/portraits/men/54.jpg", + "username": "john_stack", + "fullName": "John Doe", + "title": "QA", + "messages": [ + { + "sender": "You", + "message": "Yep, see ya. 👋🏼", + "timestamp": "2024-08-22T18:59:00" + }, + { + "sender": "John", + "message": "Great, see you then!", + "timestamp": "2024-08-22T18:55:00" + }, + { + "sender": "You", + "message": "Yes, same time as usual. I'll send the invite shortly.", + "timestamp": "2024-08-22T18:50:00" + }, + { + "sender": "John", + "message": "Are we still on for the meeting tomorrow?", + "timestamp": "2024-08-22T18:45:00" + } + ] + }, + { + "id": "conv4", + "profile": "https://randomuser.me/api/portraits/women/29.jpg", + "username": "megan_frontend", + "fullName": "Megan Flux", + "title": "Jr Developer", + "messages": [ + { + "sender": "You", + "message": "Sure ✌🏼", + "timestamp": "2024-08-23T11:30:00" + }, + { + "sender": "Megan", + "message": "Thanks, appreciate it!", + "timestamp": "2024-08-23T11:30:00" + }, + { + "sender": "You", + "message": "Sure thing! I'll take a look in the next hour.", + "timestamp": "2024-08-23T11:25:00" + }, + { + "sender": "Megan", + "message": "Hey! Do you have time to review my PR today?", + "timestamp": "2024-08-23T11:20:00" + } + ] + }, + { + "id": "conv5", + "profile": "https://randomuser.me/api/portraits/men/72.jpg", + "username": "dev_david", + "fullName": "David Brown", + "title": "Senior UI/UX Designer", + "messages": [ + { + "sender": "You", + "message": "Great, I'll review them now!", + "timestamp": "2024-08-23T12:00:00" + }, + { + "sender": "David", + "message": "Just sent you the files. Let me know if you need any changes.", + "timestamp": "2024-08-23T11:58:00" + }, + { + "sender": "David", + "message": "I finished the design for the dashboard. Thoughts?", + "timestamp": "2024-08-23T11:55:00" + } + ] + }, + { + "id": "conv6", + "profile": "https://randomuser.me/api/portraits/women/68.jpg", + "username": "julia.design", + "fullName": "Julia Carter", + "title": "Product Designer", + "messages": [ + { + "sender": "Julia", + "message": "Same here! It's coming together nicely.", + "timestamp": "2024-08-22T14:10:00" + }, + { + "sender": "You", + "message": "I'm really excited to see the final product!", + "timestamp": "2024-08-22T14:15:00" + }, + { + "sender": "You", + "message": "How's the project looking on your end?", + "timestamp": "2024-08-22T14:05:00" + } + ] + }, + { + "id": "conv7", + "profile": "https://randomuser.me/api/portraits/men/24.jpg", + "username": "brad_dev", + "fullName": "Brad Wilson", + "title": "CEO", + "messages": [ + { + "sender": "Brad", + "message": "Got it! Thanks for the update.", + "timestamp": "2024-08-23T15:45:00" + }, + { + "sender": "You", + "message": "The release has been delayed to next week.", + "timestamp": "2024-08-23T15:40:00" + }, + { + "sender": "Brad", + "message": "Hey, any news on the release?", + "timestamp": "2024-08-23T15:35:00" + } + ] + }, + { + "id": "conv8", + "profile": "https://randomuser.me/api/portraits/women/34.jpg", + "username": "katie_ui", + "fullName": "Katie Lee", + "title": "QA", + "messages": [ + { + "sender": "Katie", + "message": "I'll join the call in a few minutes.", + "timestamp": "2024-08-23T09:50:00" + }, + { + "sender": "You", + "message": "Perfect! We'll start as soon as you're in.", + "timestamp": "2024-08-23T09:48:00" + }, + { + "sender": "Katie", + "message": "Is the meeting still on?", + "timestamp": "2024-08-23T09:45:00" + } + ] + }, + { + "id": "conv9", + "profile": "https://randomuser.me/api/portraits/men/67.jpg", + "username": "matt_fullstack", + "fullName": "Matt Green", + "title": "Full-stack Dev", + "messages": [ + { + "sender": "Matt", + "message": "Sure thing, I'll send over the updates shortly.", + "timestamp": "2024-08-23T10:25:00" + }, + { + "sender": "You", + "message": "Could you update the backend as well?", + "timestamp": "2024-08-23T10:23:00" + }, + { + "sender": "Matt", + "message": "The frontend updates are done. How does it look?", + "timestamp": "2024-08-23T10:20:00" + } + ] + }, + { + "id": "conv10", + "profile": "https://randomuser.me/api/portraits/women/56.jpg", + "username": "sophie_dev", + "fullName": "Sophie Alex", + "title": "Jr. Frontend Dev", + "messages": [ + { + "sender": "You", + "message": "Thanks! I'll review your code and get back to you.", + "timestamp": "2024-08-23T16:10:00" + }, + { + "sender": "Sophie", + "message": "Let me know if you need anything else.", + "timestamp": "2024-08-23T16:05:00" + }, + { + "sender": "Sophie", + "message": "The feature is implemented. Can you review it?", + "timestamp": "2024-08-23T16:00:00" + } + ] + } + ] +} diff --git a/src/hooks/use-previous.tsx b/src/hooks/use-previous.tsx new file mode 100644 index 00000000..8fe2fe4d --- /dev/null +++ b/src/hooks/use-previous.tsx @@ -0,0 +1,9 @@ +import { useEffect, useRef } from 'react' + +export default function usePrevious(value: T) { + const ref = useRef() + useEffect(() => { + ref.current = value + }) + return ref.current +} diff --git a/src/pages/chats/index.tsx b/src/pages/chats/index.tsx new file mode 100644 index 00000000..a98db88a --- /dev/null +++ b/src/pages/chats/index.tsx @@ -0,0 +1,306 @@ +import { useState } from 'react' +import { Fragment } from 'react/jsx-runtime' +import dayjs from 'dayjs' +import { + IconArrowLeft, + IconDotsVertical, + IconEdit, + IconMessages, + IconPaperclip, + IconPhone, + IconPhotoPlus, + IconPlus, + IconSearch, + IconSend, + IconVideo, +} from '@tabler/icons-react' +import { cn } from '@/lib/utils' +import { Separator } from '@/components/ui/separator' +import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' +import { Layout } from '@/components/custom/layout' +import { Search } from '@/components/search' +import ThemeSwitch from '@/components/theme-switch' +import { UserNav } from '@/components/user-nav' +import { Button } from '@/components/custom/button' + +// Fake Data +import { conversations } from '@/data/conversations.json' + +type ChatUser = (typeof conversations)[number] +type Convo = ChatUser['messages'][number] + +export default function Chats() { + const [search, setSearch] = useState('') + const [selectedUser, setSelectedUser] = useState(conversations[0]) + const [mobileSelectedUser, setMobileSelectedUser] = useState( + null + ) + + // Filtered data based on the search query + const filteredChatList = conversations.filter(({ fullName }) => + fullName.toLowerCase().includes(search.trim().toLowerCase()) + ) + + const currentMessage = selectedUser.messages.reduce( + (acc: Record, obj) => { + const key = dayjs(obj.timestamp).format('D MMM, YYYY') + + // Create an array for the category if it doesn't exist + if (!acc[key]) { + acc[key] = [] + } + + // Push the current object to the array + acc[key].push(obj) + + return acc + }, + {} + ) + + return ( + + {/* ===== Top Heading ===== */} + + +
+ + +
+
+ + +
+ {/* Left Side */} +
+
+
+
+

Inbox

+ +
+ + +
+ + +
+ +
+ {filteredChatList.map((chatUsr) => { + const { id, profile, username, messages, fullName } = chatUsr + const lastConvo = messages[0] + const lastMsg = + lastConvo.sender === 'You' + ? `You: ${lastConvo.message}` + : lastConvo.message + return ( + + + + + ) + })} +
+
+ + {/* Right Side */} +
+ {/* Top Part */} +
+ {/* Left */} +
+ +
+ + + {selectedUser.username} + +
+ + {selectedUser.fullName} + + + {selectedUser.title} + +
+
+
+ + {/* Right */} +
+ + + +
+
+ + {/* Conversation */} +
+
+
+
+ {currentMessage && + Object.keys(currentMessage).map((key) => ( + + {currentMessage[key].map((msg, index) => ( +
+ {msg.message}{' '} + + {dayjs(msg.timestamp).format('h:mm a')} + +
+ ))} +
{key}
+
+ ))} +
+
+
+
+
+
+ + + +
+ + +
+ +
+
+
+
+
+
+ ) +} diff --git a/src/router.tsx b/src/router.tsx index 2c67f2fa..79002c3c 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -61,7 +61,7 @@ const router = createBrowserRouter([ { path: 'chats', lazy: async () => ({ - Component: (await import('@/components/coming-soon')).default, + Component: (await import('@/pages/chats')).default, }), }, {