diff --git a/package.json b/package.json
index 6aa27f2..3dda9e3 100644
--- a/package.json
+++ b/package.json
@@ -18,11 +18,13 @@
"@radix-ui/react-checkbox": "^1.0.4",
"@radix-ui/react-label": "^2.0.2",
"@radix-ui/react-radio-group": "^1.1.3",
+ "@reduxjs/toolkit": "^2.0.1",
"@storybook/theming": "^7.2.1",
"clsx": "^2.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-hook-form": "^7.45.2",
+ "react-redux": "^9.0.4",
"react-router-dom": "^6.14.2",
"react-toastify": "^9.1.3",
"remeda": "^1.24.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6e03f24..db32e5c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -20,6 +20,9 @@ dependencies:
'@radix-ui/react-radio-group':
specifier: ^1.1.3
version: 1.1.3(@types/react-dom@18.2.7)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)
+ '@reduxjs/toolkit':
+ specifier: ^2.0.1
+ version: 2.0.1(react-redux@9.0.4)(react@18.2.0)
'@storybook/theming':
specifier: ^7.2.1
version: 7.2.1(react-dom@18.2.0)(react@18.2.0)
@@ -35,6 +38,9 @@ dependencies:
react-hook-form:
specifier: ^7.45.2
version: 7.45.2(react@18.2.0)
+ react-redux:
+ specifier: ^9.0.4
+ version: 9.0.4(@types/react@18.2.15)(react@18.2.0)(redux@5.0.0)
react-router-dom:
specifier: ^6.14.2
version: 6.14.2(react-dom@18.2.0)(react@18.2.0)
@@ -2672,6 +2678,25 @@ packages:
dependencies:
'@babel/runtime': 7.22.6
+ /@reduxjs/toolkit@2.0.1(react-redux@9.0.4)(react@18.2.0):
+ resolution: {integrity: sha512-fxIjrR9934cmS8YXIGd9e7s1XRsEU++aFc9DVNMFMRTM5Vtsg2DCRMj21eslGtDt43IUf9bJL3h5bwUlZleibA==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18
+ react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-redux:
+ optional: true
+ dependencies:
+ immer: 10.0.3
+ react: 18.2.0
+ react-redux: 9.0.4(@types/react@18.2.15)(react@18.2.0)(redux@5.0.0)
+ redux: 5.0.0
+ redux-thunk: 3.1.0(redux@5.0.0)
+ reselect: 5.0.1
+ dev: false
+
/@remix-run/router@1.7.2:
resolution: {integrity: sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==}
engines: {node: '>=14'}
@@ -4073,6 +4098,10 @@ packages:
resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==}
dev: true
+ /@types/use-sync-external-store@0.0.3:
+ resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==}
+ dev: false
+
/@types/yargs-parser@21.0.0:
resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
dev: true
@@ -6726,6 +6755,10 @@ packages:
engines: {node: '>= 4'}
dev: true
+ /immer@10.0.3:
+ resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==}
+ dev: false
+
/immutable@4.3.1:
resolution: {integrity: sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==}
dev: true
@@ -8368,6 +8401,28 @@ packages:
resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==}
dev: true
+ /react-redux@9.0.4(@types/react@18.2.15)(react@18.2.0)(redux@5.0.0):
+ resolution: {integrity: sha512-9J1xh8sWO0vYq2sCxK2My/QO7MzUMRi3rpiILP/+tDr8krBHixC6JMM17fMK88+Oh3e4Ae6/sHIhNBgkUivwFA==}
+ peerDependencies:
+ '@types/react': ^18.2.25
+ react: ^18.0
+ react-native: '>=0.69'
+ redux: ^5.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react-native:
+ optional: true
+ redux:
+ optional: true
+ dependencies:
+ '@types/react': 18.2.15
+ '@types/use-sync-external-store': 0.0.3
+ react: 18.2.0
+ redux: 5.0.0
+ use-sync-external-store: 1.2.0(react@18.2.0)
+ dev: false
+
/react-refresh@0.14.0:
resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
engines: {node: '>=0.10.0'}
@@ -8565,6 +8620,18 @@ packages:
strip-indent: 4.0.0
dev: true
+ /redux-thunk@3.1.0(redux@5.0.0):
+ resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==}
+ peerDependencies:
+ redux: ^5.0.0
+ dependencies:
+ redux: 5.0.0
+ dev: false
+
+ /redux@5.0.0:
+ resolution: {integrity: sha512-blLIYmYetpZMET6Q6uCY7Jtl/Im5OBldy+vNPauA8vvsdqyt66oep4EUpAMWNHauTC6xa9JuRPhRB72rY82QGA==}
+ dev: false
+
/regenerate-unicode-properties@10.1.0:
resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
engines: {node: '>=4'}
@@ -8649,6 +8716,10 @@ packages:
engines: {node: '>=0.10.5'}
dev: true
+ /reselect@5.0.1:
+ resolution: {integrity: sha512-D72j2ubjgHpvuCiORWkOUxndHJrxDaSolheiz5CO+roz8ka97/4msh2E8F5qay4GawR5vzBt5MkbDHT+Rdy/Wg==}
+ dev: false
+
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -9814,6 +9885,14 @@ packages:
react: 18.2.0
tslib: 2.6.1
+ /use-sync-external-store@1.2.0(react@18.2.0):
+ resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
diff --git a/src/App.tsx b/src/App.tsx
index 5541660..71e489e 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,3 +1,15 @@
+import { Provider } from 'react-redux'
+
+import { Layout } from '@/components/ui/layout/layout.tsx'
+import { Router } from '@/router.tsx'
+import { store } from '@/services/store'
+
export function App() {
- return
Hello
+ return (
+
+
+
+
+
+ )
}
diff --git a/src/assets/icons/camera.tsx b/src/assets/icons/camera.tsx
index cfb48ff..08ff491 100644
--- a/src/assets/icons/camera.tsx
+++ b/src/assets/icons/camera.tsx
@@ -1,63 +1,71 @@
-import { SVGProps, Ref, forwardRef, memo } from 'react'
+import { Ref, SVGProps, forwardRef, memo } from 'react'
const SvgComponent = (props: SVGProps, ref: Ref) => (
-
+
)
const ForwardRef = forwardRef(SvgComponent)
diff --git a/src/assets/icons/check.tsx b/src/assets/icons/check.tsx
index 1f35bda..9e4ab19 100644
--- a/src/assets/icons/check.tsx
+++ b/src/assets/icons/check.tsx
@@ -1,19 +1,21 @@
-import { SVGProps, Ref, forwardRef, memo } from 'react'
+import { Ref, SVGProps, forwardRef, memo } from 'react'
const SvgComponent = (props: SVGProps, ref: Ref) => (
-
+
)
const ForwardRef = forwardRef(SvgComponent)
diff --git a/src/assets/icons/chevron-up.tsx b/src/assets/icons/chevron-up.tsx
index 15c33e1..e841c88 100644
--- a/src/assets/icons/chevron-up.tsx
+++ b/src/assets/icons/chevron-up.tsx
@@ -1,26 +1,28 @@
-import { SVGProps, Ref, forwardRef, memo } from 'react'
+import { Ref, SVGProps, forwardRef, memo } from 'react'
const ChevronUp = (props: SVGProps, ref: Ref) => (
-
+
)
const ForwardRef = forwardRef(ChevronUp)
const Memo = memo(ForwardRef)
diff --git a/src/assets/icons/close.tsx b/src/assets/icons/close.tsx
index 3b8a146..ec16872 100644
--- a/src/assets/icons/close.tsx
+++ b/src/assets/icons/close.tsx
@@ -1,29 +1,37 @@
-import { SVGProps, Ref, forwardRef, memo } from 'react'
+import { Ref, SVGProps, forwardRef, memo } from 'react'
const SvgComponent = (props: SVGProps, ref: Ref) => (
-