diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..dc7cdd26
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,12 @@
+{
+ "semi": true,
+ "trailingComma": "none",
+ "bracketSpacing": true,
+ "jsxBracketSameLine": false,
+ "printWidth": 80,
+ "tabWidth": 2,
+ "useTabs": false,
+ "quoteProps": "as-needed",
+ "arrowParens": "always",
+ "singleQuote": false
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index 0d7ab1a9..b9b56f23 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,9 @@
# telware frontend
+
+
+[](https://sonarcloud.io/summary/new_code?id=TelwareSW_telware-frontend)
+[](https://sonarcloud.io/summary/new_code?id=TelwareSW_telware-frontend)
+[](https://sonarcloud.io/summary/new_code?id=TelwareSW_telware-frontend)
+[](https://sonarcloud.io/summary/new_code?id=TelwareSW_telware-frontend)
+[](https://sonarcloud.io/summary/new_code?id=TelwareSW_telware-frontend)
+[](https://sonarcloud.io/summary/new_code?id=TelwareSW_telware-frontend)
diff --git a/app/babel.config.cjs b/app/babel.config.cjs
index dd0eb7da..2e2196ed 100644
--- a/app/babel.config.cjs
+++ b/app/babel.config.cjs
@@ -15,6 +15,7 @@ module.exports = {
["@babel/preset-env", { targets: { esmodules: true } }],
["@babel/preset-react", { runtime: "automatic" }],
"@babel/preset-typescript",
+ ["babel-preset-vite"],
],
plugins: [
[
diff --git a/app/eslint.config.js b/app/eslint.config.js
index 092408a9..5d33e303 100644
--- a/app/eslint.config.js
+++ b/app/eslint.config.js
@@ -1,28 +1,32 @@
-import js from '@eslint/js'
-import globals from 'globals'
-import reactHooks from 'eslint-plugin-react-hooks'
-import reactRefresh from 'eslint-plugin-react-refresh'
-import tseslint from 'typescript-eslint'
+import js from "@eslint/js";
+import globals from "globals";
+import reactHooks from "eslint-plugin-react-hooks";
+import reactRefresh from "eslint-plugin-react-refresh";
+import tseslint from "typescript-eslint";
+
+import prettier from "eslint-plugin-prettier";
export default tseslint.config(
- { ignores: ['dist'] },
+ { ignores: ["dist"] },
{
extends: [js.configs.recommended, ...tseslint.configs.recommended],
- files: ['**/*.{ts,tsx}'],
+ files: ["**/*.{ts,tsx}"],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
plugins: {
- 'react-hooks': reactHooks,
- 'react-refresh': reactRefresh,
+ "react-hooks": reactHooks,
+ "react-refresh": reactRefresh,
+ prettier: prettier,
},
rules: {
+ ...prettier.configs.recommended.rules,
...reactHooks.configs.recommended.rules,
- 'react-refresh/only-export-components': [
- 'warn',
+ "react-refresh/only-export-components": [
+ "warn",
{ allowConstantExport: true },
],
},
},
-)
+);
diff --git a/app/example.env b/app/example.env
new file mode 100644
index 00000000..52b9f14e
--- /dev/null
+++ b/app/example.env
@@ -0,0 +1,21 @@
+# NOTE: use those to run in production
+# VITE_BACKEND_API=http://localhost:3000/api/v1/
+# VITE_ENV=production
+# VITE_BACKEND_STORGAE=http://localhost:3000/static/media/
+# VITE_SOCKET_BACKEND_API=http://localhost:4000/socket-io
+
+# NOTE: use those to run in development (mocked backend)
+VITE_BACKEND_API=
+VITE_ENV=test
+VITE_BACKEND_STORGAE=https://i.pinimg.com/564x/26/76/a1/
+VITE_SOCKET_BACKEND_API=http://localhost:4000/socket-io
+
+# NOTE: Secrets
+VITE_REACT_APP_SITE_KEY=
+VITE_SITE_SECRET=
+VITE_GITHUB_CLIENT_ID=
+VITE_GOOGLE_CLIENT_ID=
+
+# NOTE: Ports
+VITE_PORT=5174
+
diff --git a/app/index.html b/app/index.html
index d9341ea3..31cd858c 100644
--- a/app/index.html
+++ b/app/index.html
@@ -3,9 +3,10 @@
-
+
+
/jest.setup.ts"],
testEnvironmentOptions: {
customExportConditions: [""],
diff --git a/app/jest.setup.ts b/app/jest.setup.ts
index d0de870d..dedc4d09 100644
--- a/app/jest.setup.ts
+++ b/app/jest.setup.ts
@@ -1 +1,5 @@
import "@testing-library/jest-dom";
+
+import dotenv from "dotenv";
+
+dotenv.config({ path: ".env" });
diff --git a/app/package-lock.json b/app/package-lock.json
index ad754c67..25fc8b5a 100644
--- a/app/package-lock.json
+++ b/app/package-lock.json
@@ -17,7 +17,13 @@
"@tanstack/react-query": "^5.59.13",
"@tanstack/react-query-devtools": "^5.59.15",
"@types/react-google-recaptcha": "^2.1.9",
+ "axios": "^1.7.8",
+ "date-fns": "^4.1.0",
+ "emoji-picker-react": "^4.12.0",
+ "idb": "^8.0.0",
"lottie-react": "^2.4.0",
+ "mitt": "^3.0.1",
+ "motion": "^11.13.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-filerobot-image-editor": "^4.9.0",
@@ -25,6 +31,9 @@
"react-hook-form": "^7.53.0",
"react-hot-toast": "^2.4.1",
"react-international-phone": "^4.3.0",
+ "react-intersection-observer": "^9.13.1",
+ "react-mentions": "^4.4.10",
+ "react-modal-image": "^2.6.0",
"react-router-dom": "^6.27.0",
"redux-mock-store": "^1.5.5",
"socket-client": "^1.0.0",
@@ -46,11 +55,16 @@
"@types/jest": "^29.5.14",
"@types/react": "^18.3.10",
"@types/react-dom": "^18.3.0",
+ "@types/react-modal-image": "^2.6.3",
"@types/redux-mock-store": "^1.0.6",
"@vitejs/plugin-react": "^4.3.2",
"babel-jest": "^29.7.0",
"babel-plugin-module-resolver": "^5.0.2",
+ "babel-preset-vite": "^1.1.3",
+ "dotenv": "^16.4.5",
"eslint": "^9.11.1",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
"eslint-plugin-react-refresh": "^0.4.12",
"globals": "^15.9.0",
@@ -69,13 +83,14 @@
"typescript-eslint": "^8.7.0",
"undici": "^6.20.1",
"vite": "^5.4.8",
+ "vite-plugin-mkcert": "^1.17.6",
"vite-tsconfig-paths": "^5.0.1"
}
},
"node_modules/@adobe/css-tools": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz",
- "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.1.tgz",
+ "integrity": "sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==",
"dev": true,
"license": "MIT"
},
@@ -249,9 +264,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
- "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz",
+ "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2104,16 +2119,16 @@
"license": "MIT"
},
"node_modules/@emotion/babel-plugin": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz",
- "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==",
+ "version": "11.13.5",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
+ "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.16.7",
"@babel/runtime": "^7.18.3",
"@emotion/hash": "^0.9.2",
"@emotion/memoize": "^0.9.0",
- "@emotion/serialize": "^1.2.0",
+ "@emotion/serialize": "^1.3.3",
"babel-plugin-macros": "^3.1.0",
"convert-source-map": "^1.5.0",
"escape-string-regexp": "^4.0.0",
@@ -2129,14 +2144,14 @@
"license": "MIT"
},
"node_modules/@emotion/cache": {
- "version": "11.13.1",
- "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz",
- "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==",
+ "version": "11.13.5",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.5.tgz",
+ "integrity": "sha512-Z3xbtJ+UcK76eWkagZ1onvn/wAVb1GOMuR15s30Fm2wrMgC7jzpnO2JZXr4eujTTqoQFUrZIw/rT0c6Zzjca1g==",
"license": "MIT",
"dependencies": {
"@emotion/memoize": "^0.9.0",
"@emotion/sheet": "^1.4.0",
- "@emotion/utils": "^1.4.0",
+ "@emotion/utils": "^1.4.2",
"@emotion/weak-memoize": "^0.4.0",
"stylis": "4.2.0"
}
@@ -2163,17 +2178,17 @@
"license": "MIT"
},
"node_modules/@emotion/react": {
- "version": "11.13.3",
- "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz",
- "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==",
+ "version": "11.13.5",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.5.tgz",
+ "integrity": "sha512-6zeCUxUH+EPF1s+YF/2hPVODeV/7V07YU5x+2tfuRL8MdW6rv5vb2+CBEGTGwBdux0OIERcOS+RzxeK80k2DsQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.3",
- "@emotion/babel-plugin": "^11.12.0",
- "@emotion/cache": "^11.13.0",
- "@emotion/serialize": "^1.3.1",
+ "@emotion/babel-plugin": "^11.13.5",
+ "@emotion/cache": "^11.13.5",
+ "@emotion/serialize": "^1.3.3",
"@emotion/use-insertion-effect-with-fallbacks": "^1.1.0",
- "@emotion/utils": "^1.4.0",
+ "@emotion/utils": "^1.4.2",
"@emotion/weak-memoize": "^0.4.0",
"hoist-non-react-statics": "^3.3.1"
},
@@ -2187,15 +2202,15 @@
}
},
"node_modules/@emotion/serialize": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz",
- "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
+ "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
"license": "MIT",
"dependencies": {
"@emotion/hash": "^0.9.2",
"@emotion/memoize": "^0.9.0",
"@emotion/unitless": "^0.10.0",
- "@emotion/utils": "^1.4.1",
+ "@emotion/utils": "^1.4.2",
"csstype": "^3.0.2"
}
},
@@ -2206,17 +2221,17 @@
"license": "MIT"
},
"node_modules/@emotion/styled": {
- "version": "11.13.0",
- "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz",
- "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==",
+ "version": "11.13.5",
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.5.tgz",
+ "integrity": "sha512-gnOQ+nGLPvDXgIx119JqGalys64lhMdnNQA9TMxhDA4K0Hq5+++OE20Zs5GxiCV9r814xQ2K5WmtofSpHVW6BQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.3",
- "@emotion/babel-plugin": "^11.12.0",
+ "@emotion/babel-plugin": "^11.13.5",
"@emotion/is-prop-valid": "^1.3.0",
- "@emotion/serialize": "^1.3.0",
+ "@emotion/serialize": "^1.3.3",
"@emotion/use-insertion-effect-with-fallbacks": "^1.1.0",
- "@emotion/utils": "^1.4.0"
+ "@emotion/utils": "^1.4.2"
},
"peerDependencies": {
"@emotion/react": "^11.0.0-rc.0",
@@ -2244,9 +2259,9 @@
}
},
"node_modules/@emotion/utils": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz",
- "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
+ "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
"license": "MIT"
},
"node_modules/@emotion/weak-memoize": {
@@ -2689,9 +2704,9 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
- "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz",
+ "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -2704,9 +2719,9 @@
}
},
"node_modules/@eslint/core": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
- "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz",
+ "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -2714,9 +2729,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
- "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz",
+ "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2771,9 +2786,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.14.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz",
- "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==",
+ "version": "9.15.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz",
+ "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2791,11 +2806,10 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz",
- "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz",
+ "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==",
"dev": true,
- "license": "Apache-2.0",
"dependencies": {
"levn": "^0.4.1"
},
@@ -2899,14 +2913,14 @@
}
},
"node_modules/@inquirer/confirm": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.1.tgz",
- "integrity": "sha512-6ycMm7k7NUApiMGfVc32yIPp28iPKxhGRMqoNDiUjq2RyTAkbs5Fx0TdzBqhabcKvniDdAAvHCmsRjnNfTsogw==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.2.tgz",
+ "integrity": "sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@inquirer/core": "^10.0.1",
- "@inquirer/type": "^3.0.0"
+ "@inquirer/core": "^10.1.0",
+ "@inquirer/type": "^3.0.1"
},
"engines": {
"node": ">=18"
@@ -2916,14 +2930,14 @@
}
},
"node_modules/@inquirer/core": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.0.1.tgz",
- "integrity": "sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.0.tgz",
+ "integrity": "sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@inquirer/figures": "^1.0.7",
- "@inquirer/type": "^3.0.0",
+ "@inquirer/figures": "^1.0.8",
+ "@inquirer/type": "^3.0.1",
"ansi-escapes": "^4.3.2",
"cli-width": "^4.1.0",
"mute-stream": "^2.0.0",
@@ -2950,9 +2964,9 @@
}
},
"node_modules/@inquirer/figures": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz",
- "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.8.tgz",
+ "integrity": "sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2960,9 +2974,9 @@
}
},
"node_modules/@inquirer/type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz",
- "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.1.tgz",
+ "integrity": "sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2972,6 +2986,109 @@
"@types/node": ">=18"
}
},
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -3420,9 +3537,9 @@
}
},
"node_modules/@mswjs/interceptors": {
- "version": "0.36.9",
- "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.36.9.tgz",
- "integrity": "sha512-mMRDUBwSNeCgjSMEWfjoh4Rm9fbyZ7xQ9SBq8eGHiiyRn1ieTip3pNEt0wxWVPPxR4i1Rv9bTkeEbkX7M4c15A==",
+ "version": "0.37.1",
+ "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.1.tgz",
+ "integrity": "sha512-SvE+tSpcX884RJrPCskXxoS965Ky/pYABDEhWW6oeSRhpUDLrS5nTvT5n1LLSDVDYvty4imVmXsy+3/ROVuknA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3438,9 +3555,9 @@
}
},
"node_modules/@mui/core-downloads-tracker": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.6.tgz",
- "integrity": "sha512-nz1SlR9TdBYYPz4qKoNasMPRiGb4PaIHFkzLzhju0YVYS5QSuFF2+n7CsiHMIDcHv3piPu/xDWI53ruhOqvZwQ==",
+ "version": "6.1.9",
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.9.tgz",
+ "integrity": "sha512-TWqj7b1w5cmSz4H/uf+y2AHxAH4ldPR7D2bz0XVyn60GCAo/zRbRPx7cF8gTs/i7CiYeHzV6dtat0VpMwOtolw==",
"license": "MIT",
"funding": {
"type": "opencollective",
@@ -3448,9 +3565,9 @@
}
},
"node_modules/@mui/icons-material": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.6.tgz",
- "integrity": "sha512-5r9urIL2lxXb/sPN3LFfFYEibsXJUb986HhhIeu1gOcte460pwdSiEhBSxkAuyT8Dj7jvu9MjqSBmSumQELo8A==",
+ "version": "6.1.9",
+ "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.9.tgz",
+ "integrity": "sha512-AzlhIT51rdjkZ/EcUV2dbhNkNSUHIqCnNoUxodpiTw8buyAUBd+qnxg5OBSuPpun/ZEdSSB8Q7Uyh6zqjiMsEQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0"
@@ -3463,7 +3580,7 @@
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
- "@mui/material": "^6.1.6",
+ "@mui/material": "^6.1.9",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
@@ -3474,16 +3591,16 @@
}
},
"node_modules/@mui/material": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.6.tgz",
- "integrity": "sha512-1yvejiQ/601l5AK3uIdUlAVElyCxoqKnl7QA+2oFB/2qYPWfRwDgavW/MoywS5Y2gZEslcJKhe0s2F3IthgFgw==",
+ "version": "6.1.9",
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.9.tgz",
+ "integrity": "sha512-NwqIN0bdsgzSbZd5JFcC+2ez0XW/XNs8uiV2PDHrqQ4qf/FEasFJG1z6g8JbCN0YlTrHZekVb17X0Fv0qcYJfQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
- "@mui/core-downloads-tracker": "^6.1.6",
- "@mui/system": "^6.1.6",
+ "@mui/core-downloads-tracker": "^6.1.9",
+ "@mui/system": "^6.1.9",
"@mui/types": "^7.2.19",
- "@mui/utils": "^6.1.6",
+ "@mui/utils": "^6.1.9",
"@popperjs/core": "^2.11.8",
"@types/react-transition-group": "^4.4.11",
"clsx": "^2.1.1",
@@ -3502,7 +3619,7 @@
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
- "@mui/material-pigment-css": "^6.1.6",
+ "@mui/material-pigment-css": "^6.1.9",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -3523,13 +3640,13 @@
}
},
"node_modules/@mui/private-theming": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.6.tgz",
- "integrity": "sha512-ioAiFckaD/fJSnTrUMWgjl9HYBWt7ixCh7zZw7gDZ+Tae7NuprNV6QJK95EidDT7K0GetR2rU3kAeIR61Myttw==",
+ "version": "6.1.9",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.9.tgz",
+ "integrity": "sha512-7aum/O1RquBYhfwL/7egDyl9GqJgPM6hoJDFFBbhF6Sgv9yI9v4w3ArKUkuVvR0CtVj4NXRVMKEioh1bjUzvuA==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
- "@mui/utils": "^6.1.6",
+ "@mui/utils": "^6.1.9",
"prop-types": "^15.8.1"
},
"engines": {
@@ -3550,14 +3667,14 @@
}
},
"node_modules/@mui/styled-engine": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.6.tgz",
- "integrity": "sha512-I+yS1cSuSvHnZDBO7e7VHxTWpj+R7XlSZvTC4lS/OIbUNJOMMSd3UDP6V2sfwzAdmdDNBi7NGCRv2SZ6O9hGDA==",
+ "version": "6.1.9",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.9.tgz",
+ "integrity": "sha512-xynSLlJRxHLzSfQaiDjkaTx8LiFb9ByVa7aOdwFnTxGWFMY1F+mkXwAUY4jDDE+MAxkWxlzzQE0wOohnsxhdQg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
- "@emotion/cache": "^11.13.1",
- "@emotion/serialize": "^1.3.2",
+ "@emotion/cache": "^11.13.5",
+ "@emotion/serialize": "^1.3.3",
"@emotion/sheet": "^1.4.0",
"csstype": "^3.1.3",
"prop-types": "^15.8.1"
@@ -3584,16 +3701,16 @@
}
},
"node_modules/@mui/system": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.6.tgz",
- "integrity": "sha512-qOf1VUE9wK8syiB0BBCp82oNBAVPYdj4Trh+G1s+L+ImYiKlubWhhqlnvWt3xqMevR+D2h1CXzA1vhX2FvA+VQ==",
+ "version": "6.1.9",
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.9.tgz",
+ "integrity": "sha512-8x+RucnNp21gfFYsklCaZf0COXbv3+v0lrVuXONxvPEkESi2rwLlOi8UPJfcz6LxZOAX3v3oQ7qw18vnpgueRg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
- "@mui/private-theming": "^6.1.6",
- "@mui/styled-engine": "^6.1.6",
+ "@mui/private-theming": "^6.1.9",
+ "@mui/styled-engine": "^6.1.9",
"@mui/types": "^7.2.19",
- "@mui/utils": "^6.1.6",
+ "@mui/utils": "^6.1.9",
"clsx": "^2.1.1",
"csstype": "^3.1.3",
"prop-types": "^15.8.1"
@@ -3638,9 +3755,9 @@
}
},
"node_modules/@mui/utils": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.6.tgz",
- "integrity": "sha512-sBS6D9mJECtELASLM+18WUcXF6RH3zNxBRFeyCRg8wad6NbyNrdxLuwK+Ikvc38sTZwBzAz691HmSofLqHd9sQ==",
+ "version": "6.1.9",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.9.tgz",
+ "integrity": "sha512-N7uzBp7p2or+xanXn3aH2OTINC6F/Ru/U8h6amhRZEev8bJhKN86rIDIoxZZ902tj+09LXtH83iLxFMjMHyqNA==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
@@ -3705,6 +3822,173 @@
"node": ">= 8"
}
},
+ "node_modules/@octokit/auth-token": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz",
+ "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz",
+ "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/auth-token": "^4.0.0",
+ "@octokit/graphql": "^7.1.0",
+ "@octokit/request": "^8.3.1",
+ "@octokit/request-error": "^5.1.0",
+ "@octokit/types": "^13.0.0",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz",
+ "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.1.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz",
+ "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/request": "^8.3.0",
+ "@octokit/types": "^13.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "22.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
+ "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "11.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz",
+ "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.5.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": "5"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz",
+ "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": "5"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz",
+ "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.5.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": "^5"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz",
+ "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/endpoint": "^9.0.1",
+ "@octokit/request-error": "^5.1.0",
+ "@octokit/types": "^13.1.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz",
+ "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.1.0",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "20.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz",
+ "integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/core": "^5.0.2",
+ "@octokit/plugin-paginate-rest": "11.3.1",
+ "@octokit/plugin-request-log": "^4.0.0",
+ "@octokit/plugin-rest-endpoint-methods": "13.2.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "13.6.2",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.2.tgz",
+ "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^22.2.0"
+ }
+ },
"node_modules/@open-draft/deferred-promise": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz",
@@ -3730,6 +4014,30 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@pkgr/core": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
"node_modules/@popperjs/core": {
"version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
@@ -3766,18 +4074,18 @@
}
},
"node_modules/@remix-run/router": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz",
- "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==",
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.0.tgz",
+ "integrity": "sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==",
"license": "MIT",
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.4.tgz",
- "integrity": "sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz",
+ "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==",
"cpu": [
"arm"
],
@@ -3789,9 +4097,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.4.tgz",
- "integrity": "sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz",
+ "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==",
"cpu": [
"arm64"
],
@@ -3803,9 +4111,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.4.tgz",
- "integrity": "sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz",
+ "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==",
"cpu": [
"arm64"
],
@@ -3817,9 +4125,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.4.tgz",
- "integrity": "sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz",
+ "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==",
"cpu": [
"x64"
],
@@ -3831,9 +4139,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.4.tgz",
- "integrity": "sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz",
+ "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==",
"cpu": [
"arm64"
],
@@ -3845,9 +4153,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.4.tgz",
- "integrity": "sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz",
+ "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==",
"cpu": [
"x64"
],
@@ -3859,9 +4167,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.4.tgz",
- "integrity": "sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz",
+ "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==",
"cpu": [
"arm"
],
@@ -3873,9 +4181,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.4.tgz",
- "integrity": "sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz",
+ "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==",
"cpu": [
"arm"
],
@@ -3887,9 +4195,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.4.tgz",
- "integrity": "sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz",
+ "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==",
"cpu": [
"arm64"
],
@@ -3901,9 +4209,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.4.tgz",
- "integrity": "sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz",
+ "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==",
"cpu": [
"arm64"
],
@@ -3915,9 +4223,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.4.tgz",
- "integrity": "sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz",
+ "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==",
"cpu": [
"ppc64"
],
@@ -3929,9 +4237,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.4.tgz",
- "integrity": "sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz",
+ "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==",
"cpu": [
"riscv64"
],
@@ -3943,9 +4251,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.4.tgz",
- "integrity": "sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz",
+ "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==",
"cpu": [
"s390x"
],
@@ -3957,9 +4265,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.4.tgz",
- "integrity": "sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz",
+ "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==",
"cpu": [
"x64"
],
@@ -3971,9 +4279,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.4.tgz",
- "integrity": "sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz",
+ "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==",
"cpu": [
"x64"
],
@@ -3985,9 +4293,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.4.tgz",
- "integrity": "sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz",
+ "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==",
"cpu": [
"arm64"
],
@@ -3999,9 +4307,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.4.tgz",
- "integrity": "sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz",
+ "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==",
"cpu": [
"ia32"
],
@@ -4013,9 +4321,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.4.tgz",
- "integrity": "sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz",
+ "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==",
"cpu": [
"x64"
],
@@ -4095,7 +4403,8 @@
"node_modules/@socket.io/component-emitter": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
- "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="
+ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
+ "license": "MIT"
},
"node_modules/@styled/typescript-styled-plugin": {
"version": "1.0.1",
@@ -4112,9 +4421,9 @@
}
},
"node_modules/@tanstack/query-core": {
- "version": "5.59.17",
- "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.59.17.tgz",
- "integrity": "sha512-jWdDiif8kaqnRGHNXAa9CnudtxY5v9DUxXhodgqX2Rwzj+1UwStDHEbBd9IA5C7VYAaJ2s+BxFR6PUBs8ERorA==",
+ "version": "5.61.5",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.61.5.tgz",
+ "integrity": "sha512-iG5vqurEOEbv+paP6kW3zPENa99kSIrd1THISJMaTwVlJ+N5yjVDNOUwp9McK2DWqWCXM3v13ubBbAyhxT78UQ==",
"license": "MIT",
"funding": {
"type": "github",
@@ -4122,9 +4431,9 @@
}
},
"node_modules/@tanstack/query-devtools": {
- "version": "5.59.19",
- "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.59.19.tgz",
- "integrity": "sha512-Gw+3zsADpqiYgx/6MMr9bP1+x2LR8vOuGjo5Un/89qwwP3z7WAHPWFagLFDYkLq68NX7ekUpW/EOYlUMugMXGA==",
+ "version": "5.61.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.61.4.tgz",
+ "integrity": "sha512-21Tw+u8E3IJJj4A/Bct4H0uBaDTEu7zBrR79FeSyY+mS2gx5/m316oDtJiKkILc819VSTYt+sFzODoJNcpPqZQ==",
"license": "MIT",
"funding": {
"type": "github",
@@ -4132,12 +4441,12 @@
}
},
"node_modules/@tanstack/react-query": {
- "version": "5.59.19",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.59.19.tgz",
- "integrity": "sha512-xLRfyFyQOFcLltKCds0LijfC6/HQJrrTTnZB8ciyn74LIkVAm++vZJ6eUVG20RmJtdP8REdy7vSOYW4M3//XLA==",
+ "version": "5.61.5",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.61.5.tgz",
+ "integrity": "sha512-rjy8aqPgBBEz/rjJnpnuhi8TVkVTorMUsJlM3lMvrRb5wK6yzfk34Er0fnJ7w/4qyF01SnXsLB/QsTBsLF5PaQ==",
"license": "MIT",
"dependencies": {
- "@tanstack/query-core": "5.59.17"
+ "@tanstack/query-core": "5.61.5"
},
"funding": {
"type": "github",
@@ -4148,19 +4457,19 @@
}
},
"node_modules/@tanstack/react-query-devtools": {
- "version": "5.59.19",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.59.19.tgz",
- "integrity": "sha512-mYFWTHLtJr2HdyYPZPzzvQ2ksCsSL6L04fCtusPFD3waskXrtmvWvyuDIGeEGdVAYS0Urwxw/0sYvcTVQZH+zQ==",
+ "version": "5.61.5",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.61.5.tgz",
+ "integrity": "sha512-P2DwlKyoGar6FX2XL324gM7AX8fuXm6DecLvfUoGpWbxtbuAtfzglRiCDLKkc5tJ7pekuaZsFFas/cyfTymoCQ==",
"license": "MIT",
"dependencies": {
- "@tanstack/query-devtools": "5.59.19"
+ "@tanstack/query-devtools": "5.61.4"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/tannerlinsley"
},
"peerDependencies": {
- "@tanstack/react-query": "^5.59.19",
+ "@tanstack/react-query": "^5.61.5",
"react": "^18 || ^19"
}
},
@@ -4498,13 +4807,13 @@
}
},
"node_modules/@types/node": {
- "version": "22.9.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
- "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
+ "version": "22.10.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz",
+ "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "undici-types": "~6.19.8"
+ "undici-types": "~6.20.0"
}
},
"node_modules/@types/parse-json": {
@@ -4547,6 +4856,16 @@
"@types/react": "*"
}
},
+ "node_modules/@types/react-modal-image": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/@types/react-modal-image/-/react-modal-image-2.6.3.tgz",
+ "integrity": "sha512-Uh4joinWiyRD2e4Q+MRiMiQfz7K7W16peF2xfEx821t7p6O6sG4xi42uuN5tsYhx1mTOsagUPqIQiWcYgKtkww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
"node_modules/@types/react-reconciler": {
"version": "0.28.8",
"resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz",
@@ -4567,9 +4886,9 @@
}
},
"node_modules/@types/redux-mock-store": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/redux-mock-store/-/redux-mock-store-1.0.6.tgz",
- "integrity": "sha512-eg5RDfhJTXuoJjOMyXiJbaDb1B8tfTaJixscmu+jOusj6adGC0Krntz09Tf4gJgXeCqCrM5bBMd+B7ez0izcAQ==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@types/redux-mock-store/-/redux-mock-store-1.5.0.tgz",
+ "integrity": "sha512-jcscBazm6j05Hs6xYCca6psTUBbFT2wqMxT7wZEHAYFxHB/I8jYk7d5msrHUlDiSL02HdTqTmkK2oIV8i3C8DA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4638,17 +4957,17 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.13.0.tgz",
- "integrity": "sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz",
+ "integrity": "sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.13.0",
- "@typescript-eslint/type-utils": "8.13.0",
- "@typescript-eslint/utils": "8.13.0",
- "@typescript-eslint/visitor-keys": "8.13.0",
+ "@typescript-eslint/scope-manager": "8.16.0",
+ "@typescript-eslint/type-utils": "8.16.0",
+ "@typescript-eslint/utils": "8.16.0",
+ "@typescript-eslint/visitor-keys": "8.16.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
@@ -4672,16 +4991,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.13.0.tgz",
- "integrity": "sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.16.0.tgz",
+ "integrity": "sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.13.0",
- "@typescript-eslint/types": "8.13.0",
- "@typescript-eslint/typescript-estree": "8.13.0",
- "@typescript-eslint/visitor-keys": "8.13.0",
+ "@typescript-eslint/scope-manager": "8.16.0",
+ "@typescript-eslint/types": "8.16.0",
+ "@typescript-eslint/typescript-estree": "8.16.0",
+ "@typescript-eslint/visitor-keys": "8.16.0",
"debug": "^4.3.4"
},
"engines": {
@@ -4701,14 +5020,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz",
- "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz",
+ "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.13.0",
- "@typescript-eslint/visitor-keys": "8.13.0"
+ "@typescript-eslint/types": "8.16.0",
+ "@typescript-eslint/visitor-keys": "8.16.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4719,14 +5038,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.13.0.tgz",
- "integrity": "sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz",
+ "integrity": "sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "8.13.0",
- "@typescript-eslint/utils": "8.13.0",
+ "@typescript-eslint/typescript-estree": "8.16.0",
+ "@typescript-eslint/utils": "8.16.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
@@ -4737,6 +5056,9 @@
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ },
"peerDependenciesMeta": {
"typescript": {
"optional": true
@@ -4744,9 +5066,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz",
- "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz",
+ "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4758,14 +5080,14 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz",
- "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz",
+ "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "8.13.0",
- "@typescript-eslint/visitor-keys": "8.13.0",
+ "@typescript-eslint/types": "8.16.0",
+ "@typescript-eslint/visitor-keys": "8.16.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -4826,16 +5148,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.13.0.tgz",
- "integrity": "sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.16.0.tgz",
+ "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "8.13.0",
- "@typescript-eslint/types": "8.13.0",
- "@typescript-eslint/typescript-estree": "8.13.0"
+ "@typescript-eslint/scope-manager": "8.16.0",
+ "@typescript-eslint/types": "8.16.0",
+ "@typescript-eslint/typescript-estree": "8.16.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4846,17 +5168,22 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz",
- "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz",
+ "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.13.0",
- "eslint-visitor-keys": "^3.4.3"
+ "@typescript-eslint/types": "8.16.0",
+ "eslint-visitor-keys": "^4.2.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4866,29 +5193,16 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
"node_modules/@vitejs/plugin-react": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz",
- "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz",
+ "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/core": "^7.25.2",
- "@babel/plugin-transform-react-jsx-self": "^7.24.7",
- "@babel/plugin-transform-react-jsx-source": "^7.24.7",
+ "@babel/core": "^7.26.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.25.9",
+ "@babel/plugin-transform-react-jsx-source": "^7.25.9",
"@types/babel__core": "^7.20.5",
"react-refresh": "^0.14.2"
},
@@ -4896,13 +5210,13 @@
"node": "^14.18.0 || >=16.0.0"
},
"peerDependencies": {
- "vite": "^4.2.0 || ^5.0.0"
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
}
},
"node_modules/@vscode/emmet-helper": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.9.3.tgz",
- "integrity": "sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.11.0.tgz",
+ "integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4910,7 +5224,7 @@
"jsonc-parser": "^2.3.0",
"vscode-languageserver-textdocument": "^1.0.1",
"vscode-languageserver-types": "^3.15.1",
- "vscode-uri": "^2.1.2"
+ "vscode-uri": "^3.0.8"
}
},
"node_modules/@vscode/l10n": {
@@ -5099,9 +5413,19 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true,
"license": "MIT"
},
+ "node_modules/axios": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz",
+ "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
"node_modules/babel-jest": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
@@ -5194,14 +5518,14 @@
"license": "MIT"
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.11",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
- "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
+ "version": "0.4.12",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz",
+ "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.6.2",
+ "@babel/helper-define-polyfill-provider": "^0.6.3",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -5223,62 +5547,167 @@
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
- "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz",
+ "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.2"
+ "@babel/helper-define-polyfill-provider": "^0.6.3"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/babel-preset-current-node-syntax": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz",
- "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==",
+ "node_modules/babel-plugin-transform-vite-meta-env": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-vite-meta-env/-/babel-plugin-transform-vite-meta-env-1.0.3.tgz",
+ "integrity": "sha512-eyfuDEXrMu667TQpmctHeTlJrZA6jXYHyEJFjcM0yEa60LS/LXlOg2PBbMb8DVS+V9CnTj/j9itdlDVMcY2zEg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-import-attributes": "^7.24.7",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
+ "@babel/runtime": "^7.13.9",
+ "@types/babel__core": "^7.1.12"
}
},
- "node_modules/babel-preset-jest": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
- "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
+ "node_modules/babel-plugin-transform-vite-meta-glob": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-vite-meta-glob/-/babel-plugin-transform-vite-meta-glob-1.1.2.tgz",
+ "integrity": "sha512-o984FUo++WYnfgUaC8ymzmNPng5Kda5A6j6PFC0uOqhFXlAsD6mNhEBhaNzbUGfq/aPcyeGo67fYXlg20rh9aA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "babel-plugin-jest-hoist": "^29.6.3",
- "babel-preset-current-node-syntax": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
+ "@babel/runtime": "^7.13.9",
+ "@types/babel__core": "^7.1.12",
+ "glob": "^10.3.10"
+ }
+ },
+ "node_modules/babel-plugin-transform-vite-meta-glob/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-vite-meta-glob/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/babel-plugin-transform-vite-meta-glob/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/babel-plugin-transform-vite-meta-glob/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/babel-plugin-transform-vite-meta-hot": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-vite-meta-hot/-/babel-plugin-transform-vite-meta-hot-1.0.0.tgz",
+ "integrity": "sha512-qF7T46bDG5UPPOfy4MFgQJyd3mZvm1sGOR2gZ4lIHy6DEcxAVTIt39/adAn89il44CvwestshuEybKPMR+L/Tg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.9",
+ "@types/babel__core": "^7.1.12"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz",
+ "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5"
+ },
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
+ "node_modules/babel-preset-jest": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/babel-preset-vite": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-vite/-/babel-preset-vite-1.1.3.tgz",
+ "integrity": "sha512-xSt/EiezzeMd4RI2hjMCNyn/FGzGeroKODPMAUTsgpeHC4dFf2qiCQfyNuiNzn1OwoF4n+NYSsORhUN5G/2KTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.9",
+ "@types/babel__core": "^7.1.12",
+ "babel-plugin-transform-vite-meta-env": "1.0.3",
+ "babel-plugin-transform-vite-meta-glob": "1.1.2",
+ "babel-plugin-transform-vite-meta-hot": "1.0.0"
+ }
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -5286,6 +5715,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/before-after-hook": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
+ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -5402,9 +5838,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001677",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz",
- "integrity": "sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==",
+ "version": "1.0.30001684",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz",
+ "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==",
"dev": true,
"funding": [
{
@@ -5566,7 +6002,6 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
@@ -5659,11 +6094,10 @@
"license": "MIT"
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -5748,6 +6182,16 @@
"node": ">=12"
}
},
+ "node_modules/date-fns": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
"node_modules/debug": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
@@ -5808,12 +6252,18 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
+ "node_modules/deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/dequal": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
@@ -5885,6 +6335,26 @@
"node": ">=12"
}
},
+ "node_modules/dotenv": {
+ "version": "16.4.5",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/ejs": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
@@ -5902,9 +6372,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.52",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.52.tgz",
- "integrity": "sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==",
+ "version": "1.5.66",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.66.tgz",
+ "integrity": "sha512-pI2QF6+i+zjPbqRzJwkMvtvkdI7MjVbSh2g8dlMguDJIXEPw+kwasS1Jl+YGPEBfGVxsVgGUratAKymPdPo2vQ==",
"dev": true,
"license": "ISC"
},
@@ -5938,6 +6408,21 @@
"@emmetio/css-abbreviation": "^2.1.8"
}
},
+ "node_modules/emoji-picker-react": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/emoji-picker-react/-/emoji-picker-react-4.12.0.tgz",
+ "integrity": "sha512-q2c8UcZH0eRIMj41bj0k1akTjk69tsu+E7EzkW7giN66iltF6H9LQvQvw6ugscsxdC+1lmt3WZpQkkY65J95tg==",
+ "license": "MIT",
+ "dependencies": {
+ "flairup": "1.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": ">=16"
+ }
+ },
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -5949,6 +6434,7 @@
"version": "6.6.2",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.2.tgz",
"integrity": "sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==",
+ "license": "MIT",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.3.1",
@@ -5961,6 +6447,7 @@
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
"integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "license": "MIT",
"engines": {
"node": ">=10.0.0"
},
@@ -5981,6 +6468,7 @@
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
"integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
+ "license": "MIT",
"engines": {
"node": ">=10.0.0"
}
@@ -6102,27 +6590,27 @@
}
},
"node_modules/eslint": {
- "version": "9.14.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz",
- "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==",
+ "version": "9.15.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz",
+ "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.18.0",
- "@eslint/core": "^0.7.0",
- "@eslint/eslintrc": "^3.1.0",
- "@eslint/js": "9.14.0",
- "@eslint/plugin-kit": "^0.2.0",
+ "@eslint/config-array": "^0.19.0",
+ "@eslint/core": "^0.9.0",
+ "@eslint/eslintrc": "^3.2.0",
+ "@eslint/js": "9.15.0",
+ "@eslint/plugin-kit": "^0.2.3",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.4.0",
+ "@humanwhocodes/retry": "^0.4.1",
"@types/estree": "^1.0.6",
"@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
+ "cross-spawn": "^7.0.5",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
"eslint-scope": "^8.2.0",
@@ -6141,8 +6629,7 @@
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "text-table": "^0.2.0"
+ "optionator": "^0.9.3"
},
"bin": {
"eslint": "bin/eslint.js"
@@ -6162,6 +6649,50 @@
}
}
},
+ "node_modules/eslint-config-prettier": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz",
+ "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0",
+ "synckit": "^0.9.1"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-plugin-prettier"
+ },
+ "peerDependencies": {
+ "@types/eslint": ">=8.0.0",
+ "eslint": ">=8.0.0",
+ "eslint-config-prettier": "*",
+ "prettier": ">=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/eslint": {
+ "optional": true
+ },
+ "eslint-config-prettier": {
+ "optional": true
+ }
+ }
+ },
"node_modules/eslint-plugin-react-hooks": {
"version": "5.1.0-rc-fb9a90fa48-20240614",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0-rc-fb9a90fa48-20240614.tgz",
@@ -6399,6 +6930,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/fast-diff": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
"node_modules/fast-glob": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
@@ -6552,6 +7090,12 @@
"node": ">=8"
}
},
+ "node_modules/flairup": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/flairup/-/flairup-1.0.0.tgz",
+ "integrity": "sha512-IKlE+pNvL2R+kVL1kEhUYqRxVqeFnjiIvHWDMLFXNaqyUdFXQM2wte44EfMYJNHkW16X991t2Zg8apKkhv7OBA==",
+ "license": "MIT"
+ },
"node_modules/flat-cache": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
@@ -6567,17 +7111,66 @@
}
},
"node_modules/flatted": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
- "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz",
+ "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
"dev": true,
"license": "ISC"
},
+ "node_modules/follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/foreground-child/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/form-data": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
"integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
@@ -6588,6 +7181,33 @@
"node": ">= 6"
}
},
+ "node_modules/framer-motion": {
+ "version": "11.13.1",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.13.1.tgz",
+ "integrity": "sha512-F40tpGTHByhn9h3zdBQPcEro+pSLtzARcocbNqAyfBI+u9S+KZuHH/7O9+z+GEkoF3eqFxfvVw0eBDytohwqmQ==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-dom": "^11.13.0",
+ "motion-utils": "^11.13.0",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -6897,6 +7517,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/idb": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.0.tgz",
+ "integrity": "sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw==",
+ "license": "ISC"
+ },
"node_modules/identity-obj-proxy": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz",
@@ -7015,6 +7641,14 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -7217,6 +7851,22 @@
"react": ">=18.0"
}
},
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
"node_modules/jake": {
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
@@ -8552,7 +9202,6 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -8562,7 +9211,6 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
@@ -8614,6 +9262,48 @@
"node": ">=8"
}
},
+ "node_modules/mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "license": "MIT"
+ },
+ "node_modules/motion": {
+ "version": "11.13.1",
+ "resolved": "https://registry.npmjs.org/motion/-/motion-11.13.1.tgz",
+ "integrity": "sha512-64+QpZQv8WJJFn+tEEzX04il9s6ReA6lhKRZaxzD6SunGqoaq5g+AFVfcKWme8N83eytUOpGp7mpfJ9cyZlhAA==",
+ "license": "MIT",
+ "dependencies": {
+ "framer-motion": "^11.13.1",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/motion-dom": {
+ "version": "11.13.0",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.13.0.tgz",
+ "integrity": "sha512-Oc1MLGJQ6nrvXccXA89lXtOqFyBmvHtaDcTRGT66o8Czl7nuA8BeHAd9MQV1pQKX0d2RHFBFaw5g3k23hQJt0w=="
+ },
+ "node_modules/motion-utils": {
+ "version": "11.13.0",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.13.0.tgz",
+ "integrity": "sha512-lq6TzXkH5c/ysJQBxgLXgM01qwBH1b4goTPh57VvZWJbVJZF/0SB31UWEn4EIqbVPf3au88n2rvK17SpDTja1A=="
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -8621,18 +9311,18 @@
"license": "MIT"
},
"node_modules/msw": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/msw/-/msw-2.6.0.tgz",
- "integrity": "sha512-n3tx2w0MZ3H4pxY0ozrQ4sNPzK/dGtlr2cIIyuEsgq2Bhy4wvcW6ZH2w/gXM9+MEUY6HC1fWhqtcXDxVZr5Jxw==",
+ "version": "2.6.6",
+ "resolved": "https://registry.npmjs.org/msw/-/msw-2.6.6.tgz",
+ "integrity": "sha512-npfIIVRHKQX3Lw4aLWX4wBh+lQwpqdZNyJYB5K/+ktK8NhtkdsTxGK7WDrgknozcVyRI7TOqY6yBS9j2FTR+YQ==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "@bundled-es-modules/cookie": "^2.0.0",
+ "@bundled-es-modules/cookie": "^2.0.1",
"@bundled-es-modules/statuses": "^1.0.1",
"@bundled-es-modules/tough-cookie": "^0.1.6",
"@inquirer/confirm": "^5.0.0",
- "@mswjs/interceptors": "^0.36.5",
+ "@mswjs/interceptors": "^0.37.0",
"@open-draft/deferred-promise": "^2.2.0",
"@open-draft/until": "^2.1.0",
"@types/cookie": "^0.6.0",
@@ -8666,9 +9356,9 @@
}
},
"node_modules/msw/node_modules/type-fest": {
- "version": "4.26.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz",
- "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==",
+ "version": "4.29.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.29.0.tgz",
+ "integrity": "sha512-RPYt6dKyemXJe7I6oNstcH24myUGSReicxcHTvCLgzm4e0n8y05dGvcGB15/SoPRBmhlMthWQ9pvKyL81ko8nQ==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
@@ -8689,9 +9379,9 @@
}
},
"node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
"funding": [
{
"type": "github",
@@ -8872,6 +9562,13 @@
"node": ">=6"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -9167,9 +9864,9 @@
}
},
"node_modules/prettier": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
- "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.1.tgz",
+ "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -9182,6 +9879,19 @@
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/pretty-format": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
@@ -9257,12 +9967,21 @@
"integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==",
"license": "MIT"
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
"node_modules/psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.13.0.tgz",
+ "integrity": "sha512-BFwmFXiJoFqlUpZ5Qssolv15DMyc84gTBds1BjsV1BfXEo1UyyD7GsmN67n7J77uRhoSNW1AXtXKPLcBFQn9Aw==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ }
},
"node_modules/punycode": {
"version": "2.3.1",
@@ -9427,9 +10146,9 @@
}
},
"node_modules/react-hook-form": {
- "version": "7.53.1",
- "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.1.tgz",
- "integrity": "sha512-6aiQeBda4zjcuaugWvim9WsGqisoUk+etmFEsSUMm451/Ic8L/UAb7sRtMj3V+Hdzm6mMjU1VhiSzYUZeBm0Vg==",
+ "version": "7.53.2",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.2.tgz",
+ "integrity": "sha512-YVel6fW5sOeedd1524pltpHX+jgU2u3DSDtXEaBORNdqiNrsX/nUI/iGXONegttg0mJVnfrIkiV0cmTU6Oo2xw==",
"license": "MIT",
"engines": {
"node": ">=18.0.0"
@@ -9468,6 +10187,21 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/react-intersection-observer": {
+ "version": "9.13.1",
+ "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.1.tgz",
+ "integrity": "sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-is": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
@@ -9506,6 +10240,40 @@
"react-dom": ">=18.0.0"
}
},
+ "node_modules/react-mentions": {
+ "version": "4.4.10",
+ "resolved": "https://registry.npmjs.org/react-mentions/-/react-mentions-4.4.10.tgz",
+ "integrity": "sha512-JHiQlgF1oSZR7VYPjq32wy97z1w1oE4x10EuhKjPr4WUKhVzG1uFQhQjKqjQkbVqJrmahf+ldgBTv36NrkpKpA==",
+ "dependencies": {
+ "@babel/runtime": "7.4.5",
+ "invariant": "^2.2.4",
+ "prop-types": "^15.5.8",
+ "substyle": "^9.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.3",
+ "react-dom": ">=16.8.3"
+ }
+ },
+ "node_modules/react-mentions/node_modules/@babel/runtime": {
+ "version": "7.4.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
+ "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
+ "dependencies": {
+ "regenerator-runtime": "^0.13.2"
+ }
+ },
+ "node_modules/react-mentions/node_modules/regenerator-runtime": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+ },
+ "node_modules/react-modal-image": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/react-modal-image/-/react-modal-image-2.6.0.tgz",
+ "integrity": "sha512-NNc1xPKzFAn0VsNMdJ8NXt6c54aL/z0fcoYmw9qn4SBUONdGl+8LOQ0sTfo0wtdzcjLiby/ncloHcAL+UI+wIA==",
+ "license": "MIT"
+ },
"node_modules/react-reconciler": {
"version": "0.29.2",
"resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.2.tgz",
@@ -9558,12 +10326,12 @@
}
},
"node_modules/react-router": {
- "version": "6.27.0",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz",
- "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==",
+ "version": "6.28.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.28.0.tgz",
+ "integrity": "sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==",
"license": "MIT",
"dependencies": {
- "@remix-run/router": "1.20.0"
+ "@remix-run/router": "1.21.0"
},
"engines": {
"node": ">=14.0.0"
@@ -9573,13 +10341,13 @@
}
},
"node_modules/react-router-dom": {
- "version": "6.27.0",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz",
- "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==",
+ "version": "6.28.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.28.0.tgz",
+ "integrity": "sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==",
"license": "MIT",
"dependencies": {
- "@remix-run/router": "1.20.0",
- "react-router": "6.27.0"
+ "@remix-run/router": "1.21.0",
+ "react-router": "6.28.0"
},
"engines": {
"node": ">=14.0.0"
@@ -9693,16 +10461,16 @@
}
},
"node_modules/regexpu-core": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz",
- "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
+ "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
"dev": true,
"license": "MIT",
"dependencies": {
"regenerate": "^1.4.2",
"regenerate-unicode-properties": "^10.2.0",
"regjsgen": "^0.8.0",
- "regjsparser": "^0.11.0",
+ "regjsparser": "^0.12.0",
"unicode-match-property-ecmascript": "^2.0.0",
"unicode-match-property-value-ecmascript": "^2.1.0"
},
@@ -9718,9 +10486,9 @@
"license": "MIT"
},
"node_modules/regjsparser": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz",
- "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==",
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz",
+ "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -9816,9 +10584,9 @@
}
},
"node_modules/rollup": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.4.tgz",
- "integrity": "sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==",
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz",
+ "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9832,24 +10600,24 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.24.4",
- "@rollup/rollup-android-arm64": "4.24.4",
- "@rollup/rollup-darwin-arm64": "4.24.4",
- "@rollup/rollup-darwin-x64": "4.24.4",
- "@rollup/rollup-freebsd-arm64": "4.24.4",
- "@rollup/rollup-freebsd-x64": "4.24.4",
- "@rollup/rollup-linux-arm-gnueabihf": "4.24.4",
- "@rollup/rollup-linux-arm-musleabihf": "4.24.4",
- "@rollup/rollup-linux-arm64-gnu": "4.24.4",
- "@rollup/rollup-linux-arm64-musl": "4.24.4",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.24.4",
- "@rollup/rollup-linux-riscv64-gnu": "4.24.4",
- "@rollup/rollup-linux-s390x-gnu": "4.24.4",
- "@rollup/rollup-linux-x64-gnu": "4.24.4",
- "@rollup/rollup-linux-x64-musl": "4.24.4",
- "@rollup/rollup-win32-arm64-msvc": "4.24.4",
- "@rollup/rollup-win32-ia32-msvc": "4.24.4",
- "@rollup/rollup-win32-x64-msvc": "4.24.4",
+ "@rollup/rollup-android-arm-eabi": "4.27.4",
+ "@rollup/rollup-android-arm64": "4.27.4",
+ "@rollup/rollup-darwin-arm64": "4.27.4",
+ "@rollup/rollup-darwin-x64": "4.27.4",
+ "@rollup/rollup-freebsd-arm64": "4.27.4",
+ "@rollup/rollup-freebsd-x64": "4.27.4",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.27.4",
+ "@rollup/rollup-linux-arm-musleabihf": "4.27.4",
+ "@rollup/rollup-linux-arm64-gnu": "4.27.4",
+ "@rollup/rollup-linux-arm64-musl": "4.27.4",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4",
+ "@rollup/rollup-linux-riscv64-gnu": "4.27.4",
+ "@rollup/rollup-linux-s390x-gnu": "4.27.4",
+ "@rollup/rollup-linux-x64-gnu": "4.27.4",
+ "@rollup/rollup-linux-x64-musl": "4.27.4",
+ "@rollup/rollup-win32-arm64-msvc": "4.27.4",
+ "@rollup/rollup-win32-ia32-msvc": "4.27.4",
+ "@rollup/rollup-win32-x64-msvc": "4.27.4",
"fsevents": "~2.3.2"
}
},
@@ -9972,12 +10740,14 @@
"node_modules/socket-client": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/socket-client/-/socket-client-1.0.0.tgz",
- "integrity": "sha512-9Q5nwYFFL+055kJ2XUQHMO6Np3c8RgHCl9c7Bf/QvW0jCXxbB5bcwY4WGetawA6lPvFirLwlm3d93Q3wVbp5qQ=="
+ "integrity": "sha512-9Q5nwYFFL+055kJ2XUQHMO6Np3c8RgHCl9c7Bf/QvW0jCXxbB5bcwY4WGetawA6lPvFirLwlm3d93Q3wVbp5qQ==",
+ "license": "ISC"
},
"node_modules/socket.io-client": {
"version": "4.8.1",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz",
"integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==",
+ "license": "MIT",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.3.2",
@@ -9992,6 +10762,7 @@
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
"integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
+ "license": "MIT",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.3.1"
@@ -10115,6 +10886,22 @@
"node": ">=8"
}
},
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -10128,6 +10915,20 @@
"node": ">=8"
}
},
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-bom": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
@@ -10235,6 +11036,18 @@
"integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
"license": "MIT"
},
+ "node_modules/substyle": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/substyle/-/substyle-9.4.1.tgz",
+ "integrity": "sha512-VOngeq/W1/UkxiGzeqVvDbGDPM8XgUyJVWjrqeh+GgKqspEPiLYndK+XRcsKUHM5Muz/++1ctJ1QCF/OqRiKWA==",
+ "dependencies": {
+ "@babel/runtime": "^7.3.4",
+ "invariant": "^2.2.4"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.3"
+ }
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -10267,6 +11080,23 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/synckit": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz",
+ "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@pkgr/core": "^0.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
"node_modules/test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@@ -10304,13 +11134,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/tiny-case": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
@@ -10382,9 +11205,9 @@
}
},
"node_modules/ts-api-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz",
- "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.2.tgz",
+ "integrity": "sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10564,9 +11387,9 @@
}
},
"node_modules/typescript": {
- "version": "5.6.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
- "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
+ "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -10578,15 +11401,15 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.13.0.tgz",
- "integrity": "sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.16.0.tgz",
+ "integrity": "sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.13.0",
- "@typescript-eslint/parser": "8.13.0",
- "@typescript-eslint/utils": "8.13.0"
+ "@typescript-eslint/eslint-plugin": "8.16.0",
+ "@typescript-eslint/parser": "8.16.0",
+ "@typescript-eslint/utils": "8.16.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10595,6 +11418,9 @@
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ },
"peerDependenciesMeta": {
"typescript": {
"optional": true
@@ -10609,9 +11435,9 @@
"license": "MIT"
},
"node_modules/undici": {
- "version": "6.20.1",
- "resolved": "https://registry.npmjs.org/undici/-/undici-6.20.1.tgz",
- "integrity": "sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.0.tgz",
+ "integrity": "sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10619,9 +11445,9 @@
}
},
"node_modules/undici-types": {
- "version": "6.19.8",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
- "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
"dev": true,
"license": "MIT"
},
@@ -10669,6 +11495,13 @@
"node": ">=4"
}
},
+ "node_modules/universal-user-agent": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz",
+ "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/universalify": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
@@ -10790,9 +11623,9 @@
}
},
"node_modules/vite": {
- "version": "5.4.10",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz",
- "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
+ "version": "5.4.11",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
+ "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10849,10 +11682,29 @@
}
}
},
+ "node_modules/vite-plugin-mkcert": {
+ "version": "1.17.6",
+ "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.6.tgz",
+ "integrity": "sha512-4JR1RN0HEg/w17eRQJ/Ve2pSa6KCVQcQO6yKtIaKQCFDyd63zGfXHWpygBkvvRSpqa0GcqNKf0fjUJ0HiJQXVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/rest": "^20.1.1",
+ "axios": "^1.7.4",
+ "debug": "^4.3.6",
+ "picocolors": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=v16.7.0"
+ },
+ "peerDependencies": {
+ "vite": ">=3"
+ }
+ },
"node_modules/vite-tsconfig-paths": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.0.tgz",
- "integrity": "sha512-Y1PLGHCJfAq1Zf4YIGEsmuU/NCX1epoZx9zwSr32Gjn3aalwQHRKr5aUmbo6r0JHeHkqmWpmDg7WOynhYXw1og==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.3.tgz",
+ "integrity": "sha512-0bz+PDlLpGfP2CigeSKL9NFTF1KtXkeHGZSSaGQSuPZH77GhoiQaA8IjYgOaynSuwlDTolSUEU0ErVvju3NURg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10870,9 +11722,9 @@
}
},
"node_modules/vite/node_modules/postcss": {
- "version": "8.4.47",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
- "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
+ "version": "8.4.49",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
+ "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
"dev": true,
"funding": [
{
@@ -10891,7 +11743,7 @@
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
- "picocolors": "^1.1.0",
+ "picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
"engines": {
@@ -10911,13 +11763,6 @@
"vscode-uri": "^3.0.8"
}
},
- "node_modules/vscode-css-languageservice/node_modules/vscode-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
- "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/vscode-languageserver-textdocument": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
@@ -10933,9 +11778,9 @@
"license": "MIT"
},
"node_modules/vscode-uri": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
- "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==",
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
+ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
"dev": true,
"license": "MIT"
},
@@ -11050,6 +11895,25 @@
"node": ">=8"
}
},
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/app/package.json b/app/package.json
index e004bef2..85cc4a60 100644
--- a/app/package.json
+++ b/app/package.json
@@ -5,9 +5,11 @@
"type": "module",
"scripts": {
"dev": "vite --host",
- "build": "tsc -b && vite build",
+ "build": "vite build",
"build-ignore": "vite build",
"lint": "eslint .",
+ "lint:fix": "eslint --fix .",
+ "static-analysis": "node src/utils/static-analysis-script.js",
"preview": "vite preview",
"test": "jest",
"test:watch": "jest --watchAll",
@@ -23,7 +25,13 @@
"@tanstack/react-query": "^5.59.13",
"@tanstack/react-query-devtools": "^5.59.15",
"@types/react-google-recaptcha": "^2.1.9",
+ "axios": "^1.7.8",
+ "date-fns": "^4.1.0",
+ "emoji-picker-react": "^4.12.0",
+ "idb": "^8.0.0",
"lottie-react": "^2.4.0",
+ "mitt": "^3.0.1",
+ "motion": "^11.13.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-filerobot-image-editor": "^4.9.0",
@@ -31,6 +39,9 @@
"react-hook-form": "^7.53.0",
"react-hot-toast": "^2.4.1",
"react-international-phone": "^4.3.0",
+ "react-intersection-observer": "^9.13.1",
+ "react-mentions": "^4.4.10",
+ "react-modal-image": "^2.6.0",
"react-router-dom": "^6.27.0",
"redux-mock-store": "^1.5.5",
"socket-client": "^1.0.0",
@@ -52,11 +63,16 @@
"@types/jest": "^29.5.14",
"@types/react": "^18.3.10",
"@types/react-dom": "^18.3.0",
+ "@types/react-modal-image": "^2.6.3",
"@types/redux-mock-store": "^1.0.6",
"@vitejs/plugin-react": "^4.3.2",
"babel-jest": "^29.7.0",
"babel-plugin-module-resolver": "^5.0.2",
+ "babel-preset-vite": "^1.1.3",
+ "dotenv": "^16.4.5",
"eslint": "^9.11.1",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
"eslint-plugin-react-refresh": "^0.4.12",
"globals": "^15.9.0",
@@ -75,6 +91,7 @@
"typescript-eslint": "^8.7.0",
"undici": "^6.20.1",
"vite": "^5.4.8",
+ "vite-plugin-mkcert": "^1.17.6",
"vite-tsconfig-paths": "^5.0.1"
},
"msw": {
diff --git a/app/public/TelWare.png b/app/public/assets/TelWare.png
similarity index 100%
rename from app/public/TelWare.png
rename to app/public/assets/TelWare.png
diff --git a/app/public/mockServiceWorker.js b/app/public/mockServiceWorker.js
index 6eb80522..fead0b3f 100644
--- a/app/public/mockServiceWorker.js
+++ b/app/public/mockServiceWorker.js
@@ -8,8 +8,8 @@
* - Please do NOT serve this file on production.
*/
-const PACKAGE_VERSION = '2.6.0'
-const INTEGRITY_CHECKSUM = '07a8241b182f8a246a7cd39894799a9e'
+const PACKAGE_VERSION = '2.6.6'
+const INTEGRITY_CHECKSUM = 'ca7800994cc8bfb5eb961e037c877074'
const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
const activeClientIds = new Set()
@@ -192,12 +192,14 @@ async function getResponse(event, client, requestId) {
const requestClone = request.clone()
function passthrough() {
- const headers = Object.fromEntries(requestClone.headers.entries())
-
- // Remove internal MSW request header so the passthrough request
- // complies with any potential CORS preflight checks on the server.
- // Some servers forbid unknown request headers.
- delete headers['x-msw-intention']
+ // Cast the request headers to a new Headers instance
+ // so the headers can be manipulated with.
+ const headers = new Headers(requestClone.headers)
+
+ // Remove the "accept" header value that marked this request as passthrough.
+ // This prevents request alteration and also keeps it compliant with the
+ // user-defined CORS policies.
+ headers.delete('accept', 'msw/passthrough')
return fetch(requestClone, { headers })
}
diff --git a/app/socket-server/index.js b/app/socket-server/index.js
index dc8757fd..d5f6d954 100644
--- a/app/socket-server/index.js
+++ b/app/socket-server/index.js
@@ -2,6 +2,8 @@ const express = require("express");
const http = require("http");
const { Server } = require("socket.io");
+const PORT = 4000;
+
const app = express();
const server = http.createServer(app);
@@ -14,18 +16,50 @@ const io = new Server(server, {
io.on("connection", (socket) => {
console.log("A user connected:", socket.id);
- socket.on("send_message", (data) => {
+ socket.on("SEND_MESSAGE", (data, callback) => {
console.log("Message received from client:", data);
+ callback({ success: true, message: "sent seccussfully", res: Date.now() });
+ socket.join(data.chatId);
+ socket.to(data.chatId).emit("RECEIVE_MESSAGE", { ...data, id: Date.now() });
+ });
- io.emit("receive_message", data);
+ socket.on("join", ({ chatId }) => {
+ socket.join(chatId);
+ console.log(`User ${socket.id} joined chat ${chatId}`);
});
socket.on("disconnect", () => {
console.log("User disconnected:", socket.id);
});
+
+ socket.on("PIN_MESSAGE_CLIENT", ({ messageId, chatId, userId }) => {
+ console.log("PIN_MESSAGE_CLIENT", messageId, chatId, userId);
+ socket.broadcast
+ .to(chatId?.toString())
+ .emit("PIN_MESSAGE_SERVER", { messageId, chatId, userId });
+ });
+
+ socket.on("UNPIN_MESSAGE_CLIENT", ({ messageId, chatId, userId }) => {
+ console.log("UNPIN_MESSAGE_CLIENT", messageId, chatId, userId);
+ socket.broadcast
+ .to(chatId?.toString())
+ .emit("UNPIN_MESSAGE_SERVER", { messageId, chatId, userId });
+ });
+
+ socket.on("EDIT_MESSAGE_CLIENT", ({ messageId, content, chatId }) => {
+ const room = io.sockets.adapter.rooms.get(chatId);
+
+ if (room) {
+ console.log(`Room ${chatId} members:`, [...room]);
+ } else {
+ console.log(`No members in room: ${chatId}`);
+ }
+ socket.join(chatId);
+ console.log("EDIT_MESSAGE_CLIENT:", messageId, content, chatId);
+ io.to(chatId).emit("EDIT_MESSAGE_SERVER", chatId, messageId, content); //TODO: handle user disjoin the room for some reason
+ });
});
-// Start server on port 4000
-server.listen(4000, () => {
- console.log("Socket.io server running on http://localhost:4000/socket-io");
+server.listen(PORT, () => {
+ console.log(`Socket.io server running on http://localhost:${PORT}`);
});
diff --git a/app/socket-server/package-lock.json b/app/socket-server/package-lock.json
index 6007fcd0..4047c798 100644
--- a/app/socket-server/package-lock.json
+++ b/app/socket-server/package-lock.json
@@ -10,6 +10,7 @@
"license": "ISC",
"dependencies": {
"express": "^4.21.1",
+ "nodemon": "^3.1.7",
"socket.io": "^4.8.1"
}
},
@@ -51,11 +52,30 @@
"node": ">= 0.6"
}
},
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
"node_modules/base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
@@ -64,6 +84,18 @@
"node": "^4.5.0 || >= 5.9"
}
},
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/body-parser": {
"version": "1.20.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
@@ -87,6 +119,28 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -113,6 +167,36 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "license": "MIT"
+ },
"node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -341,6 +425,18 @@
"node": ">= 0.10.0"
}
},
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/finalhandler": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
@@ -374,6 +470,20 @@
"node": ">= 0.6"
}
},
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -400,6 +510,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/gopd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
@@ -411,6 +533,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/has-property-descriptors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
@@ -481,6 +612,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ignore-by-default": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
+ "license": "ISC"
+ },
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -494,6 +631,48 @@
"node": ">= 0.10"
}
},
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -548,6 +727,18 @@
"node": ">= 0.6"
}
},
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -561,6 +752,66 @@
"node": ">= 0.6"
}
},
+ "node_modules/nodemon": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz",
+ "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==",
+ "license": "MIT",
+ "dependencies": {
+ "chokidar": "^3.5.2",
+ "debug": "^4",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.1.2",
+ "pstree.remy": "^1.1.8",
+ "semver": "^7.5.3",
+ "simple-update-notifier": "^2.0.0",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.5"
+ },
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/nodemon"
+ }
+ },
+ "node_modules/nodemon/node_modules/debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/nodemon/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -604,6 +855,18 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
"integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
},
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -616,6 +879,12 @@
"node": ">= 0.10"
}
},
+ "node_modules/pstree.remy": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
+ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
+ "license": "MIT"
+ },
"node_modules/qs": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
@@ -652,6 +921,18 @@
"node": ">= 0.8"
}
},
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -676,6 +957,18 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
+ "node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/send": {
"version": "0.19.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
@@ -764,6 +1057,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/simple-update-notifier": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+ "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/socket.io": {
"version": "4.8.1",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz",
@@ -873,6 +1178,30 @@
"node": ">= 0.8"
}
},
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
"node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -881,6 +1210,15 @@
"node": ">=0.6"
}
},
+ "node_modules/touch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz",
+ "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==",
+ "license": "ISC",
+ "bin": {
+ "nodetouch": "bin/nodetouch.js"
+ }
+ },
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -893,6 +1231,12 @@
"node": ">= 0.6"
}
},
+ "node_modules/undefsafe": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
+ "license": "MIT"
+ },
"node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
diff --git a/app/socket-server/package.json b/app/socket-server/package.json
index e0fadccd..d651fc9f 100644
--- a/app/socket-server/package.json
+++ b/app/socket-server/package.json
@@ -11,6 +11,7 @@
"license": "ISC",
"dependencies": {
"express": "^4.21.1",
+ "nodemon": "^3.1.7",
"socket.io": "^4.8.1"
}
}
diff --git a/app/src/App.tsx b/app/src/App.tsx
index e0720047..aeed77d9 100644
--- a/app/src/App.tsx
+++ b/app/src/App.tsx
@@ -14,21 +14,27 @@ import Signup from "./pages/Signup";
import ResetPasswordModal from "@features/authentication/reset-password/ResetPasswordModal";
import ProtectedRoute from "@components/protected-route/ProtectedRoute";
import AppLayout from "@components/AppLayout";
-
import ChatBox from "@features/chats/ChatBox";
import SocketProvider from "sockets/SocketProvider";
+import RightSideBarProvider from "@features/groups/contexts/RightSideBarProvider";
+import { CallProvider } from "@features/calls/context/CallProvider";
+import AdminAppLayout from "@features/admin/components/AdminAppLayout";
+import Unauthorized from "@components/unauthorized/Unauthorized";
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: 0,
- retry: 3,
- },
- },
+ retry: 3
+ }
+ }
});
function App() {
const currentTheme = useAppSelector((state) => state.theme.value);
+ const currentUserRole = useAppSelector((state) =>
+ state.user.userInfo.isAdmin ? "admin" : "user"
+ );
useEffect(() => {
document.documentElement.className =
@@ -42,18 +48,38 @@ function App() {
+ } />
+
+
+
+ }
+ />
-
-
-
+
+
+
+
+
+
+
+
}
>
} />
+
} />
`
+const StyledApp = styled.div<{
+ $isChatOpen: boolean;
+ $isRightSideBarOpen: boolean;
+}>`
@media ${MOBILE_VIEW} {
& > main {
display: ${({ $isChatOpen }) => ($isChatOpen ? "contents" : "none")};
@@ -18,9 +23,12 @@ const StyledApp = styled.div<{ $isChatOpen: boolean }>`
}
}
- @media ${media.desktop} {
+ @media ${DESKTOP_VIEW} {
display: grid;
- grid-template-columns: 2fr 5fr;
+ grid-template-columns: ${({ $isRightSideBarOpen }) =>
+ $isRightSideBarOpen ? "1.5fr 3fr 1.5fr" : "1.5fr 4.5fr"};
+
+ overflow-x: hidden;
& > main {
display: block;
@@ -34,15 +42,37 @@ const StyledApp = styled.div<{ $isChatOpen: boolean }>`
function AppLayout() {
const { chatId } = useParams();
-
const isChatOpen = !!chatId;
+ const { isRightSideBarOpen } = useRightSideBarContext();
+ const [isCollapsed, setIsCollapsed] = useState(false);
+ const [callStatus, setCallStatus] = useState<
+ "inactive" | "active" | "calling" | "incoming" | "ended"
+ >("inactive");
+
+ useEffect(() => {
+ const handler = (status: typeof callStatus) => setCallStatus(status);
+ callStatusEmitter.on("update", handler);
+ return () => callStatusEmitter.off("update", handler);
+ }, []);
return (
-
-
+
+
+ {callStatus != "inactive" && (
+
+ )}
+ {isRightSideBarOpen && }
);
}
diff --git a/app/src/components/Avatar.tsx b/app/src/components/Avatar.tsx
new file mode 100644
index 00000000..a1b1dc1f
--- /dev/null
+++ b/app/src/components/Avatar.tsx
@@ -0,0 +1,50 @@
+import { STATIC_MEDIA_URL } from "@constants";
+import styled from "styled-components";
+import { getAvatarName } from "utils/helpers";
+
+const StyledAvatar = styled.div<{ $image?: string; $size?: string }>`
+ width: ${({ $size }) =>
+ $size === "small" ? "2.625rem" : $size === "large" ? "7.5rem" : "3.125rem"};
+ height: ${({ $size }) =>
+ $size === "small" ? "2.625rem" : $size === "large" ? "7.5rem" : "3.125rem"};
+
+ border-radius: 50%;
+ margin-right: ${({ $size }) => ($size === "large" ? "0" : "1rem")};
+
+ background: ${({ $image }) =>
+ $image ? `url(${$image}) center/cover no-repeat` : "var(--color-avatar)"};
+
+ color: white;
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ flex-shrink: 0;
+
+ font-weight: bold;
+ font-size: ${({ $size }) => ($size === "large" ? "1.5rem" : "1rem")};
+ text-transform: uppercase;
+ z-index: 1;
+`;
+
+type PropsType = {
+ image?: string | undefined;
+ name: string | undefined;
+ size?: string;
+ onClick?: () => void;
+};
+
+function Avatar({ image, name, size, onClick }: PropsType) {
+ if (image && !image.startsWith("http")) {
+ image = STATIC_MEDIA_URL + image;
+ }
+
+ return (
+
+ {!image && getAvatarName(name)}
+
+ );
+}
+
+export default Avatar;
diff --git a/app/src/components/BackArrow.tsx b/app/src/components/BackArrow.tsx
index c62ba7a2..fecbda3b 100644
--- a/app/src/components/BackArrow.tsx
+++ b/app/src/components/BackArrow.tsx
@@ -2,6 +2,7 @@ import styled from "styled-components";
import { getIcon } from "@data/icons";
import { useAppDispatch, useAppSelector } from "@hooks/useGlobalState";
import { updateSideBarView } from "@state/side-bar/sideBar";
+import { useSidebarType } from "./side-bar/SideBarContext";
const StyledArrow = styled.div`
width: 30px;
@@ -20,14 +21,19 @@ const StyledArrow = styled.div`
function BackArrow() {
const dispatch = useAppDispatch();
- const { backView } = useAppSelector((state) => state.sideBarData);
+ const type = useSidebarType();
+ const { backView } = useAppSelector((state) =>
+ type === "left"
+ ? state.sideBarData.leftSideBar
+ : state.sideBarData.rightSideBar
+ );
return (
backView !== undefined &&
- dispatch(updateSideBarView({ redirect: backView }))
+ dispatch(updateSideBarView({ redirect: backView, data: { type } }))
}
>
{getIcon("BackArrow")}
diff --git a/app/src/components/Button.tsx b/app/src/components/Button.tsx
index 6f9adeef..42094180 100644
--- a/app/src/components/Button.tsx
+++ b/app/src/components/Button.tsx
@@ -1,6 +1,6 @@
import styled, { css } from "styled-components";
-const Button = styled.button<{ $type?: string }>`
+const Button = styled.button<{ $type?: string; $width?: string }>`
font-weight: bold;
letter-spacing: 1.5px;
border: none;
@@ -24,22 +24,37 @@ const Button = styled.button<{ $type?: string }>`
opacity: 0.6;
}
- ${(props) =>
- props.$type === "modal" &&
- css`
- font-weight: normal;
- letter-spacing: normal;
- `}
- ${(props) =>
- props.$type === "danger" &&
- css`
- background-color: var(--color-error);
- color: var(--color-text-button);
- font-weight: normal;
- &:hover {
- background-color: var(--color-error-shade);
- }
- `}
+ width: ${(props) => props.$width || "auto"};
+ ${(props) => {
+ switch (props.$type) {
+ case "normal":
+ return css`
+ background-color: var(--color-border);
+ color: var(--color-text);
+ font-weight: normal;
+ letter-spacing: normal;
+ &:hover {
+ background-color: var(--color-border-hover);
+ }
+ `;
+ case "modal":
+ return css`
+ font-weight: normal;
+ letter-spacing: normal;
+ `;
+ case "danger":
+ return css`
+ background-color: var(--color-error);
+ color: var(--color-text-button);
+ font-weight: normal;
+ &:hover {
+ background-color: var(--color-error-shade);
+ }
+ `;
+ default:
+ return;
+ }
+ }}
`;
export default Button;
diff --git a/app/src/components/Checkbox.tsx b/app/src/components/Checkbox.tsx
new file mode 100644
index 00000000..c02f15c7
--- /dev/null
+++ b/app/src/components/Checkbox.tsx
@@ -0,0 +1,65 @@
+import styled from "styled-components";
+
+const CheckboxWrapper = styled.label`
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+
+ input[type="checkbox"] {
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+
+ width: 1.2em;
+ height: 1.2rem;
+
+ margin-right: 1.5rem;
+
+ border: 2px solid var(--color-text-secondary);
+ border-radius: 4px;
+
+ background-color: var(--color-background);
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ &::after {
+ content: "";
+ width: 10px;
+ height: 5px;
+ border: solid white;
+ border-width: 0 0 2px 2px;
+ transform: scale(0) rotate(-45deg);
+ opacity: 0;
+ transition:
+ transform 0.2s ease,
+ opacity 0.2s ease;
+ }
+
+ &:checked {
+ background-color: var(--accent-color);
+
+ &::after {
+ transform: scale(1) rotate(-45deg);
+ opacity: 1;
+ }
+ }
+
+ &:focus {
+ outline: 2px solid var(--focus-color);
+ }
+ }
+`;
+
+type CheckboxProps = React.InputHTMLAttributes;
+
+function Checkbox(props: CheckboxProps) {
+ return (
+
+
+
+ );
+}
+
+export default Checkbox;
diff --git a/app/src/components/CircleIcon.tsx b/app/src/components/CircleIcon.tsx
index 4eb8a991..da713c84 100644
--- a/app/src/components/CircleIcon.tsx
+++ b/app/src/components/CircleIcon.tsx
@@ -9,10 +9,15 @@ interface CircleIconProps {
$padding?: number;
$color?: string;
$bgColor?: string;
- onClick?: () => void;
+ $opacity?: number;
+ onClick?: (e: Event, voiceNoteName?: string) => void;
+ children?: React.ReactNode;
+ as?: React.ElementType;
+ type?: string;
+ testid?: string;
}
-const StyledIcon = styled.div`
+const StyledCircleIcon = styled.div`
right: ${(props) => props.$right}rem;
bottom: ${(props) => props.$bottom}rem;
${(props) =>
@@ -25,11 +30,13 @@ const StyledIcon = styled.div`
padding: ${(props) => props.$padding}rem;
background-color: ${(props) => props.$bgColor};
border-radius: var(--border-radius-circle);
- opacity: 0.9;
- box-shadow: var(--box-shadow);
- opacity: 0.9;
+ opacity: ${(props) => props.$opacity};
box-shadow: var(--box-shadow);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
&:hover {
opacity: 1;
cursor: pointer;
@@ -38,10 +45,15 @@ const StyledIcon = styled.div`
width: 100%;
height: 100%;
color: ${(props) => props.$color};
- width: 100%;
- height: 100%;
- color: ${(props) => props.$color};
}
+
+ ${(props) =>
+ props.as === "button" &&
+ css`
+ border: none;
+ outline: none;
+ cursor: pointer;
+ `};
`;
function CircleIcon({
@@ -52,15 +64,33 @@ function CircleIcon({
$padding = 0,
$color = "var(--color-search-border)",
$bgColor = "transparent",
+ $opacity = 0.9,
onClick,
+ children,
+ as,
+ type,
+ testid,
}: CircleIconProps) {
return (
-
{getIcon($icon)}
-
+ {children}
+
);
}
diff --git a/app/src/components/CloseButton.tsx b/app/src/components/CloseButton.tsx
new file mode 100644
index 00000000..c29adf99
--- /dev/null
+++ b/app/src/components/CloseButton.tsx
@@ -0,0 +1,25 @@
+import { getIcon } from "@data/icons";
+import styled from "styled-components";
+
+interface CloseButtonProps {
+ onClose: () => void;
+}
+
+const StyledCloseButton = styled.div`
+ position: absolute;
+ top: 0.5rem;
+ right: 0.5rem;
+ cursor: pointer;
+ color: white;
+
+ z-index: 2;
+`;
+
+function CloseButton(props: CloseButtonProps) {
+ const { onClose } = props;
+ return (
+ {getIcon("Close")}
+ );
+}
+
+export default CloseButton;
diff --git a/app/src/components/CollapsedList.tsx b/app/src/components/CollapsedList.tsx
new file mode 100644
index 00000000..6e3a0667
--- /dev/null
+++ b/app/src/components/CollapsedList.tsx
@@ -0,0 +1,48 @@
+import styled from "styled-components";
+
+interface CollapsedListProps {
+ onOpen: () => void;
+ render: (data: unknown) => JSX.Element;
+ list: unknown[];
+}
+
+const StyledCollapsedList = styled.div`
+ position: relative;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: row;
+ height: 100%;
+ width: 100%;
+`;
+const CollapsedItem = styled.div<{ $index: number }>`
+ position: absolute;
+ z-index: 30 - index;
+ right: ${(props) => props.$index * 15 + 20}px;
+ top: 0.7rem;
+ transform: scale(0.8);
+ transition: transform 0.3s;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 40px;
+ height: 40px;
+`;
+
+function CollapsedList(Props: CollapsedListProps) {
+ const { onOpen, render, list } = Props;
+ const displayedItems = list?.slice(0, 3);
+
+ return (
+
+ {displayedItems?.map((element, index) => (
+
+ {render(element)}
+
+ ))}
+
+ );
+}
+
+export default CollapsedList;
diff --git a/app/src/components/ExpandingTextArea.tsx b/app/src/components/ExpandingTextArea.tsx
index 50379a70..c49ea04b 100644
--- a/app/src/components/ExpandingTextArea.tsx
+++ b/app/src/components/ExpandingTextArea.tsx
@@ -1,42 +1,94 @@
-import { useRef } from "react";
+import { useEffect, useRef } from "react";
import styled from "styled-components";
+import { MentionsInput, Mention } from "react-mentions";
+import useMentionList from "@features/chats/hooks/useMentionList";
-const Textarea = styled.textarea`
- outline: none;
- border: none;
-
- flex: 1;
- align-self: center;
-
- caret-color: var(--accent-color);
+const StyledMentionsInput = styled.div`
+ width: 100%;
+ max-width: 27rem;
color: var(--color-text);
+`;
- resize: none;
- overflow: hidden;
-
- font-size: 1rem;
- line-height: 1.5;
+type PropsType = {
+ input: string;
+ setInput: (value: string) => void;
+ onKeyDown?: (
+ e:
+ | React.KeyboardEvent
+ | React.KeyboardEvent
+ ) => void;
+};
- max-height: 300px;
-`;
+function ExpandingTextArea({ input, setInput, onKeyDown }: PropsType) {
+ const textareaRef = useRef(null);
-function ExpandingTextArea() {
- const ref = useRef(null);
+ const { filteredMembers } = useMentionList();
function handleInput() {
- if (ref.current) {
- ref.current.style.height = "auto";
- ref.current.style.height = `${ref.current.scrollHeight}px`;
+ if (textareaRef.current) {
+ textareaRef.current.style.height = "auto";
+ textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;
}
}
+ useEffect(() => {
+ if (textareaRef.current) {
+ if (textareaRef.current.value === "" || input === "") {
+ textareaRef.current.style.height = "32px";
+ }
+ }
+ }, [input]);
+
return (
-
+
+ setInput(e.target.value)}
+ onKeyDown={onKeyDown!}
+ onInput={handleInput}
+ placeholder="Message"
+ a11ySuggestionsListLabel="Suggested mentions"
+ style={{
+ input: {
+ overflow: "hidden",
+ border: "none",
+ forcedColorAdjust: "none",
+ color: "var(--color-text)",
+ outline: "none"
+ },
+ suggestions: {
+ list: {
+ backgroundColor: "var(--color-background)",
+ border: "none",
+ borderRadius: "0.5rem",
+ position: "absolute",
+ zIndex: 1,
+ bottom: "2rem",
+ width: "20rem",
+ boxShadow: "0 2px 5px rgba(0, 0, 0, 0.2)"
+ },
+ item: {
+ padding: "0.5rem 1rem",
+ "&focused": {
+ backgroundColor: "var(--accent-color)",
+ color: "white"
+ }
+ }
+ }
+ }}
+ >
+ `@${display}`}
+ style={{
+ backgroundColor: "transparent",
+ color: "ButtonFace",
+ border: "none"
+ }}
+ />
+
+
);
}
diff --git a/app/src/components/Icon.tsx b/app/src/components/Icon.tsx
index 64efd890..8bfc501a 100644
--- a/app/src/components/Icon.tsx
+++ b/app/src/components/Icon.tsx
@@ -1,7 +1,7 @@
-import { ReactNode } from "react";
+import { ButtonHTMLAttributes, ReactNode } from "react";
import styled from "styled-components";
-const StyledIcon = styled.div`
+const StyledIcon = styled.button`
width: 2rem;
height: 2rem;
@@ -9,17 +9,21 @@ const StyledIcon = styled.div`
justify-content: center;
align-items: center;
+ border: none;
+ background-color: transparent;
+
border-radius: var(--border-radius-modal);
+
&:hover {
background: var(--color-item-hover);
cursor: pointer;
}
`;
-type IconProps = {
+type IconProps = ButtonHTMLAttributes & {
children: ReactNode;
};
-export default function Icon({ children }: IconProps) {
- return {children};
+export default function Icon({ children, ...props }: IconProps) {
+ return {children};
}
diff --git a/app/src/components/ImageEditor.tsx b/app/src/components/ImageEditor.tsx
index 200edab7..c8594b07 100644
--- a/app/src/components/ImageEditor.tsx
+++ b/app/src/components/ImageEditor.tsx
@@ -1,7 +1,43 @@
-import FilerobotImageEditor, {
- TABS,
- TOOLS,
-} from "react-filerobot-image-editor";
+import { lazy, Suspense } from "react";
+
+const FilerobotImageEditor = lazy(() => import("react-filerobot-image-editor"));
+
+const TABS = {
+ FINETUNE: "Finetune",
+ FILTERS: "Filters",
+ ADJUST: "Adjust",
+ WATERMARK: "Watermark",
+ ANNOTATE: "Annotate",
+ RESIZE: "Resize",
+} as const;
+
+const TOOLS = {
+ CROP: "Crop",
+ ROTATE: "Rotate",
+ FLIP_X: "Flip_X",
+ FLIP_Y: "Flip_Y",
+ BRIGHTNESS: "Brightness",
+ CONTRAST: "Contrast",
+ HSV: "HueSaturationValue",
+ WARMTH: "Warmth",
+ BLUR: "Blur",
+ THRESHOLD: "Threshold",
+ POSTERIZE: "Posterize",
+ PIXELATE: "Pixelate",
+ NOISE: "Noise",
+ FILTERS: "Filters",
+ RECT: "Rect",
+ ELLIPSE: "Ellipse",
+ POLYGON: "Polygon",
+ TEXT: "Text",
+ LINE: "Line",
+ IMAGE: "Image",
+ ARROW: "Arrow",
+ WATERMARK: "Watermark",
+ PEN: "Pen",
+ RESIZE: "Resize",
+} as const;
+
import styled from "styled-components";
interface imageEditorProps {
@@ -10,16 +46,31 @@ interface imageEditorProps {
src: string;
onImageSave: (file: File) => void;
isProfileImage?: boolean;
+ widthRatio?: number;
+ heightRatio?: number;
}
-
-const StyledContainer = styled.div<{ $isOpen: boolean }>`
+interface styledContainerProps {
+ $widthRatio: number;
+ $heightRatio: number;
+}
+const StyledBackGround = styled.div<{ $isOpen: boolean }>`
display: ${({ $isOpen }) => ($isOpen ? "flex" : "none")};
position: fixed;
top: 0;
left: 0;
+ z-index: 1000;
width: 100%;
height: 100%;
- z-index: 1000;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: rgba(0, 0, 0, 0.8);
+`;
+
+const StyledContainer = styled.div`
+ width: ${(props) => props.$widthRatio}%;
+ height: ${(props) => props.$heightRatio}%;
+ display: flex;
justify-content: center;
align-items: center;
`;
@@ -30,6 +81,8 @@ function ImageEditor({
src,
onImageSave,
isProfileImage,
+ widthRatio = 50,
+ heightRatio = 50,
}: imageEditorProps) {
const handleSave = async (editedImageObject: { imageBase64?: string }) => {
if (editedImageObject.imageBase64) {
@@ -44,88 +97,96 @@ function ImageEditor({
onImageSave(file);
closeImgEditor();
} else {
- console.error("Image base64 data is undefined");
+ throw new Error("something went wrong with image editing");
}
};
return (
-
+
{isOpen && (
-
- handleSave(editedImageObject)}
- onClose={closeImgEditor}
- annotationsCommon={{
- fill: "#ff0000",
- }}
- Text={{ text: "I Love TelWare" }}
- Rotate={{ angle: 90, componentType: "slider" }}
- Crop={
- isProfileImage
- ? {
- ratio: 1,
- }
- : {
- presetsItems: [
- {
- titleKey: "classicTv",
- descriptionKey: "4:3",
- ratio: 4 / 3,
- },
- {
- titleKey: "cinemascope",
- descriptionKey: "21:9",
- ratio: 21 / 9,
- },
- ],
- presetsFolders: [
- {
- titleKey: "socialMedia",
- groups: [
- {
- titleKey: "facebook",
- items: [
- {
- titleKey: "profile",
- width: 180,
- height: 180,
- descriptionKey: "fbProfileSize",
- },
- {
- titleKey: "coverPhoto",
- width: 820,
- height: 312,
- descriptionKey: "fbCoverPhotoSize",
- },
- ],
- },
- ],
- },
- ],
- }
- }
- theme={{
- palette: {
- warning: "#ff0000c0",
- "warning-active": "#ff0000",
- "warning-hover": "#ff0000",
- },
- }}
- tabsIds={
- isProfileImage
- ? [TABS.ADJUST]
- : [TABS.ADJUST, TABS.ANNOTATE, TABS.FINETUNE, TABS.RESIZE]
- }
- defaultTabId={isProfileImage ? TABS.ADJUST : TABS.ANNOTATE}
- defaultToolId={TOOLS.RESIZE}
- defaultSavedImageQuality={0.95}
- savingPixelRatio={4}
- previewPixelRatio={4}
- />
-
+
+ Loading...}>
+ handleSave(editedImageObject)}
+ onClose={closeImgEditor}
+ annotationsCommon={{
+ fill: "#2221f1",
+ }}
+ Text={{ text: "I Love TelWare" }}
+ Rotate={{ angle: 90, componentType: "slider" }}
+ Crop={
+ isProfileImage
+ ? {
+ ratio: 1,
+ }
+ : {
+ presetsItems: [
+ {
+ titleKey: "classicTv",
+ descriptionKey: "4:3",
+ ratio: 4 / 3,
+ },
+ {
+ titleKey: "cinemascope",
+ descriptionKey: "21:9",
+ ratio: 21 / 9,
+ },
+ ],
+ presetsFolders: [
+ {
+ titleKey: "socialMedia",
+ groups: [
+ {
+ titleKey: "facebook",
+ items: [
+ {
+ titleKey: "profile",
+ width: 180,
+ height: 180,
+ descriptionKey: "fbProfileSize",
+ },
+ {
+ titleKey: "coverPhoto",
+ width: 820,
+ height: 312,
+ descriptionKey: "fbCoverPhotoSize",
+ },
+ ],
+ },
+ ],
+ },
+ ],
+ }
+ }
+ theme={{
+ palette: {
+ warning: "#ff0000c0",
+ "warning-active": "#ff0000",
+ "warning-hover": "#ff0000",
+ },
+ }}
+ tabsIds={
+ isProfileImage
+ ? [TABS.ADJUST]
+ : [TABS.ADJUST, TABS.ANNOTATE, TABS.FINETUNE]
+ }
+ defaultTabId={isProfileImage ? TABS.ADJUST : TABS.ANNOTATE}
+ defaultToolId={TOOLS.RESIZE}
+ defaultSavedImageQuality={0.95}
+ savingPixelRatio={4}
+ previewPixelRatio={4}
+ data-testid="image-editor"
+ />
+
+
)}
-
+
);
}
diff --git a/app/src/components/Logout.tsx b/app/src/components/Logout.tsx
new file mode 100644
index 00000000..68ab47aa
--- /dev/null
+++ b/app/src/components/Logout.tsx
@@ -0,0 +1,20 @@
+import { useLogout } from "@features/authentication/logout/hooks/useLogout";
+import CircleIcon from "./CircleIcon";
+
+function Logout({ size = 1.8 }) {
+ const { logout } = useLogout();
+
+ return (
+ logout()}
+ $icon="Logout"
+ $padding={0.2}
+ $size={size}
+ $color="var(--color-text)"
+ $bgColor="var(--color-pattern)"
+ />
+ );
+}
+
+export default Logout;
diff --git a/app/src/components/Main.tsx b/app/src/components/Main.tsx
index 381e73d5..282a1cd0 100644
--- a/app/src/components/Main.tsx
+++ b/app/src/components/Main.tsx
@@ -1,10 +1,16 @@
+import { useEffect } from "react";
+import { useDispatch } from "react-redux";
import styled from "styled-components";
+import { setUserInfo } from "@state/user/user";
+
+import { useUser } from "@features/authentication/login/hooks/useUser";
+
const StyledMain = styled.main`
position: relative;
overflow: hidden;
background: var(--color-chat-wallpaper-1);
-
+ padding-top: 1rem;
&::before {
content: "";
position: absolute;
@@ -34,6 +40,14 @@ const StyledMain = styled.main`
`;
function Main({ children }: { children?: React.ReactNode }) {
+ const { user, isPending } = useUser();
+ const dispatch = useDispatch();
+
+ useEffect(() => {
+ if (user && !isPending) {
+ dispatch(setUserInfo(user));
+ }
+ }, [dispatch, user, isPending]);
return {children};
}
diff --git a/app/src/components/Modal.tsx b/app/src/components/Modal.tsx
index 786989cf..e2bbee32 100644
--- a/app/src/components/Modal.tsx
+++ b/app/src/components/Modal.tsx
@@ -1,3 +1,4 @@
+import React, { useRef } from "react";
import styled from "styled-components";
const ModalOverlay = styled.div`
@@ -10,7 +11,7 @@ const ModalOverlay = styled.div`
display: flex;
justify-content: center;
align-items: center;
- z-index: 1000;
+ z-index: 10;
`;
const ModalContainer = styled.div`
@@ -19,17 +20,20 @@ const ModalContainer = styled.div`
padding: 2rem;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
- text-align: center;
width: 400px;
+
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+
+ gap: 1rem;
`;
const ModalTitle = styled.h2`
- margin-bottom: 1rem;
color: var(--color-text);
`;
const ModalMessage = styled.p`
- margin-bottom: 2rem;
color: var(--color-text-secondary);
`;
@@ -48,26 +52,37 @@ const CloseButton = styled.button`
}
`;
+type ModalProps = {
+ isOpen: boolean;
+ onClose: () => void;
+ title: string;
+ message?: string;
+ children: React.ReactNode;
+};
+
function Modal({ onClose, isOpen, title, message, children }: ModalProps) {
+ const modalRef = useRef(null);
+
+ const handleClickOutside = (e: React.MouseEvent) => {
+ if (modalRef.current && !modalRef.current.contains(e.target as Node)) {
+ onClose();
+ }
+ };
+
if (!isOpen) return null;
+
return (
-
-
+
+
×
{title}
- {message}
+ {message && {message}}
{children}
);
}
-type ModalProps = {
- isOpen: boolean;
- onClose: () => void;
- title: string;
- message: string;
- children: React.ReactNode;
-};
+
export default Modal;
diff --git a/app/src/components/OptionList.tsx b/app/src/components/OptionList.tsx
new file mode 100644
index 00000000..34bb5b98
--- /dev/null
+++ b/app/src/components/OptionList.tsx
@@ -0,0 +1,44 @@
+import styled from "styled-components";
+
+const OptionListContainer = styled.div`
+ position: absolute;
+ bottom: 0;
+ right: 0;
+
+ background-color: var(--color-background-compact-menu);
+ backdrop-filter: blur(0.3125rem);
+ -webkit-backdrop-filter: blur(0.3125rem);
+
+ padding: 0.5rem 1rem;
+ border-radius: 0.5rem;
+ box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.2);
+ min-width: 9.375rem;
+
+ &:hover {
+ cursor: pointer;
+ background-color: var(--color-background-compact-menu-hover);
+ }
+`;
+
+const Option = styled.div`
+ display: flex;
+ justify-content: space-around;
+ gap: 0.3125rem;
+ font-size: 0.9rem;
+ color: var(--color-text);
+`;
+
+type OptionListProps = {
+ onClick: () => void;
+ children: React.ReactNode;
+};
+
+const OptionList = ({ onClick, children }: OptionListProps) => {
+ return (
+
+
+
+ );
+};
+
+export default OptionList;
diff --git a/app/src/components/Popup.tsx b/app/src/components/Popup.tsx
new file mode 100644
index 00000000..d7c270ba
--- /dev/null
+++ b/app/src/components/Popup.tsx
@@ -0,0 +1,44 @@
+import styled from "styled-components";
+import CloseButton from "./CloseButton";
+import ReactDOM from "react-dom";
+
+interface PopupProps {
+ onClose: () => void;
+ isOpen: boolean;
+ children: React.ReactNode;
+}
+const PopupOverlay = styled.div`
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: black;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 1000;
+`;
+const PopupContainer = styled.div`
+ position: relative;
+ padding: 2rem;
+ border-radius: 8px;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+ text-align: center;
+ width: 100%;
+ height: 100%;
+`;
+
+function Popup({ onClose, isOpen, children }: PopupProps) {
+ if (!isOpen) return null;
+ return ReactDOM.createPortal(
+
+
+
+ {children}
+
+ ,
+ document.body,
+ );
+}
+export default Popup;
diff --git a/app/src/components/UploadImage.tsx b/app/src/components/UploadImage.tsx
new file mode 100644
index 00000000..79d4b833
--- /dev/null
+++ b/app/src/components/UploadImage.tsx
@@ -0,0 +1,105 @@
+import { getIcon } from "@data/icons";
+import styled from "styled-components";
+
+const UploadProfilePictureContainer = styled.div`
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ color: white;
+ cursor: pointer;
+ z-index: 5;
+ &:hover svg {
+ transform: scale(1.2);
+ }
+ svg {
+ transition: all 0.2s ease-out;
+ transform-origin: center;
+ font-size: 3rem;
+ }
+`;
+
+const StyledImageInput = styled.input`
+ position: absolute;
+ top: calc(50% - 4rem);
+ left: calc(50% - 4rem);
+ width: 8rem;
+ height: 8rem;
+ opacity: 0;
+ z-index: 10;
+ cursor: pointer;
+`;
+
+const StyledProfileImage = styled.img`
+ width: 8rem;
+ height: 8rem;
+ border-radius: 50%;
+ object-fit: cover;
+`;
+
+const DefaultProfilePicture = styled.div`
+ width: 8rem;
+ height: 8rem;
+ border-radius: 50%;
+ background-color: var(--accent-color);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-size: 2rem;
+ color: white;
+ font-weight: bold;
+ opacity: 0.8;
+`;
+
+const ProfilePictureSection = styled.div`
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ align-items: center;
+ padding: 1rem 1.5rem;
+ background-color: var(--color-background);
+ position: relative;
+`;
+
+interface UploadImgProps {
+ setSelectedImageFile: (file: File | null) => void;
+ selectedImageFile?: File | null;
+}
+
+export default function UploadImage({
+ setSelectedImageFile,
+ selectedImageFile,
+}: UploadImgProps) {
+ const handleImageUpload = async (
+ event: React.ChangeEvent
+ ) => {
+ if (event.target.files) {
+ const file = event.target.files[0];
+ setSelectedImageFile(file);
+ }
+ };
+
+ return (
+
+
+
+ {getIcon("AddPhoto")}
+
+
+ {selectedImageFile ? (
+
+ ) : (
+
+ )}
+
+ );
+}
diff --git a/app/src/components/User.tsx b/app/src/components/User.tsx
new file mode 100644
index 00000000..21d71177
--- /dev/null
+++ b/app/src/components/User.tsx
@@ -0,0 +1,154 @@
+import { useState } from "react";
+import { useParams } from "react-router-dom";
+import styled from "styled-components";
+
+import Avatar from "./Avatar";
+import Checkbox from "./Checkbox";
+import OptionList from "./OptionList";
+
+import { toggleSelectUser } from "@state/groups/selectedUsers";
+import { UserType } from "@features/groups/hooks/useAllUsers";
+import { useSocket } from "@hooks/useSocket";
+import { useAppDispatch, useAppSelector } from "@hooks/useGlobalState";
+import { useGroupInfo } from "@features/groups/hooks/useGroupInfo";
+import { getIcon } from "@data/icons";
+
+const UserRow = styled.div`
+ position: relative;
+ display: flex;
+ align-items: center;
+
+ padding: 1rem;
+
+ &:last-child {
+ border-bottom: none;
+ margin-bottom: 0;
+ }
+
+ &:hover {
+ cursor: pointer;
+ background-color: var(--color-background-secondary);
+ }
+`;
+
+const UserDetails = styled.div`
+ display: flex;
+ flex-direction: column;
+
+ width: 100%;
+ overflow: hidden;
+`;
+
+const Details = styled.div`
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ width: 100%;
+ overflow: hidden;
+`;
+
+const Username = styled.span`
+ color: var(--color-text);
+
+ flex: 1;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ min-width: 0;
+`;
+
+const Status = styled.span`
+ font-size: small;
+ color: var(--color-text-secondary);
+`;
+
+const Role = styled.span`
+ color: var(--color-text-secondary);
+ font-size: small;
+
+ flex-shrink: 0;
+ margin-left: 0.5rem;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+`;
+
+type UserProps = {
+ user: UserType;
+ view: "display" | "update";
+};
+
+function User({ user, view }: UserProps) {
+ const { _id, photo, status, screenFirstName, screenLastName, role } = user;
+ const { chatId } = useParams<{ chatId: string }>();
+ const { isPending, isCurrUserAdmin } = useGroupInfo();
+
+ const dispatch = useAppDispatch();
+ const selectedUsers = useAppSelector((state) => state.selectedUsers);
+ const { removeMembers } = useSocket();
+ const [isModalVisible, setIsModalVisible] = useState(false);
+
+ function handleContextMenu(e: React.MouseEvent) {
+ e.preventDefault();
+ setIsModalVisible(true);
+ }
+
+ function handleToggleMember() {
+ if (view === "update") dispatch(toggleSelectUser(user));
+ }
+
+ function handleRemoveUser() {
+ removeMembers({ chatId: chatId!, members: [_id] });
+ }
+
+ function handleCloseModal() {
+ setIsModalVisible(false);
+ }
+
+ if (isPending) return;
+
+ return (
+
+ {view === "update" && (
+ selectedUser._id === _id
+ )}
+ />
+ )}
+
+
+
+
+
+ {`${screenFirstName} ${screenLastName}`}
+
+ {role === "admin" && {role}}
+
+ {status}
+
+
+ {isModalVisible && isCurrUserAdmin && role !== "admin" && (
+
+ {getIcon("RemoveMember")}
+ Remove this user
+
+ )}
+
+ );
+}
+
+export default User;
diff --git a/app/src/components/UsersList.tsx b/app/src/components/UsersList.tsx
new file mode 100644
index 00000000..da262c89
--- /dev/null
+++ b/app/src/components/UsersList.tsx
@@ -0,0 +1,14 @@
+import User from "./User";
+import { UserType } from "@features/groups/hooks/useAllUsers";
+
+function UsersList({
+ view,
+ users,
+}: {
+ view: "update" | "display";
+ users: UserType[];
+}) {
+ return users?.map((user) => );
+}
+
+export default UsersList;
diff --git a/app/src/components/inputs/float-label-input/FloatingLabelInput.tsx b/app/src/components/inputs/float-label-input/FloatingLabelInput.tsx
index be240209..f187e53f 100644
--- a/app/src/components/inputs/float-label-input/FloatingLabelInput.tsx
+++ b/app/src/components/inputs/float-label-input/FloatingLabelInput.tsx
@@ -7,7 +7,7 @@ import {
UseFormWatch,
} from "react-hook-form";
-interface FloatingLabelInputProps {
+export interface FloatingLabelInputProps {
label: string;
id: Path;
watch?: UseFormWatch;
diff --git a/app/src/components/inputs/float-label-input/FloatingLabelInputDemo.tsx b/app/src/components/inputs/float-label-input/FloatingLabelInputDemo.tsx
index a09423f7..2adfc18c 100644
--- a/app/src/components/inputs/float-label-input/FloatingLabelInputDemo.tsx
+++ b/app/src/components/inputs/float-label-input/FloatingLabelInputDemo.tsx
@@ -84,7 +84,7 @@ const validationSchema = yup.object({
.min(8, "Password must be at least 8 characters")
.matches(
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/,
- "Password must contain at least one uppercase letter, one lowercase letter, and one number"
+ "Password must contain at least one uppercase letter, one lowercase letter, and one number",
),
maxLengthInput: yup.string().max(20, "Maximum 20 characters allowed"),
numberInput: yup
diff --git a/app/src/components/inputs/input-field/CodeInputField.tsx b/app/src/components/inputs/input-field/CodeInputField.tsx
index daf6c368..929f83f9 100644
--- a/app/src/components/inputs/input-field/CodeInputField.tsx
+++ b/app/src/components/inputs/input-field/CodeInputField.tsx
@@ -32,7 +32,7 @@ interface CodeInputFieldProps {
function CodeInputField({ code, setCode, ...rest }: CodeInputFieldProps) {
const handleChange = (
e: React.ChangeEvent,
- index: number
+ index: number,
) => {
const newCode = [...code];
newCode[index] = e.target.value.slice(0, 1);
diff --git a/app/src/components/inputs/input-field/InputField.test.tsx b/app/src/components/inputs/input-field/InputField.test.tsx
index 86d3155d..c177406b 100644
--- a/app/src/components/inputs/input-field/InputField.test.tsx
+++ b/app/src/components/inputs/input-field/InputField.test.tsx
@@ -21,7 +21,7 @@ describe("InputField", () => {
register={mockRegister}
error={undefined}
type={type}
- />
+ />,
);
const input = screen.getByLabelText(label);
@@ -37,7 +37,7 @@ describe("InputField", () => {
id={id}
register={mockRegister}
error={undefined}
- />
+ />,
);
expect(mockRegister).toHaveBeenCalledWith(id);
@@ -50,7 +50,7 @@ describe("InputField", () => {
id={id}
register={mockRegister}
error={errorMessage}
- />
+ />,
);
expect(screen.getByText(errorMessage)).toBeInTheDocument();
@@ -63,7 +63,7 @@ describe("InputField", () => {
id={id}
register={mockRegister}
error={undefined}
- />
+ />,
);
const input = screen.getByLabelText(label);
@@ -79,7 +79,7 @@ describe("InputField", () => {
register={mockRegister}
error={undefined}
placeholder={placeholder}
- />
+ />,
);
const input = screen.getByLabelText(label);
diff --git a/app/src/components/inputs/radio-input/RadioInput.test.tsx b/app/src/components/inputs/radio-input/RadioInput.test.tsx
index 139e442f..85a1b20c 100644
--- a/app/src/components/inputs/radio-input/RadioInput.test.tsx
+++ b/app/src/components/inputs/radio-input/RadioInput.test.tsx
@@ -1,6 +1,6 @@
import { RadioInputProps } from "@components/inputs/radio-input/RadioInput";
import { fireEvent, render, screen } from "@testing-library/react";
-import * as update from "@features/privacy-settings/service/changeSettings";
+import * as update from "@features/privacy-settings/service/apiChangeSettings";
import SettingsUpdate from "@components/side-bar/settings/SettingsUpdate";
import renderWithStore from "@tests/test-utils";
diff --git a/app/src/components/inputs/radio-input/RadioInput.tsx b/app/src/components/inputs/radio-input/RadioInput.tsx
index c86b2f47..c28c8a01 100644
--- a/app/src/components/inputs/radio-input/RadioInput.tsx
+++ b/app/src/components/inputs/radio-input/RadioInput.tsx
@@ -37,6 +37,7 @@ interface RadioInputProps {
state?: string;
data: RadioInputInterface;
updateFnType: StatusType;
+ type?: 'channel' | 'group';
}
const StyledForm = styled.div`
@@ -103,7 +104,7 @@ function RadioInput({ state, data, updateFnType }: RadioInputProps) {
dispatch(updateFn(payload));
}
- let selectedValue = watch(data.id);
+ const selectedValue = watch(data.id);
useEffect(() => {
const payload = { key: data.id, value: selectedValue };
diff --git a/app/src/components/protected-route/ProtectedRoute.test.tsx b/app/src/components/protected-route/ProtectedRoute.test.tsx
index 51ac0e02..7878231d 100644
--- a/app/src/components/protected-route/ProtectedRoute.test.tsx
+++ b/app/src/components/protected-route/ProtectedRoute.test.tsx
@@ -20,7 +20,7 @@ describe("ProtectedRoute", () => {
render(
-
+ ,
);
const protectedContent = screen.getByText(/protected content/i);
@@ -33,7 +33,7 @@ describe("ProtectedRoute", () => {
render(
-
+ ,
);
const protectedContent = screen.queryByText(/protected content/i);
diff --git a/app/src/components/protected-route/ProtectedRoute.tsx b/app/src/components/protected-route/ProtectedRoute.tsx
index ef59fb17..f9dd66ae 100644
--- a/app/src/components/protected-route/ProtectedRoute.tsx
+++ b/app/src/components/protected-route/ProtectedRoute.tsx
@@ -1,13 +1,19 @@
import { ReactNode, useEffect } from "react";
-import { useNavigate } from "react-router-dom";
+import { Navigate, useNavigate } from "react-router-dom";
import { useAuthStatus } from "@features/authentication/login/hooks/useAuthStatus";
type prortectedRouteType = {
children: ReactNode;
+ allowedRoles: string[];
+ userRole: string;
};
-function ProtectedRoute({ children }: prortectedRouteType) {
+function ProtectedRoute({
+ children,
+ allowedRoles,
+ userRole
+}: prortectedRouteType) {
const navigate = useNavigate();
const { isAuth, isPending } = useAuthStatus();
@@ -17,7 +23,12 @@ function ProtectedRoute({ children }: prortectedRouteType) {
}
}, [navigate, isAuth, isPending]);
- if (isAuth) return children;
+ if (isAuth)
+ return allowedRoles.includes(userRole) ? (
+ children
+ ) : (
+
+ );
else return null;
}
diff --git a/app/src/components/side-bar/SideBar.test.tsx b/app/src/components/side-bar/SideBar.test.tsx
index 9ba25390..d53c4060 100644
--- a/app/src/components/side-bar/SideBar.test.tsx
+++ b/app/src/components/side-bar/SideBar.test.tsx
@@ -1,5 +1,5 @@
import { render, screen } from "@testing-library/react";
-import * as update from "@features/privacy-settings/service/changeSettings";
+import * as update from "@features/privacy-settings/service/apiChangeSettings";
import renderWithStore from "@tests/test-utils";
import SideBar from "./SideBar";
import { privacySettingsRows, settingsRows } from "@data/sideBar";
@@ -88,10 +88,10 @@ describe("Sidebar", () => {
expect(screen.getByText("Who can see my stories?")).toBeInTheDocument();
expect(screen.getByText("Who can see my last seen?")).toBeInTheDocument();
expect(
- screen.getByText("Who can see my profile photo?"),
+ screen.getByText("Who can see my profile photo?")
).toBeInTheDocument();
expect(
- screen.getByText("Who can add me to group chats?"),
+ screen.getByText("Who can add me to group chats?")
).toBeInTheDocument();
expect(screen.getByText("Who can add me to channels?")).toBeInTheDocument();
});
diff --git a/app/src/components/side-bar/SideBar.tsx b/app/src/components/side-bar/SideBar.tsx
index 55ba6f4b..fca3e253 100644
--- a/app/src/components/side-bar/SideBar.tsx
+++ b/app/src/components/side-bar/SideBar.tsx
@@ -17,10 +17,22 @@ import ChatList from "@features/chats/ChatsList";
import { useAppSelector } from "@hooks/useGlobalState";
import BlockList from "@features/privacy-settings/BlockList";
import Devices from "@features/devices/Devices";
+import NewGroup from "@features/groups/NewGroup.js";
+import { SidebarContext } from "./SideBarContext.js";
+import GroupInfo from "@features/groups/GroupInfo.js";
+import EditGroupInfo from "@features/groups/EditGroupInfo.js";
+import GroupType from "@features/groups/GroupType.js";
+import AddNewGroupMembers from "./groups/AddNewGroupMembers.js";
+import AddMoreMembers from "./groups/AddMoreMembers.js";
+import Admins from "@features/groups/Admins.js";
+import AddAdmins from "./groups/AddAdmins.js";
+import Members from "@features/groups/Members.js";
+import Permissions from "@features/groups/Permissions.js";
interface SideBarProps {
rows?: SideBarRowProps[];
data?: RadioInputProps;
+ type?: "channel" | "group";
}
const fadeIn = keyframes`
@@ -43,6 +55,7 @@ const StyledSidebar = styled.aside<{ $isExiting: boolean }>`
flex-direction: column;
border-right: 1px solid var(--color-border);
+ z-index: 100;
animation: ${({ $isExiting }) => ($isExiting ? fadeOut : fadeIn)} 0.1s;
animation: ${({ $isExiting }) => ($isExiting ? fadeOut : fadeIn)} 0.1s
@@ -62,37 +75,110 @@ const StyledSidebar = styled.aside<{ $isExiting: boolean }>`
}
`;
-const sideBarMap: { [key: string]: (props: SideBarProps) => React.ReactNode } =
- {
- Chats: () => (
-
-
-
- ),
- Contacts: () => ,
- Settings: (props) => (
-
-
-
-
- ),
- Privacy: (props) => ,
- SettingsUpdate: (props) => (
-
- {props.data && }
-
- ),
- ProfileUpdate: () => ,
- blockList: () => (
-
-
-
- ),
- Devices: () => } />,
- };
-
-function Sidebar() {
- const { page, props } = useAppSelector((state) => state.sideBarData);
+const sideBarMap: {
+ [key: string]: (
+ props: SideBarProps,
+ type: "left" | "right"
+ ) => React.ReactNode;
+} = {
+ Chats: () => (
+
+
+
+ ),
+ Contacts: () => ,
+ Settings: (props) => (
+
+
+
+
+ ),
+ Privacy: (props) => ,
+ SettingsUpdate: (props) => (
+
+ {props.data && }
+
+ ),
+ ProfileUpdate: () => ,
+ blockList: () => (
+
+
+
+ ),
+ Devices: () => } />,
+ AddMembers: () => (
+
+
+
+ ),
+ NewGroup: () => (
+
+
+
+ ),
+ NewChannel: () => (
+
+
+
+ ),
+ GroupInfo: () => (
+
+
+
+ ),
+ EditGroupInfo: () => (
+
+
+
+ ),
+ GroupType: () => (
+
+
+
+ ),
+ AddMoreMembers: () => (
+
+
+
+ ),
+ Admins: () => (
+
+
+
+ ),
+ AddAdmins: () => (
+
+
+
+ ),
+ Members: () => (
+
+
+
+ ),
+ Permissions: () => (
+
+
+
+ ),
+ ChannelInfo: () => (
+
+
+
+ ),
+ EditChannelInfo: () => (
+
+
+
+ ),
+};
+
+function Sidebar({ type }: { type: "left" | "right" }) {
+ const { page, props } = useAppSelector((state) =>
+ type === "left"
+ ? state.sideBarData.leftSideBar
+ : state.sideBarData.rightSideBar
+ );
const [currentPage, setCurrentPage] = useState(page);
const [isExiting, setIsExiting] = useState(false);
@@ -113,9 +199,11 @@ function Sidebar() {
const pageString = pagesMap[currentPage] || "Settings";
return (
-
- {sideBarMap[pageString](props || {})}
-
+
+
+ {sideBarMap[pageString](props!, type)}
+
+
);
}
diff --git a/app/src/components/side-bar/SideBarContext.tsx b/app/src/components/side-bar/SideBarContext.tsx
new file mode 100644
index 00000000..d25f857b
--- /dev/null
+++ b/app/src/components/side-bar/SideBarContext.tsx
@@ -0,0 +1,13 @@
+import { createContext, useContext } from "react";
+
+type SidebarType = "left" | "right";
+
+export const SidebarContext = createContext(undefined);
+
+export const useSidebarType = () => {
+ const context = useContext(SidebarContext);
+ if (!context) {
+ throw new Error("useSidebarType must be used within a SidebarProvider");
+ }
+ return context;
+};
diff --git a/app/src/components/side-bar/chats/ChatsSideBar.tsx b/app/src/components/side-bar/chats/ChatsSideBar.tsx
index ef74ef95..29d4788c 100644
--- a/app/src/components/side-bar/chats/ChatsSideBar.tsx
+++ b/app/src/components/side-bar/chats/ChatsSideBar.tsx
@@ -1,7 +1,9 @@
import styled from "styled-components";
-import CircleIcon from "../../CircleIcon";
import ChatsSidebarHeader from "./ChatsSideBarHeader";
-import StartNewChat from "./StartNewChat";
+import StartNewChat from "@features/chats/StartNewChat";
+import AddStory from "@features/stories/components/AddStory";
+import StoryListContainer from "@features/stories/components/StoryListContainer";
+import TabedSearch from "@features/search/components/TabedSearch";
interface ChatsSideBarProps {
children?: React.ReactNode;
@@ -9,29 +11,41 @@ interface ChatsSideBarProps {
}
const StyledChatsSideBar = styled.div`
- height: 100vh;
+ height: 100dvh;
+ display: flex;
+ flex-direction: column;
color: var(--color-icon-secondary);
-
background-color: var(--color-background);
- overflow-y: auto;
- position: relative;
+ overflow: hidden;
+`;
+
+const ButtonsContainer = styled.div`
+ position: sticky;
+ bottom: 1rem;
+ width: 3.3rem;
+ left: 100%;
+ display: flex;
+ justify-content: space-around;
+ align-items: flex-end;
+ flex-direction: column-reverse;
+ gap: 4rem;
+ background-color: transparent;
+ z-index: 1;
`;
+
function ChatsSideBar({ children }: ChatsSideBarProps) {
return (
- {children}
-
-
+
+
+
{children}
+
+
+
+
+
+
);
}
diff --git a/app/src/components/side-bar/chats/ChatsSideBarHeader.tsx b/app/src/components/side-bar/chats/ChatsSideBarHeader.tsx
index 8cd3a43c..a5945e49 100644
--- a/app/src/components/side-bar/chats/ChatsSideBarHeader.tsx
+++ b/app/src/components/side-bar/chats/ChatsSideBarHeader.tsx
@@ -1,29 +1,24 @@
import styled from "styled-components";
-
import SideBarToolsButton from "./SideBarToolsButton";
import SearchBar from "./SearchBar";
-const StyledHeader = styled.header`
+const Header = styled.header`
background: var(--color-background);
-
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-around;
-
- padding: 0.375rem 0.8125rem 0.5rem 1.3rem;
+ padding: 0.375rem 0.8125rem 0.5rem 1.295rem;
+ position: relative;
height: 4rem;
-
- position: sticky;
- top: 0;
`;
function ChatsSidebarHeader() {
return (
-
+
+
);
}
diff --git a/app/src/components/side-bar/chats/SearchBar.tsx b/app/src/components/side-bar/chats/SearchBar.tsx
index 42822810..72c33fc8 100644
--- a/app/src/components/side-bar/chats/SearchBar.tsx
+++ b/app/src/components/side-bar/chats/SearchBar.tsx
@@ -1,24 +1,31 @@
+import { getIcon } from "@data/icons";
+import { setSearchTerm } from "@state/messages/global-search";
+import { RootState } from "@state/store";
+import { useDispatch, useSelector } from "react-redux";
import styled from "styled-components";
-import { SearchOutlined } from "@mui/icons-material";
const StyledSearchBar = styled.div`
margin-left: 1rem;
position: relative;
+ width: 100%;
+
&:focus-within > svg {
color: var(--color-search-border);
}
`;
-const StyledSearchIcon = styled(SearchOutlined)`
- position: absolute;
- left: 0.5rem;
- top: 50%;
- transform: translateY(-50%);
- color: var(--color-text-secondary);
- font-size: 1.2rem;
+const Icon = styled.div`
+ > svg {
+ position: absolute;
+ left: 0.5rem;
+ top: 50%;
+ transform: translateY(-50%);
+ color: var(--color-text-secondary);
+ font-size: 1.2rem;
+ }
`;
-const StyledInput = styled.input`
+const Input = styled.input`
background-color: var(--color-chat-hover);
border: 1px solid var(--pattern-color);
border-radius: var(--border-radius-searchbar);
@@ -39,10 +46,23 @@ const StyledInput = styled.input`
`;
function SearchBar() {
+ const dispatch = useDispatch();
+ const { searchTerm } = useSelector((state: RootState) => state.globalSearch);
+
+ const onSearch = (e: React.ChangeEvent) => {
+ dispatch(setSearchTerm(e.target.value));
+ };
+
return (
-
-
+
+ {getIcon("Search")}
);
}
diff --git a/app/src/components/side-bar/chats/SideBarMenuItem.tsx b/app/src/components/side-bar/chats/SideBarMenuItem.tsx
index 69031f56..fb9fdbd8 100644
--- a/app/src/components/side-bar/chats/SideBarMenuItem.tsx
+++ b/app/src/components/side-bar/chats/SideBarMenuItem.tsx
@@ -8,7 +8,7 @@ interface SideBarMenuItemProps {
onClick?: () => void;
}
-const StyledLi = styled.li`
+const StyledMenuItem = styled.li`
display: flex;
justify-content: start;
align-items: center;
@@ -31,11 +31,11 @@ function SideBarMenuItem({
iconMapValue,
}: SideBarMenuItemProps) {
return (
-
+
{getIcon(iconMapValue)}
{title}
{children}
-
+
);
}
export type { SideBarMenuItemProps };
diff --git a/app/src/components/side-bar/chats/SideBarToolsButton.tsx b/app/src/components/side-bar/chats/SideBarToolsButton.tsx
index cf348ebb..11c95e25 100644
--- a/app/src/components/side-bar/chats/SideBarToolsButton.tsx
+++ b/app/src/components/side-bar/chats/SideBarToolsButton.tsx
@@ -1,6 +1,5 @@
import { useState } from "react";
import styled from "styled-components";
-import { MenuOutlined } from "@mui/icons-material";
import ThemeToggle from "./theme-toggle/ThemeToggle";
import { useAppDispatch } from "@hooks/useGlobalState";
import { toggleTheme } from "@state/theme/theme";
@@ -8,14 +7,21 @@ import SideBarMenuItem from "./SideBarMenuItem";
import { updateSideBarView } from "@state/side-bar/sideBar";
import { sideBarPages } from "@data/sideBar";
import { useMouseLeave } from "@hooks/useMouseLeave";
+import { getIcon } from "@data/icons";
+import { useSidebarType } from "../SideBarContext";
+import { RootState } from "@state/store";
+import { clearSearch } from "@state/messages/global-search";
+import { useSelector } from "react-redux";
-const StyledToolsIcon = styled(MenuOutlined)`
- color: var(--color-icon-secondary);
- border-radius: var(--border-radius-modal);
- padding: 0.3rem;
- &:hover {
- cursor: pointer;
- background-color: var(--color-background-compact-menu-hover);
+const ToolsIcon = styled.div`
+ > svg {
+ color: var(--color-icon-secondary);
+ border-radius: var(--border-radius-modal);
+ padding: 0.3rem;
+ &:hover {
+ cursor: pointer;
+ background-color: var(--color-background-compact-menu-hover);
+ }
}
`;
@@ -34,22 +40,40 @@ const StyledList = styled.ul<{ $isOpened?: boolean }>`
box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);
border-radius: var(--border-radius-default);
visibility: ${({ $isOpened }) => ($isOpened ? "visible" : "hidden")};
+
+ z-index: 2;
`;
function SettingsToolbar() {
+ const { searchTerm } = useSelector((state: RootState) => state.globalSearch);
+ const isSearching = searchTerm.length > 0;
const [isOpened, setIsOpened] = useState(false);
const dispatch = useAppDispatch();
const ref = useMouseLeave(() => setIsOpened(false), false);
+
const handleOpenSettings = () => {
setIsOpened((prevState) => !prevState);
};
+
+ const handleResetSearch = () => {
+ dispatch(clearSearch());
+ };
+
+
+ const type = useSidebarType();
+
return (
<>
-
+ isSearching ? handleResetSearch() : handleOpenSettings()
+ }
data-testid="menu-items-icon"
- />
+ >
+ {isSearching
+ ? getIcon("Close", { fontSize: "large", sx: { fontSize: "2rem" } })
+ : getIcon("Menu")}
+
{isOpened && (
`
border-radius: 10px;
padding: 4px;
background-color: var(--accent-color);
- background-color: var(--accent-color);
${({ $theme }) =>
$theme === Theme.LIGHT &&
@@ -41,21 +41,15 @@ const Slider = styled.span<{ $theme?: Theme }>`
left: -7px;
bottom: -3px;
transition: 0.2s;
- transition: 0.2s;
border-radius: 50%;
background-color: var(--color-background);
border: 2px solid;
border-color: var(--accent-color);
- border: 2px solid;
- border-color: var(--accent-color);
-
${({ $theme }) =>
- $theme === Theme.LIGHT &&
$theme === Theme.LIGHT &&
css`
border-color: var(--pattern-color);
- border-color: var(--pattern-color);
`};
}
@@ -63,22 +57,52 @@ const Slider = styled.span<{ $theme?: Theme }>`
transform: translateX(25px);
}
`;
-function ThemeToggle() {
+const Container = styled.li<{ $theme?: Theme }>`
+ display: flex;
+ align-items: center;
+ gap: 0.4rem;
+ padding: 0.3rem;
+ height: 2.4rem;
+ width: 2.4rem;
+ justify-content: center;
+ background-color: var(--accent-color);
+
+ border-radius: 50%;
+ cursor: pointer;
+ ${({ $theme }) =>
+ $theme === Theme.LIGHT &&
+ css`
+ background-color: var(--pattern-color);
+ `};
+`;
+function ThemeToggle({ isAdmin = false }: { isAdmin?: boolean }) {
const currentTheme = useAppSelector((state) => state.theme.value);
const dispatch = useAppDispatch();
const handleChange = () => {
dispatch(toggleTheme());
};
return (
-
-
-
-
+ <>
+ {isAdmin ? (
+
+ {currentTheme === Theme.LIGHT ? getIcon("NightMode") : getIcon("Sun")}
+
+ ) : (
+
+
+
+
+ )}
+ >
);
}
diff --git a/app/src/components/side-bar/chats/theme-toggle/ToggleMode.test.tsx b/app/src/components/side-bar/chats/theme-toggle/ToggleMode.test.tsx
index 40824000..f8ae4351 100644
--- a/app/src/components/side-bar/chats/theme-toggle/ToggleMode.test.tsx
+++ b/app/src/components/side-bar/chats/theme-toggle/ToggleMode.test.tsx
@@ -8,7 +8,7 @@ describe("ThemeToggle Component", () => {
const slider = screen.getByTestId("toggle-mode-slider");
const checkbox = screen.getByTestId(
- "toggle-mode-checkbox"
+ "toggle-mode-checkbox",
) as HTMLInputElement;
expect(checkbox.checked).toBe(true);
@@ -19,7 +19,7 @@ describe("ThemeToggle Component", () => {
render(renderWithStore());
const checkbox = screen.getByTestId(
- "toggle-mode-checkbox"
+ "toggle-mode-checkbox",
) as HTMLInputElement;
fireEvent.click(checkbox);
diff --git a/app/src/components/side-bar/groups/AddAdmins.tsx b/app/src/components/side-bar/groups/AddAdmins.tsx
new file mode 100644
index 00000000..5ee62cc2
--- /dev/null
+++ b/app/src/components/side-bar/groups/AddAdmins.tsx
@@ -0,0 +1,60 @@
+import { useDispatch } from "react-redux";
+import { useParams } from "react-router-dom";
+import styled from "styled-components";
+
+import AddMembers from "./AddMembers";
+import AddMembersButton from "./AddMembersButton";
+
+import { updateSideBarView } from "@state/side-bar/sideBar";
+
+import { sideBarPages } from "types/sideBar";
+
+import { useGroupInfo } from "@features/groups/hooks/useGroupInfo";
+import { useAppSelector } from "@hooks/useGlobalState";
+import { useSocket } from "@hooks/useSocket";
+import { clearSelectedUsers } from "@state/groups/selectedUsers";
+
+const Container = styled.div`
+ width: 100%;
+ background-color: var(--color-background);
+`;
+
+function AddAdmins() {
+ const { chatId } = useParams<{ chatId: string }>();
+
+ const { groupMembers, isPending } = useGroupInfo();
+
+ const selectedUsers = useAppSelector((state) => state.selectedUsers);
+ const { props } = useAppSelector((state) => state.sideBarData.rightSideBar);
+
+ const dispatch = useDispatch();
+ const { addAdmins } = useSocket();
+
+ function handleClick() {
+ addAdmins({
+ chatId: chatId!,
+ members: selectedUsers.map((user) => user._id),
+ });
+ const redirect = sideBarPages.ADMINS;
+ dispatch(
+ updateSideBarView({
+ redirect,
+ data: { type: "right", backView: props?.prevBackView! },
+ })
+ );
+ dispatch(clearSelectedUsers());
+ }
+
+ if (isPending) return;
+
+ const normalMembers = groupMembers?.filter((user) => user.role === "member");
+
+ return (
+
+
+ {!!selectedUsers.length && }
+
+ );
+}
+
+export default AddAdmins;
diff --git a/app/src/components/side-bar/groups/AddGroupMembers.tsx b/app/src/components/side-bar/groups/AddGroupMembers.tsx
new file mode 100644
index 00000000..c85c4c95
--- /dev/null
+++ b/app/src/components/side-bar/groups/AddGroupMembers.tsx
@@ -0,0 +1,94 @@
+import { useState } from "react";
+import styled from "styled-components";
+
+import CircleIcon from "@components/CircleIcon";
+import UsersList from "@components/UsersList";
+
+import { sideBarPages } from "types/sideBar";
+import { updateSideBarView } from "@state/side-bar/sideBar";
+
+import { useAppDispatch } from "@hooks/useGlobalState";
+import { useAllUsers } from "@features/groups/hooks/useAllUsers";
+import { useUser } from "@features/authentication/login/hooks/useUser";
+import { useSidebarType } from "../SideBarContext";
+
+const Container = styled.div`
+ width: 100%;
+ background-color: var(--color-background);
+`;
+
+const SearchInput = styled.input`
+ width: 100%;
+ padding: 1rem;
+ font-size: 0.9rem;
+ caret-color: var(--accent-color);
+ color: var(--color-text);
+ outline: none;
+ border: none;
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
+`;
+
+const StyledUsersList = styled.div`
+ width: 100%;
+ max-height: calc(100vh - 7.5rem);
+ overflow-y: scroll;
+ position: relative;
+
+ background-color: var(--color-background);
+`;
+
+export default function AddGroupMembers({
+ type,
+}: {
+ type: "group" | "channel";
+}) {
+ const [searchQuery, setSearchQuery] = useState("");
+ const { users, isPending: isPendenigAllUsers } = useAllUsers();
+ const { user: currentUser, isPending: isPendingCurrentUser } = useUser();
+ const dispatch = useAppDispatch();
+ const sideBarType = useSidebarType();
+
+ const filteredUsers = users?.filter(
+ (user) =>
+ user._id !== currentUser._id &&
+ `${user.screenFirstName} ${user.screenLastName}`
+ .toLowerCase()
+ .includes(searchQuery.toLowerCase())
+ );
+
+ if (isPendenigAllUsers || isPendingCurrentUser) return null;
+
+ function handleClick() {
+ const redirect =
+ type === "channel" ? sideBarPages.NEW_CHANNEL : sideBarPages.NEW_GROUP;
+ dispatch(updateSideBarView({ redirect, data: { type: sideBarType } }));
+ }
+
+ return (
+
+ setSearchQuery(e.target.value)}
+ />
+
+
+
+
+
+
+
+ );
+}
diff --git a/app/src/components/side-bar/groups/AddMembers.tsx b/app/src/components/side-bar/groups/AddMembers.tsx
new file mode 100644
index 00000000..6616cd14
--- /dev/null
+++ b/app/src/components/side-bar/groups/AddMembers.tsx
@@ -0,0 +1,48 @@
+import { useState } from "react";
+import styled from "styled-components";
+
+import UsersList from "@components/UsersList";
+import { UserType } from "@features/groups/hooks/useAllUsers";
+import SearchInput from "./SearchInput";
+import { useAppSelector } from "@hooks/useGlobalState";
+
+const StyledUsersList = styled.div`
+ width: 100%;
+ max-height: calc(100vh - 7.5rem);
+ overflow-y: scroll;
+ position: relative;
+
+ background-color: var(--color-background);
+`;
+
+function AddMembers({ users }: { users: UserType[] }) {
+ const [searchQuery, setSearchQuery] = useState("");
+ const currUser = useAppSelector((state) => state.user.userInfo);
+
+ const filteredUsers = users?.filter(
+ (user) =>
+ currUser.id !== user._id &&
+ `${user.screenFirstName} ${user.screenLastName}`
+ .toLowerCase()
+ .includes(searchQuery.toLowerCase())
+ );
+
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
+
+export default AddMembers;
diff --git a/app/src/components/side-bar/groups/AddMembersButton.tsx b/app/src/components/side-bar/groups/AddMembersButton.tsx
new file mode 100644
index 00000000..9a97ad00
--- /dev/null
+++ b/app/src/components/side-bar/groups/AddMembersButton.tsx
@@ -0,0 +1,20 @@
+import CircleIcon from "@components/CircleIcon";
+
+function AddMembersButton({ onClick }: { onClick: () => void }) {
+ return (
+
+ );
+}
+
+export default AddMembersButton;
diff --git a/app/src/components/side-bar/groups/AddMoreMembers.tsx b/app/src/components/side-bar/groups/AddMoreMembers.tsx
new file mode 100644
index 00000000..dbd24ca5
--- /dev/null
+++ b/app/src/components/side-bar/groups/AddMoreMembers.tsx
@@ -0,0 +1,59 @@
+import styled from "styled-components";
+import { useDispatch } from "react-redux";
+import { useParams } from "react-router-dom";
+
+import AddMembers from "./AddMembers";
+
+import { useGroupInfo } from "@features/groups/hooks/useGroupInfo";
+
+import { sideBarPages } from "types/sideBar";
+import { updateSideBarView } from "@state/side-bar/sideBar";
+import AddMembersButton from "./AddMembersButton";
+
+import { useAppSelector } from "@hooks/useGlobalState";
+import { useSocket } from "@hooks/useSocket";
+import { clearSelectedUsers } from "@state/groups/selectedUsers";
+
+const Container = styled.div`
+ width: 100%;
+ background-color: var(--color-background);
+`;
+
+function AddMoreMembers() {
+ const { chatId } = useParams<{ chatId: string }>();
+
+ const { groupMembers, isPending, chatType } = useGroupInfo();
+ const users = useAppSelector((state) => state.chats.members);
+ const selectedUsers = useAppSelector((state) => state.selectedUsers);
+ const { addGroupMembers } = useSocket();
+
+ const dispatch = useDispatch();
+
+ if (isPending) return;
+
+ function handleClick() {
+ addGroupMembers({
+ chatId: chatId!,
+ users: selectedUsers.map((user) => user._id),
+ });
+ const redirect =
+ chatType === "group"
+ ? sideBarPages.GROUP_INFO
+ : sideBarPages.CHANNEL_INFO;
+ dispatch(updateSideBarView({ redirect, data: { type: "right" } }));
+ dispatch(clearSelectedUsers());
+ }
+
+ const filteredUsers = users?.filter(
+ (user) => !groupMembers.some((member) => member._id === user._id)
+ );
+
+ return (
+
+
+ {!!selectedUsers.length && }
+
+ );
+}
+
+export default AddMoreMembers;
diff --git a/app/src/components/side-bar/groups/AddNewGroupMembers.tsx b/app/src/components/side-bar/groups/AddNewGroupMembers.tsx
new file mode 100644
index 00000000..37b0e34f
--- /dev/null
+++ b/app/src/components/side-bar/groups/AddNewGroupMembers.tsx
@@ -0,0 +1,45 @@
+import styled from "styled-components";
+
+import AddMembers from "./AddMembers";
+
+import { sideBarPages } from "types/sideBar";
+import { updateSideBarView } from "@state/side-bar/sideBar";
+
+import { useSidebarType } from "../SideBarContext";
+
+import { useAppDispatch, useAppSelector } from "@hooks/useGlobalState";
+import AddMembersButton from "./AddMembersButton";
+
+const Container = styled.div`
+ width: 100%;
+ background-color: var(--color-background);
+`;
+
+function AddNewGroupMembers() {
+ const sideBarType = useSidebarType();
+ const { props } = useAppSelector((state) =>
+ sideBarType === "left"
+ ? state.sideBarData.leftSideBar
+ : state.sideBarData.rightSideBar
+ );
+
+ const type = props?.view;
+ const users = useAppSelector((state) => state.chats.members);
+
+ const dispatch = useAppDispatch();
+
+ function handleClick() {
+ const redirect =
+ type === "channel" ? sideBarPages.NEW_CHANNEL : sideBarPages.NEW_GROUP;
+ dispatch(updateSideBarView({ redirect, data: { type: sideBarType } }));
+ }
+
+ return (
+
+
+
+
+ );
+}
+
+export default AddNewGroupMembers;
diff --git a/app/src/components/side-bar/groups/SearchInput.tsx b/app/src/components/side-bar/groups/SearchInput.tsx
new file mode 100644
index 00000000..d442e14c
--- /dev/null
+++ b/app/src/components/side-bar/groups/SearchInput.tsx
@@ -0,0 +1,36 @@
+import styled from "styled-components";
+
+const StyledSearchInput = styled.input`
+ width: 100%;
+ padding: 1rem;
+ font-size: 0.9rem;
+ caret-color: var(--accent-color);
+ color: var(--color-text);
+ outline: none;
+ border: none;
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
+`;
+
+type SearchInputProps = {
+ searchQuery: string;
+ setSearchQuery: React.Dispatch>;
+ placeholder?: string;
+};
+
+function SearchInput({
+ searchQuery,
+ setSearchQuery,
+ placeholder,
+}: SearchInputProps) {
+ return (
+ setSearchQuery(e.target.value)}
+ />
+ );
+}
+
+export default SearchInput;
diff --git a/app/src/components/side-bar/settings/GroupInfoHeader.tsx b/app/src/components/side-bar/settings/GroupInfoHeader.tsx
new file mode 100644
index 00000000..fe356545
--- /dev/null
+++ b/app/src/components/side-bar/settings/GroupInfoHeader.tsx
@@ -0,0 +1,85 @@
+import styled from "styled-components";
+import { useAppDispatch, useAppSelector } from "@hooks/useGlobalState";
+
+import Heading from "@components/Heading";
+import Icon from "@components/Icon";
+
+import { getIcon } from "@data/icons";
+
+import { useSidebarType } from "../SideBarContext";
+import { sideBarPages } from "types/sideBar";
+import { updateSideBarView } from "@state/side-bar/sideBar";
+import BackArrow from "@components/BackArrow";
+import { useRightSideBarContext } from "@features/groups/contexts/RightSideBarProvider";
+import { useChat } from "@features/chats/hooks/useChat";
+
+const StyledSideBarHeader = styled.div`
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ padding: 1rem;
+
+ background-color: var(--color-background);
+`;
+
+const Container = styled.div`
+ display: flex;
+ align-items: center;
+ gap: 1.5rem;
+`;
+
+function GroupInfoHeader() {
+ const { chat, isPending } = useChat();
+
+ const type = useSidebarType();
+ const { setIsRightSideBarOpen } = useRightSideBarContext();
+
+ const { title } = useAppSelector((state) =>
+ type === "left"
+ ? state.sideBarData.leftSideBar
+ : state.sideBarData.rightSideBar
+ );
+
+ const dispatch = useAppDispatch();
+ if (!chat || isPending) return null;
+
+ function handleEdit() {
+ dispatch(
+ updateSideBarView({
+ redirect:
+ chat?.type === "group"
+ ? sideBarPages.EDIT_GROUP_INFO
+ : sideBarPages.EDIT_CHANNEL_INFO,
+ data: { type },
+ })
+ );
+ }
+
+ return (
+
+
+ {title === "Group Info" || title === "Channel Info" ? (
+ setIsRightSideBarOpen(false)}
+ >
+ {getIcon("Close")}
+
+ ) : (
+
+ )}
+
+ {title}
+
+
+ {(title === "Group Info" || title === "Channel Info") && (
+
+ {getIcon("Edit")}
+
+ )}
+
+ );
+}
+
+export default GroupInfoHeader;
diff --git a/app/src/components/side-bar/settings/OptionsList.tsx b/app/src/components/side-bar/settings/OptionsList.tsx
index 4de7b4fe..d6ea940f 100644
--- a/app/src/components/side-bar/settings/OptionsList.tsx
+++ b/app/src/components/side-bar/settings/OptionsList.tsx
@@ -9,6 +9,7 @@ import {
StatusType,
} from "types/sideBar";
import { statusMap } from "@data/sideBar";
+import { useSidebarType } from "../SideBarContext";
const StyledOptionsList = styled.div`
display: flex;
@@ -48,8 +49,13 @@ function getKey(
}
function OptionsList({ rows }: { rows: SideBarRowProps[] }) {
- const { title } = useAppSelector((state) => state.sideBarData);
+ const type = useSidebarType();
+ const { title } = useAppSelector((state) =>
+ type === "left"
+ ? state.sideBarData.leftSideBar
+ : state.sideBarData.rightSideBar
+ );
return (
<>
{rows.length > 0 && (
diff --git a/app/src/components/side-bar/settings/ProfilePicture.tsx b/app/src/components/side-bar/settings/ProfilePicture.tsx
index ec99f147..704ca34c 100644
--- a/app/src/components/side-bar/settings/ProfilePicture.tsx
+++ b/app/src/components/side-bar/settings/ProfilePicture.tsx
@@ -1,20 +1,37 @@
import { STATIC_MEDIA_URL } from "@constants";
import { useProfileSettings } from "@features/profile-settings/hooks/useProfileSettings";
+import { getAvatarName } from "@utils/helpers";
import styled from "styled-components";
const ProfilePictureContainer = styled.div`
position: relative;
`;
-const StyledImg = styled.img<{ $isCircleStyle?: boolean }>`
+const Image = styled.div<{ $isCircleStyle?: boolean; $image?: string }>`
display: flex;
justify-content: center;
align-items: center;
min-height: 20rem;
aspect-ratio: 1/1;
width: 100%;
- object-fit: fill;
+ background: ${({ $image }) =>
+ $image
+ ? `url(${STATIC_MEDIA_URL + $image}) center/cover no-repeat`
+ : "var(--color-avatar)"};
+
border-radius: ${({ $isCircleStyle }) => ($isCircleStyle ? "50%" : "0")};
+
+ color: white;
+
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ flex-shrink: 0;
+
+ font-weight: bold;
+ font-size: 8rem;
+ text-transform: uppercase;
`;
const ProfileInfo = styled.div`
@@ -52,12 +69,16 @@ function ProfilePicture({ isCircleStyle }: { isCircleStyle?: boolean }) {
const { data: profileSettings } = useProfileSettings();
return (
-
+ >
+ {!profileSettings?.photo &&
+ getAvatarName(
+ (profileSettings?.firstName + profileSettings?.lastName).toString()
+ )}
+
{!isCircleStyle && (
diff --git a/app/src/components/side-bar/settings/SettingsSideBarBody.tsx b/app/src/components/side-bar/settings/SettingsSideBarBody.tsx
index ffd527e8..20370171 100644
--- a/app/src/components/side-bar/settings/SettingsSideBarBody.tsx
+++ b/app/src/components/side-bar/settings/SettingsSideBarBody.tsx
@@ -2,6 +2,8 @@ import styled from "styled-components";
import OptionsList from "./OptionsList";
import SettingsSideBarHeader from "./SettingsSideBarHeader";
import { SideBarRowProps } from "./side-bar-row/SideBarRow";
+import { useSidebarType } from "../SideBarContext";
+import GroupInfoHeader from "./GroupInfoHeader";
interface SettingsSideBarProps {
children?: React.ReactNode;
@@ -12,13 +14,13 @@ const StyledSettingsSideBar = styled.div`
height: 100vh;
background-color: var(--color-background);
overflow-y: auto;
- position: relative;
`;
function SettingsSideBar({ rows, children }: SettingsSideBarProps) {
+ const type = useSidebarType();
return (
-
+ {type === "left" ? : }
{children}
diff --git a/app/src/components/side-bar/settings/SettingsSideBarHeader.tsx b/app/src/components/side-bar/settings/SettingsSideBarHeader.tsx
index 200df55e..45bb966a 100644
--- a/app/src/components/side-bar/settings/SettingsSideBarHeader.tsx
+++ b/app/src/components/side-bar/settings/SettingsSideBarHeader.tsx
@@ -3,9 +3,11 @@ import { useAppDispatch, useAppSelector } from "@hooks/useGlobalState";
import Heading from "@components/Heading";
import BackArrow from "@components/BackArrow";
import CircleIcon from "@components/CircleIcon";
-import { useLogout } from "@features/authentication/logout/hooks/useLogout";
import { updateSideBarView } from "@state/side-bar/sideBar";
import { sideBarPages } from "types/sideBar";
+import { useSidebarType } from "../SideBarContext";
+import { useLogout } from "@features/authentication/logout/hooks/useLogout";
+
const StyledSideBarHeader = styled.div`
height: 4rem !important;
position: relative;
@@ -20,7 +22,7 @@ const StyledSideBarHeader = styled.div`
background-color: var(--color-background);
border-bottom: 2px solid var(--color-item-hover);
`;
-const StyledIconsContainer = styled.div`
+const IconsContainer = styled.div`
display: flex;
flex-direction: row;
justify-content: end;
@@ -31,7 +33,13 @@ const StyledIconsContainer = styled.div`
`;
function SettingsSideBarHeader() {
- const { title } = useAppSelector((state) => state.sideBarData);
+ const type = useSidebarType();
+
+ const { title } = useAppSelector((state) =>
+ type === "left"
+ ? state.sideBarData.leftSideBar
+ : state.sideBarData.rightSideBar
+ );
const { logout } = useLogout();
const dispatch = useAppDispatch();
@@ -42,7 +50,7 @@ function SettingsSideBarHeader() {
{title}
{title === "Settings" && (
-
+
dispatch(
- updateSideBarView({ redirect: sideBarPages.PROFILE_UPDATE })
+ updateSideBarView({
+ redirect: sideBarPages.PROFILE_UPDATE,
+ data: { type }
+ })
)
}
/>
logout()}
$icon="Logout"
$padding={0.2}
$size={1.8}
$color="var(--color-text)"
$bgColor="var(--color-pattern)"
/>
-
+
)}
);
diff --git a/app/src/components/side-bar/settings/side-bar-row/SideBarRow.tsx b/app/src/components/side-bar/settings/side-bar-row/SideBarRow.tsx
index 0203f8e0..ce4d20ee 100644
--- a/app/src/components/side-bar/settings/side-bar-row/SideBarRow.tsx
+++ b/app/src/components/side-bar/settings/side-bar-row/SideBarRow.tsx
@@ -17,6 +17,7 @@ import {
privacySettingsInterface,
} from "types/user";
import { DataInterface, ExtractData } from "./getDataFactory";
+import { useSidebarType } from "@components/side-bar/SideBarContext";
const StyledSideBarRow = styled.div`
height: 4rem;
@@ -73,56 +74,67 @@ function SideBarRow({ redirect, icon, title, status, type }: SideBarRowProps) {
const renderedIcon = getIcon(icon);
const [currStatus, setCurrStatus] = useState(undefined);
- let key:
- | {
- id: keyof privacySettingsInterface;
- name: string;
- subtitle: string;
- }
- | {
- id: keyof activitySettingsInterface;
- name: string;
- subtitle: string;
- }
- | {
- id: keyof permissionsSettingsInterface;
- name: string;
- subtitle: string;
- }
- | undefined;
+ const [key, setKey] = useState<
+ | keyof privacySettingsInterface
+ | keyof activitySettingsInterface
+ | keyof permissionsSettingsInterface
+ | string
+ | undefined
+ >(undefined);
const dataExtractor: DataInterface = ExtractData(type, currStatus, status);
const data = dataExtractor.getData();
+ const sideBarType = useSidebarType();
useEffect(() => {
if (status !== undefined && type !== undefined) {
switch (type) {
case StatusType.PRIVACY:
- key = statusMap.privacy[status];
- setCurrStatus(userData?.privacySettings?.[key.id] || "everyone");
+ setKey(statusMap.privacy[status].id);
+ if (status === privacySettingsID.BLOCK_PRIVACY)
+ setCurrStatus(undefined);
+ else
+ setCurrStatus(
+ userData?.privacySettings?.[
+ key as keyof privacySettingsInterface
+ ] || "everyone"
+ );
break;
case StatusType.ACTIVITY:
- key = statusMap.activity[status as activitySettingsID];
- setCurrStatus(userData?.activitySettings?.[key.id] || "everyone");
+ setKey(statusMap.activity[status as activitySettingsID].id);
+ setCurrStatus(
+ userData?.activitySettings?.[
+ key as keyof activitySettingsInterface
+ ] || "everyone"
+ );
break;
case StatusType.PERMISSION:
- key = statusMap.permission[status as permissionSettingsID];
- setCurrStatus(userData?.permissionSettings?.[key.id] || "everyone");
+ setKey(statusMap.permission[status as permissionSettingsID].id);
+ setCurrStatus(
+ userData?.permissionSettings?.[
+ key as keyof permissionsSettingsInterface
+ ] || "everyone"
+ );
break;
default:
+ if (title === "Blocked Users") setKey("block");
+
throw new Error("Type not valid");
}
} else {
setCurrStatus(undefined);
}
- }, [userData, status]);
+ });
return (
- redirect && dispatch(updateSideBarView({ redirect, data }))
+ redirect &&
+ dispatch(
+ updateSideBarView({ redirect, data: { ...data, type: sideBarType } })
+ )
}
- data-testid={key && `menu-item-${key.id}`}
+ data-testid={key && `menu-item-${key}`}
>
{renderedIcon}
diff --git a/app/src/components/side-bar/settings/side-bar-row/getDataFactory.ts b/app/src/components/side-bar/settings/side-bar-row/getDataFactory.ts
index 7ec5db16..c7f2a890 100644
--- a/app/src/components/side-bar/settings/side-bar-row/getDataFactory.ts
+++ b/app/src/components/side-bar/settings/side-bar-row/getDataFactory.ts
@@ -27,12 +27,12 @@ function ExtractData(
case StatusType.PERMISSION:
return getPermissionData(itemStatus as permissionSettingsID, currStatus);
default:
- return { getData: () => {} };
+ return { getData: () => ({}) };
}
}
interface DataInterface {
- getData: () => void;
+ getData: () => object;
}
function getPrivacyData(
diff --git a/app/src/components/side-bar/settings/side-bar-row/sideBarRow.test.tsx b/app/src/components/side-bar/settings/side-bar-row/sideBarRow.test.tsx
index ab46cd43..df21bbeb 100644
--- a/app/src/components/side-bar/settings/side-bar-row/sideBarRow.test.tsx
+++ b/app/src/components/side-bar/settings/side-bar-row/sideBarRow.test.tsx
@@ -85,7 +85,7 @@ describe("SideBarRow", () => {
expect(mockDispatch).toHaveBeenCalledWith(
updateSideBarView({
redirect: 1,
- })
+ }),
);
});
@@ -130,7 +130,7 @@ describe("SideBarRow", () => {
state: expect.any(String),
data: expect.any(Object),
}),
- })
+ }),
);
});
});
diff --git a/app/src/components/unauthorized/Unauthorized.tsx b/app/src/components/unauthorized/Unauthorized.tsx
new file mode 100644
index 00000000..855bffe5
--- /dev/null
+++ b/app/src/components/unauthorized/Unauthorized.tsx
@@ -0,0 +1,54 @@
+import Heading from "@components/Heading";
+import { getIcon } from "@data/icons";
+import { useAppSelector } from "@hooks/useGlobalState";
+import { useNavigate } from "react-router-dom";
+import styled from "styled-components";
+
+const Container = styled.div`
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 1rem;
+ height: 100dvh;
+`;
+const Sign = styled.p`
+ font-size: 15rem;
+ text-align: center;
+`;
+const ErrorMessage = styled.p`
+ color: var(--color-error);
+ font-size: 1.5rem;
+`;
+const Arrow = styled.button`
+ background-color: var(--accent-color);
+ color: var(--color-text);
+ padding: 0.5rem 1rem;
+ border-radius: 0.5rem;
+ font-size: 3rem !important;
+ cursor: pointer;
+ border: none;
+ & > svg {
+ margin-right: 0.5rem;
+ color: var(--color-primary);
+ font-size: 2rem;
+ }
+`;
+function Unauthorized() {
+ const navigate = useNavigate();
+ const isAdmin = useAppSelector((state) => state.user.userInfo.isAdmin);
+ return (
+
+ 🚫️
+ 403 - Unauthorized
+ You do not have access to this page.
+ navigate(isAdmin ? "/admin" : "/", { replace: true })}
+ >
+ {getIcon("BackArrow")} Back To Home
+
+
+ );
+}
+
+export default Unauthorized;
diff --git a/app/src/constants.ts b/app/src/constants.ts
index 8dc333b2..66f674b9 100644
--- a/app/src/constants.ts
+++ b/app/src/constants.ts
@@ -5,8 +5,14 @@ const {
VITE_PORT: PORT,
VITE_ENV: ENV,
VITE_BACKEND_STORGAE: STATIC_MEDIA_URL,
+ TURN_URL,
+ VITE_TURN_USERNAME: TURN_USERNAME,
+ VITE_TURN_PASSWORD: TURN_PASSWORD
} = import.meta.env;
-const MOBILE_VIEW = "(max-width: 600px)";
+
+const MOBILE_VIEW = "(max-width: 800px)";
+const DESKTOP_VIEW = "(min-width: 800px)";
+const MAX_STORY_SIZE = 5 * 1024 * 1024;
export {
ENVIRONMENT,
@@ -14,6 +20,11 @@ export {
API_URL,
PORT,
ENV,
- MOBILE_VIEW,
STATIC_MEDIA_URL,
+ MOBILE_VIEW,
+ DESKTOP_VIEW,
+ MAX_STORY_SIZE,
+ TURN_URL,
+ TURN_USERNAME,
+ TURN_PASSWORD
};
diff --git a/app/src/data/animations/not_found.json b/app/src/data/animations/not_found.json
new file mode 100644
index 00000000..81e40a48
--- /dev/null
+++ b/app/src/data/animations/not_found.json
@@ -0,0 +1 @@
+{"tgs":1,"v":"5.5.2","fr":60,"ip":60,"op":240,"w":512,"h":512,"nm":"_103_SRCH","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1268","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":0,"k":[256,256,0]}},"ao":0,"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"wing","parent":23,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[9.032]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[9.032]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[9.032]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[9.032]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":158,"s":[9.032]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":184,"s":[9.032]},{"t":200,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":68,"s":[-109,126,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":80,"s":[-109,126,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":100,"s":[-109,126,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":114,"s":[-109,126,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[-109,126,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":158,"s":[-143.884,133.056,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[-143.884,133.056,0],"to":[0,0,0],"ti":[0,0,0]},{"t":200,"s":[-109,126,0]}]},"a":{"a":0,"k":[-109,126,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":70,"s":[{"i":[[0,0],[6.269,5.304]],"o":[[-10.127,-2.893],[0,0]],"v":[[-51.75,144.46],[-79.236,130.476]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":82,"s":[{"i":[[0,0],[6.269,5.304]],"o":[[-8.191,-7.579],[0,0]],"v":[[-55.236,153.922],[-79.236,130.476]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":102,"s":[{"i":[[0,0],[6.269,5.304]],"o":[[-8.191,-7.579],[0,0]],"v":[[-55.236,153.922],[-79.236,130.476]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[0,0],[6.269,5.304]],"o":[[-8.191,-7.579],[0,0]],"v":[[-53.682,151.084],[-79.236,130.476]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":142,"s":[{"i":[[0,0],[6.269,5.304]],"o":[[-8.191,-7.579],[0,0]],"v":[[-53.682,151.084],[-79.236,130.476]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":155,"s":[{"i":[[0,0],[6.768,5.622]],"o":[[-5.359,-10.003],[0,0]],"v":[[-76.634,159.308],[-93.788,134.314]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":163,"s":[{"i":[[0,0],[6.768,5.622]],"o":[[-11.051,-7.124],[0,0]],"v":[[-74.448,146.367],[-97.326,130.781]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":186,"s":[{"i":[[0,0],[6.768,5.622]],"o":[[-11.051,-7.124],[0,0]],"v":[[-74.448,146.367],[-97.326,130.781]],"c":false}]},{"t":203,"s":[{"i":[[0,0],[6.269,5.304]],"o":[[-10.127,-2.893],[0,0]],"v":[[-51.75,144.46],[-79.236,130.476]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":70,"s":[{"i":[[0,0],[3.584,-10.359],[33.756,31.345]],"o":[[30.38,26.522],[-2.812,8.126],[0,0]],"v":[[-85.987,113.116],[-31.014,150.247],[-118.779,146.389]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":82,"s":[{"i":[[0,0],[3.584,-10.359],[33.756,31.345]],"o":[[30.38,26.522],[-2.812,8.126],[0,0]],"v":[[-85.987,113.116],[-36.12,171.494],[-118.779,146.389]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":102,"s":[{"i":[[0,0],[3.584,-10.359],[33.756,31.345]],"o":[[30.38,26.522],[-2.812,8.126],[0,0]],"v":[[-85.987,113.116],[-36.12,171.494],[-118.779,146.389]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[0,0],[3.584,-10.359],[33.756,31.345]],"o":[[30.38,26.522],[-2.812,8.126],[0,0]],"v":[[-85.987,113.116],[-36.253,158.041],[-118.779,146.389]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":142,"s":[{"i":[[0,0],[3.584,-10.359],[33.756,31.345]],"o":[[30.38,26.522],[-2.812,8.126],[0,0]],"v":[[-85.987,113.116],[-36.253,158.041],[-118.779,146.389]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":155,"s":[{"i":[[0,0],[3.584,-10.359],[33.756,31.345]],"o":[[30.38,26.522],[-2.812,8.126],[0,0]],"v":[[-102.55,110.665],[-65.753,175.949],[-118.779,146.389]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":163,"s":[{"i":[[0,0],[3.584,-10.359],[33.756,31.345]],"o":[[30.38,26.522],[-2.812,8.126],[0,0]],"v":[[-102.55,110.665],[-58.41,153.177],[-118.779,146.389]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":186,"s":[{"i":[[0,0],[3.584,-10.359],[33.756,31.345]],"o":[[30.38,26.522],[-2.812,8.126],[0,0]],"v":[[-102.55,110.665],[-58.41,153.177],[-118.779,146.389]],"c":false}]},{"t":203,"s":[{"i":[[0,0],[3.584,-10.359],[33.756,31.345]],"o":[[30.38,26.522],[-2.812,8.126],[0,0]],"v":[[-85.987,113.116],[-31.014,150.247],[-118.779,146.389]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"book","parent":1,"sr":1,"ks":{"p":{"a":0,"k":[56.301,155.621,0]},"a":{"a":0,"k":[56.301,135.621,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[134.226,87.972],[209.796,40.756],[139.898,181.864],[70.001,217.049]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[129.355,114.894],[217.852,78],[145.472,186.788],[70.001,219.157]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[129.355,114.894],[217.852,78],[145.472,186.788],[70.001,219.157]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[134.226,87.972],[209.796,40.756],[139.898,181.864],[70.001,217.049]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[134.226,87.972],[209.796,40.756],[139.898,181.864],[70.001,217.049]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":158,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[101.77,92.434],[192.757,45.219],[157.343,177.807],[70.001,217.049]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":184,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[101.77,92.434],[192.757,45.219],[157.343,177.807],[70.001,217.049]],"c":true}]},{"t":200,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[134.226,87.972],[209.796,40.756],[139.898,181.864],[70.001,217.049]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.027450980619,0.396078437567,0.647058844566,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.560784339905,0.792156875134,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[0,0],[-0.825,10.829],[9.801,-19.925],[8.792,11.262]],"o":[[22.068,16.893],[-20.595,51.977],[-9.801,19.925],[13.153,-26.855]],"v":[[88.257,96.201],[134.226,87.972],[70.001,217.049],[29.125,220.514]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[0,0],[-0.825,9.608],[8.106,-16.468],[8.792,9.992]],"o":[[22.068,14.989],[-17.842,46.188],[-8.167,16.592],[10.553,-22.829]],"v":[[83.386,122.196],[129.355,114.894],[70.001,219.157],[29.125,222.231]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[0,0],[-0.825,9.608],[8.106,-16.468],[8.792,9.992]],"o":[[22.068,14.989],[-17.842,46.188],[-8.167,16.592],[10.553,-22.829]],"v":[[83.386,122.196],[129.355,114.894],[70.001,219.157],[29.125,222.231]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[0,0],[-0.825,10.829],[9.801,-19.925],[8.792,11.262]],"o":[[22.068,16.893],[-20.595,51.977],[-9.801,19.925],[13.153,-26.855]],"v":[[88.257,96.201],[134.226,87.972],[70.001,217.049],[29.125,220.514]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-0.825,10.829],[9.801,-19.925],[8.792,11.262]],"o":[[22.068,16.893],[-20.595,51.977],[-9.801,19.925],[13.153,-26.855]],"v":[[88.257,96.201],[134.226,87.972],[70.001,217.049],[29.125,220.514]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":158,"s":[{"i":[[0,0],[-0.825,10.829],[4.578,-15.611],[8.792,11.262]],"o":[[22.068,16.893],[-11.979,52.222],[-4.689,16.092],[5.016,-23.333]],"v":[[55.801,100.664],[101.77,92.434],[70.001,217.049],[29.125,220.514]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":184,"s":[{"i":[[0,0],[-0.825,10.829],[4.578,-15.611],[8.792,11.262]],"o":[[22.068,16.893],[-11.979,52.222],[-4.689,16.092],[5.016,-23.333]],"v":[[55.801,100.664],[101.77,92.434],[70.001,217.049],[29.125,220.514]],"c":true}]},{"t":200,"s":[{"i":[[0,0],[-0.825,10.829],[9.801,-19.925],[8.792,11.262]],"o":[[22.068,16.893],[-20.595,51.977],[-9.801,19.925],[13.153,-26.855]],"v":[[88.257,96.201],[134.226,87.972],[70.001,217.049],[29.125,220.514]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.027450980619,0.396078437567,0.647058844566,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.560784339905,0.792156875134,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[0,0],[-0.265,-1.299],[0,0],[0,0]],"o":[[0,0],[0.265,1.299],[0,0],[0,0]],"v":[[-97.193,217.049],[-33.578,87.105],[88.257,96.201],[29.125,220.514]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[0,0],[-0.265,-1.153],[0,0],[0,0]],"o":[[0,0],[0.265,1.153],[0,0],[0,0]],"v":[[-97.193,219.157],[-52.208,112.36],[83.386,122.196],[29.125,222.231]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[0,0],[-0.265,-1.153],[0,0],[0,0]],"o":[[0,0],[0.265,1.153],[0,0],[0,0]],"v":[[-97.193,219.157],[-52.208,112.36],[83.386,122.196],[29.125,222.231]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[0,0],[-0.265,-1.299],[0,0],[0,0]],"o":[[0,0],[0.265,1.299],[0,0],[0,0]],"v":[[-97.193,217.049],[-33.578,87.105],[88.257,96.201],[29.125,220.514]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-0.265,-1.299],[0,0],[0,0]],"o":[[0,0],[0.265,1.299],[0,0],[0,0]],"v":[[-97.193,217.049],[-33.578,87.105],[88.257,96.201],[29.125,220.514]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":158,"s":[{"i":[[0,0],[-0.265,-1.299],[0,0],[0,0]],"o":[[0,0],[0.265,1.299],[0,0],[0,0]],"v":[[-97.193,217.049],[-66.845,87.105],[55.801,100.664],[29.125,220.514]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":184,"s":[{"i":[[0,0],[-0.265,-1.299],[0,0],[0,0]],"o":[[0,0],[0.265,1.299],[0,0],[0,0]],"v":[[-97.193,217.049],[-66.845,87.105],[55.801,100.664],[29.125,220.514]],"c":true}]},{"t":200,"s":[{"i":[[0,0],[-0.265,-1.299],[0,0],[0,0]],"o":[[0,0],[0.265,1.299],[0,0],[0,0]],"v":[[-97.193,217.049],[-33.578,87.105],[88.257,96.201],[29.125,220.514]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.027450980619,0.396078437567,0.647058844566,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.560784339905,0.792156875134,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"book","parent":3,"sr":1,"ks":{},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-45.258,68.047],[-33.578,87.105],[-94.075,210.593],[-109.419,191.06]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-56.295,82.949],[-52.93,116.144],[-94.075,218.593],[-97.197,185.801]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-56.295,82.949],[-52.93,116.144],[-94.075,218.593],[-97.197,185.801]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-45.258,68.047],[-33.578,87.105],[-94.075,210.593],[-109.419,191.06]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-45.258,68.047],[-33.578,87.105],[-94.075,210.593],[-109.419,191.06]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":158,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-70.411,70.075],[-64.411,88.728],[-94.075,210.593],[-100.9,190.249]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":184,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-70.411,70.075],[-64.411,88.728],[-94.075,210.593],[-100.9,190.249]],"c":true}]},{"t":200,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-45.258,68.047],[-33.578,87.105],[-94.075,210.593],[-109.419,191.06]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.776470601559,0.713725507259,0.458823531866,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[0,0],[0,0],[0,0],[-17.228,-26.664],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[59.902,-12.128],[11.554,-47.106],[0,0],[0,0],[0,0]],"v":[[-90.704,214.883],[-109.419,191.06],[-45.258,68.047],[108.626,92.038],[175.667,35.546],[200.71,50.572],[71.027,213.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[0,0],[0,0],[0,0],[-17.228,-22.109],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[59.902,-10.056],[14.633,-28.094],[0,0],[0,0],[0,0]],"v":[[-95.204,217.383],[-97.197,185.801],[-56.295,82.949],[100.867,111.094],[183.686,66],[205.747,83.604],[71.027,213.584]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[0,0],[0,0],[0,0],[-17.228,-22.109],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[59.902,-10.056],[14.633,-28.094],[0,0],[0,0],[0,0]],"v":[[-95.204,217.383],[-97.197,185.801],[-56.295,82.949],[100.867,111.094],[183.686,66],[205.747,83.604],[71.027,213.584]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[0,0],[0,0],[0,0],[-17.228,-26.664],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[59.902,-12.128],[11.554,-47.106],[0,0],[0,0],[0,0]],"v":[[-90.704,214.883],[-109.419,191.06],[-45.258,68.047],[108.626,92.038],[175.667,35.546],[200.71,50.572],[71.027,213.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[0,0],[0,0],[-17.228,-26.664],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[59.902,-12.128],[11.554,-47.106],[0,0],[0,0],[0,0]],"v":[[-90.704,214.883],[-109.419,191.06],[-45.258,68.047],[108.626,92.038],[175.667,35.546],[200.71,50.572],[71.027,213.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":158,"s":[{"i":[[0,0],[0,0],[0,0],[-17.228,-26.664],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[59.902,-12.128],[11.554,-47.106],[0,0],[0,0],[0,0]],"v":[[-90.704,214.883],[-100.9,190.249],[-70.411,70.075],[74.954,96.907],[166.336,37.574],[182.048,55.034],[71.027,213.584]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":184,"s":[{"i":[[0,0],[0,0],[0,0],[-17.228,-26.664],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[59.902,-12.128],[11.554,-47.106],[0,0],[0,0],[0,0]],"v":[[-90.704,214.883],[-100.9,190.249],[-70.411,70.075],[74.954,96.907],[166.336,37.574],[182.048,55.034],[71.027,213.584]],"c":true}]},{"t":200,"s":[{"i":[[0,0],[0,0],[0,0],[-17.228,-26.664],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[59.902,-12.128],[11.554,-47.106],[0,0],[0,0],[0,0]],"v":[[-90.704,214.883],[-109.419,191.06],[-45.258,68.047],[108.626,92.038],[175.667,35.546],[200.71,50.572],[71.027,213.584]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.776470601559,0.713725507259,0.458823531866,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019610882,0.741176486015,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"lupa11","parent":6,"sr":1,"ks":{"o":{"a":0,"k":50},"r":{"a":0,"k":180},"s":{"a":0,"k":[100,102.141,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[-2.139,0.427],[-4.327,-4.127]],"o":[[3.056,-0.611],[0.583,0.556]],"v":[[-0.847,-27.713],[15.929,-21.894]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":86,"s":[{"i":[[-1.66,1.415],[-5.79,-1.497]],"o":[[2.372,-2.022],[0.78,0.202]],"v":[[-12.923,-22.552],[4.563,-25.64]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[-1.66,1.415],[-5.79,-1.497]],"o":[[2.372,-2.022],[0.78,0.202]],"v":[[-12.923,-22.552],[4.563,-25.64]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-2.139,0.427],[-4.327,-4.127]],"o":[[3.056,-0.611],[0.583,0.556]],"v":[[-0.847,-27.713],[15.929,-21.894]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-2.139,0.427],[-4.327,-4.127]],"o":[[3.056,-0.611],[0.583,0.556]],"v":[[-0.847,-27.713],[15.929,-21.894]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-2.084,0.643],[-4.726,-3.664]],"o":[[2.978,-0.919],[0.637,0.494]],"v":[[-8.57,-28.991],[8.712,-24.913]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-2.084,0.643],[-4.726,-3.664]],"o":[[2.978,-0.919],[0.637,0.494]],"v":[[-8.57,-28.991],[8.712,-24.913]],"c":false}]},{"t":199,"s":[{"i":[[-2.139,0.427],[-4.327,-4.127]],"o":[[3.056,-0.611],[0.583,0.556]],"v":[[-0.847,-27.713],[15.929,-21.894]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":228,"s":[0]},{"t":240,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":228,"s":[95]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":60,"op":240,"st":60,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"lupa10","parent":8,"sr":1,"ks":{},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[-1.622,-0.061],[-2.349,-2.735]],"o":[[6.306,0.238],[0.768,0.894]],"v":[[-0.876,-10.128],[12.98,-5.34]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":86,"s":[{"i":[[-1.355,0.894],[-3.502,-0.859]],"o":[[5.268,-3.474],[1.145,0.281]],"v":[[-13.739,-21.435],[0.317,-25.599]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[-1.355,0.894],[-3.502,-0.859]],"o":[[5.268,-3.474],[1.145,0.281]],"v":[[-13.739,-21.435],[0.317,-25.599]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-1.622,-0.061],[-2.349,-2.735]],"o":[[6.306,0.238],[0.768,0.894]],"v":[[-0.876,-10.128],[12.98,-5.34]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-1.622,-0.061],[-2.349,-2.735]],"o":[[6.306,0.238],[0.768,0.894]],"v":[[-0.876,-10.128],[12.98,-5.34]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-1.611,0.197],[-2.754,-2.328]],"o":[[6.264,-0.767],[0.9,0.761]],"v":[[-6.857,-8.696],[7.584,-6.17]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-1.611,0.197],[-2.754,-2.328]],"o":[[6.264,-0.767],[0.9,0.761]],"v":[[-6.857,-8.696],[7.584,-6.17]],"c":false}]},{"t":199,"s":[{"i":[[-1.622,-0.061],[-2.349,-2.735]],"o":[[6.306,0.238],[0.768,0.894]],"v":[[-0.876,-10.128],[12.98,-5.34]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[10]},{"t":240,"s":[20]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[70]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[70]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[70]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[80]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":60,"op":240,"st":60,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"lupa12","parent":8,"sr":1,"ks":{},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[13.07,5.995],[5.81,0.629],[5.365,-12.351]],"o":[[-4.782,-2.194],[-18.677,-2.022],[-0.321,0.74]],"v":[[18.741,-17.799],[2.734,-22.142],[-37.973,-3.967]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":86,"s":[{"i":[[13.639,6.224],[5.844,0],[4.004,-17.574]],"o":[[-4.99,-2.277],[-18.786,0],[-0.24,1.053]],"v":[[16.381,-35.954],[0,-39.5],[-38.514,-8.811]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[13.639,6.224],[5.844,0],[4.004,-17.574]],"o":[[-4.99,-2.277],[-18.786,0],[-0.24,1.053]],"v":[[16.381,-35.954],[0,-39.5],[-38.514,-8.811]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":114,"s":[{"i":[[13.07,5.995],[5.81,0.629],[5.365,-12.351]],"o":[[-4.782,-2.194],[-18.677,-2.022],[-0.321,0.74]],"v":[[18.741,-17.799],[2.734,-22.142],[-37.973,-3.967]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":140,"s":[{"i":[[13.07,5.995],[5.81,0.629],[5.365,-12.351]],"o":[[-4.782,-2.194],[-18.677,-2.022],[-0.321,0.74]],"v":[[18.741,-17.799],[2.734,-22.142],[-37.973,-3.967]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":158,"s":[{"i":[[12.021,7.891],[5.649,1.495],[7.159,-11.405]],"o":[[-4.398,-2.887],[-18.161,-4.805],[-0.429,0.683]],"v":[[23.801,-15.061],[8.628,-21.76],[-34.347,-9.907]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":184,"s":[{"i":[[12.021,7.891],[5.649,1.495],[7.159,-11.405]],"o":[[-4.398,-2.887],[-18.161,-4.805],[-0.429,0.683]],"v":[[23.801,-15.061],[8.628,-21.76],[-34.347,-9.907]],"c":false}]},{"t":199,"s":[{"i":[[13.07,5.995],[5.81,0.629],[5.365,-12.351]],"o":[[-4.782,-2.194],[-18.677,-2.022],[-0.321,0.74]],"v":[[18.741,-17.799],[2.734,-22.142],[-37.973,-3.967]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.244577205882,0.244577205882,0.244577205882,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":60,"op":240,"st":60,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"lupa1","parent":12,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":140,"s":[-10.978]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":158,"s":[39.022]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":184,"s":[39.022]},{"t":199,"s":[-10.978]}]},"p":{"a":0,"k":[0,-74.75,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[17.088,-9.328],[13.251,14.849],[-17.088,9.328],[-13.251,-14.849]],"o":[[-17.088,9.328],[-13.251,-14.849],[17.088,-9.328],[13.251,14.849]],"v":[[23.994,35.979],[-30.941,25.983],[-23.994,-17.794],[30.941,-7.798]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":86,"s":[{"i":[[21.12,2.689],[-2.689,21.12],[-21.12,-2.689],[2.689,-21.12]],"o":[[-21.12,-2.689],[2.689,-21.12],[21.12,2.689],[-2.689,21.12]],"v":[[-4.869,38.24],[-38.24,-4.869],[4.869,-38.24],[38.24,4.869]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[21.12,2.689],[-2.689,21.12],[-21.12,-2.689],[2.689,-21.12]],"o":[[-21.12,-2.689],[2.689,-21.12],[21.12,2.689],[-2.689,21.12]],"v":[[-4.869,38.24],[-38.24,-4.869],[4.869,-38.24],[38.24,4.869]],"c":true}]},{"t":114,"s":[{"i":[[17.088,-9.328],[13.251,14.849],[-17.088,9.328],[-13.251,-14.849]],"o":[[-17.088,9.328],[-13.251,-14.849],[17.088,-9.328],[13.251,14.849]],"v":[[23.994,35.979],[-30.941,25.983],[-23.994,-17.794],[30.941,-7.798]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.003921568859,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.016,0.706,1,0.5,0.016,0.706,1,1,0.016,0.706,1,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[-12.358,-89.703]},"e":{"a":0,"k":[42.73,53.2]},"t":1,"nm":"ggg","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":60,"op":240,"st":60,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"lupa14","parent":8,"sr":1,"ks":{"o":{"a":1,"k":[{"t":60,"s":[100],"h":1},{"t":86,"s":[0],"h":1},{"t":100,"s":[100],"h":1}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[17.088,-9.328],[13.251,14.849],[-17.088,9.328],[-13.251,-14.849]],"o":[[-17.088,9.328],[-13.251,-14.849],[17.088,-9.328],[13.251,14.849]],"v":[[25.553,28.511],[-29.382,18.515],[-22.434,-25.262],[32.501,-15.266]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":86,"s":[{"i":[[3.495,-21.533],[21.533,3.495],[-3.495,21.533],[-21.533,-3.495]],"o":[[-3.495,21.533],[-21.533,-3.495],[3.495,-21.533],[21.533,3.495]],"v":[[38.99,6.329],[-6.329,38.99],[-38.99,-6.329],[6.329,-38.99]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[3.495,-21.533],[21.533,3.495],[-3.495,21.533],[-21.533,-3.495]],"o":[[-3.495,21.533],[-21.533,-3.495],[3.495,-21.533],[21.533,3.495]],"v":[[38.99,6.329],[-6.329,38.99],[-38.99,-6.329],[6.329,-38.99]],"c":true}]},{"t":114,"s":[{"i":[[17.088,-9.328],[13.251,14.849],[-17.088,9.328],[-13.251,-14.849]],"o":[[-17.088,9.328],[-13.251,-14.849],[17.088,-9.328],[13.251,14.849]],"v":[[25.553,28.511],[-29.382,18.515],[-22.434,-25.262],[32.501,-15.266]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.243137269862,0.243137269862,0.243137269862,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":49,"op":260,"st":60,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"lupa13","parent":12,"sr":1,"ks":{"r":{"a":0,"k":93.575},"p":{"a":0,"k":[-1.712,7.87,0]},"s":{"a":0,"k":[73.91,47.016,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[8.996,-2.333],[0.06,-2.922],[-4.267,-1.353]],"o":[[-4.333,1.124],[-0.073,3.546],[7.298,2.313]],"v":[[-0.326,-7.284],[-17.761,0.611],[0.413,9.182]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.243137269862,0.243137269862,0.243137269862,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":49,"op":262,"st":60,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"lupa9","parent":12,"sr":1,"ks":{"r":{"a":0,"k":-1.786},"p":{"a":0,"k":[-0.764,-24.504,0]},"s":{"a":0,"k":[102.993,97.094,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[6.617,0],[0,-6.617],[-6.617,0],[0,6.617]],"o":[[-6.617,0],[0,6.617],[6.617,0],[0,-6.617]],"v":[[0,-9],[-12,0],[0,9],[12,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.003921568859,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":49,"op":262,"st":60,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"lupa3","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[-393.494]},{"t":86,"s":[-360.209],"h":1},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[-360.209]},{"t":114,"s":[-397.201],"h":1},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[-397.201]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":158,"s":[-424.756]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":184,"s":[-424.756]},{"t":199,"s":[-393.494]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[104.319,85.197,0],"to":[0,0,0],"ti":[-26.681,25.197,0]},{"t":86,"s":[155.319,105.197,0],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[155.319,105.197,0],"to":[0,0,0],"ti":[-1.181,21.947,0]},{"t":114,"s":[133.319,86.197,0],"h":1},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[133.319,86.197,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[148.319,107.197,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[148.319,107.197,0],"to":[0,0,0],"ti":[0,0,0]},{"t":199,"s":[104.319,85.197,0]}]},"s":{"a":0,"k":[133,133,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.537,0],[0,-2.268],[-7.11,0],[0,7.111]],"o":[[-2.537,0],[0,7.111],[7.11,0],[0,-2.268]],"v":[[0,-26],[-12.894,13.105],[0,26],[12.894,13.105]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.003921568859,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":60,"op":244,"st":60,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"beak","parent":20,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[7.15]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[7.15]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[4]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[4]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":158,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":184,"s":[0]},{"t":200,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[-12.915,31.417,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":80,"s":[-26.439,51.452,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[-26.439,51.452,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":114,"s":[-5.165,30.382,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[-5.165,30.382,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":158,"s":[-42.822,42.747,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[-42.822,42.747,0],"to":[0,0,0],"ti":[0,0,0]},{"t":200,"s":[-12.915,31.417,0]}]},"a":{"a":0,"k":[-12.915,31.417,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[4.671,-8.942],[6.306,-2.183]],"o":[[-4.671,8.942],[-6.021,2.084]],"v":[[-17.528,19.391],[-33.686,34.898]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[4.671,-8.942],[6.306,-2.183]],"o":[[-4.671,8.942],[-6.021,2.084]],"v":[[-17.528,19.391],[-33.686,34.898]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[4.671,-8.942],[6.306,-2.183]],"o":[[-4.671,8.942],[-6.021,2.084]],"v":[[-17.528,19.391],[-33.686,34.898]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[4.671,-8.942],[6.306,-2.183]],"o":[[-4.671,8.942],[-6.021,2.084]],"v":[[-17.528,19.391],[-33.686,34.898]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[4.671,-8.942],[6.306,-2.183]],"o":[[-4.671,8.942],[-6.021,2.084]],"v":[[-17.528,19.391],[-33.686,34.898]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[4.671,-8.942],[6.306,-2.183]],"o":[[-4.671,8.942],[-6.021,2.084]],"v":[[-18.269,19.553],[-34.427,35.06]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[4.671,-8.942],[6.306,-2.183]],"o":[[-4.671,8.942],[-6.021,2.084]],"v":[[-18.269,19.553],[-34.427,35.06]],"c":false}]},{"t":200,"s":[{"i":[[4.671,-8.942],[6.306,-2.183]],"o":[[-4.671,8.942],[-6.021,2.084]],"v":[[-17.528,19.391],[-33.686,34.898]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[10]},{"t":240,"s":[20]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[70]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[70]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[70]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[80]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":33},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[-17.23,-6.988],[-18.509,12.549]],"o":[[17.23,6.988],[23.172,-15.71]],"v":[[-46.539,48.211],[28.942,44.953]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[-17.23,-6.988],[-18.509,12.549]],"o":[[17.23,6.988],[23.172,-15.71]],"v":[[-45.849,55.686],[28.679,46.812]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[-17.23,-6.988],[-18.509,12.549]],"o":[[17.23,6.988],[23.172,-15.71]],"v":[[-45.849,55.686],[28.679,46.812]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-18.521,-1.643],[-18.92,6.968]],"o":[[20.636,1.83],[26.271,-9.675]],"v":[[-36.429,47.028],[20.628,42.399]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-18.521,-1.643],[-18.92,6.968]],"o":[[20.636,1.83],[26.271,-9.675]],"v":[[-36.429,47.028],[20.628,42.399]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-18.165,-3.969],[-23.726,8.4]],"o":[[20.37,4.45],[26.391,-9.343]],"v":[[-53.206,46.398],[31.607,42.075]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-18.165,-3.969],[-23.726,8.4]],"o":[[20.37,4.45],[26.391,-9.343]],"v":[[-53.206,46.398],[31.607,42.075]],"c":false}]},{"t":200,"s":[{"i":[[-17.23,-6.988],[-18.509,12.549]],"o":[[17.23,6.988],[23.172,-15.71]],"v":[[-46.539,48.211],[28.942,44.953]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.490196079016,0.035294119269,0.035294119269,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[-1.271,15.228],[-10.654,5.625],[-13.947,0.286],[-9.835,-8.372],[-0.32,-6.001],[31.552,-0.32]],"o":[[0.784,-9.387],[13.435,-7.093],[13.822,-0.283],[7.959,6.775],[0.716,13.417],[-24.054,0.244]],"v":[[-62.877,41.75],[-34.815,26.539],[-12.603,2.992],[10.424,25.627],[37.085,39.38],[-18.368,59.833]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[-1.271,15.228],[-10.654,5.625],[-13.947,0.286],[-9.835,-8.372],[-0.32,-6.001],[31.552,-0.32]],"o":[[0.784,-9.387],[13.435,-7.093],[13.822,-0.283],[7.959,6.775],[0.716,13.417],[-24.054,0.244]],"v":[[-63.737,35.599],[-34.815,26.539],[-12.603,2.992],[10.424,25.627],[36.502,33.455],[-18.368,59.833]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[-1.271,15.228],[-10.654,5.625],[-13.947,0.286],[-9.835,-8.372],[-0.32,-6.001],[31.552,-0.32]],"o":[[0.784,-9.387],[13.435,-7.093],[13.822,-0.283],[7.959,6.775],[0.716,13.417],[-24.054,0.244]],"v":[[-63.737,35.599],[-34.815,26.539],[-12.603,2.992],[10.424,25.627],[36.502,33.455],[-18.368,59.833]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-1.271,15.228],[-10.654,5.625],[-13.947,0.286],[-9.835,-8.372],[-0.32,-6.001],[31.552,-0.32]],"o":[[0.784,-9.387],[13.435,-7.093],[13.822,-0.283],[7.959,6.775],[0.716,13.417],[-24.054,0.244]],"v":[[-62.877,41.75],[-34.815,26.539],[-12.603,2.992],[10.424,25.627],[37.085,39.38],[-18.368,59.833]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-1.271,15.228],[-10.654,5.625],[-13.947,0.286],[-9.835,-8.372],[-0.32,-6.001],[31.552,-0.32]],"o":[[0.784,-9.387],[13.435,-7.093],[13.822,-0.283],[7.959,6.775],[0.716,13.417],[-24.054,0.244]],"v":[[-62.877,41.75],[-34.815,26.539],[-12.603,2.992],[10.424,25.627],[37.085,39.38],[-18.368,59.833]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-1.271,15.228],[-10.654,5.625],[-13.947,0.286],[-9.835,-8.372],[-0.32,-6.001],[31.552,-0.32]],"o":[[0.784,-9.387],[13.435,-7.093],[13.822,-0.283],[7.959,6.775],[0.716,13.417],[-24.054,0.244]],"v":[[-61.63,41.699],[-36.296,26.883],[-12.603,2.992],[11.671,25.576],[38.332,39.329],[-18.316,56.06]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-1.271,15.228],[-10.654,5.625],[-13.947,0.286],[-9.835,-8.372],[-0.32,-6.001],[31.552,-0.32]],"o":[[0.784,-9.387],[13.435,-7.093],[13.822,-0.283],[7.959,6.775],[0.716,13.417],[-24.054,0.244]],"v":[[-61.63,41.699],[-36.296,26.883],[-12.603,2.992],[11.671,25.576],[38.332,39.329],[-18.316,56.06]],"c":true}]},{"t":200,"s":[{"i":[[-1.271,15.228],[-10.654,5.625],[-13.947,0.286],[-9.835,-8.372],[-0.32,-6.001],[31.552,-0.32]],"o":[[0.784,-9.387],[13.435,-7.093],[13.822,-0.283],[7.959,6.775],[0.716,13.417],[-24.054,0.244]],"v":[[-62.877,41.75],[-34.815,26.539],[-12.603,2.992],[10.424,25.627],[37.085,39.38],[-18.368,59.833]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.811764717102,0.207843139768,0.007843137719,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.364705890417,0.121568627656,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"eye 3","parent":13,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[12.187]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[12.187]},{"t":114,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[48.31,-3.201,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":80,"s":[49.804,0.784,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[49.804,0.784,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":114,"s":[48.31,-3.201,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[48.31,-3.201,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":158,"s":[54.79,-3.541,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[54.79,-3.541,0],"to":[0,0,0],"ti":[0,0,0]},{"t":200,"s":[48.31,-3.201,0]}]},"a":{"a":0,"k":[-87.19,4.299,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":68,"s":[-120,150,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":80,"s":[-90,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":100,"s":[-90,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":114,"s":[-120,150,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":140,"s":[-120,150,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":158,"s":[-150,150,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":184,"s":[-150,150,100]},{"t":200,"s":[-120,150,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":103,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[{"i":[[0.327,-0.374],[5.671,0.026],[-0.327,0.374],[-5.671,-0.026]],"o":[[-0.327,0.374],[-5.671,-0.026],[0.327,-0.374],[5.671,0.026]],"v":[[-75.818,7.069],[-86.677,7.7],[-96.354,6.975],[-85.494,6.345]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":142,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":148,"s":[{"i":[[0.327,-0.374],[5.671,0.026],[-0.327,0.374],[-5.671,-0.026]],"o":[[-0.327,0.374],[-5.671,-0.026],[0.327,-0.374],[5.671,0.026]],"v":[[-75.818,7.069],[-86.677,7.7],[-96.354,6.975],[-85.494,6.345]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":155,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":190,"s":[{"i":[[0.327,-0.374],[5.671,0.026],[-0.327,0.374],[-5.671,-0.026]],"o":[[-0.327,0.374],[-5.671,-0.026],[0.327,-0.374],[5.671,0.026]],"v":[[-75.818,7.069],[-86.677,7.7],[-96.354,6.975],[-85.494,6.345]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":196,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":211,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":217,"s":[{"i":[[0.327,-0.374],[5.671,0.026],[-0.327,0.374],[-5.671,-0.026]],"o":[[-0.327,0.374],[-5.671,-0.026],[0.327,-0.374],[5.671,0.026]],"v":[[-75.818,7.069],[-86.677,7.7],[-96.354,6.975],[-85.494,6.345]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":223,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":232,"s":[{"i":[[0.327,-0.374],[5.671,0.026],[-0.327,0.374],[-5.671,-0.026]],"o":[[-0.327,0.374],[-5.671,-0.026],[0.327,-0.374],[5.671,0.026]],"v":[[-75.818,7.069],[-86.677,7.7],[-96.354,6.975],[-85.494,6.345]],"c":true}]},{"t":238,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"t":60,"s":[0],"h":1},{"t":79,"s":[100],"h":1},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":103,"s":[100]},{"t":109,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":103,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[{"i":[[1.018,-1.165],[14.097,0.064],[-1.018,1.165],[-14.097,-0.064]],"o":[[-1.018,1.165],[-14.097,-0.064],[1.018,-1.165],[14.097,0.064]],"v":[[-61.665,4.415],[-90.126,10.17],[-112.714,4.183],[-86.441,5.951]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":142,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":148,"s":[{"i":[[1.018,-1.165],[14.097,0.064],[-1.018,1.165],[-14.097,-0.064]],"o":[[-1.018,1.165],[-14.097,-0.064],[1.018,-1.165],[14.097,0.064]],"v":[[-61.665,4.415],[-90.126,10.17],[-112.714,4.183],[-86.441,5.951]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":155,"s":[{"i":[[-5.545,-4.517],[14.097,0.888],[-1.191,13.319],[-14.097,-0.888]],"o":[[-0.283,10.598],[-14.097,-0.888],[5.467,-6.668],[14.097,0.888]],"v":[[-64.054,11.709],[-89.032,33.552],[-112.53,5.083],[-89.032,-4.102]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-5.545,-4.517],[14.097,0.888],[-1.191,13.319],[-14.097,-0.888]],"o":[[-0.283,10.598],[-14.097,-0.888],[5.467,-6.668],[14.097,0.888]],"v":[[-64.054,11.709],[-89.032,33.552],[-112.53,5.083],[-89.032,-4.102]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":190,"s":[{"i":[[1.018,-1.165],[14.097,0.064],[-1.018,1.165],[-14.097,-0.064]],"o":[[-1.018,1.165],[-14.097,-0.064],[1.018,-1.165],[14.097,0.064]],"v":[[-61.665,4.415],[-90.126,10.17],[-112.714,4.183],[-86.441,5.951]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":196,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":211,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":217,"s":[{"i":[[1.018,-1.165],[14.097,0.064],[-1.018,1.165],[-14.097,-0.064]],"o":[[-1.018,1.165],[-14.097,-0.064],[1.018,-1.165],[14.097,0.064]],"v":[[-61.665,4.415],[-90.126,10.17],[-112.714,4.183],[-86.441,5.951]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":223,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":232,"s":[{"i":[[1.018,-1.165],[14.097,0.064],[-1.018,1.165],[-14.097,-0.064]],"o":[[-1.018,1.165],[-14.097,-0.064],[1.018,-1.165],[14.097,0.064]],"v":[[-61.665,4.415],[-90.126,10.17],[-112.714,4.183],[-86.441,5.951]],"c":true}]},{"t":238,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":103,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":109,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":142,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":148,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":155,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":184,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":190,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":196,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":211,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":217,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":223,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":226,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":232,"s":[10]},{"t":238,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"eye 2","parent":14,"sr":1,"ks":{"p":{"a":0,"k":[-87.19,4.299,0]},"a":{"a":0,"k":[-87.19,4.299,0]},"s":{"a":0,"k":[66.667,66.667,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":148,"s":[{"i":[[0.327,-0.293],[5.671,0.02],[-0.327,0.293],[-5.671,-0.02]],"o":[[-0.327,0.293],[-5.671,-0.02],[0.327,-0.293],[5.671,0.02]],"v":[[-78.409,15.362],[-88.778,17.148],[-99.191,15.021],[-87.594,16.087]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":155,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":190,"s":[{"i":[[0.327,-0.293],[5.671,0.02],[-0.327,0.293],[-5.671,-0.02]],"o":[[-0.327,0.293],[-5.671,-0.02],[0.327,-0.293],[5.671,0.02]],"v":[[-78.409,15.362],[-88.778,17.148],[-99.191,15.021],[-87.594,16.087]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":196,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":211,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":217,"s":[{"i":[[0.327,-0.293],[5.671,0.02],[-0.327,0.293],[-5.671,-0.02]],"o":[[-0.327,0.293],[-5.671,-0.02],[0.327,-0.293],[5.671,0.02]],"v":[[-78.409,15.362],[-88.778,17.148],[-99.191,15.021],[-87.594,16.087]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":223,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":232,"s":[{"i":[[0.327,-0.293],[5.671,0.02],[-0.327,0.293],[-5.671,-0.02]],"o":[[-0.327,0.293],[-5.671,-0.02],[0.327,-0.293],[5.671,0.02]],"v":[[-78.409,15.362],[-88.778,17.148],[-99.191,15.021],[-87.594,16.087]],"c":true}]},{"t":238,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":148,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":155,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":184,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":190,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":196,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":211,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":217,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":223,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":226,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":232,"s":[0]},{"t":238,"s":[100]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":148,"s":[{"i":[[0.863,-0.609],[20.392,0.819],[-0.267,0.15],[-15.665,-0.887]],"o":[[-3.412,2.41],[-19.092,-0.767],[1.207,-1.153],[19.396,1.099]],"v":[[-61.665,5.907],[-90.754,17.735],[-112.714,2.691],[-90.258,16.3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":155,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":190,"s":[{"i":[[0.863,-0.609],[20.392,0.819],[-0.267,0.15],[-15.665,-0.887]],"o":[[-3.412,2.41],[-19.092,-0.767],[1.207,-1.153],[19.396,1.099]],"v":[[-61.665,5.907],[-90.754,17.735],[-112.714,2.691],[-90.258,16.3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":196,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":211,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":217,"s":[{"i":[[0.863,-0.609],[20.392,0.819],[-0.267,0.15],[-15.665,-0.887]],"o":[[-3.412,2.41],[-19.092,-0.767],[1.207,-1.153],[19.396,1.099]],"v":[[-61.665,5.907],[-90.754,17.735],[-112.714,2.691],[-90.258,16.3]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":223,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":232,"s":[{"i":[[0.863,-0.609],[20.392,0.819],[-0.267,0.15],[-15.665,-0.887]],"o":[[-3.412,2.41],[-19.092,-0.767],[1.207,-1.153],[19.396,1.099]],"v":[[-61.665,5.907],[-90.754,17.735],[-112.714,2.691],[-90.258,16.3]],"c":true}]},{"t":238,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":148,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":155,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":184,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":190,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":196,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":211,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":217,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":223,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":226,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":232,"s":[10]},{"t":238,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":153,"op":188,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"eye","parent":13,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":158,"s":[-15.932]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":184,"s":[-15.932]},{"t":200,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":140,"s":[-87.19,4.299,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":158,"s":[-87.19,4.299,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":184,"s":[-87.19,4.299,0],"to":[0,0,0],"ti":[0,0,0]},{"t":200,"s":[-87.19,4.299,0]}]},"a":{"a":0,"k":[-87.19,4.299,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":140,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":158,"s":[100,90,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":184,"s":[100,90,100]},{"t":200,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":103,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[{"i":[[0.327,-0.374],[5.671,0.026],[-0.327,0.374],[-5.671,-0.026]],"o":[[-0.327,0.374],[-5.671,-0.026],[0.327,-0.374],[5.671,0.026]],"v":[[-75.818,7.069],[-86.677,7.7],[-96.354,6.975],[-85.494,6.345]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":142,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":148,"s":[{"i":[[0.327,-0.374],[5.671,0.026],[-0.327,0.374],[-5.671,-0.026]],"o":[[-0.327,0.374],[-5.671,-0.026],[0.327,-0.374],[5.671,0.026]],"v":[[-75.818,7.069],[-86.677,7.7],[-96.354,6.975],[-85.494,6.345]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":155,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":190,"s":[{"i":[[0.327,-0.374],[5.671,0.026],[-0.327,0.374],[-5.671,-0.026]],"o":[[-0.327,0.374],[-5.671,-0.026],[0.327,-0.374],[5.671,0.026]],"v":[[-75.818,7.069],[-86.677,7.7],[-96.354,6.975],[-85.494,6.345]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":196,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":211,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":217,"s":[{"i":[[0.327,-0.374],[5.671,0.026],[-0.327,0.374],[-5.671,-0.026]],"o":[[-0.327,0.374],[-5.671,-0.026],[0.327,-0.374],[5.671,0.026]],"v":[[-75.818,7.069],[-86.677,7.7],[-96.354,6.975],[-85.494,6.345]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":223,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":232,"s":[{"i":[[0.327,-0.374],[5.671,0.026],[-0.327,0.374],[-5.671,-0.026]],"o":[[-0.327,0.374],[-5.671,-0.026],[0.327,-0.374],[5.671,0.026]],"v":[[-75.818,7.069],[-86.677,7.7],[-96.354,6.975],[-85.494,6.345]],"c":true}]},{"t":238,"s":[{"i":[[0.327,-5.188],[5.671,0.357],[-0.327,5.188],[-5.671,-0.357]],"o":[[-0.327,5.188],[-5.671,-0.357],[0.327,-5.188],[5.671,0.357]],"v":[[-74.724,-9.46],[-85.584,-0.712],[-95.26,-10.753],[-84.401,-19.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":103,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":109,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":116,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":142,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":148,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":155,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":184,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":190,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":196,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":211,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":217,"s":[0]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":223,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":226,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":232,"s":[0]},{"t":238,"s":[100]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":103,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":109,"s":[{"i":[[1.018,-1.165],[14.097,0.064],[-1.018,1.165],[-14.097,-0.064]],"o":[[-1.018,1.165],[-14.097,-0.064],[1.018,-1.165],[14.097,0.064]],"v":[[-61.665,4.415],[-90.126,10.17],[-112.714,4.183],[-86.441,5.951]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":142,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":148,"s":[{"i":[[1.018,-1.165],[14.097,0.064],[-1.018,1.165],[-14.097,-0.064]],"o":[[-1.018,1.165],[-14.097,-0.064],[1.018,-1.165],[14.097,0.064]],"v":[[-61.665,4.415],[-90.126,10.17],[-112.714,4.183],[-86.441,5.951]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":155,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":190,"s":[{"i":[[1.018,-1.165],[14.097,0.064],[-1.018,1.165],[-14.097,-0.064]],"o":[[-1.018,1.165],[-14.097,-0.064],[1.018,-1.165],[14.097,0.064]],"v":[[-61.665,4.415],[-90.126,10.17],[-112.714,4.183],[-86.441,5.951]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":196,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":211,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":217,"s":[{"i":[[1.018,-1.165],[14.097,0.064],[-1.018,1.165],[-14.097,-0.064]],"o":[[-1.018,1.165],[-14.097,-0.064],[1.018,-1.165],[14.097,0.064]],"v":[[-61.665,4.415],[-90.126,10.17],[-112.714,4.183],[-86.441,5.951]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":223,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":232,"s":[{"i":[[1.018,-1.165],[14.097,0.064],[-1.018,1.165],[-14.097,-0.064]],"o":[[-1.018,1.165],[-14.097,-0.064],[1.018,-1.165],[14.097,0.064]],"v":[[-61.665,4.415],[-90.126,10.17],[-112.714,4.183],[-86.441,5.951]],"c":true}]},{"t":238,"s":[{"i":[[1.018,-16.156],[14.097,0.888],[-1.018,16.156],[-14.097,-0.888]],"o":[[-1.018,16.156],[-14.097,-0.888],[1.018,-16.156],[14.097,0.888]],"v":[[-61.665,5.907],[-89.032,33.552],[-112.714,2.691],[-85.347,-24.953]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":103,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":109,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":142,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":148,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":155,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":184,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":190,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":196,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":211,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":217,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":223,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":226,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":232,"s":[10]},{"t":238,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"l","parent":18,"sr":1,"ks":{"o":{"a":0,"k":50}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-82.243,-74.312],[116.617,-109.405]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-85.407,-68.958],[123.984,-100.995]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-85.407,-68.958],[123.984,-100.995]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-82.243,-74.312],[116.617,-109.405]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-82.243,-74.312],[116.617,-109.405]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-40.622,15.476],[-45.494,-1.491]],"o":[[46.843,-17.846],[35.831,1.174]],"v":[[-160.125,-47.076],[74.286,-94.752]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-40.622,15.476],[-45.494,-1.491]],"o":[[46.843,-17.846],[35.831,1.174]],"v":[[-160.125,-47.076],[74.286,-94.752]],"c":false}]},{"t":200,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-82.243,-74.312],[116.617,-109.405]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.513725490196,0.321568627451,0.180392156863,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-108.562,-86.01],[96.731,-121.103]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-112.851,-83.185],[102.453,-115.713]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-112.851,-83.185],[102.453,-115.713]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-108.562,-86.01],[96.731,-121.103]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-108.562,-86.01],[96.731,-121.103]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-34.805,26.045],[-46.206,-7.019]],"o":[[46.632,-34.896],[35.443,5.384]],"v":[[-170.645,-56.368],[72.969,-110.418]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-34.805,26.045],[-46.206,-7.019]],"o":[[46.632,-34.896],[35.443,5.384]],"v":[[-170.645,-56.368],[72.969,-110.418]],"c":false}]},{"t":200,"s":[{"i":[[-37.743,21.567],[-46.206,-7.019]],"o":[[53.224,-30.414],[35.443,5.384]],"v":[[-108.562,-86.01],[96.731,-121.103]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.513725490196,0.321568627451,0.180392156863,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-12.99,19.111],[-46.206,-19.287]],"o":[[25.15,-37.001],[27.791,11.601]],"v":[[-170.56,-149.762],[14.263,-199.49]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-12.99,19.111],[-46.206,-19.287]],"o":[[25.15,-37.001],[27.791,11.601]],"v":[[-170.56,-149.762],[11.124,-199.848]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-12.99,19.111],[-46.206,-19.287]],"o":[[25.15,-37.001],[27.791,11.601]],"v":[[-170.56,-149.762],[11.124,-199.848]],"c":false}]},{"t":200,"s":[{"i":[[-12.99,19.111],[-46.206,-19.287]],"o":[[25.15,-37.001],[27.791,11.601]],"v":[[-170.56,-149.762],[14.263,-199.49]],"c":false}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-18.455,23.134],[-43.866,-24.565]],"o":[[41.527,-52.054],[33.927,18.999]],"v":[[-186.936,-115.254],[41.752,-176.666]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-15.717,25.074],[-53.787,-21.824]],"o":[[30.266,-48.285],[36.032,14.62]],"v":[[-186.936,-115.254],[41.752,-176.666]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-15.717,25.074],[-53.787,-21.824]],"o":[[30.266,-48.285],[36.032,14.62]],"v":[[-186.936,-115.254],[41.752,-176.666]],"c":false}]},{"t":200,"s":[{"i":[[-18.455,23.134],[-43.866,-24.565]],"o":[[41.527,-52.054],[33.927,18.999]],"v":[[-186.936,-115.254],[41.752,-176.666]],"c":false}]}]},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-11.056,27.45],[-28.074,-26.905]],"o":[[16.962,-42.111],[28.074,26.905]],"v":[[-193.37,-84.84],[56.959,-151.516]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-11.056,27.45],[-38.093,-21.734]],"o":[[16.962,-42.111],[33.774,19.27]],"v":[[-193.37,-84.84],[54.902,-151.591]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-11.056,27.45],[-38.093,-21.734]],"o":[[16.962,-42.111],[33.774,19.27]],"v":[[-193.37,-84.84],[54.902,-151.591]],"c":false}]},{"t":200,"s":[{"i":[[-11.056,27.45],[-28.074,-26.905]],"o":[[16.962,-42.111],[28.074,26.905]],"v":[[-193.37,-84.84],[56.959,-151.516]],"c":false}]}]},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[-26.905,-5.849],[-11.698,-11.698]],"o":[[26.905,5.849],[8.947,8.947]],"v":[[-12.642,-129.291],[50.525,-95.953]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[-26.905,-5.849],[-15.825,-22.126]],"o":[[26.905,5.849],[7.361,10.292]],"v":[[-12.642,-129.291],[54.996,-86.349]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[-26.905,-5.849],[-15.825,-22.126]],"o":[[26.905,5.849],[7.361,10.292]],"v":[[-12.642,-129.291],[54.996,-86.349]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-26.905,-5.849],[-11.698,-11.698]],"o":[[26.905,5.849],[8.947,8.947]],"v":[[-12.642,-129.291],[50.525,-95.953]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-26.905,-5.849],[-11.698,-11.698]],"o":[[26.905,5.849],[8.947,8.947]],"v":[[-12.642,-129.291],[50.525,-95.953]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-17.721,-21.072],[-2.787,-16.658]],"o":[[9.064,10.778],[2.088,12.479]],"v":[[-26.811,-119.08],[-9.848,-60.529]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-17.721,-21.072],[-2.787,-16.658]],"o":[[9.064,10.778],[2.088,12.479]],"v":[[-26.811,-119.08],[-9.848,-60.529]],"c":false}]},{"t":200,"s":[{"i":[[-26.905,-5.849],[-11.698,-11.698]],"o":[[26.905,5.849],[8.947,8.947]],"v":[[-12.642,-129.291],[50.525,-95.953]],"c":false}]}]},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[-26.905,-5.849],[-11.698,-11.698]],"o":[[26.905,5.849],[8.947,8.947]],"v":[[-57.678,-118.763],[5.49,-85.425]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[-26.905,-5.849],[-14.14,-22.007]],"o":[[26.905,5.849],[6.84,10.645]],"v":[[-57.678,-118.763],[11.028,-74.324]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[-26.905,-5.849],[-14.14,-22.007]],"o":[[26.905,5.849],[6.84,10.645]],"v":[[-57.678,-118.763],[11.028,-74.324]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-26.905,-5.849],[-11.698,-11.698]],"o":[[26.905,5.849],[8.947,8.947]],"v":[[-57.678,-118.763],[5.49,-85.425]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-26.905,-5.849],[-11.698,-11.698]],"o":[[26.905,5.849],[8.947,8.947]],"v":[[-57.678,-118.763],[5.49,-85.425]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-16.495,-22.045],[-2.613,-12]],"o":[[9.824,13.129],[2.692,12.363]],"v":[[-95.482,-104.536],[-68.945,-49.037]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-16.495,-22.045],[-2.613,-12]],"o":[[9.824,13.129],[2.692,12.363]],"v":[[-95.482,-104.536],[-68.945,-49.037]],"c":false}]},{"t":200,"s":[{"i":[[-26.905,-5.849],[-11.698,-11.698]],"o":[[26.905,5.849],[8.947,8.947]],"v":[[-57.678,-118.763],[5.49,-85.425]],"c":false}]}]},"nm":"Path 5","hd":false},{"ind":5,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[-26.32,-5.849],[-8.773,-9.358]],"o":[[26.32,5.849],[8.773,9.358]],"v":[[37.073,-132.215],[106.674,-101.217]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[-26.32,-5.849],[-13.55,-22.627]],"o":[[26.32,5.849],[6.59,11.005]],"v":[[37.073,-132.215],[109.288,-89.439]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[-26.32,-5.849],[-13.55,-22.627]],"o":[[26.32,5.849],[6.59,11.005]],"v":[[37.073,-132.215],[109.288,-89.439]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-26.32,-5.849],[-8.773,-9.358]],"o":[[26.32,5.849],[8.773,9.358]],"v":[[37.073,-132.215],[106.674,-101.217]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-26.32,-5.849],[-8.773,-9.358]],"o":[[26.32,5.849],[8.773,9.358]],"v":[[37.073,-132.215],[106.674,-101.217]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-12.053,-24.118],[1.008,-19.596]],"o":[[7.824,15.655],[-0.659,12.811]],"v":[[35.966,-127.876],[41.414,-71.915]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-12.053,-24.118],[1.008,-19.596]],"o":[[7.824,15.655],[-0.659,12.811]],"v":[[35.966,-127.876],[41.414,-71.915]],"c":false}]},{"t":200,"s":[{"i":[[-26.32,-5.849],[-8.773,-9.358]],"o":[[26.32,5.849],[8.773,9.358]],"v":[[37.073,-132.215],[106.674,-101.217]],"c":false}]}]},"nm":"Path 6","hd":false},{"ind":6,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[-36.267,0],[-5.849,-5.264]],"o":[[36.263,0],[5.849,5.264]],"v":[[-104.468,-104.141],[-37.207,-76.652]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[-36.267,0],[-10.985,-13.603]],"o":[[36.263,0],[4.944,6.122]],"v":[[-104.468,-104.141],[-32.708,-66.531]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[-36.267,0],[-10.985,-13.603]],"o":[[36.263,0],[4.944,6.122]],"v":[[-104.468,-104.141],[-32.708,-66.531]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-36.267,0],[-5.849,-5.264]],"o":[[36.263,0],[5.849,5.264]],"v":[[-104.468,-104.141],[-37.207,-76.652]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-36.267,0],[-5.849,-5.264]],"o":[[36.263,0],[5.849,5.264]],"v":[[-104.468,-104.141],[-37.207,-76.652]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-26.525,-24.734],[-4.837,-10.688]],"o":[[13.719,12.793],[3.244,7.169]],"v":[[-147.599,-86.215],[-120.17,-42.085]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-26.525,-24.734],[-4.837,-10.688]],"o":[[13.719,12.793],[3.244,7.169]],"v":[[-147.599,-86.215],[-120.17,-42.085]],"c":false}]},{"t":200,"s":[{"i":[[-36.267,0],[-5.849,-5.264]],"o":[[36.263,0],[5.849,5.264]],"v":[[-104.468,-104.141],[-37.207,-76.652]],"c":false}]}]},"nm":"Path 7","hd":false},{"ind":7,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[7.416,46.618],[16.137,24.206],[-7.06,-56.48]],"o":[[-7.06,-44.377],[27.736,6.556],[7.561,60.487]],"v":[[-49.149,-120.382],[-78.397,-217.205],[-17.379,-128.451]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[7.533,46.599],[-14.397,20.535],[-7.06,-56.48]],"o":[[-10.167,-62.892],[6.093,13.689],[7.561,60.487]],"v":[[-89.526,-108.691],[-85.733,-215.641],[-54.696,-114.332]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[7.533,46.599],[-14.397,20.535],[-7.06,-56.48]],"o":[[-10.167,-62.892],[6.093,13.689],[7.561,60.487]],"v":[[-89.526,-108.691],[-85.733,-215.641],[-54.696,-114.332]],"c":false}]},{"t":200,"s":[{"i":[[7.416,46.618],[16.137,24.206],[-7.06,-56.48]],"o":[[-7.06,-44.377],[27.736,6.556],[7.561,60.487]],"v":[[-49.149,-120.382],[-78.397,-217.205],[-17.379,-128.451]],"c":false}]}]},"nm":"Path 8","hd":false},{"ind":8,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[12.584,45.496],[-6.051,15.633],[-17.146,-58.497]],"o":[[-13.111,-47.403],[48.411,1.009],[17.146,58.497]],"v":[[-79.91,-111.305],[-78.397,-217.205],[20.947,-130.972]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[6.518,46.752],[-13.737,11.667],[-17.146,-58.497]],"o":[[-10.814,-77.558],[34.105,8.652],[17.146,58.497]],"v":[[-127.416,-97.073],[-85.733,-215.641],[-14.964,-122.281]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[6.518,46.752],[-13.737,11.667],[-17.146,-58.497]],"o":[[-10.814,-77.558],[34.105,8.652],[17.146,58.497]],"v":[[-127.416,-97.073],[-85.733,-215.641],[-14.964,-122.281]],"c":false}]},{"t":200,"s":[{"i":[[12.584,45.496],[-6.051,15.633],[-17.146,-58.497]],"o":[[-13.111,-47.403],[48.411,1.009],[17.146,58.497]],"v":[[-79.91,-111.305],[-78.397,-217.205],[20.947,-130.972]],"c":false}]}]},"nm":"Path 9","hd":false},{"ind":9,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[8.444,46.443],[-26.727,31.77],[-17.146,-58.497]],"o":[[-9.077,-49.924],[48.411,1.009],[17.146,58.497]],"v":[[-108.655,-102.228],[-78.397,-217.205],[49.187,-132.485]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[6.306,46.781],[-33.262,23.018],[-19.448,-69.273]],"o":[[-10.72,-79.524],[48.411,1.009],[16.476,58.689]],"v":[[-157.483,-84.625],[-85.733,-215.641],[17.258,-126.701]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[6.306,46.781],[-33.262,23.018],[-19.448,-69.273]],"o":[[-10.72,-79.524],[48.411,1.009],[16.476,58.689]],"v":[[-157.483,-84.625],[-85.733,-215.641],[17.258,-126.701]],"c":false}]},{"t":200,"s":[{"i":[[8.444,46.443],[-26.727,31.77],[-17.146,-58.497]],"o":[[-9.077,-49.924],[48.411,1.009],[17.146,58.497]],"v":[[-108.655,-102.228],[-78.397,-217.205],[49.187,-132.485]],"c":false}]}]},"nm":"Path 10","hd":false},{"ind":10,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-33.262,23.018],[-18.998,-64.768]],"o":[[48.411,1.009],[17.158,58.494]],"v":[[-75.361,-217.345],[64.343,-134.615]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-33.262,23.018],[-18.998,-64.768]],"o":[[48.411,1.009],[17.158,58.494]],"v":[[-68.272,-215.274],[47.433,-129.046]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-33.262,23.018],[-18.998,-64.768]],"o":[[48.411,1.009],[17.158,58.494]],"v":[[-68.272,-215.274],[47.433,-129.046]],"c":false}]},{"t":200,"s":[{"i":[[-33.262,23.018],[-18.998,-64.768]],"o":[[48.411,1.009],[17.158,58.494]],"v":[[-75.361,-217.345],[64.343,-134.615]],"c":false}]}]},"nm":"Path 12","hd":false},{"ind":11,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[7.564,49.924],[-75.139,39.334],[-8.069,-46.394]],"o":[[-7.564,-49.924],[-58.497,27.736],[8.652,49.747]],"v":[[-171.186,-79.535],[-84.953,-215.692],[-146.476,-87.604]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[6.947,50.014],[-75.139,39.334],[-12.637,-82.602]],"o":[[-8.144,-58.636],[-58.497,27.736],[7.636,49.913]],"v":[[-189.839,-68.883],[-92.288,-214.128],[-188.538,-69.384]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[6.947,50.014],[-75.139,39.334],[-12.637,-82.602]],"o":[[-8.144,-58.636],[-58.497,27.736],[7.636,49.913]],"v":[[-189.839,-68.883],[-92.288,-214.128],[-188.538,-69.384]],"c":false}]},{"t":200,"s":[{"i":[[7.564,49.924],[-75.139,39.334],[-8.069,-46.394]],"o":[[-7.564,-49.924],[-58.497,27.736],[8.652,49.747]],"v":[[-171.186,-79.535],[-84.953,-215.692],[-146.476,-87.604]],"c":false}]}]},"nm":"Path 11","hd":false},{"ty":"st","c":{"a":0,"k":[0.513725490196,0.321568627451,0.180392156863,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"hat","parent":13,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[7.966]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[7.966]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[9.038]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[9.038]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":158,"s":[9.038]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":184,"s":[9.038]},{"t":200,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[-47.404,-118.425,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":80,"s":[-44.447,-118.425,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[-44.447,-118.425,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":114,"s":[-54.168,-116.535,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[-54.168,-116.535,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":158,"s":[-4.389,-119.194,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[-4.389,-119.194,0],"to":[0,0,0],"ti":[0,0,0]},{"t":200,"s":[-47.404,-118.425,0]}]},"a":{"a":0,"k":[-47.404,-118.425,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[0,0],[-54.526,-13.862],[-6.075,-13.452],[53.373,-2.604]],"o":[[35.582,-22.564],[25.602,6.509],[-39.054,-19.961],[-53.373,2.604]],"v":[[-123.824,-93.176],[78.58,-127.696],[136.503,-92.443],[-51.557,-73.328]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[-54.526,-13.862],[-6.075,-13.452],[53.373,-2.604]],"o":[[35.582,-22.564],[25.602,6.509],[-39.054,-19.961],[-53.373,2.604]],"v":[[-123.824,-93.176],[78.58,-127.696],[137.247,-82.637],[-50.812,-63.522]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[0,0],[-54.526,-13.862],[-6.075,-13.452],[53.373,-2.604]],"o":[[35.582,-22.564],[25.602,6.509],[-39.054,-19.961],[-53.373,2.604]],"v":[[-123.824,-93.176],[78.58,-127.696],[137.247,-82.637],[-50.812,-63.522]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[0,0],[-54.526,-13.862],[-6.075,-13.452],[53.373,-2.604]],"o":[[35.582,-22.564],[25.602,6.509],[-39.054,-19.961],[-53.373,2.604]],"v":[[-123.824,-93.176],[78.58,-127.696],[136.503,-92.443],[-51.557,-73.328]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-54.526,-13.862],[-6.075,-13.452],[53.373,-2.604]],"o":[[35.582,-22.564],[25.602,6.509],[-39.054,-19.961],[-53.373,2.604]],"v":[[-123.824,-93.176],[78.58,-127.696],[136.503,-92.443],[-51.557,-73.328]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[0,0],[-54.526,-13.862],[30.754,-6.442],[53.364,-2.788]],"o":[[35.582,-22.564],[4.181,14.748],[-36.021,7.545],[-29.912,1.563]],"v":[[-186.877,-70.488],[70.282,-125.927],[54.177,-76.427],[-137.657,-39.051]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[0,0],[-54.526,-13.862],[30.754,-6.442],[53.364,-2.788]],"o":[[35.582,-22.564],[4.181,14.748],[-36.021,7.545],[-29.912,1.563]],"v":[[-186.877,-70.488],[70.282,-125.927],[54.177,-76.427],[-137.657,-39.051]],"c":true}]},{"t":200,"s":[{"i":[[0,0],[-54.526,-13.862],[-6.075,-13.452],[53.373,-2.604]],"o":[[35.582,-22.564],[25.602,6.509],[-39.054,-19.961],[-53.373,2.604]],"v":[[-123.824,-93.176],[78.58,-127.696],[136.503,-92.443],[-51.557,-73.328]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.511786247702,0.321371818991,0.179668082443,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.843137264252,0.623529434204,0.43137255311,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[15.392,-27.972],[-69.503,26.122]],"o":[[-1.824,-33.93],[-31.499,29.545]],"v":[[-231.245,5.52],[-127.994,-93.176]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[15.392,-27.972],[-69.503,26.122]],"o":[[-1.824,-33.93],[-31.499,29.545]],"v":[[-232.145,-7.387],[-127.994,-93.176]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[15.392,-27.972],[-69.503,26.122]],"o":[[-1.824,-33.93],[-31.499,29.545]],"v":[[-232.145,-7.387],[-127.994,-93.176]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[15.392,-27.972],[-69.503,26.122]],"o":[[-1.824,-33.93],[-31.499,29.545]],"v":[[-231.245,5.52],[-127.994,-93.176]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[15.392,-27.972],[-69.503,26.122]],"o":[[-1.824,-33.93],[-31.499,29.545]],"v":[[-231.245,5.52],[-127.994,-93.176]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-0.526,-17.111],[-7.668,4.218]],"o":[[-1.31,-17.201],[-9.81,12.119]],"v":[[-196.6,-16.641],[-188.397,-70.027]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-0.526,-17.111],[-7.668,4.218]],"o":[[-1.31,-17.201],[-9.81,12.119]],"v":[[-196.6,-16.641],[-188.397,-70.027]],"c":true}]},{"t":200,"s":[{"i":[[15.392,-27.972],[-69.503,26.122]],"o":[[-1.824,-33.93],[-31.499,29.545]],"v":[[-231.245,5.52],[-127.994,-93.176]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.511786247702,0.321371818991,0.179668082443,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.843137264252,0.623529434204,0.43137255311,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-22.998,21.696],[-9.113,-102.841],[-32.979,14.32]],"o":[[-58.58,20.395],[36.016,-27.771],[-13.452,-68.127]],"v":[[-80.671,-217.954],[-193.059,-47.854],[-127.994,-93.176]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-47.535,16.771],[-9.113,-102.841],[-2.975,6.932]],"o":[[-58.58,20.395],[1.368,-7.08],[-4.797,-93.906]],"v":[[-88.467,-216.153],[-195.958,-48.256],[-192.362,-65.858]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-47.535,16.771],[-9.113,-102.841],[-2.975,6.932]],"o":[[-58.58,20.395],[1.368,-7.08],[-4.797,-93.906]],"v":[[-88.467,-216.153],[-195.958,-48.256],[-192.362,-65.858]],"c":true}]},{"t":200,"s":[{"i":[[-22.998,21.696],[-9.113,-102.841],[-32.979,14.32]],"o":[[-58.58,20.395],[36.016,-27.771],[-13.452,-68.127]],"v":[[-80.671,-217.954],[-193.059,-47.854],[-127.994,-93.176]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.511786247702,0.321371818991,0.179668082443,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.843137264252,0.623529434204,0.43137255311,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-40.789,-5.641],[72.9,-6.943],[-11.839,-56.909]],"o":[[-18.225,-59.448],[-33.846,29.507],[35.582,-13.886]],"v":[[67.298,-128.13],[-80.671,-217.954],[-127.994,-93.176]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[-40.789,-5.641],[72.9,-6.943],[-7.88,-81.998]],"o":[[-18.225,-59.448],[-50.796,14.643],[35.582,-13.886]],"v":[[67.298,-128.13],[-88.467,-216.153],[-192.832,-68.061]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-40.789,-5.641],[72.9,-6.943],[-7.88,-81.998]],"o":[[-18.225,-59.448],[-50.796,14.643],[35.582,-13.886]],"v":[[67.298,-128.13],[-88.467,-216.153],[-192.832,-68.061]],"c":true}]},{"t":200,"s":[{"i":[[-40.789,-5.641],[72.9,-6.943],[-11.839,-56.909]],"o":[[-18.225,-59.448],[-33.846,29.507],[35.582,-13.886]],"v":[[67.298,-128.13],[-80.671,-217.954],[-127.994,-93.176]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.511786247702,0.321371818991,0.179668082443,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.843137264252,0.623529434204,0.43137255311,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[16.848,-22.693],[0.708,10.888],[-32.125,-20.946],[3.87,11.663]],"o":[[-36.45,9.98],[-0.903,-13.883],[29.507,3.038],[-4.216,-12.705]],"v":[[-80.671,-218.821],[-137.516,-223.161],[-80.671,-217.954],[-32.505,-236.179]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":114,"s":[{"i":[[9.996,-26.437],[3.66,10.278],[-36.63,-11.356],[6.914,10.159]],"o":[[-32.328,19.573],[-4.668,-13.107],[29.212,-5.152],[-7.532,-11.067]],"v":[[-78.033,-219.986],[-133.896,-208.606],[-77.795,-219.151],[-36.454,-249.86]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":140,"s":[{"i":[[9.996,-26.437],[3.66,10.278],[-36.63,-11.356],[6.914,10.159]],"o":[[-32.328,19.573],[-4.668,-13.107],[29.212,-5.152],[-7.532,-11.067]],"v":[[-78.033,-219.986],[-133.896,-208.606],[-77.795,-219.151],[-36.454,-249.86]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":158,"s":[{"i":[[16.646,-22.841],[0.805,10.881],[-32.31,-20.66],[3.973,11.629]],"o":[[-36.36,10.303],[-1.026,-13.875],[29.533,2.776],[-4.329,-12.668]],"v":[[-87.485,-217.129],[-145.015,-227.012],[-87.477,-216.261],[-39.475,-234.912]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":184,"s":[{"i":[[16.646,-22.841],[0.805,10.881],[-32.31,-20.66],[3.973,11.629]],"o":[[-36.36,10.303],[-1.026,-13.875],[29.533,2.776],[-4.329,-12.668]],"v":[[-87.485,-217.129],[-145.015,-227.012],[-87.477,-216.261],[-39.475,-234.912]],"c":true}]},{"t":200,"s":[{"i":[[16.848,-22.693],[0.708,10.888],[-32.125,-20.946],[3.87,11.663]],"o":[[-36.45,9.98],[-0.903,-13.883],[29.507,3.038],[-4.216,-12.705]],"v":[[-80.671,-218.821],[-137.516,-223.161],[-80.671,-217.954],[-32.505,-236.179]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.20000000298,0.050980392843,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"bl","parent":20,"sr":1,"ks":{"p":{"a":0,"k":[-52.629,-26.409,0]},"a":{"a":0,"k":[-52.629,-26.409,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[0,-29.404],[-15.676,-15.205]],"o":[[0,23.578],[0,0]],"v":[[-170.512,-31.264],[-145.487,27.486]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[2.549,-29.293],[-15.676,-15.205]],"o":[[-3.132,35.993],[0,0]],"v":[[-171.005,-45.753],[-145.487,27.486]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[2.549,-29.293],[-15.676,-15.205]],"o":[[-3.132,35.993],[0,0]],"v":[[-171.005,-45.753],[-145.487,27.486]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[6.103,-28.763],[-15.676,-15.205]],"o":[[-9.551,45.014],[0,0]],"v":[[-169.927,-61.354],[-145.487,27.486]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[6.103,-28.763],[-15.676,-15.205]],"o":[[-9.551,45.014],[0,0]],"v":[[-169.927,-61.354],[-145.487,27.486]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[3.495,-29.195],[-15.676,-15.205]],"o":[[-3.367,28.123],[0,0]],"v":[[-168.488,-40.42],[-145.487,27.486]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[3.495,-29.195],[-15.676,-15.205]],"o":[[-3.367,28.123],[0,0]],"v":[[-168.488,-40.42],[-145.487,27.486]],"c":false}]},{"t":200,"s":[{"i":[[0,-29.404],[-15.676,-15.205]],"o":[[0,23.578],[0,0]],"v":[[-170.512,-31.264],[-145.487,27.486]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":228,"s":[0]},{"t":240,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":228,"s":[95]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[0,0],[5.434,10.152]],"o":[[-2.201,-10.956],[-6.376,-11.912]],"v":[[65.253,-48.412],[53.695,-80.305]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[-0.253,11.512]],"o":[[3.465,-10.624],[0.297,-13.507]],"v":[[63.196,2.846],[68.793,-30.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[0,0],[-0.253,11.512]],"o":[[3.465,-10.624],[0.297,-13.507]],"v":[[63.196,2.846],[68.793,-30.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[0,0],[1.138,18.195]],"o":[[3.465,-10.624],[-0.843,-13.484]],"v":[[67.417,-7.47],[70.729,-47.35]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[1.138,18.195]],"o":[[3.465,-10.624],[-0.843,-13.484]],"v":[[67.417,-7.47],[70.729,-47.35]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[0,0],[1.392,7.685]],"o":[[3.465,-10.624],[-2.408,-13.294]],"v":[[67.417,-7.47],[69.733,-37.744]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[0,0],[1.392,7.685]],"o":[[3.465,-10.624],[-2.408,-13.294]],"v":[[67.417,-7.47],[69.733,-37.744]],"c":false}]},{"t":200,"s":[{"i":[[0,0],[5.434,10.152]],"o":[[-2.201,-10.956],[-6.376,-11.912]],"v":[[65.253,-48.412],[53.695,-80.305]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.988235294118,0.933333333333,0.129411764706,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84.834,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":97.666,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110.5,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":123.334,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":136.166,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":149,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":161.834,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":174.666,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":187.5,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":200.334,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":213.166,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":226,"s":[10]},{"t":240,"s":[20]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84.834,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":97.666,"s":[70]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110.5,"s":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":123.334,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":136.166,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":149,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":161.834,"s":[70]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":174.666,"s":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":187.5,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":200.334,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":213.166,"s":[70]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":226,"s":[90]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"head","parent":23,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":140,"s":[7]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":158,"s":[3]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":184,"s":[3]},{"t":200,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[-51.557,48.045,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":80,"s":[-31.842,48.045,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":100,"s":[-31.842,48.045,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":114,"s":[-31.842,48.045,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[-31.842,48.045,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":158,"s":[-51.808,68.205,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[-51.808,68.205,0],"to":[0,0,0],"ti":[0,0,0]},{"t":200,"s":[-51.557,48.045,0]}]},"a":{"a":0,"k":[-51.557,48.045,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[0,0],[0,32.374],[-76.932,0],[0,-68.773],[23.65,-19.591]],"o":[[-23.949,-19.745],[0,-68.773],[76.931,0],[0,32.461],[0,0]],"v":[[-152.996,48.045],[-190.852,-31.672],[-51.556,-168.145],[87.739,-31.672],[50.112,47.854]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,0],[-1.695,32.329],[-76.826,-4.029],[3.602,-73.333],[25.522,-14]],"o":[[-22.882,-20.972],[3.602,-68.679],[76.825,4.029],[-1.7,34.614],[0,0]],"v":[[-156.075,45.152],[-189.706,-36.438],[-43.454,-165.43],[88.504,-17.195],[42.763,64]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[0,0],[-1.695,32.329],[-76.826,-4.029],[3.602,-73.333],[25.522,-14]],"o":[[-22.882,-20.972],[3.602,-68.679],[76.825,4.029],[-1.7,34.614],[0,0]],"v":[[-156.075,45.152],[-189.706,-36.438],[-43.454,-165.43],[88.504,-17.195],[42.763,64]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[0,0],[0,32.374],[-76.932,0],[0,-68.773],[23.65,-19.591]],"o":[[-23.949,-19.745],[0,-68.773],[76.931,0],[0,32.461],[0,0]],"v":[[-152.996,48.045],[-190.852,-31.672],[-51.556,-168.145],[87.739,-31.672],[50.112,47.854]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":140,"s":[{"i":[[0,0],[0,32.374],[-76.932,0],[0,-68.773],[23.65,-19.591]],"o":[[-23.949,-19.745],[0,-68.773],[76.931,0],[0,32.461],[0,0]],"v":[[-152.996,48.045],[-190.852,-31.672],[-51.556,-168.145],[87.739,-31.672],[50.112,47.854]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":158,"s":[{"i":[[0,0],[0,32.374],[-76.932,0],[0,-68.773],[23.65,-19.591]],"o":[[-23.949,-19.745],[0,-68.773],[76.931,0],[0,32.461],[0,0]],"v":[[-152.996,48.045],[-188.36,-31.803],[-51.556,-168.145],[87.739,-31.672],[50.112,47.854]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":184,"s":[{"i":[[0,0],[0,32.374],[-76.932,0],[0,-68.773],[23.65,-19.591]],"o":[[-23.949,-19.745],[0,-68.773],[76.931,0],[0,32.461],[0,0]],"v":[[-152.996,48.045],[-188.36,-31.803],[-51.556,-168.145],[87.739,-31.672],[50.112,47.854]],"c":false}]},{"t":200,"s":[{"i":[[0,0],[0,32.374],[-76.932,0],[0,-68.773],[23.65,-19.591]],"o":[[-23.949,-19.745],[0,-68.773],[76.931,0],[0,32.461],[0,0]],"v":[[-152.996,48.045],[-190.852,-31.672],[-51.556,-168.145],[87.739,-31.672],[50.112,47.854]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"hat","parent":18,"sr":1,"ks":{"p":{"a":0,"k":[-47.11,-53.437,0]},"a":{"a":0,"k":[-47.11,-53.437,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[86.352,-27.771],[8.679,28.205],[-82.88,37.318],[-8.427,-35.003]],"o":[[-41.863,13.463],[-4.361,-14.174],[82.88,-37.318],[5.641,23.432]],"v":[[-55.937,-7.498],[-231.245,5.52],[-103.67,-102.529],[137.088,-90.689]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[86.352,-27.771],[8.679,28.205],[-82.88,37.318],[-8.427,-35.003]],"o":[[-41.863,13.463],[-4.361,-14.174],[82.88,-37.318],[5.641,23.432]],"v":[[-55.937,-7.498],[-231.946,-7.398],[-103.67,-102.529],[136.553,-82.368]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[86.352,-27.771],[8.679,28.205],[-82.88,37.318],[-8.427,-35.003]],"o":[[-41.863,13.463],[-4.361,-14.174],[82.88,-37.318],[5.641,23.432]],"v":[[-55.937,-7.498],[-231.946,-7.398],[-103.67,-102.529],[136.553,-82.368]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[86.352,-27.771],[8.679,28.205],[-82.88,37.318],[-8.427,-35.003]],"o":[[-41.863,13.463],[-4.361,-14.174],[82.88,-37.318],[5.641,23.432]],"v":[[-55.937,-7.498],[-231.245,5.52],[-103.67,-102.529],[137.088,-90.689]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[86.352,-27.771],[8.679,28.205],[-82.88,37.318],[-8.427,-35.003]],"o":[[-41.863,13.463],[-4.361,-14.174],[82.88,-37.318],[5.641,23.432]],"v":[[-55.937,-7.498],[-231.245,5.52],[-103.67,-102.529],[137.088,-90.689]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":148,"s":[{"i":[[86.352,-27.771],[8.679,28.205],[-87.658,31.247],[-8.427,-35.003]],"o":[[-41.863,13.463],[-4.361,-14.174],[85.165,-30.645],[5.641,23.432]],"v":[[-55.937,-7.498],[-214.85,1.06],[-103.67,-102.529],[103.731,-89.814]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[86.352,-27.771],[8.679,28.205],[-94.338,22.759],[-8.427,-35.003]],"o":[[-41.863,13.463],[-4.361,-14.174],[88.359,-21.317],[5.641,23.432]],"v":[[-55.938,-7.498],[-194.634,-4.689],[-103.67,-102.529],[69.005,-82.074]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[86.352,-27.771],[8.679,28.205],[-94.338,22.759],[-8.427,-35.003]],"o":[[-41.863,13.463],[-4.361,-14.174],[88.359,-21.317],[5.641,23.432]],"v":[[-55.937,-7.498],[-194.634,-4.689],[-103.67,-102.529],[69.005,-82.074]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":191,"s":[{"i":[[86.352,-27.771],[8.679,28.205],[-89.678,28.681],[-8.427,-35.003]],"o":[[-41.863,13.464],[-4.361,-14.174],[86.131,-27.825],[5.641,23.432]],"v":[[-55.937,-7.498],[-207.921,-0.825],[-103.67,-102.529],[91.371,-88.691]],"c":true}]},{"t":200,"s":[{"i":[[86.352,-27.771],[8.679,28.205],[-82.88,37.318],[-8.427,-35.003]],"o":[[-41.863,13.463],[-4.361,-14.174],[82.88,-37.318],[5.641,23.432]],"v":[[-55.937,-7.498],[-231.245,5.52],[-103.67,-102.529],[137.088,-90.689]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.513725490196,0.321568627451,0.180392156863,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.543997970282,0.357340584549,0.225831963034,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"bl 2","parent":23,"sr":1,"ks":{},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.843,28.658],[0,0]],"o":[[0.843,-28.658],[0,0]],"v":[[-167.357,135.684],[-157.242,85.112]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":228,"s":[0]},{"t":240,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":228,"s":[95]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[11.029,3.102],[6.438,7.684]],"o":[[-13.432,-3.778],[0,0]],"v":[[-130.953,180.023],[-161.823,163.043]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.988235294819,0.933333337307,0.129411771894,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[0]},{"t":240,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[95]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"body","parent":1,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[-45.494,205.212,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":158,"s":[-15.494,205.212,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[-15.494,205.212,0],"to":[0,0,0],"ti":[0,0,0]},{"t":200,"s":[-45.494,205.212,0]}]},"a":{"a":0,"k":[-45.494,205.212,0]},"s":{"a":1,"k":[{"i":{"x":[0.595,0.595,0.595],"y":[1,1,1]},"o":{"x":[0.254,0.254,0.254],"y":[0,0,0]},"t":68,"s":[100,100,100]},{"i":{"x":[0.661,0.661,0.661],"y":[0.954,0.942,1]},"o":{"x":[0.29,0.29,0.29],"y":[0,0,0]},"t":76,"s":[102,95.355,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.329,0.329,0.329],"y":[-0.09,0.26,0]},"t":88,"s":[100,100,100]},{"i":{"x":[0.595,0.595,0.595],"y":[1,1,1]},"o":{"x":[0.254,0.254,0.254],"y":[0,0,0]},"t":100,"s":[100,100,100]},{"i":{"x":[0.661,0.661,0.661],"y":[0.954,0.942,1]},"o":{"x":[0.29,0.29,0.29],"y":[0,0,0]},"t":108,"s":[102,95.355,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.338,0.338,0.338],"y":[-0.154,0.445,0]},"t":120,"s":[100,100,100]},{"i":{"x":[0.595,0.595,0.595],"y":[1,1,1]},"o":{"x":[0.254,0.254,0.254],"y":[0,0,0]},"t":140,"s":[100,100,100]},{"i":{"x":[0.661,0.661,0.661],"y":[0.954,0.942,1]},"o":{"x":[0.29,0.29,0.29],"y":[0,0,0]},"t":148,"s":[102,95.355,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.329,0.329,0.329],"y":[0,0,0]},"t":160,"s":[100,100,100]},{"i":{"x":[0.595,0.595,0.595],"y":[1,1,1]},"o":{"x":[0.254,0.254,0.254],"y":[0,0,0]},"t":184,"s":[100,100,100]},{"i":{"x":[0.661,0.661,0.661],"y":[0.954,0.942,1]},"o":{"x":[0.29,0.29,0.29],"y":[0,0,0]},"t":192,"s":[102,95.355,100]},{"t":204,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.646,0.836],[0,0],[-2.946,-112.778],[-0.629,66.814]],"o":[[0,0],[-8.121,0.134],[1.826,69.905],[0.954,-101.238]],"v":[[38.926,20.582],[-114.066,12.715],[-183.077,154.202],[92.175,153.658]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"wing 2","parent":23,"sr":1,"ks":{"p":{"a":0,"k":[71,76,0]},"a":{"a":0,"k":[-109,126,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[{"i":[[0,0],[-8.57,-6.834],[31.779,2.611]],"o":[[30.987,-12.116],[23.514,18.753],[0,0]],"v":[[-116.987,130.116],[-59.014,119.247],[-115.779,169.389]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":86,"s":[{"i":[[0,0],[-8.57,-6.834],[34.687,10.569]],"o":[[38.36,8.962],[23.514,18.753],[0,0]],"v":[[-116.987,130.116],[-29.442,133.219],[-113.807,178.704]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":100,"s":[{"i":[[0,0],[-8.57,-6.834],[34.687,10.569]],"o":[[38.36,8.962],[23.514,18.753],[0,0]],"v":[[-116.987,130.116],[-29.442,133.219],[-113.807,178.704]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[0,0],[-8.57,-6.834],[31.779,2.611]],"o":[[44.484,25.593],[23.514,18.753],[0,0]],"v":[[-111.046,122.951],[-39.209,120.782],[-95.478,173.995]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-8.57,-6.834],[31.779,2.611]],"o":[[44.484,25.593],[23.514,18.753],[0,0]],"v":[[-111.046,122.951],[-39.209,120.782],[-95.478,173.995]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[0,0],[-5.843,-9.274],[31.779,2.611]],"o":[[39.281,-11.049],[7.375,11.705],[0,0]],"v":[[-130.512,136.005],[-68.159,138.356],[-111.95,187.05]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[0,0],[-5.843,-9.274],[31.779,2.611]],"o":[[39.281,-11.049],[7.375,11.705],[0,0]],"v":[[-130.512,136.005],[-68.159,138.356],[-111.95,187.05]],"c":false}]},{"t":199,"s":[{"i":[[0,0],[-8.57,-6.834],[31.779,2.611]],"o":[[30.987,-12.116],[23.514,18.753],[0,0]],"v":[[-116.987,130.116],[-59.014,119.247],[-115.779,169.389]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0}]}
\ No newline at end of file
diff --git a/app/src/data/deviceSize.ts b/app/src/data/deviceSize.ts
deleted file mode 100644
index c150109a..00000000
--- a/app/src/data/deviceSize.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-const sizes = {
- mobile: "480px",
- desktop: "600px",
-};
-
-const media = {
- mobile: `(max-width: ${sizes.desktop})`,
- desktop: `(min-width: ${sizes.desktop})`,
-};
-export { sizes, media };
diff --git a/app/src/data/gifs.ts b/app/src/data/gifs.ts
new file mode 100644
index 00000000..87c26017
--- /dev/null
+++ b/app/src/data/gifs.ts
@@ -0,0 +1,242 @@
+export const gifs = [
+ {
+ id: "bCTbZchgFKieymYPuB",
+ title: "Happy Birthday Dancing GIF by Mickey Mouse",
+ url: "https://media1.giphy.com/media/bCTbZchgFKieymYPuB/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "jle0nmfHz4YHxsOc6d",
+ title: "Good Morning Love GIF by Pengu",
+ url: "https://media0.giphy.com/media/jle0nmfHz4YHxsOc6d/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "vVzH2XY3Y0Ar6",
+ title: "Dog Dancing GIF",
+ url: "https://media1.giphy.com/media/vVzH2XY3Y0Ar6/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "ha6vsupXjJVMZ4WJsT",
+ title: "I Love You Baby GIF by Pengu",
+ url: "https://media3.giphy.com/media/ha6vsupXjJVMZ4WJsT/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "tqj4m9BRURayxQAIW9",
+ title: "Monday Morning Cat GIF by GrowthX",
+ url: "https://media4.giphy.com/media/tqj4m9BRURayxQAIW9/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "HeArjdf9JB6uc5DEJS",
+ title: "Merry Christmas GIF by Storyful",
+ url: "https://media0.giphy.com/media/HeArjdf9JB6uc5DEJS/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "3oNMQtqpnse0dbFe06",
+ title: "Kisses And Hugs Heart GIF",
+ url: "https://media3.giphy.com/media/3oNMQtqpnse0dbFe06/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "HTbDRsSHeu97VeXcBz",
+ title: "Angry Season 2 GIF by The Office",
+ url: "https://media0.giphy.com/media/HTbDRsSHeu97VeXcBz/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "fsE2EPGU9IA0pZBPA7",
+ title: "Happy Birthday GIF by Todd Rocheford",
+ url: "https://media1.giphy.com/media/fsE2EPGU9IA0pZBPA7/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "9gkwDaCB4pmoOe73x2",
+ title: "Good Morning GIF",
+ url: "https://media0.giphy.com/media/9gkwDaCB4pmoOe73x2/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "xvGEx3cazysda",
+ title: "Water Bird GIF",
+ url: "https://media0.giphy.com/media/xvGEx3cazysda/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "rZMNNOGFCaXHluoGkI",
+ title: "Love You GIF by Teddy Too Big",
+ url: "https://media3.giphy.com/media/rZMNNOGFCaXHluoGkI/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "bbshzgyFQDqPHXBo4c",
+ title: "Dog Morning GIF",
+ url: "https://media4.giphy.com/media/bbshzgyFQDqPHXBo4c/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "26BRxeLkRqmzttSxy",
+ title: "Happy Birthday GIF",
+ url: "https://media1.giphy.com/media/26BRxeLkRqmzttSxy/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "5ZZSYqvcH6QppFQGI5",
+ title: "Monday Omg GIF by JustViral",
+ url: "https://media3.giphy.com/media/5ZZSYqvcH6QppFQGI5/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "ahZZZZFGLGhvq",
+ title: "Christmas Eve Smile GIF",
+ url: "https://media2.giphy.com/media/ahZZZZFGLGhvq/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "v65rDtklV9l6g",
+ title: "Hugs GIF",
+ url: "https://media3.giphy.com/media/v65rDtklV9l6g/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "Vb8jJpj99hxtbwTi7j",
+ title: "Happy Pixel GIF by Anne Horel",
+ url: "https://media1.giphy.com/media/Vb8jJpj99hxtbwTi7j/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "t7YnMUMYwD4cxwaN9y",
+ title: "Happy Birthday Dancing GIF by Pudgy Penguins",
+ url: "https://media2.giphy.com/media/t7YnMUMYwD4cxwaN9y/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "FnsyaPjzV7ZdNLB9sx",
+ title: "Good Morning Smile GIF by Holler Studios",
+ url: "https://media2.giphy.com/media/FnsyaPjzV7ZdNLB9sx/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "SvkTzTecFJip2",
+ title: "Iguana Running GIF",
+ url: "https://media1.giphy.com/media/SvkTzTecFJip2/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "xtnUcarKhT6sHfEZ2u",
+ title: "I Love You Animation GIF",
+ url: "https://media3.giphy.com/media/xtnUcarKhT6sHfEZ2u/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "mxjzBpyu8DDLIcEKVC",
+ title: "Good Morning Coffee GIF by 大姚Dayao",
+ url: "https://media4.giphy.com/media/mxjzBpyu8DDLIcEKVC/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "LnQoAUr1UlBCBaqjaI",
+ title: "Happy Birthday Love GIF by Hallmark Gold Crown",
+ url: "https://media0.giphy.com/media/LnQoAUr1UlBCBaqjaI/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "3o6fJbwYFe3SmVVQ4M",
+ title: "Tired Manic Monday GIF by Nebraska Humane Society",
+ url: "https://media1.giphy.com/media/3o6fJbwYFe3SmVVQ4M/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "x7gjmBuaHrWak",
+ title: "Grinch Smile GIF",
+ url: "https://media0.giphy.com/media/x7gjmBuaHrWak/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "UuB5lh1bL1Dl6svihe",
+ title: "Happy I Love You GIF by Life of a Potato",
+ url: "https://media1.giphy.com/media/UuB5lh1bL1Dl6svihe/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "YOqDymLgjWk0dg3pi3",
+ title: "Fail Birthday Cake GIF by Holler Studios",
+ url: "https://media0.giphy.com/media/YOqDymLgjWk0dg3pi3/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "o7BebTgj44jmw",
+ title: "Water Dogs GIF by AFV Pets",
+ url: "https://media0.giphy.com/media/o7BebTgj44jmw/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "l0HlGfnQY9XvE4jVC",
+ title: "I Love You GIF by Denyse®",
+ url: "https://media0.giphy.com/media/l0HlGfnQY9XvE4jVC/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "9s8Jq3Sc1ZnZS",
+ title: "Wake Up Dog GIF",
+ url: "https://media1.giphy.com/media/9s8Jq3Sc1ZnZS/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "13sz48R33vovLi",
+ title: "Cat Monday GIF",
+ url: "https://media0.giphy.com/media/13sz48R33vovLi/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "TlfY7QPkCPTjE3OaHF",
+ title: "The Grinch Happy Dance GIF by Dear Silas",
+ url: "https://media0.giphy.com/media/TlfY7QPkCPTjE3OaHF/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "wIePCLOwUQ4RW",
+ title: "Hugs GIF",
+ url: "https://media0.giphy.com/media/wIePCLOwUQ4RW/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "xNZe21P0bOROSAsjBC",
+ title: "Happy Birthday Dancing GIF",
+ url: "https://media2.giphy.com/media/xNZe21P0bOROSAsjBC/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "LPO1GfRfJCNVmvbKCe",
+ title: "Happy Birthday GIF by Todd Rocheford",
+ url: "https://media4.giphy.com/media/LPO1GfRfJCNVmvbKCe/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "WlbzfPOK8i21lESvYy",
+ title: "Good Morning Love GIF by Lucas and Friends by RV AppStudios",
+ url: "https://media4.giphy.com/media/WlbzfPOK8i21lESvYy/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "8FnZtdlK1k3Ly",
+ title: "Lion Love GIF",
+ url: "https://media3.giphy.com/media/8FnZtdlK1k3Ly/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "1fMjj5j2Z7chq",
+ title: "Tapping Wake Up GIF",
+ url: "https://media4.giphy.com/media/1fMjj5j2Z7chq/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "xUA7b5WwMudP2eVafu",
+ title: "Happy Monday GIF by Chippy the Dog",
+ url: "https://media0.giphy.com/media/xUA7b5WwMudP2eVafu/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "UChPEs9ghFo2s",
+ title: "The Grinch Film GIF by The Good Films",
+ url: "https://media3.giphy.com/media/UChPEs9ghFo2s/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "yidUzriaAGJbsxt58k",
+ title: "The Office Hug GIF",
+ url: "https://media0.giphy.com/media/yidUzriaAGJbsxt58k/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "8cOkSOuvIChHNYOyP7",
+ title: "Good Morning Love GIF by ircha_gram",
+ url: "https://media0.giphy.com/media/8cOkSOuvIChHNYOyP7/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "mI6B532k3otUc",
+ title: "black and white bear GIF",
+ url: "https://media3.giphy.com/media/mI6B532k3otUc/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "3CCXHZWV6F6O9VQ7FL",
+ title: "Valentines Day Love GIF by Digital Pratik",
+ url: "https://media2.giphy.com/media/3CCXHZWV6F6O9VQ7FL/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "ZNzmLhL5ZVbq697LwT",
+ title: "Coffee Time GIF",
+ url: "https://media2.giphy.com/media/ZNzmLhL5ZVbq697LwT/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "YdGUYXws5mD2fxFKxg",
+ title: "Happy Monday Morning GIF by Lucas and Friends by RV AppStudios",
+ url: "https://media2.giphy.com/media/YdGUYXws5mD2fxFKxg/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+ {
+ id: "UTFiHeDL8cOSA",
+ title: "The Grinch Smiling GIF by The Good Films",
+ url: "https://media0.giphy.com/media/UTFiHeDL8cOSA/200.gif?cid=08e3ca17z6emrggyp3rusefjuc4symlrp6c32iipbagbz8fr&ep=v1_gifs_trending&rid=200.gif",
+ },
+];
diff --git a/app/src/data/icons.tsx b/app/src/data/icons.tsx
index b357c422..468c5e07 100644
--- a/app/src/data/icons.tsx
+++ b/app/src/data/icons.tsx
@@ -1,31 +1,5 @@
-import BlockIcon from "@mui/icons-material/Block";
-import NotificationsOutlinedIcon from "@mui/icons-material/NotificationsOutlined";
-import HttpsOutlinedIcon from "@mui/icons-material/HttpsOutlined";
-import DevicesOutlinedIcon from "@mui/icons-material/DevicesOutlined";
-import PersonOutlineOutlinedIcon from "@mui/icons-material/PersonOutlineOutlined";
-import ArrowBackOutlinedIcon from "@mui/icons-material/ArrowBackOutlined";
-import SettingsOutlinedIcon from "@mui/icons-material/SettingsOutlined";
-import NightlightOutlinedIcon from "@mui/icons-material/NightlightOutlined";
-import GroupOutlinedIcon from "@mui/icons-material/GroupOutlined";
-import CampaignOutlinedIcon from "@mui/icons-material/CampaignOutlined";
-import PersonAddAltOutlinedIcon from "@mui/icons-material/PersonAddAltOutlined";
-import LogoutIcon from "@mui/icons-material/Logout";
-import PersonIcon from "@mui/icons-material/Person";
-import EditIcon from "@mui/icons-material/Edit";
-import PhotoCameraIcon from "@mui/icons-material/PhotoCamera";
-import AddIcon from "@mui/icons-material/Add";
-import CloseOutlinedIcon from "@mui/icons-material/CloseOutlined";
-import VisibilityIcon from "@mui/icons-material/Visibility";
-import VisibilityOffIcon from "@mui/icons-material/VisibilityOff";
-import NoEncryptionOutlinedIcon from "@mui/icons-material/NoEncryptionOutlined";
-import KeyboardVoiceIcon from "@mui/icons-material/KeyboardVoice";
-import AttachFileIcon from "@mui/icons-material/AttachFile";
-import SentimentSatisfiedAltIcon from "@mui/icons-material/SentimentSatisfiedAlt";
-import MoreVertIcon from "@mui/icons-material/MoreVert";
-import LocalPhoneIcon from "@mui/icons-material/LocalPhone";
-import SearchIcon from "@mui/icons-material/Search";
-import AddAPhotoOutlined from "@mui/icons-material/AddAPhotoOutlined";
-import DeleteOutlineOutlinedIcon from "@mui/icons-material/DeleteOutlineOutlined";
+import React, { lazy, Suspense } from "react";
+import { SxProps } from "@mui/material/styles";
enum icons {
BlockIcon,
@@ -57,186 +31,469 @@ enum icons {
Search,
Delete,
AddPhoto,
+ Send,
+ Pause,
+ Play,
+ CalendarToday,
+ KeyboardArrowUp,
+ KeyboardArrowDown,
+ ContentCopy,
+ CircularProgress,
+ RightArrow,
+ LeftArrow,
+ Forward,
+ MessagingOptions,
+ Pin,
+ Reply,
+ PushPin,
+ GifBox,
+ EmojiBox,
+ StickerBox,
+ Menu,
+ DoDisturb,
+ Check,
+ AlternateEmailTwoTone,
+ Email,
+ Info,
+ Phone,
+ ArrowForward,
+ Mute,
+ EndCall,
+ AddMembers,
+ Lock,
+ Admin,
+ Members,
+ RemoveMember,
+ Eye,
+ Sun,
+ Group,
+ CallAccept,
+ Mention,
+ UnMute
}
type iconStrings = keyof typeof icons;
-const iconMap: { [K in iconStrings]: React.ReactNode } = {
- BlockIcon: ,
- SettingsOutlinedIcon: (
-
- ),
- NotificationsOutlinedIcon: (
-
- ),
- HttpsOutlinedIcon: (
-
- ),
- DevicesOutlinedIcon: (
-
- ),
- BackArrow: (
-
- ),
- Contacts: (
-
- ),
- Settings: (
-
- ),
- NightMode: (
-
- ),
- Add: (
-
- ),
- Edit: (
-
- ),
- AddStory: (
-
- ),
- Logout: (
-
- ),
- ProflePicture: (
-
- ),
- NewGroup: (
-
- ),
- NewChannel: (
-
- ),
- NewChat: (
-
- ),
- Show: (
-
- ),
- Hide: (
-
- ),
- Close: (
-
- ),
- Unlock: (
-
- ),
-
- Record: ,
+type IconConfig = {
+ importFn: () => Promise<{
+ default: React.ComponentType