diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..ea69a8e
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,35 @@
+node_modules/
+dist/
+out/
+build/
+public/build/
+.vite/
+.vitepress/
+.cache/
+.tmp/
+coverage/
+reports/
+jest/
+cypress/
+cypress/screenshots/
+cypress/videos/
+*.env*
+!.env.production
+*.local
+*.log
+*.tsbuildinfo
+.vscode/
+.idea/
+*.swp
+.DS_Store
+Thumbs.db
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+.git/
+.gitignore
+Dockerfile
+.dockerignore
+docker-compose.yml
+docker-compose.override.yml
\ No newline at end of file
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..10a6cb2
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,2 @@
+VITE_API_URL=http://localhost:3000
+VITE_MEDIA_URL=http://localhost:9001
\ No newline at end of file
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..36f57f8
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,30 @@
+name: ci
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ branches: [main]
+ types: [opened, synchronize, reopened]
+
+jobs:
+ build-test-deploy:
+ name: Build & Deploy
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Login to Docker Registry
+ uses: docker/login-action@v3
+ with:
+ registry: registry.patchcord.org
+ username: ${{ secrets.REGISTRY_USERNAME }}
+ password: ${{ secrets.REGISTRY_PASSWORD }}
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Build and Push Production Image
+ uses: docker/build-push-action@v6
+ with:
+ push: true
+ tags: registry.patchcord.org/${{ secrets.REGISTRY_USERNAME }}/${{ github.event.repository.name }}:latest
diff --git a/.gitignore b/.gitignore
index 9a5aced..bcd8e3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -137,3 +137,6 @@ dist
# Vite logs files
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
+
+*storybook.log
+storybook-static
diff --git a/.storybook/main.ts b/.storybook/main.ts
new file mode 100644
index 0000000..d0ca1a2
--- /dev/null
+++ b/.storybook/main.ts
@@ -0,0 +1,11 @@
+import type { StorybookConfig } from '@storybook/vue3-vite'
+
+const config: StorybookConfig = {
+ stories: ['../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
+ addons: [],
+ framework: {
+ name: '@storybook/vue3-vite',
+ options: {},
+ },
+}
+export default config
diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html
new file mode 100644
index 0000000..3117bf6
--- /dev/null
+++ b/.storybook/preview-head.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/.storybook/preview.ts b/.storybook/preview.ts
new file mode 100644
index 0000000..5b1272f
--- /dev/null
+++ b/.storybook/preview.ts
@@ -0,0 +1,16 @@
+import type { Preview } from '@storybook/vue3-vite'
+
+import '@/app/styles/index.scss'
+
+const preview: Preview = {
+ parameters: {
+ controls: {
+ matchers: {
+ color: /(background|color)$/i,
+ date: /Date$/i,
+ },
+ },
+ },
+}
+
+export default preview
diff --git a/.stylelintrc b/.stylelintrc
new file mode 100644
index 0000000..62a8c68
--- /dev/null
+++ b/.stylelintrc
@@ -0,0 +1,249 @@
+{
+ "extends": ["stylelint-config-standard"],
+ "plugins": ["stylelint-order"],
+ "overrides": [
+ {
+ "files": ["*.scss", "**/*.scss"],
+ "extends": ["stylelint-config-standard-scss"]
+ },
+ {
+ "files": ["*.vue", "**/*.vue"],
+ "extends": ["stylelint-config-standard-scss", "stylelint-config-standard-vue/scss"]
+ }
+ ],
+ "rules": {
+ "order/properties-order": [
+ {
+ "groupName": "scss",
+ "properties": ["$variable", "@mixin", "@include"]
+ },
+ {
+ "groupName": "topLevel",
+ "properties": ["content", "position", "top", "right", "bottom", "left", "z-index"]
+ },
+ {
+ "groupName": "elementProperties",
+ "properties": [
+ "display",
+ "flex",
+ "flex-basis",
+ "flex-direction",
+ "flex-flow",
+ "flex-grow",
+ "flex-shrink",
+ "flex-wrap",
+ "grid",
+ "grid-area",
+ "grid-auto-rows",
+ "grid-auto-columns",
+ "grid-auto-flow",
+ "grid-gap",
+ "grid-row",
+ "grid-row-start",
+ "grid-row-end",
+ "grid-column",
+ "grid-column-start",
+ "grid-column-end",
+ "grid-template",
+ "grid-template-areas",
+ "grid-template-rows",
+ "grid-template-columns",
+ "gap",
+ "row-gap",
+ "column-gap",
+ "align-content",
+ "align-items",
+ "align-self",
+ "justify-content",
+ "justify-items",
+ "justify-self",
+ "order",
+ "float",
+ "clear",
+ "object-fit",
+ "object-position",
+ "overflow",
+ "overflow-x",
+ "overflow-y",
+ "overflow-scrolling",
+ "clip"
+ ]
+ },
+ {
+ "groupName": "box",
+ "properties": [
+ "width",
+ "min-width",
+ "max-width",
+ "height",
+ "min-height",
+ "max-height",
+ "margin",
+ "margin-top",
+ "margin-right",
+ "margin-bottom",
+ "margin-left",
+ "padding",
+ "padding-top",
+ "padding-right",
+ "padding-bottom",
+ "padding-left",
+ "box-sizing"
+ ]
+ },
+ {
+ "groupName": "typography",
+ "properties": [
+ "color",
+ "font",
+ "font-family",
+ "font-size",
+ "font-size-adjust",
+ "font-stretch",
+ "font-weight",
+ "font-smoothing",
+ "osx-font-smoothing",
+ "font-variant",
+ "font-style",
+ "src",
+ "line-height",
+ "letter-spacing",
+ "quotes",
+ "counter-increment",
+ "counter-reset",
+ "vertical-align",
+ "list-style",
+ "list-style-type",
+ "list-style-position",
+ "list-style-image",
+ "page-break-after",
+ "page-break-before",
+ "page-break-inside",
+ "text-align",
+ "text-align-last",
+ "text-decoration",
+ "text-emphasis",
+ "text-emphasis-color",
+ "text-emphasis-style",
+ "text-emphasis-position",
+ "text-indent",
+ "text-justify",
+ "text-outline",
+ "text-transform",
+ "text-wrap",
+ "text-overflow",
+ "text-overflow-ellipsis",
+ "text-overflow-mode",
+ "text-shadow",
+ "white-space",
+ "word-spacing",
+ "word-wrap",
+ "word-break",
+ "tab-size",
+ "hyphens",
+ "caption-side"
+ ]
+ },
+ {
+ "groupName": "border",
+ "properties": [
+ "border",
+ "border-top",
+ "border-right",
+ "border-bottom",
+ "border-left",
+ "border-width",
+ "border-top-width",
+ "border-right-width",
+ "border-bottom-width",
+ "border-left-width",
+ "border-style",
+ "border-top-style",
+ "border-right-style",
+ "border-bottom-style",
+ "border-left-style",
+ "border-color",
+ "border-top-color",
+ "border-right-color",
+ "border-bottom-color",
+ "border-left-color",
+ "border-radius",
+ "border-top-left-radius",
+ "border-top-right-radius",
+ "border-bottom-left-radius",
+ "border-bottom-right-radius",
+ "border-image",
+ "border-image-source",
+ "border-image-slice",
+ "border-image-width",
+ "border-image-outset",
+ "border-image-repeat",
+ "border-collapse",
+ "border-spacing"
+ ]
+ },
+ {
+ "groupName": "visuals",
+ "properties": [
+ "background",
+ "background-attachment",
+ "background-clip",
+ "background-color",
+ "background-image",
+ "background-origin",
+ "background-position",
+ "background-repeat",
+ "background-size",
+ "box-shadow",
+ "outline",
+ "outline-width",
+ "outline-style",
+ "outline-color",
+ "outline-offset",
+ "table-layout",
+ "empty-cells",
+ "opacity",
+ "visibility",
+ "size",
+ "zoom"
+ ]
+ },
+ {
+ "groupName": "style",
+ "properties": ["appearance", "cursor", "pointer-events"]
+ },
+ {
+ "groupName": "clip",
+ "properties": ["backdrop-filter", "clip", "clip-path", "mask"]
+ },
+ {
+ "groupName": "misc",
+ "properties": ["resize", "touch-action"]
+ },
+ {
+ "groupName": "animations",
+ "properties": [
+ "transform",
+ "transform-box",
+ "transform-origin",
+ "transform-style",
+ "transition",
+ "transition-delay",
+ "transition-duration",
+ "transition-property",
+ "transition-timing-function",
+ "animation",
+ "animation-name",
+ "animation-duration",
+ "animation-timing-function",
+ "animation-delay",
+ "animation-iteration-count",
+ "animation-direction",
+ "animation-fill-mode",
+ "animation-play-state",
+ "will-change"
+ ]
+ }
+ ]
+ }
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 608ad9b..d723d50 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -3,11 +3,21 @@
"explorer.fileNesting.patterns": {
"tsconfig.json": "tsconfig.*.json, env.d.ts",
"vite.config.*": "jsconfig*, vitest.config.*, cypress.config.*, playwright.config.*",
- "package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .oxlint*, oxlint*, .prettier*, prettier*, .editorconfig"
+ "package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .oxlint*, oxlint*, .prettier*, prettier*, .editorconfig, .stylelintrc"
},
"editor.codeActionsOnSave": {
"source.fixAll": "explicit"
},
"editor.formatOnSave": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode"
-}
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "[css]": {
+ "editor.defaultFormatter": "vscode.css-language-features"
+ },
+ "cSpell.words": [
+ "patchcord",
+ "pinia",
+ "statuspage",
+ "Topbar",
+ "vnode"
+ ]
+}
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..2089146
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,15 @@
+FROM node:25-alpine AS builder
+WORKDIR /app
+COPY package*.json ./
+RUN npm install
+COPY . .
+RUN npm run build
+
+FROM nginx:1.29-alpine AS runner
+RUN chown -R nginx:nginx /var/cache/nginx /var/log/nginx /etc/nginx/conf.d
+RUN touch /var/run/nginx.pid && chown -R nginx:nginx /var/run/nginx.pid
+COPY --chown=nginx:nginx nginx.conf /etc/nginx/nginx.conf
+COPY --chown=nginx:nginx --from=builder /app/dist /usr/share/nginx/html
+USER nginx
+EXPOSE 8080
+CMD ["nginx", "-g", "daemon off;"]
\ No newline at end of file
diff --git a/eslint.config.ts b/eslint.config.ts
index a88d844..5226dc7 100644
--- a/eslint.config.ts
+++ b/eslint.config.ts
@@ -1,3 +1,6 @@
+// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format
+import storybook from 'eslint-plugin-storybook'
+
import { globalIgnores } from 'eslint/config'
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
import pluginVue from 'eslint-plugin-vue'
@@ -19,21 +22,18 @@ export default defineConfigWithVueTs(
},
globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']),
-
+ storybook.configs['flat/recommended'],
pluginVue.configs['flat/essential'],
vueTsConfigs.recommended,
-
+
{
...pluginVitest.configs.recommended,
files: ['src/**/__tests__/*'],
},
-
+
{
...pluginCypress.configs.recommended,
- files: [
- 'cypress/e2e/**/*.{cy,spec}.{js,ts,jsx,tsx}',
- 'cypress/support/**/*.{js,ts,jsx,tsx}'
- ],
+ files: ['cypress/e2e/**/*.{cy,spec}.{js,ts,jsx,tsx}', 'cypress/support/**/*.{js,ts,jsx,tsx}'],
},
skipFormatting,
)
diff --git a/index.html b/index.html
index 9e5fc8f..83d468b 100644
--- a/index.html
+++ b/index.html
@@ -1,13 +1,87 @@
-
-
+
+
-
-
-
- Vite App
+
+
+
+ Patchcord
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
Упс! JavaScript решил немного вздремнуть...
+
+ Похоже, ваш JavaScript отключен. Пожалуйста, включите JavaScript в настройках вашего
+ браузера.
+
+
+
diff --git a/nginx.conf b/nginx.conf
new file mode 100644
index 0000000..3648b30
--- /dev/null
+++ b/nginx.conf
@@ -0,0 +1,55 @@
+worker_processes auto;
+pid /tmp/nginx.pid;
+
+events {
+ worker_connections 1024;
+}
+
+http {
+ include /etc/nginx/mime.types;
+ default_type application/octet-stream;
+ charset utf-8;
+
+ access_log off;
+ error_log /dev/stderr warn;
+
+ sendfile on;
+ tcp_nopush on;
+ tcp_nodelay on;
+ keepalive_timeout 65;
+ keepalive_requests 1000;
+
+ gzip on;
+ gzip_comp_level 6;
+ gzip_proxied any;
+ gzip_min_length 256;
+ gzip_vary on;
+ gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
+
+ server {
+ listen 8080;
+ server_name localhost;
+
+ root /usr/share/nginx/html;
+ index index.html;
+
+ location / {
+ try_files $uri $uri/ /index.html;
+ }
+
+ location ~* \.(?:ico|css|js|gif|jpe?g|png|woff2?|eot|ttf|svg|map)$ {
+ expires 1y;
+ access_log off;
+ add_header Cache-Control "public, immutable";
+ add_header X-Content-Type-Options nosniff;
+ }
+
+ location /assets/ {
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ add_header X-Content-Type-Options nosniff;
+ }
+
+ error_page 404 /index.html;
+ }
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..fb46ffc
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,12348 @@
+{
+ "name": "patchcord",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "patchcord",
+ "version": "0.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "@floating-ui/vue": "^1.1.10",
+ "@vee-validate/zod": "^4.15.1",
+ "mediasoup-client": "^3.18.7",
+ "pinia": "^3.0.3",
+ "socket.io-client": "^4.8.3",
+ "vue": "^3.5.22",
+ "vue-router": "^4.6.3",
+ "zod": "^3.24.0"
+ },
+ "devDependencies": {
+ "@storybook/vue3-vite": "^10.0.8",
+ "@tsconfig/node22": "^22.0.2",
+ "@types/jsdom": "^27.0.0",
+ "@vitejs/plugin-vue": "^6.0.1",
+ "@vitest/eslint-plugin": "^1.3.23",
+ "@vue/eslint-config-prettier": "^10.2.0",
+ "@vue/eslint-config-typescript": "^14.6.0",
+ "@vue/test-utils": "^2.4.6",
+ "@vue/tsconfig": "^0.8.1",
+ "cypress": "^15.5.0",
+ "eslint": "^9.37.0",
+ "eslint-plugin-cypress": "^5.2.0",
+ "eslint-plugin-storybook": "^10.0.8",
+ "eslint-plugin-vue": "~10.5.0",
+ "jiti": "^2.6.1",
+ "jsdom": "^27.0.1",
+ "npm-run-all2": "^8.0.4",
+ "prettier": "3.6.2",
+ "sass-embedded": "^1.93.3",
+ "start-server-and-test": "^2.1.2",
+ "storybook": "^10.0.8",
+ "stylelint": "^16.25.0",
+ "stylelint-config-standard": "^39.0.1",
+ "stylelint-config-standard-scss": "^16.0.0",
+ "stylelint-config-standard-vue": "^1.0.0",
+ "stylelint-order": "^7.0.0",
+ "typescript": "~5.9.0",
+ "vite": "^7.1.11",
+ "vite-plugin-vue-devtools": "^8.0.3",
+ "vitest": "^3.2.4",
+ "vue-tsc": "^3.1.1"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@acemir/cssom": {
+ "version": "0.9.23",
+ "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.23.tgz",
+ "integrity": "sha512-2kJ1HxBKzPLbmhZpxBiTZggjtgCwKg1ma5RHShxvd6zgqhDEdEkzpiwe7jLkI2p2BrZvFCXIihdoMkl1H39VnA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@adobe/css-tools": {
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz",
+ "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@asamuzakjp/css-color": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.0.tgz",
+ "integrity": "sha512-9xiBAtLn4aNsa4mDnpovJvBn72tNEIACyvlqaNJ+ADemR+yeMJWnBudOi2qGDviJa7SwcDOU/TRh5dnET7qk0w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-calc": "^2.1.4",
+ "@csstools/css-color-parser": "^3.1.0",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4",
+ "lru-cache": "^11.2.2"
+ }
+ },
+ "node_modules/@asamuzakjp/dom-selector": {
+ "version": "6.7.4",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.4.tgz",
+ "integrity": "sha512-buQDjkm+wDPXd6c13534URWZqbz0RP5PAhXZ+LIoa5LgwInT9HVJvGIJivg75vi8I13CxDGdTnz+aY5YUJlIAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@asamuzakjp/nwsapi": "^2.3.9",
+ "bidi-js": "^1.0.3",
+ "css-tree": "^3.1.0",
+ "is-potential-custom-element-name": "^1.0.1",
+ "lru-cache": "^11.2.2"
+ }
+ },
+ "node_modules/@asamuzakjp/nwsapi": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz",
+ "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
+ "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
+ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.28.5",
+ "@babel/helper-compilation-targets": "^7.27.2",
+ "@babel/helper-module-transforms": "^7.28.3",
+ "@babel/helpers": "^7.28.4",
+ "@babel/parser": "^7.28.5",
+ "@babel/template": "^7.27.2",
+ "@babel/traverse": "^7.28.5",
+ "@babel/types": "^7.28.5",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
+ "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "@babel/types": "^7.28.5",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.27.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
+ "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.27.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+ "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.27.2",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz",
+ "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-member-expression-to-functions": "^7.28.5",
+ "@babel/helper-optimise-call-expression": "^7.27.1",
+ "@babel/helper-replace-supers": "^7.27.1",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/traverse": "^7.28.5",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
+ "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.28.5",
+ "@babel/types": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+ "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
+ "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/traverse": "^7.28.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
+ "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
+ "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
+ "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-member-expression-to-functions": "^7.27.1",
+ "@babel/helper-optimise-call-expression": "^7.27.1",
+ "@babel/traverse": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
+ "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
+ "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.27.2",
+ "@babel/types": "^7.28.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
+ "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.5"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-decorators": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz",
+ "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/plugin-syntax-decorators": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-decorators": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz",
+ "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
+ "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
+ "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
+ "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typescript": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz",
+ "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-create-class-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
+ "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/parser": "^7.27.2",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
+ "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.28.5",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.28.5",
+ "@babel/template": "^7.27.2",
+ "@babel/types": "^7.28.5",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
+ "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bufbuild/protobuf": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.1.tgz",
+ "integrity": "sha512-ckS3+vyJb5qGpEYv/s1OebUHDi/xSNtfgw1wqKZo7MR9F2z+qXr0q5XagafAG/9O0QPVIUfST0smluYSTpYFkg==",
+ "dev": true,
+ "license": "(Apache-2.0 AND BSD-3-Clause)"
+ },
+ "node_modules/@cacheable/memory": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.5.tgz",
+ "integrity": "sha512-fkiAxCvssEyJZ5fxX4tcdZFRmW9JehSTGvvqmXn6rTzG5cH6V/3C4ad8yb01vOjp2xBydHkHrgpW0qeGtzt6VQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cacheable/utils": "^2.3.0",
+ "@keyv/bigmap": "^1.1.0",
+ "hookified": "^1.12.2",
+ "keyv": "^5.5.4"
+ }
+ },
+ "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.0.tgz",
+ "integrity": "sha512-KT01GjzV6AQD5+IYrcpoYLkCu1Jod3nau1Z7EsEuViO3TZGRacSbO9MfHmbJ1WaOXFtWLxPVj169cn2WNKPkIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hashery": "^1.2.0",
+ "hookified": "^1.13.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "keyv": "^5.5.4"
+ }
+ },
+ "node_modules/@cacheable/memory/node_modules/keyv": {
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.4.tgz",
+ "integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@keyv/serialize": "^1.1.1"
+ }
+ },
+ "node_modules/@cacheable/utils": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.3.1.tgz",
+ "integrity": "sha512-38NJXjIr4W1Sghun8ju+uYWD8h2c61B4dKwfnQHVDFpAJ9oS28RpfqZQJ6Dgd3RceGkILDY9YT+72HJR3LoeSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hashery": "^1.2.0",
+ "keyv": "^5.5.4"
+ }
+ },
+ "node_modules/@cacheable/utils/node_modules/keyv": {
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.4.tgz",
+ "integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@keyv/serialize": "^1.1.1"
+ }
+ },
+ "node_modules/@csstools/color-helpers": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz",
+ "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/css-calc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz",
+ "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-color-parser": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz",
+ "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/color-helpers": "^5.1.0",
+ "@csstools/css-calc": "^2.1.4"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
+ "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-syntax-patches-for-csstree": {
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.16.tgz",
+ "integrity": "sha512-2SpS4/UaWQaGpBINyG5ZuCHnUDeVByOhvbkARwfmnfxDvTaj80yOI1cD8Tw93ICV5Fx4fnyDKWQZI1CDtcWyUg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz",
+ "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/media-query-list-parser": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz",
+ "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@cypress/request": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz",
+ "integrity": "sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~4.0.4",
+ "http-signature": "~1.4.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "performance-now": "^2.1.0",
+ "qs": "~6.14.1",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "^5.0.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@cypress/xvfb": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
+ "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.1.0",
+ "lodash.once": "^4.1.1"
+ }
+ },
+ "node_modules/@cypress/xvfb/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/@dual-bundle/import-meta-resolve": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz",
+ "integrity": "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/JounQin"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
+ "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.21.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
+ "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.7",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.39.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz",
+ "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.4.tgz",
+ "integrity": "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.10"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.7.5",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.5.tgz",
+ "integrity": "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.7.4",
+ "@floating-ui/utils": "^0.2.10"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
+ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
+ "license": "MIT"
+ },
+ "node_modules/@floating-ui/vue": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/@floating-ui/vue/-/vue-1.1.10.tgz",
+ "integrity": "sha512-vdf8f6rHnFPPLRsmL4p12wYl+Ux4mOJOkjzKEMYVnwdf7UFdvBtHlLvQyx8iKG5vhPRbDRgZxdtpmyigDPjzYg==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/dom": "^1.7.5",
+ "@floating-ui/utils": "^0.2.10",
+ "vue-demi": ">=0.13.0"
+ }
+ },
+ "node_modules/@floating-ui/vue/node_modules/vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@hapi/address": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz",
+ "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@hapi/hoek": "^11.0.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@hapi/formula": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz",
+ "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@hapi/hoek": {
+ "version": "11.0.7",
+ "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz",
+ "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@hapi/pinpoint": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz",
+ "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@hapi/tlds": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz",
+ "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@hapi/topo": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz",
+ "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@hapi/hoek": "^11.0.2"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.7",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
+ "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "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.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?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.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "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/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@keyv/serialize": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz",
+ "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@lukeed/csprng": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz",
+ "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@lukeed/uuid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.1.tgz",
+ "integrity": "sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==",
+ "license": "MIT",
+ "dependencies": {
+ "@lukeed/csprng": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@one-ini/wasm": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz",
+ "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@parcel/watcher": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
+ "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "detect-libc": "^1.0.3",
+ "is-glob": "^4.0.3",
+ "micromatch": "^4.0.5",
+ "node-addon-api": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher-android-arm64": "2.5.1",
+ "@parcel/watcher-darwin-arm64": "2.5.1",
+ "@parcel/watcher-darwin-x64": "2.5.1",
+ "@parcel/watcher-freebsd-x64": "2.5.1",
+ "@parcel/watcher-linux-arm-glibc": "2.5.1",
+ "@parcel/watcher-linux-arm-musl": "2.5.1",
+ "@parcel/watcher-linux-arm64-glibc": "2.5.1",
+ "@parcel/watcher-linux-arm64-musl": "2.5.1",
+ "@parcel/watcher-linux-x64-glibc": "2.5.1",
+ "@parcel/watcher-linux-x64-musl": "2.5.1",
+ "@parcel/watcher-win32-arm64": "2.5.1",
+ "@parcel/watcher-win32-ia32": "2.5.1",
+ "@parcel/watcher-win32-x64": "2.5.1"
+ }
+ },
+ "node_modules/@parcel/watcher-android-arm64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
+ "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-arm64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
+ "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-x64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
+ "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-freebsd-x64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
+ "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-glibc": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
+ "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-musl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
+ "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
+ "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-musl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
+ "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-glibc": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
+ "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-musl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
+ "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-arm64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
+ "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-ia32": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
+ "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-x64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
+ "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "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.2.9",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
+ "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/pkgr"
+ }
+ },
+ "node_modules/@polka/url": {
+ "version": "1.0.0-next.29",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
+ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.50",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.50.tgz",
+ "integrity": "sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz",
+ "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz",
+ "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz",
+ "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz",
+ "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz",
+ "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz",
+ "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz",
+ "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz",
+ "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz",
+ "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz",
+ "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz",
+ "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz",
+ "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz",
+ "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz",
+ "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz",
+ "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz",
+ "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz",
+ "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz",
+ "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz",
+ "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz",
+ "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz",
+ "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz",
+ "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "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==",
+ "license": "MIT"
+ },
+ "node_modules/@standard-schema/spec": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
+ "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@storybook/builder-vite": {
+ "version": "10.0.8",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.0.8.tgz",
+ "integrity": "sha512-kaf/pUENzXxYgQMHGGPNiIk1ieb+SOMuSeLKx8wAUOlQOrzhtSH+ItACW/l43t+O6YZ8jYHoNBMF1kdQ1+Y5+w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@storybook/csf-plugin": "10.0.8",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "storybook": "^10.0.8",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
+ }
+ },
+ "node_modules/@storybook/csf-plugin": {
+ "version": "10.0.8",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.0.8.tgz",
+ "integrity": "sha512-OtLUWHIm3SDGtclQn6Mdd/YsWizLBgdEBRAdekGtwI/TvICfT7gpWYIycP53v2t9ufu2MIXjsxtV2maZKs8sZg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "unplugin": "^2.3.5"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "esbuild": "*",
+ "rollup": "*",
+ "storybook": "^10.0.8",
+ "vite": "*",
+ "webpack": "*"
+ },
+ "peerDependenciesMeta": {
+ "esbuild": {
+ "optional": true
+ },
+ "rollup": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ },
+ "webpack": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@storybook/global": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz",
+ "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@storybook/icons": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-2.0.1.tgz",
+ "integrity": "sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@storybook/vue3": {
+ "version": "10.0.8",
+ "resolved": "https://registry.npmjs.org/@storybook/vue3/-/vue3-10.0.8.tgz",
+ "integrity": "sha512-h7ztNeAemf3yXQIetkbKAv8l5JkuXC65TmpAYTZYZpWUof/uuAnMF4rXQlRnS6Nd2PRfA9mZGGlGxNDCm3StlA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@storybook/global": "^5.0.0",
+ "type-fest": "~2.19",
+ "vue-component-type-helpers": "latest"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "storybook": "^10.0.8",
+ "vue": "^3.0.0"
+ }
+ },
+ "node_modules/@storybook/vue3-vite": {
+ "version": "10.0.8",
+ "resolved": "https://registry.npmjs.org/@storybook/vue3-vite/-/vue3-vite-10.0.8.tgz",
+ "integrity": "sha512-Bdum0SssJAbvwKfbKvTMEkpc9zapMG/GODxzqWO7XuycOZWrR0FPvj13y1gBhv0y66jBHMbtsLQ76uTyNFslIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@storybook/builder-vite": "10.0.8",
+ "@storybook/vue3": "10.0.8",
+ "magic-string": "^0.30.0",
+ "typescript": "^5.8.3",
+ "vue-component-meta": "^2.0.0",
+ "vue-docgen-api": "^4.75.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "storybook": "^10.0.8",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
+ }
+ },
+ "node_modules/@testing-library/dom": {
+ "version": "10.4.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
+ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.3.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "picocolors": "1.1.1",
+ "pretty-format": "^27.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@testing-library/jest-dom": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz",
+ "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@adobe/css-tools": "^4.4.0",
+ "aria-query": "^5.0.0",
+ "css.escape": "^1.5.1",
+ "dom-accessibility-api": "^0.6.3",
+ "picocolors": "^1.1.1",
+ "redent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14",
+ "npm": ">=6",
+ "yarn": ">=1"
+ }
+ },
+ "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
+ "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@testing-library/user-event": {
+ "version": "14.6.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz",
+ "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": ">=7.21.4"
+ }
+ },
+ "node_modules/@tsconfig/node22": {
+ "version": "22.0.5",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node22/-/node22-22.0.5.tgz",
+ "integrity": "sha512-hLf2ld+sYN/BtOJjHUWOk568dvjFQkHnLNa6zce25GIH+vxKfvTgm3qpaH6ToF5tu/NN0IH66s+Bb5wElHrLcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/aria-query": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
+ "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/chai": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
+ "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/deep-eql": "*",
+ "assertion-error": "^2.0.1"
+ }
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/deep-eql": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
+ "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/events-alias": {
+ "name": "@types/events",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
+ "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/jsdom": {
+ "version": "27.0.0",
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-27.0.0.tgz",
+ "integrity": "sha512-NZyFl/PViwKzdEkQg96gtnB8wm+1ljhdDay9ahn4hgb+SfVtPCbm3TlmDUFXTA+MGN3CijicnMhG18SI5H3rFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "@types/tough-cookie": "*",
+ "parse5": "^7.0.0"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.19.11",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz",
+ "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@types/sinonjs__fake-timers": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
+ "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/sizzle": {
+ "version": "2.3.10",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz",
+ "integrity": "sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/tmp": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz",
+ "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/tough-cookie": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
+ "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.47.0.tgz",
+ "integrity": "sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.47.0",
+ "@typescript-eslint/type-utils": "8.47.0",
+ "@typescript-eslint/utils": "8.47.0",
+ "@typescript-eslint/visitor-keys": "8.47.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^7.0.0",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.47.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.47.0.tgz",
+ "integrity": "sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.47.0",
+ "@typescript-eslint/types": "8.47.0",
+ "@typescript-eslint/typescript-estree": "8.47.0",
+ "@typescript-eslint/visitor-keys": "8.47.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz",
+ "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/tsconfig-utils": "^8.47.0",
+ "@typescript-eslint/types": "^8.47.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz",
+ "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.47.0",
+ "@typescript-eslint/visitor-keys": "8.47.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz",
+ "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.47.0.tgz",
+ "integrity": "sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.47.0",
+ "@typescript-eslint/typescript-estree": "8.47.0",
+ "@typescript-eslint/utils": "8.47.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz",
+ "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz",
+ "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/project-service": "8.47.0",
+ "@typescript-eslint/tsconfig-utils": "8.47.0",
+ "@typescript-eslint/types": "8.47.0",
+ "@typescript-eslint/visitor-keys": "8.47.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz",
+ "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.7.0",
+ "@typescript-eslint/scope-manager": "8.47.0",
+ "@typescript-eslint/types": "8.47.0",
+ "@typescript-eslint/typescript-estree": "8.47.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz",
+ "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.47.0",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@vee-validate/zod": {
+ "version": "4.15.1",
+ "resolved": "https://registry.npmjs.org/@vee-validate/zod/-/zod-4.15.1.tgz",
+ "integrity": "sha512-329Z4TDBE5Vx0FdbA8S4eR9iGCFFUNGbxjpQ20ff5b5wGueScjocUIx9JHPa79LTG06RnlUR4XogQsjN4tecKA==",
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^4.8.3",
+ "vee-validate": "4.15.1"
+ },
+ "peerDependencies": {
+ "zod": "^3.24.0"
+ }
+ },
+ "node_modules/@vee-validate/zod/node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@vitejs/plugin-vue": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.2.tgz",
+ "integrity": "sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rolldown/pluginutils": "1.0.0-beta.50"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "peerDependencies": {
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@vitest/eslint-plugin": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.4.3.tgz",
+ "integrity": "sha512-ba+YDKyZdViNAOg8P86a9tIEawPA/O+nLbwhg8g7nkqsLOAVum6GoZhkNxgwX621oqWAbB8N2xb+G5kkpXehcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "^8.46.1",
+ "@typescript-eslint/utils": "^8.46.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "eslint": ">=8.57.0",
+ "typescript": ">=5.0.0",
+ "vitest": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ },
+ "vitest": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitest/expect": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
+ "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
+ "chai": "^5.2.0",
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/mocker": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz",
+ "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "3.2.4",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.17"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "msw": "^2.4.9",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "msw": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitest/pretty-format": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
+ "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz",
+ "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/utils": "3.2.4",
+ "pathe": "^2.0.3",
+ "strip-literal": "^3.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/snapshot": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz",
+ "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "3.2.4",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/spy": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
+ "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyspy": "^4.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
+ "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "3.2.4",
+ "loupe": "^3.1.4",
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@volar/language-core": {
+ "version": "2.4.15",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz",
+ "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/source-map": "2.4.15"
+ }
+ },
+ "node_modules/@volar/source-map": {
+ "version": "2.4.15",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz",
+ "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@volar/typescript": {
+ "version": "2.4.15",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz",
+ "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "2.4.15",
+ "path-browserify": "^1.0.1",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "node_modules/@vue/babel-helper-vue-transform-on": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz",
+ "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vue/babel-plugin-jsx": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz",
+ "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/template": "^7.27.2",
+ "@babel/traverse": "^7.28.0",
+ "@babel/types": "^7.28.2",
+ "@vue/babel-helper-vue-transform-on": "1.5.0",
+ "@vue/babel-plugin-resolve-type": "1.5.0",
+ "@vue/shared": "^3.5.18"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vue/babel-plugin-resolve-type": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz",
+ "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/parser": "^7.28.0",
+ "@vue/compiler-sfc": "^3.5.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.5.24",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.24.tgz",
+ "integrity": "sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "@vue/shared": "3.5.24",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-core/node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/@vue/compiler-core/node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.5.24",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.24.tgz",
+ "integrity": "sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-core": "3.5.24",
+ "@vue/shared": "3.5.24"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.5.24",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.24.tgz",
+ "integrity": "sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "@vue/compiler-core": "3.5.24",
+ "@vue/compiler-dom": "3.5.24",
+ "@vue/compiler-ssr": "3.5.24",
+ "@vue/shared": "3.5.24",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.21",
+ "postcss": "^8.5.6",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-sfc/node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.5.24",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.24.tgz",
+ "integrity": "sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.24",
+ "@vue/shared": "3.5.24"
+ }
+ },
+ "node_modules/@vue/compiler-vue2": {
+ "version": "2.7.16",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz",
+ "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "de-indent": "^1.0.2",
+ "he": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "7.7.9",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz",
+ "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-kit": "^7.7.9"
+ }
+ },
+ "node_modules/@vue/devtools-core": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-8.0.5.tgz",
+ "integrity": "sha512-dpCw8nl0GDBuiL9SaY0mtDxoGIEmU38w+TQiYEPOLhW03VDC0lfNMYXS/qhl4I0YlysGp04NLY4UNn6xgD0VIQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-kit": "^8.0.5",
+ "@vue/devtools-shared": "^8.0.5",
+ "mitt": "^3.0.1",
+ "nanoid": "^5.1.5",
+ "pathe": "^2.0.3",
+ "vite-hot-client": "^2.1.0"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.0"
+ }
+ },
+ "node_modules/@vue/devtools-core/node_modules/@vue/devtools-kit": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.0.5.tgz",
+ "integrity": "sha512-q2VV6x1U3KJMTQPUlRMyWEKVbcHuxhqJdSr6Jtjz5uAThAIrfJ6WVZdGZm5cuO63ZnSUz0RCsVwiUUb0mDV0Yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-shared": "^8.0.5",
+ "birpc": "^2.6.1",
+ "hookable": "^5.5.3",
+ "mitt": "^3.0.1",
+ "perfect-debounce": "^2.0.0",
+ "speakingurl": "^14.0.1",
+ "superjson": "^2.2.2"
+ }
+ },
+ "node_modules/@vue/devtools-core/node_modules/@vue/devtools-shared": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.0.5.tgz",
+ "integrity": "sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "rfdc": "^1.4.1"
+ }
+ },
+ "node_modules/@vue/devtools-core/node_modules/nanoid": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz",
+ "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.js"
+ },
+ "engines": {
+ "node": "^18 || >=20"
+ }
+ },
+ "node_modules/@vue/devtools-core/node_modules/perfect-debounce": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz",
+ "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vue/devtools-kit": {
+ "version": "7.7.9",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz",
+ "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-shared": "^7.7.9",
+ "birpc": "^2.3.0",
+ "hookable": "^5.5.3",
+ "mitt": "^3.0.1",
+ "perfect-debounce": "^1.0.0",
+ "speakingurl": "^14.0.1",
+ "superjson": "^2.2.2"
+ }
+ },
+ "node_modules/@vue/devtools-shared": {
+ "version": "7.7.9",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz",
+ "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==",
+ "license": "MIT",
+ "dependencies": {
+ "rfdc": "^1.4.1"
+ }
+ },
+ "node_modules/@vue/eslint-config-prettier": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-10.2.0.tgz",
+ "integrity": "sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-config-prettier": "^10.0.1",
+ "eslint-plugin-prettier": "^5.2.2"
+ },
+ "peerDependencies": {
+ "eslint": ">= 8.21.0",
+ "prettier": ">= 3.0.0"
+ }
+ },
+ "node_modules/@vue/eslint-config-typescript": {
+ "version": "14.6.0",
+ "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-14.6.0.tgz",
+ "integrity": "sha512-UpiRY/7go4Yps4mYCjkvlIbVWmn9YvPGQDxTAlcKLphyaD77LjIu3plH4Y9zNT0GB4f3K5tMmhhtRhPOgrQ/bQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/utils": "^8.35.1",
+ "fast-glob": "^3.3.3",
+ "typescript-eslint": "^8.35.1",
+ "vue-eslint-parser": "^10.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "peerDependencies": {
+ "eslint": "^9.10.0",
+ "eslint-plugin-vue": "^9.28.0 || ^10.0.0",
+ "typescript": ">=4.8.4"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vue/language-core": {
+ "version": "2.2.12",
+ "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz",
+ "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "2.4.15",
+ "@vue/compiler-dom": "^3.5.0",
+ "@vue/compiler-vue2": "^2.7.16",
+ "@vue/shared": "^3.5.0",
+ "alien-signals": "^1.0.3",
+ "minimatch": "^9.0.3",
+ "muggle-string": "^0.4.1",
+ "path-browserify": "^1.0.1"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.5.24",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.24.tgz",
+ "integrity": "sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/shared": "3.5.24"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.5.24",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.24.tgz",
+ "integrity": "sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.24",
+ "@vue/shared": "3.5.24"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.5.24",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.24.tgz",
+ "integrity": "sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.24",
+ "@vue/runtime-core": "3.5.24",
+ "@vue/shared": "3.5.24",
+ "csstype": "^3.1.3"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.5.24",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.24.tgz",
+ "integrity": "sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.5.24",
+ "@vue/shared": "3.5.24"
+ },
+ "peerDependencies": {
+ "vue": "3.5.24"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.5.24",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.24.tgz",
+ "integrity": "sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==",
+ "license": "MIT"
+ },
+ "node_modules/@vue/test-utils": {
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz",
+ "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "js-beautify": "^1.14.9",
+ "vue-component-type-helpers": "^2.0.0"
+ }
+ },
+ "node_modules/@vue/test-utils/node_modules/vue-component-type-helpers": {
+ "version": "2.2.12",
+ "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.2.12.tgz",
+ "integrity": "sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vue/tsconfig": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.8.1.tgz",
+ "integrity": "sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "typescript": "5.x",
+ "vue": "^3.4.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ },
+ "vue": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/abbrev": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/alien-signals": {
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz",
+ "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/ansis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz",
+ "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/assert-never": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz",
+ "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/ast-types": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
+ "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/asynckit": {
+ "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/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/awaitqueue": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/awaitqueue/-/awaitqueue-3.3.0.tgz",
+ "integrity": "sha512-zLxDhzQbzHmOyvxi7g3OlfR7jLrcmElStPxfLPpJkrFSDm71RSrY/MvsDA8Btlx8X1nOHUzGhQvc6bdUjL2f2w==",
+ "license": "ISC",
+ "dependencies": {
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mediasoup"
+ }
+ },
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz",
+ "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/axios": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
+ "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.4",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/axios/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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/babel-walk": {
+ "version": "3.0.0-canary-5",
+ "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
+ "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.9.6"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.8.30",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz",
+ "integrity": "sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/bidi-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz",
+ "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "require-from-string": "^2.0.2"
+ }
+ },
+ "node_modules/birpc": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.8.0.tgz",
+ "integrity": "sha512-Bz2a4qD/5GRhiHSwj30c/8kC8QGj12nNDwz3D4ErQ4Xhy35dsSDvF+RA/tWpjyU0pdGtSDiEk6B5fBGE1qNVhw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/blob-util": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
+ "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz",
+ "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.8.25",
+ "caniuse-lite": "^1.0.30001754",
+ "electron-to-chromium": "^1.5.249",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.1.4"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-builder": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz",
+ "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==",
+ "dev": true,
+ "license": "MIT/X11"
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/bundle-name": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
+ "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "run-applescript": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cacheable": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.2.0.tgz",
+ "integrity": "sha512-LEJxRqfeomiiRd2t0uON6hxAtgOoWDfY3fugebbz+J3vDLO+SkdfFChQcOHTZhj9SYa9iwE9MGYNX72dKiOE4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cacheable/memory": "^2.0.5",
+ "@cacheable/utils": "^2.3.0",
+ "hookified": "^1.13.0",
+ "keyv": "^5.5.4",
+ "qified": "^0.5.2"
+ }
+ },
+ "node_modules/cacheable/node_modules/keyv": {
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.4.tgz",
+ "integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@keyv/serialize": "^1.1.1"
+ }
+ },
+ "node_modules/cachedir": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz",
+ "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001756",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz",
+ "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/chai": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz",
+ "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assertion-error": "^2.0.1",
+ "check-error": "^2.1.1",
+ "deep-eql": "^5.0.1",
+ "loupe": "^3.1.0",
+ "pathval": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/character-parser": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
+ "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-regex": "^1.0.3"
+ }
+ },
+ "node_modules/check-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
+ "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ }
+ },
+ "node_modules/check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz",
+ "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-table3": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz",
+ "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": "10.* || >= 12.*"
+ },
+ "optionalDependencies": {
+ "colors": "1.4.0"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/colord": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/colorjs.io": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz",
+ "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/combined-stream": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "node_modules/config-chain/node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/constantinople": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
+ "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.6.0",
+ "@babel/types": "^7.6.1"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/copy-anything": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz",
+ "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==",
+ "license": "MIT",
+ "dependencies": {
+ "is-what": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cosmiconfig": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "env-paths": "^2.2.1",
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cross-spawn": {
+ "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",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-functions-list": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
+ "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12 || >=16"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.12.2",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css.escape": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
+ "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cssstyle": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.3.tgz",
+ "integrity": "sha512-OytmFH+13/QXONJcC75QNdMtKpceNk3u8ThBjyyYjkEcy/ekBwR1mMAuNvi3gdBPW3N5TlCzQ0WZw8H0lN/bDw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@asamuzakjp/css-color": "^4.0.3",
+ "@csstools/css-syntax-patches-for-csstree": "^1.0.14",
+ "css-tree": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "license": "MIT"
+ },
+ "node_modules/cypress": {
+ "version": "15.9.0",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.9.0.tgz",
+ "integrity": "sha512-Ks6Bdilz3TtkLZtTQyqYaqtL/WT3X3APKaSLhTV96TmTyudzSjc6EJsJCHmBb7DxO+3R12q3Jkbjgm/iPgmwfg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cypress/request": "^3.0.10",
+ "@cypress/xvfb": "^1.2.4",
+ "@types/sinonjs__fake-timers": "8.1.1",
+ "@types/sizzle": "^2.3.2",
+ "@types/tmp": "^0.2.3",
+ "arch": "^2.2.0",
+ "blob-util": "^2.0.2",
+ "bluebird": "^3.7.2",
+ "buffer": "^5.7.1",
+ "cachedir": "^2.3.0",
+ "chalk": "^4.1.0",
+ "ci-info": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-table3": "0.6.1",
+ "commander": "^6.2.1",
+ "common-tags": "^1.8.0",
+ "dayjs": "^1.10.4",
+ "debug": "^4.3.4",
+ "enquirer": "^2.3.6",
+ "eventemitter2": "6.4.7",
+ "execa": "4.1.0",
+ "executable": "^4.1.1",
+ "extract-zip": "2.0.1",
+ "figures": "^3.2.0",
+ "fs-extra": "^9.1.0",
+ "hasha": "5.2.2",
+ "is-installed-globally": "~0.4.0",
+ "listr2": "^3.8.3",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.0.0",
+ "minimist": "^1.2.8",
+ "ospath": "^1.2.2",
+ "pretty-bytes": "^5.6.0",
+ "process": "^0.11.10",
+ "proxy-from-env": "1.0.0",
+ "request-progress": "^3.0.0",
+ "supports-color": "^8.1.1",
+ "systeminformation": "^5.27.14",
+ "tmp": "~0.2.4",
+ "tree-kill": "1.2.2",
+ "untildify": "^4.0.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "cypress": "bin/cypress"
+ },
+ "engines": {
+ "node": "^20.1.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/data-urls": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz",
+ "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^15.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.19",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
+ "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/de-indent": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
+ "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decimal.js": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deep-eql": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
+ "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/default-browser": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz",
+ "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bundle-name": "^4.1.0",
+ "default-browser-id": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/default-browser-id": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
+ "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "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/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "bin": {
+ "detect-libc": "bin/detect-libc.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctypes": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
+ "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/dom-accessibility-api": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
+ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/dom-serializer/node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause",
+ "peer": true
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/editorconfig": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz",
+ "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@one-ini/wasm": "0.1.1",
+ "commander": "^10.0.0",
+ "minimatch": "9.0.1",
+ "semver": "^7.5.3"
+ },
+ "bin": {
+ "editorconfig": "bin/editorconfig"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/editorconfig/node_modules/commander": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/editorconfig/node_modules/minimatch": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
+ "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
+ "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/electron-to-chromium": {
+ "version": "1.5.258",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.258.tgz",
+ "integrity": "sha512-rHUggNV5jKQ0sSdWwlaRDkFc3/rRJIVnOSe9yR4zrR07m3ZxhP4N27Hlg8VeJGGYgFTxK5NqDmWI4DSH72vIJg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/engine.io-client": {
+ "version": "6.6.4",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.4.tgz",
+ "integrity": "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==",
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1",
+ "engine.io-parser": "~5.2.1",
+ "ws": "~8.18.3",
+ "xmlhttprequest-ssl": "~2.1.1"
+ }
+ },
+ "node_modules/engine.io-parser": {
+ "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"
+ }
+ },
+ "node_modules/enquirer": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/error-stack-parser-es": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz",
+ "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.12",
+ "@esbuild/android-arm": "0.25.12",
+ "@esbuild/android-arm64": "0.25.12",
+ "@esbuild/android-x64": "0.25.12",
+ "@esbuild/darwin-arm64": "0.25.12",
+ "@esbuild/darwin-x64": "0.25.12",
+ "@esbuild/freebsd-arm64": "0.25.12",
+ "@esbuild/freebsd-x64": "0.25.12",
+ "@esbuild/linux-arm": "0.25.12",
+ "@esbuild/linux-arm64": "0.25.12",
+ "@esbuild/linux-ia32": "0.25.12",
+ "@esbuild/linux-loong64": "0.25.12",
+ "@esbuild/linux-mips64el": "0.25.12",
+ "@esbuild/linux-ppc64": "0.25.12",
+ "@esbuild/linux-riscv64": "0.25.12",
+ "@esbuild/linux-s390x": "0.25.12",
+ "@esbuild/linux-x64": "0.25.12",
+ "@esbuild/netbsd-arm64": "0.25.12",
+ "@esbuild/netbsd-x64": "0.25.12",
+ "@esbuild/openbsd-arm64": "0.25.12",
+ "@esbuild/openbsd-x64": "0.25.12",
+ "@esbuild/openharmony-arm64": "0.25.12",
+ "@esbuild/sunos-x64": "0.25.12",
+ "@esbuild/win32-arm64": "0.25.12",
+ "@esbuild/win32-ia32": "0.25.12",
+ "@esbuild/win32-x64": "0.25.12"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.39.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz",
+ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.8.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.21.1",
+ "@eslint/config-helpers": "^0.4.2",
+ "@eslint/core": "^0.17.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.39.1",
+ "@eslint/plugin-kit": "^0.4.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "10.1.8",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
+ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-config-prettier"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-cypress": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-5.2.0.tgz",
+ "integrity": "sha512-vuCUBQloUSILxtJrUWV39vNIQPlbg0L7cTunEAzvaUzv9LFZZym+KFLH18n9j2cZuFPdlxOqTubCvg5se0DyGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "globals": "^16.2.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=9"
+ }
+ },
+ "node_modules/eslint-plugin-cypress/node_modules/globals": {
+ "version": "16.5.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz",
+ "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz",
+ "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0",
+ "synckit": "^0.11.7"
+ },
+ "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": ">= 7.0.0 <10.0.0 || >=10.1.0",
+ "prettier": ">=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/eslint": {
+ "optional": true
+ },
+ "eslint-config-prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-storybook": {
+ "version": "10.0.8",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-10.0.8.tgz",
+ "integrity": "sha512-ZKEMFhF/z/HRVvIgnEIYG2uAqmuLbkebUdHH3DpGHE64GPgk+KozcpqnD6zNk5vJ407bFmcWsGinBc2zi74f0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/utils": "^8.8.1"
+ },
+ "peerDependencies": {
+ "eslint": ">=8",
+ "storybook": "^10.0.8"
+ }
+ },
+ "node_modules/eslint-plugin-vue": {
+ "version": "10.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.5.1.tgz",
+ "integrity": "sha512-SbR9ZBUFKgvWAbq3RrdCtWaW0IKm6wwUiApxf3BVTNfqUIo4IQQmreMg2iHFJJ6C/0wss3LXURBJ1OwS/MhFcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "natural-compare": "^1.4.0",
+ "nth-check": "^2.1.1",
+ "postcss-selector-parser": "^6.0.15",
+ "semver": "^7.6.3",
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "peerDependencies": {
+ "@stylistic/eslint-plugin": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0",
+ "@typescript-eslint/parser": "^7.0.0 || ^8.0.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "vue-eslint-parser": "^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@stylistic/eslint-plugin": {
+ "optional": true
+ },
+ "@typescript-eslint/parser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "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/eslint/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/esm-resolve": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/esm-resolve/-/esm-resolve-1.0.11.tgz",
+ "integrity": "sha512-LxF0wfUQm3ldUDHkkV2MIbvvY0TgzIpJ420jHSV1Dm+IlplBEWiJTKWM61GtxUfvjV6iD4OtTYFGAGM2uuIUWg==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/espree": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/event-stream": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
+ "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "duplexer": "~0.1.1",
+ "from": "~0",
+ "map-stream": "~0.1.0",
+ "pause-stream": "0.0.11",
+ "split": "0.3",
+ "stream-combiner": "~0.0.4",
+ "through": "~2.3.1"
+ }
+ },
+ "node_modules/eventemitter2": {
+ "version": "6.4.7",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz",
+ "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/events-alias": {
+ "name": "events",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/expect-type": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz",
+ "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/fake-mediastreamtrack": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/fake-mediastreamtrack/-/fake-mediastreamtrack-2.2.1.tgz",
+ "integrity": "sha512-SITLc7UTDirSdgLGORrlmqjWLJtbtfIz/xO7DwVbJH3f0ds+NQok4ccl/WEzz49NSgiUlXf2wDW0+y5C+TO6EA==",
+ "license": "ISC",
+ "dependencies": {
+ "@lukeed/uuid": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "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.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/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==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/fastest-levenshtein": {
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.9.1"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/figures/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "dev": true,
+ "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.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "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/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/from": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "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",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "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/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/global-dirs": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
+ "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ini": "2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "global-prefix": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix/node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/global-prefix/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globjoin": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
+ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/h264-profile-level-id": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/h264-profile-level-id/-/h264-profile-level-id-2.3.2.tgz",
+ "integrity": "sha512-hnq1UDlw7WGJV6GCr/g7wnkHYUjdAY2bis9rgn2JqSdQS2WfVvnt1ZE9g8nTguracodf5LLKZOwURsDN49YtBQ==",
+ "license": "ISC",
+ "dependencies": {
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mediasoup"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hash-sum": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
+ "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/hasha": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
+ "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-stream": "^2.0.0",
+ "type-fest": "^0.8.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/hasha/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hashery": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.2.0.tgz",
+ "integrity": "sha512-43XJKpwle72Ik5Zpam7MuzRWyNdwwdf6XHlh8wCj2PggvWf+v/Dm5B0dxGZOmddidgeO6Ofu9As/o231Ti/9PA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hookified": "^1.13.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/hookable": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
+ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+ "license": "MIT"
+ },
+ "node_modules/hookified": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.13.0.tgz",
+ "integrity": "sha512-6sPYUY8olshgM/1LDNW4QZQN0IqgKhtl/1C8koNZBJrKLBk3AZl6chQtNwpNztvfiApHMEwMHek5rv993PRbWw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-encoding": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/html-tags": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
+ "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/htmlparser2": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
+ "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
+ "dev": true,
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "entities": "^4.4.0"
+ }
+ },
+ "node_modules/htmlparser2/node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/http-signature": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz",
+ "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^2.0.2",
+ "sshpk": "^1.18.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8.12.0"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz",
+ "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-expression": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
+ "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "node_modules/is-expression/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-docker": "^3.0.0"
+ },
+ "bin": {
+ "is-inside-container": "cli.js"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-installed-globally": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
+ "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "global-dirs": "^3.0.0",
+ "is-path-inside": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-promise": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-what": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz",
+ "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
+ "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-inside-container": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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/jiti": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
+ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "lib/jiti-cli.mjs"
+ }
+ },
+ "node_modules/joi": {
+ "version": "18.0.2",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.2.tgz",
+ "integrity": "sha512-RuCOQMIt78LWnktPoeBL0GErkNaJPTBGcYuyaBvUOQSpcpcLfWrHPPihYdOGbV5pam9VTWbeoF7TsGiHugcjGA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@hapi/address": "^5.1.1",
+ "@hapi/formula": "^3.0.2",
+ "@hapi/hoek": "^11.0.7",
+ "@hapi/pinpoint": "^2.0.1",
+ "@hapi/tlds": "^1.1.1",
+ "@hapi/topo": "^6.0.2",
+ "@standard-schema/spec": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/js-beautify": {
+ "version": "1.15.4",
+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz",
+ "integrity": "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "config-chain": "^1.1.13",
+ "editorconfig": "^1.0.4",
+ "glob": "^10.4.2",
+ "js-cookie": "^3.0.5",
+ "nopt": "^7.2.1"
+ },
+ "bin": {
+ "css-beautify": "js/bin/css-beautify.js",
+ "html-beautify": "js/bin/html-beautify.js",
+ "js-beautify": "js/bin/js-beautify.js"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/js-cookie": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
+ "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/js-stringify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
+ "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jsdom": {
+ "version": "27.2.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.2.0.tgz",
+ "integrity": "sha512-454TI39PeRDW1LgpyLPyURtB4Zx1tklSr6+OFOipsxGUH1WMTvk6C65JQdrj455+DP2uJ1+veBEHTGFKWVLFoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@acemir/cssom": "^0.9.23",
+ "@asamuzakjp/dom-selector": "^6.7.4",
+ "cssstyle": "^5.3.3",
+ "data-urls": "^6.0.0",
+ "decimal.js": "^10.6.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.6",
+ "is-potential-custom-element-name": "^1.0.1",
+ "parse5": "^8.0.0",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^6.0.0",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^8.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^15.1.0",
+ "ws": "^8.18.3",
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "canvas": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jsdom/node_modules/parse5": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz",
+ "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/jsdom/node_modules/tldts": {
+ "version": "7.0.18",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.18.tgz",
+ "integrity": "sha512-lCcgTAgMxQ1JKOWrVGo6E69Ukbnx4Gc1wiYLRf6J5NN4HRYJtCby1rPF8rkQ4a6qqoFBK5dvjJ1zJ0F7VfDSvw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tldts-core": "^7.0.18"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
+ }
+ },
+ "node_modules/jsdom/node_modules/tldts-core": {
+ "version": "7.0.18",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.18.tgz",
+ "integrity": "sha512-jqJC13oP4FFAahv4JT/0WTDrCF9Okv7lpKtOZUGPLiAnNbACcSg8Y8T+Z9xthOmRBqi/Sob4yi0TE0miRCvF7Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jsdom/node_modules/tough-cookie": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz",
+ "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tldts": "^7.0.5"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/jsdom/node_modules/xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz",
+ "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "dev": true,
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
+ "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsprim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
+ "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
+ "node_modules/jstransformer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
+ "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-promise": "^2.0.0",
+ "promise": "^7.0.1"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/known-css-properties": {
+ "version": "0.37.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz",
+ "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/kolorist": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz",
+ "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "> 0.8"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/listr2": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+ "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.16",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.5.1",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "enquirer": ">= 2.3.0 < 3"
+ },
+ "peerDependenciesMeta": {
+ "enquirer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/listr2/node_modules/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/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.truncate": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/loupe": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
+ "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lru-cache": {
+ "version": "11.2.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz",
+ "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/map-stream": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
+ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==",
+ "dev": true
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/mathml-tag-names": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
+ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/mediasoup-client": {
+ "version": "3.18.7",
+ "resolved": "https://registry.npmjs.org/mediasoup-client/-/mediasoup-client-3.18.7.tgz",
+ "integrity": "sha512-110f+zYEvSllYoF6didbIznIvSrTwMY9CqDhdWpq1M0goX1HWLoBdguiYB/MqcA858R2dOKDarP1R4vv5RAg1w==",
+ "license": "ISC",
+ "dependencies": {
+ "@types/debug": "^4.1.12",
+ "@types/events-alias": "npm:@types/events@^3.0.3",
+ "awaitqueue": "^3.3.0",
+ "debug": "^4.4.3",
+ "events-alias": "npm:events@^3.3.0",
+ "fake-mediastreamtrack": "^2.2.1",
+ "h264-profile-level-id": "^2.3.2",
+ "sdp-transform": "^3.0.0",
+ "supports-color": "^10.2.2"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mediasoup"
+ }
+ },
+ "node_modules/mediasoup-client/node_modules/supports-color": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz",
+ "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/memorystream": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/meow": {
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "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"
+ }
+ },
+ "node_modules/mime-types": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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/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/mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "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/muggle-string": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
+ "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nopt": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+ "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "^2.0.0"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-normalize-package-bin": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz",
+ "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
+ "node_modules/npm-run-all2": {
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-8.0.4.tgz",
+ "integrity": "sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "cross-spawn": "^7.0.6",
+ "memorystream": "^0.3.1",
+ "picomatch": "^4.0.2",
+ "pidtree": "^0.6.0",
+ "read-package-json-fast": "^4.0.0",
+ "shell-quote": "^1.7.3",
+ "which": "^5.0.0"
+ },
+ "bin": {
+ "npm-run-all": "bin/npm-run-all/index.js",
+ "npm-run-all2": "bin/npm-run-all/index.js",
+ "run-p": "bin/run-p/index.js",
+ "run-s": "bin/run-s/index.js"
+ },
+ "engines": {
+ "node": "^20.5.0 || >=22.0.0",
+ "npm": ">= 10"
+ }
+ },
+ "node_modules/npm-run-all2/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/npm-run-all2/node_modules/isexe": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/npm-run-all2/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/npm-run-all2/node_modules/which": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
+ "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^3.1.1"
+ },
+ "bin": {
+ "node-which": "bin/which.js"
+ },
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ohash": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
+ "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/open": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz",
+ "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "default-browser": "^5.2.1",
+ "define-lazy-prop": "^3.0.0",
+ "is-inside-container": "^1.0.0",
+ "wsl-utils": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/ospath": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
+ "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-json/node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/path-browserify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pathval": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz",
+ "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.16"
+ }
+ },
+ "node_modules/pause-stream": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==",
+ "dev": true,
+ "license": [
+ "MIT",
+ "Apache2"
+ ],
+ "dependencies": {
+ "through": "~2.3"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/perfect-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+ "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+ "license": "MIT"
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pidtree": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "pidtree": "bin/pidtree.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinia": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz",
+ "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^7.7.7"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.5.0",
+ "vue": "^3.5.11"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-html": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.0.tgz",
+ "integrity": "sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "htmlparser2": "^8.0.0",
+ "js-tokens": "^9.0.0",
+ "postcss": "^8.5.0",
+ "postcss-safe-parser": "^6.0.0"
+ },
+ "engines": {
+ "node": "^12 || >=14"
+ }
+ },
+ "node_modules/postcss-html/node_modules/js-tokens": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/postcss-html/node_modules/postcss-safe-parser": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
+ "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3"
+ }
+ },
+ "node_modules/postcss-media-query-parser": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+ "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/postcss-resolve-nested-selector": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz",
+ "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/postcss-safe-parser": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
+ "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.31"
+ }
+ },
+ "node_modules/postcss-scss": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
+ "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss-scss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.29"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-sorting": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-9.1.0.tgz",
+ "integrity": "sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "postcss": "^8.4.20"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
+ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "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-bytes": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
+ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^17.0.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asap": "~2.0.3"
+ }
+ },
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ps-tree": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
+ "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "event-stream": "=3.3.4"
+ },
+ "bin": {
+ "ps-tree": "bin/ps-tree.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/pug": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz",
+ "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pug-code-gen": "^3.0.3",
+ "pug-filters": "^4.0.0",
+ "pug-lexer": "^5.0.1",
+ "pug-linker": "^4.0.0",
+ "pug-load": "^3.0.0",
+ "pug-parser": "^6.0.0",
+ "pug-runtime": "^3.0.1",
+ "pug-strip-comments": "^2.0.0"
+ }
+ },
+ "node_modules/pug-attrs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
+ "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "constantinople": "^4.0.1",
+ "js-stringify": "^1.0.2",
+ "pug-runtime": "^3.0.0"
+ }
+ },
+ "node_modules/pug-code-gen": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz",
+ "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "constantinople": "^4.0.1",
+ "doctypes": "^1.1.0",
+ "js-stringify": "^1.0.2",
+ "pug-attrs": "^3.0.0",
+ "pug-error": "^2.1.0",
+ "pug-runtime": "^3.0.1",
+ "void-elements": "^3.1.0",
+ "with": "^7.0.0"
+ }
+ },
+ "node_modules/pug-error": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz",
+ "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pug-filters": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
+ "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "constantinople": "^4.0.1",
+ "jstransformer": "1.0.0",
+ "pug-error": "^2.0.0",
+ "pug-walk": "^2.0.0",
+ "resolve": "^1.15.1"
+ }
+ },
+ "node_modules/pug-lexer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
+ "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "character-parser": "^2.2.0",
+ "is-expression": "^4.0.0",
+ "pug-error": "^2.0.0"
+ }
+ },
+ "node_modules/pug-linker": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
+ "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pug-error": "^2.0.0",
+ "pug-walk": "^2.0.0"
+ }
+ },
+ "node_modules/pug-load": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
+ "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4.1.1",
+ "pug-walk": "^2.0.0"
+ }
+ },
+ "node_modules/pug-parser": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
+ "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pug-error": "^2.0.0",
+ "token-stream": "1.0.0"
+ }
+ },
+ "node_modules/pug-runtime": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
+ "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pug-strip-comments": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
+ "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pug-error": "^2.0.0"
+ }
+ },
+ "node_modules/pug-walk": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
+ "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pump": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
+ "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qified": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/qified/-/qified-0.5.2.tgz",
+ "integrity": "sha512-7gJ6mxcQb9vUBOtbKm5mDevbe2uRcOEVp1g4gb/Q+oLntB3HY8eBhOYRxFI2mlDFlY1e4DOSCptzxarXRvzxCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hookified": "^1.13.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.14.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
+ "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/react": {
+ "version": "19.2.4",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
+ "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "19.2.4",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
+ "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "scheduler": "^0.27.0"
+ },
+ "peerDependencies": {
+ "react": "^19.2.4"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/read-package-json-fast": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz",
+ "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "json-parse-even-better-errors": "^4.0.0",
+ "npm-normalize-package-bin": "^4.0.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/recast": {
+ "version": "0.23.11",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz",
+ "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/request-progress": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
+ "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "throttleit": "^1.0.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
+ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "license": "MIT"
+ },
+ "node_modules/rollup": {
+ "version": "4.53.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz",
+ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.53.3",
+ "@rollup/rollup-android-arm64": "4.53.3",
+ "@rollup/rollup-darwin-arm64": "4.53.3",
+ "@rollup/rollup-darwin-x64": "4.53.3",
+ "@rollup/rollup-freebsd-arm64": "4.53.3",
+ "@rollup/rollup-freebsd-x64": "4.53.3",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.53.3",
+ "@rollup/rollup-linux-arm-musleabihf": "4.53.3",
+ "@rollup/rollup-linux-arm64-gnu": "4.53.3",
+ "@rollup/rollup-linux-arm64-musl": "4.53.3",
+ "@rollup/rollup-linux-loong64-gnu": "4.53.3",
+ "@rollup/rollup-linux-ppc64-gnu": "4.53.3",
+ "@rollup/rollup-linux-riscv64-gnu": "4.53.3",
+ "@rollup/rollup-linux-riscv64-musl": "4.53.3",
+ "@rollup/rollup-linux-s390x-gnu": "4.53.3",
+ "@rollup/rollup-linux-x64-gnu": "4.53.3",
+ "@rollup/rollup-linux-x64-musl": "4.53.3",
+ "@rollup/rollup-openharmony-arm64": "4.53.3",
+ "@rollup/rollup-win32-arm64-msvc": "4.53.3",
+ "@rollup/rollup-win32-ia32-msvc": "4.53.3",
+ "@rollup/rollup-win32-x64-gnu": "4.53.3",
+ "@rollup/rollup-win32-x64-msvc": "4.53.3",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-applescript": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
+ "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "7.8.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
+ "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/sass": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.3.tgz",
+ "integrity": "sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "chokidar": "^4.0.0",
+ "immutable": "^5.0.2",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher": "^2.4.1"
+ }
+ },
+ "node_modules/sass-embedded": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.93.3.tgz",
+ "integrity": "sha512-+VUy01yfDqNmIVMd/LLKl2TTtY0ovZN0rTonh+FhKr65mFwIYgU9WzgIZKS7U9/SPCQvWTsTGx9jyt+qRm/XFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@bufbuild/protobuf": "^2.5.0",
+ "buffer-builder": "^0.2.0",
+ "colorjs.io": "^0.5.0",
+ "immutable": "^5.0.2",
+ "rxjs": "^7.4.0",
+ "supports-color": "^8.1.1",
+ "sync-child-process": "^1.0.2",
+ "varint": "^6.0.0"
+ },
+ "bin": {
+ "sass": "dist/bin/sass.js"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "optionalDependencies": {
+ "sass-embedded-all-unknown": "1.93.3",
+ "sass-embedded-android-arm": "1.93.3",
+ "sass-embedded-android-arm64": "1.93.3",
+ "sass-embedded-android-riscv64": "1.93.3",
+ "sass-embedded-android-x64": "1.93.3",
+ "sass-embedded-darwin-arm64": "1.93.3",
+ "sass-embedded-darwin-x64": "1.93.3",
+ "sass-embedded-linux-arm": "1.93.3",
+ "sass-embedded-linux-arm64": "1.93.3",
+ "sass-embedded-linux-musl-arm": "1.93.3",
+ "sass-embedded-linux-musl-arm64": "1.93.3",
+ "sass-embedded-linux-musl-riscv64": "1.93.3",
+ "sass-embedded-linux-musl-x64": "1.93.3",
+ "sass-embedded-linux-riscv64": "1.93.3",
+ "sass-embedded-linux-x64": "1.93.3",
+ "sass-embedded-unknown-all": "1.93.3",
+ "sass-embedded-win32-arm64": "1.93.3",
+ "sass-embedded-win32-x64": "1.93.3"
+ }
+ },
+ "node_modules/sass-embedded-all-unknown": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.93.3.tgz",
+ "integrity": "sha512-3okGgnE41eg+CPLtAPletu6nQ4N0ij7AeW+Sl5Km4j29XcmqZQeFwYjHe1AlKTEgLi/UAONk1O8i8/lupeKMbw==",
+ "cpu": [
+ "!arm",
+ "!arm64",
+ "!riscv64",
+ "!x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "sass": "1.93.3"
+ }
+ },
+ "node_modules/sass-embedded-android-arm": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.93.3.tgz",
+ "integrity": "sha512-8xOw9bywfOD6Wv24BgCmgjkk6tMrsOTTHcb28KDxeJtFtoxiUyMbxo0vChpPAfp2Hyg2tFFKS60s0s4JYk+Raw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-android-arm64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.93.3.tgz",
+ "integrity": "sha512-uqUl3Kt1IqdGVAcAdbmC+NwuUJy8tM+2ZnB7/zrt6WxWVShVCRdFnWR9LT8HJr7eJN7AU8kSXxaVX/gedanPsg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-android-riscv64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.93.3.tgz",
+ "integrity": "sha512-2jNJDmo+3qLocjWqYbXiBDnfgwrUeZgZFHJIwAefU7Fn66Ot7rsXl+XPwlokaCbTpj7eMFIqsRAZ/uDueXNCJg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-android-x64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.93.3.tgz",
+ "integrity": "sha512-y0RoAU6ZenQFcjM9PjQd3cRqRTjqwSbtWLL/p68y2oFyh0QGN0+LQ826fc0ZvU/AbqCsAizkqjzOn6cRZJxTTQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-darwin-arm64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.93.3.tgz",
+ "integrity": "sha512-7zb/hpdMOdKteK17BOyyypemglVURd1Hdz6QGsggy60aUFfptTLQftLRg8r/xh1RbQAUKWFbYTNaM47J9yPxYg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-darwin-x64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.93.3.tgz",
+ "integrity": "sha512-Ek1Vp8ZDQEe327Lz0b7h3hjvWH3u9XjJiQzveq74RPpJQ2q6d9LfWpjiRRohM4qK6o4XOHw1X10OMWPXJtdtWg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-arm": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.93.3.tgz",
+ "integrity": "sha512-yeiv2y+dp8B4wNpd3+JsHYD0mvpXSfov7IGyQ1tMIR40qv+ROkRqYiqQvAOXf76Qwh4Y9OaYZtLpnsPjfeq6mA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-arm64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.93.3.tgz",
+ "integrity": "sha512-RBrHWgfd8Dd8w4fbmdRVXRrhh8oBAPyeWDTKAWw8ZEmuXfVl4ytjDuyxaVilh6rR1xTRTNpbaA/YWApBlLrrNw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-musl-arm": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.93.3.tgz",
+ "integrity": "sha512-fU0fwAwbp7sBE3h5DVU5UPzvaLg7a4yONfFWkkcCp6ZrOiPuGRHXXYriWQ0TUnWy4wE+svsVuWhwWgvlb/tkKg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-musl-arm64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.93.3.tgz",
+ "integrity": "sha512-PS829l+eUng+9W4PFclXGb4uA2+965NHV3/Sa5U7qTywjeeUUYTZg70dJHSqvhrBEfCc2XJABeW3adLJbyQYkw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-musl-riscv64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.93.3.tgz",
+ "integrity": "sha512-cK1oBY+FWQquaIGEeQ5H74KTO8cWsSWwXb/WaildOO9U6wmUypTgUYKQ0o5o/29nZbWWlM1PHuwVYTSnT23Jjg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-musl-x64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.93.3.tgz",
+ "integrity": "sha512-A7wkrsHu2/I4Zpa0NMuPGkWDVV7QGGytxGyUq3opSXgAexHo/vBPlGoDXoRlSdex0cV+aTMRPjoGIfdmNlHwyg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-riscv64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.93.3.tgz",
+ "integrity": "sha512-vWkW1+HTF5qcaHa6hO80gx/QfB6GGjJUP0xLbnAoY4pwEnw5ulGv6RM8qYr8IDhWfVt/KH+lhJ2ZFxnJareisQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-x64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.93.3.tgz",
+ "integrity": "sha512-k6uFxs+e5jSuk1Y0niCwuq42F9ZC5UEP7P+RIOurIm8w/5QFa0+YqeW+BPWEW5M1FqVOsNZH3qGn4ahqvAEjPA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-unknown-all": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.93.3.tgz",
+ "integrity": "sha512-o5wj2rLpXH0C+GJKt/VpWp6AnMsCCbfFmnMAttcrsa+U3yrs/guhZ3x55KAqqUsE8F47e3frbsDL+1OuQM5DAA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "!android",
+ "!darwin",
+ "!linux",
+ "!win32"
+ ],
+ "dependencies": {
+ "sass": "1.93.3"
+ }
+ },
+ "node_modules/sass-embedded-win32-arm64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.93.3.tgz",
+ "integrity": "sha512-0dOfT9moy9YmBolodwYYXtLwNr4jL4HQC9rBfv6mVrD7ud8ue2kDbn+GVzj1hEJxvEexVSmDCf7MHUTLcGs9xQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-win32-x64": {
+ "version": "1.93.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.93.3.tgz",
+ "integrity": "sha512-wHFVfxiS9hU/sNk7KReD+lJWRp3R0SLQEX4zfOnRP2zlvI2X4IQR5aZr9GNcuMP6TmNpX0nQPZTegS8+h9RrEg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=v12.22.7"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/sdp-transform": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-3.0.0.tgz",
+ "integrity": "sha512-gfYVRGxjHkGF2NPeUWHw5u6T/KGFtS5/drPms73gaSuMaVHKCY3lpLnGDfswVQO0kddeePoti09AwhYP4zA8dQ==",
+ "license": "MIT",
+ "bin": {
+ "sdp-verify": "checker.js"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
+ "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/siginfo": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/sirv": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
+ "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@polka/url": "^1.0.0-next.24",
+ "mrmime": "^2.0.0",
+ "totalist": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/socket.io-client": {
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz",
+ "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==",
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1",
+ "engine.io-client": "~6.6.1",
+ "socket.io-parser": "~4.2.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/socket.io-parser": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.5.tgz",
+ "integrity": "sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/speakingurl": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
+ "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "through": "2"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/sshpk": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stackback": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/start-server-and-test": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.3.tgz",
+ "integrity": "sha512-k4EcbNjeg0odaDkAMlIeDVDByqX9PIgL4tivgP2tES6Zd8o+4pTq/HgbWCyA3VHIoZopB+wGnNPKYGGSByNriQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arg": "^5.0.2",
+ "bluebird": "3.7.2",
+ "check-more-types": "2.24.0",
+ "debug": "4.4.3",
+ "execa": "5.1.1",
+ "lazy-ass": "1.6.0",
+ "ps-tree": "1.2.0",
+ "wait-on": "9.0.3"
+ },
+ "bin": {
+ "server-test": "src/bin/start.js",
+ "start-server-and-test": "src/bin/start.js",
+ "start-test": "src/bin/start.js"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/start-server-and-test/node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/start-server-and-test/node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/start-server-and-test/node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/std-env": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz",
+ "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/storybook": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.1.tgz",
+ "integrity": "sha512-hgiiwT4ZWJ/yrRpoXnHpCzWOsUvLUwQqgM/ws6mCIDsKJ7Gc7irL6DjWpi8G7l1Uq5VXYsQjXQo5ydb8Pyajdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@storybook/global": "^5.0.0",
+ "@storybook/icons": "^2.0.1",
+ "@testing-library/jest-dom": "^6.6.3",
+ "@testing-library/user-event": "^14.6.1",
+ "@vitest/expect": "3.2.4",
+ "@vitest/spy": "3.2.4",
+ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0",
+ "open": "^10.2.0",
+ "recast": "^0.23.5",
+ "semver": "^7.7.3",
+ "use-sync-external-store": "^1.5.0",
+ "ws": "^8.18.0"
+ },
+ "bin": {
+ "storybook": "dist/bin/dispatcher.js"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "prettier": "^2 || ^3"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/stream-combiner": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
+ "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "duplexer": "~0.1.1"
+ }
+ },
+ "node_modules/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/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",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "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-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-literal": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz",
+ "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^9.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/strip-literal/node_modules/js-tokens": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stylelint": {
+ "version": "16.25.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.25.0.tgz",
+ "integrity": "sha512-Li0avYWV4nfv1zPbdnxLYBGq4z8DVZxbRgx4Kn6V+Uftz1rMoF1qiEI3oL4kgWqyYgCgs7gT5maHNZ82Gk03vQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4",
+ "@csstools/media-query-list-parser": "^4.0.3",
+ "@csstools/selector-specificity": "^5.0.0",
+ "@dual-bundle/import-meta-resolve": "^4.2.1",
+ "balanced-match": "^2.0.0",
+ "colord": "^2.9.3",
+ "cosmiconfig": "^9.0.0",
+ "css-functions-list": "^3.2.3",
+ "css-tree": "^3.1.0",
+ "debug": "^4.4.3",
+ "fast-glob": "^3.3.3",
+ "fastest-levenshtein": "^1.0.16",
+ "file-entry-cache": "^10.1.4",
+ "global-modules": "^2.0.0",
+ "globby": "^11.1.0",
+ "globjoin": "^0.1.4",
+ "html-tags": "^3.3.1",
+ "ignore": "^7.0.5",
+ "imurmurhash": "^0.1.4",
+ "is-plain-object": "^5.0.0",
+ "known-css-properties": "^0.37.0",
+ "mathml-tag-names": "^2.1.3",
+ "meow": "^13.2.0",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.5.6",
+ "postcss-resolve-nested-selector": "^0.1.6",
+ "postcss-safe-parser": "^7.0.1",
+ "postcss-selector-parser": "^7.1.0",
+ "postcss-value-parser": "^4.2.0",
+ "resolve-from": "^5.0.0",
+ "string-width": "^4.2.3",
+ "supports-hyperlinks": "^3.2.0",
+ "svg-tags": "^1.0.0",
+ "table": "^6.9.0",
+ "write-file-atomic": "^5.0.1"
+ },
+ "bin": {
+ "stylelint": "bin/stylelint.mjs"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ }
+ },
+ "node_modules/stylelint-config-html": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz",
+ "integrity": "sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12 || >=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ota-meshi"
+ },
+ "peerDependencies": {
+ "postcss-html": "^1.0.0",
+ "stylelint": ">=14.0.0"
+ }
+ },
+ "node_modules/stylelint-config-recommended": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-17.0.0.tgz",
+ "integrity": "sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^16.23.0"
+ }
+ },
+ "node_modules/stylelint-config-recommended-scss": {
+ "version": "16.0.2",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-16.0.2.tgz",
+ "integrity": "sha512-aUTHhPPWCvFyWaxtckJlCPaXTDFsp4pKO8evXNCsW9OwsaUWyMd6jvcUhSmfGWPrTddvzNqK4rS/UuSLcbVGdQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-scss": "^4.0.9",
+ "stylelint-config-recommended": "^17.0.0",
+ "stylelint-scss": "^6.12.1"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3",
+ "stylelint": "^16.24.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/stylelint-config-recommended-vue": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.6.1.tgz",
+ "integrity": "sha512-lLW7hTIMBiTfjenGuDq2kyHA6fBWd/+Df7MO4/AWOxiFeXP9clbpKgg27kHfwA3H7UNMGC7aeP3mNlZB5LMmEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.3.5",
+ "stylelint-config-html": ">=1.0.0",
+ "stylelint-config-recommended": ">=6.0.0"
+ },
+ "engines": {
+ "node": "^12 || >=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ota-meshi"
+ },
+ "peerDependencies": {
+ "postcss-html": "^1.0.0",
+ "stylelint": ">=14.0.0"
+ }
+ },
+ "node_modules/stylelint-config-standard": {
+ "version": "39.0.1",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-39.0.1.tgz",
+ "integrity": "sha512-b7Fja59EYHRNOTa3aXiuWnhUWXFU2Nfg6h61bLfAb5GS5fX3LMUD0U5t4S8N/4tpHQg3Acs2UVPR9jy2l1g/3A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "stylelint-config-recommended": "^17.0.0"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^16.23.0"
+ }
+ },
+ "node_modules/stylelint-config-standard-scss": {
+ "version": "16.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-16.0.0.tgz",
+ "integrity": "sha512-/FHECLUu+med/e6OaPFpprG86ShC4SYT7Tzb2PTVdDjJsehhFBOioSlWqYFqJxmGPIwO3AMBxNo+kY3dxrbczA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "stylelint-config-recommended-scss": "^16.0.1",
+ "stylelint-config-standard": "^39.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3",
+ "stylelint": "^16.23.1"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/stylelint-config-standard-vue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard-vue/-/stylelint-config-standard-vue-1.0.0.tgz",
+ "integrity": "sha512-wAzU7p6DSlo04pWfCbOcaMq09Nojt0FEsbdxhCBTdC7IguD9ZVl7FP/bvyA0HAHjZGC4JkW7m6WiQaoVMDSuFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "stylelint-config-html": ">=1.0.0",
+ "stylelint-config-recommended-vue": ">=1.1.0",
+ "stylelint-config-standard": ">=24.0.0"
+ },
+ "engines": {
+ "node": "^12 || >=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ota-meshi"
+ },
+ "peerDependencies": {
+ "postcss-html": "^1.0.0",
+ "stylelint": ">=14.0.0"
+ }
+ },
+ "node_modules/stylelint-order": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-7.0.0.tgz",
+ "integrity": "sha512-rSWxx0KscYfxU02wEskKXES9lkRzuuONMMNkZ7SUc6uiF3tDKm7e+sE0Ax/SBlG4TUf1sp1R6f3/SlsPGmzthg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss": "^8.5.3",
+ "postcss-sorting": "^9.1.0"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^16.18.0"
+ }
+ },
+ "node_modules/stylelint-scss": {
+ "version": "6.12.1",
+ "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.1.tgz",
+ "integrity": "sha512-UJUfBFIvXfly8WKIgmqfmkGKPilKB4L5j38JfsDd+OCg2GBdU0vGUV08Uw82tsRZzd4TbsUURVVNGeOhJVF7pA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "^3.0.1",
+ "is-plain-object": "^5.0.0",
+ "known-css-properties": "^0.36.0",
+ "mdn-data": "^2.21.0",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.6",
+ "postcss-selector-parser": "^7.1.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^16.0.2"
+ }
+ },
+ "node_modules/stylelint-scss/node_modules/known-css-properties": {
+ "version": "0.36.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz",
+ "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stylelint-scss/node_modules/mdn-data": {
+ "version": "2.25.0",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.25.0.tgz",
+ "integrity": "sha512-T2LPsjgUE/tgMmRXREVmwsux89DwWfNjiynOeXuLd2mX6jphGQ2YE3Ukz7LQ2VOFKiVZU/Ee1GqzHiipZCjymw==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/stylelint-scss/node_modules/postcss-selector-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/stylelint/node_modules/@csstools/selector-specificity": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
+ "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^7.0.0"
+ }
+ },
+ "node_modules/stylelint/node_modules/balanced-match": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stylelint/node_modules/file-entry-cache": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.4.tgz",
+ "integrity": "sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^6.1.13"
+ }
+ },
+ "node_modules/stylelint/node_modules/flat-cache": {
+ "version": "6.1.19",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.19.tgz",
+ "integrity": "sha512-l/K33newPTZMTGAnnzaiqSl6NnH7Namh8jBNjrgjprWxGmZUuxx/sJNIRaijOh3n7q7ESbhNZC+pvVZMFdeU4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cacheable": "^2.2.0",
+ "flatted": "^3.3.3",
+ "hookified": "^1.13.0"
+ }
+ },
+ "node_modules/stylelint/node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/stylelint/node_modules/postcss-selector-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/stylelint/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/superjson": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.5.tgz",
+ "integrity": "sha512-zWPTX96LVsA/eVYnqOM2+ofcdPqdS1dAF1LN4TS2/MWuUpfitd9ctTa87wt4xrYnZnkLtS69xpBdSxVBP5Rm6w==",
+ "license": "MIT",
+ "dependencies": {
+ "copy-anything": "^4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/supports-hyperlinks": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz",
+ "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1"
+ }
+ },
+ "node_modules/supports-hyperlinks/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
+ "dev": true
+ },
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/sync-child-process": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz",
+ "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sync-message-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/sync-message-port": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz",
+ "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/synckit": {
+ "version": "0.11.11",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz",
+ "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@pkgr/core": "^0.2.9"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/synckit"
+ }
+ },
+ "node_modules/systeminformation": {
+ "version": "5.30.6",
+ "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.30.6.tgz",
+ "integrity": "sha512-LEIyK1aEv5P3BhAPW3swdlIyCihxwEq/Gki+kcONieU4PIeRCSLDuGkk0Va/56PSBgjVgEksOM88dmY6YqOyfQ==",
+ "dev": true,
+ "license": "MIT",
+ "os": [
+ "darwin",
+ "linux",
+ "win32",
+ "freebsd",
+ "openbsd",
+ "netbsd",
+ "sunos",
+ "android"
+ ],
+ "bin": {
+ "systeminformation": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ },
+ "funding": {
+ "type": "Buy me a coffee",
+ "url": "https://www.buymeacoffee.com/systeminfo"
+ }
+ },
+ "node_modules/table": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
+ "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/table/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/table/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/table/node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/throttleit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz",
+ "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinybench": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyexec": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
+ "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/tinypool": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
+ "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/tinyrainbow": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
+ "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tinyspy": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz",
+ "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tldts": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tldts-core": "^6.1.86"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
+ }
+ },
+ "node_modules/tldts-core": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tmp": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
+ "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/token-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
+ "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/totalist": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tldts": "^6.1.32"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz",
+ "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/ts-dedent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
+ "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.10"
+ }
+ },
+ "node_modules/ts-map": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ts-map/-/ts-map-1.0.3.tgz",
+ "integrity": "sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
+ "dev": true,
+ "license": "Unlicense"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.47.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.47.0.tgz",
+ "integrity": "sha512-Lwe8i2XQ3WoMjua/r1PHrCTpkubPYJCAfOurtn+mtTzqB6jNd+14n9UN1bJ4s3F49x9ixAm0FLflB/JzQ57M8Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.47.0",
+ "@typescript-eslint/parser": "8.47.0",
+ "@typescript-eslint/typescript-estree": "8.47.0",
+ "@typescript-eslint/utils": "8.47.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/unplugin": {
+ "version": "2.3.10",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.10.tgz",
+ "integrity": "sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/remapping": "^2.3.5",
+ "acorn": "^8.15.0",
+ "picomatch": "^4.0.3",
+ "webpack-virtual-modules": "^0.6.2"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ }
+ },
+ "node_modules/unplugin-utils": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz",
+ "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
+ "node_modules/unplugin-utils/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/unplugin/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
+ "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/varint": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
+ "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vee-validate": {
+ "version": "4.15.1",
+ "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-4.15.1.tgz",
+ "integrity": "sha512-DkFsiTwEKau8VIxyZBGdO6tOudD+QoUBPuHj3e6QFqmbfCRj1ArmYWue9lEp6jLSWBIw4XPlDLjFIZNLdRAMSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^7.5.2",
+ "type-fest": "^4.8.3"
+ },
+ "peerDependencies": {
+ "vue": "^3.4.26"
+ }
+ },
+ "node_modules/vee-validate/node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz",
+ "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.25.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-dev-rpc": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz",
+ "integrity": "sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "birpc": "^2.4.0",
+ "vite-hot-client": "^2.1.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0"
+ }
+ },
+ "node_modules/vite-hot-client": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz",
+ "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0"
+ }
+ },
+ "node_modules/vite-node": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
+ "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cac": "^6.7.14",
+ "debug": "^4.4.1",
+ "es-module-lexer": "^1.7.0",
+ "pathe": "^2.0.3",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ },
+ "bin": {
+ "vite-node": "vite-node.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/vite-plugin-inspect": {
+ "version": "11.3.3",
+ "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-11.3.3.tgz",
+ "integrity": "sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansis": "^4.1.0",
+ "debug": "^4.4.1",
+ "error-stack-parser-es": "^1.0.5",
+ "ohash": "^2.0.11",
+ "open": "^10.2.0",
+ "perfect-debounce": "^2.0.0",
+ "sirv": "^3.0.1",
+ "unplugin-utils": "^0.3.0",
+ "vite-dev-rpc": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "vite": "^6.0.0 || ^7.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@nuxt/kit": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-inspect/node_modules/perfect-debounce": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz",
+ "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vite-plugin-vue-devtools": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-8.0.5.tgz",
+ "integrity": "sha512-p619BlKFOqQXJ6uDWS1vUPQzuJOD6xJTfftj57JXBGoBD/yeQCowR7pnWcr/FEX4/HVkFbreI6w2uuGBmQOh6A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-core": "^8.0.5",
+ "@vue/devtools-kit": "^8.0.5",
+ "@vue/devtools-shared": "^8.0.5",
+ "sirv": "^3.0.2",
+ "vite-plugin-inspect": "^11.3.3",
+ "vite-plugin-vue-inspector": "^5.3.2"
+ },
+ "engines": {
+ "node": ">=v14.21.3"
+ },
+ "peerDependencies": {
+ "vite": "^6.0.0 || ^7.0.0-0"
+ }
+ },
+ "node_modules/vite-plugin-vue-devtools/node_modules/@vue/devtools-kit": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.0.5.tgz",
+ "integrity": "sha512-q2VV6x1U3KJMTQPUlRMyWEKVbcHuxhqJdSr6Jtjz5uAThAIrfJ6WVZdGZm5cuO63ZnSUz0RCsVwiUUb0mDV0Yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-shared": "^8.0.5",
+ "birpc": "^2.6.1",
+ "hookable": "^5.5.3",
+ "mitt": "^3.0.1",
+ "perfect-debounce": "^2.0.0",
+ "speakingurl": "^14.0.1",
+ "superjson": "^2.2.2"
+ }
+ },
+ "node_modules/vite-plugin-vue-devtools/node_modules/@vue/devtools-shared": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.0.5.tgz",
+ "integrity": "sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "rfdc": "^1.4.1"
+ }
+ },
+ "node_modules/vite-plugin-vue-devtools/node_modules/perfect-debounce": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz",
+ "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vite-plugin-vue-inspector": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz",
+ "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.23.0",
+ "@babel/plugin-proposal-decorators": "^7.23.0",
+ "@babel/plugin-syntax-import-attributes": "^7.22.5",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-transform-typescript": "^7.22.15",
+ "@vue/babel-plugin-jsx": "^1.1.5",
+ "@vue/compiler-dom": "^3.3.4",
+ "kolorist": "^1.8.0",
+ "magic-string": "^0.30.4"
+ },
+ "peerDependencies": {
+ "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0"
+ }
+ },
+ "node_modules/vite/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/vitest": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz",
+ "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/expect": "3.2.4",
+ "@vitest/mocker": "3.2.4",
+ "@vitest/pretty-format": "^3.2.4",
+ "@vitest/runner": "3.2.4",
+ "@vitest/snapshot": "3.2.4",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
+ "chai": "^5.2.0",
+ "debug": "^4.4.1",
+ "expect-type": "^1.2.1",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.2",
+ "std-env": "^3.9.0",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.14",
+ "tinypool": "^1.1.1",
+ "tinyrainbow": "^2.0.0",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
+ "vite-node": "3.2.4",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/debug": "^4.1.12",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@vitest/browser": "3.2.4",
+ "@vitest/ui": "3.2.4",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/debug": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitest/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/void-elements": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
+ "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/vscode-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
+ "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vue": {
+ "version": "3.5.24",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.24.tgz",
+ "integrity": "sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.24",
+ "@vue/compiler-sfc": "3.5.24",
+ "@vue/runtime-dom": "3.5.24",
+ "@vue/server-renderer": "3.5.24",
+ "@vue/shared": "3.5.24"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue-component-meta": {
+ "version": "2.2.12",
+ "resolved": "https://registry.npmjs.org/vue-component-meta/-/vue-component-meta-2.2.12.tgz",
+ "integrity": "sha512-dQU6/obNSNbennJ1xd+rhDid4g3vQro+9qUBBIg8HMZH2Zs1jTpkFNxuQ3z77bOlU+ew08Qck9sbYkdSePr0Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/typescript": "2.4.15",
+ "@vue/language-core": "2.2.12",
+ "path-browserify": "^1.0.1",
+ "vue-component-type-helpers": "2.2.12"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue-component-meta/node_modules/vue-component-type-helpers": {
+ "version": "2.2.12",
+ "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.2.12.tgz",
+ "integrity": "sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vue-component-type-helpers": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.1.4.tgz",
+ "integrity": "sha512-Uws7Ew1OzTTqHW8ZVl/qLl/HB+jf08M0NdFONbVWAx0N4gMLK8yfZDgeB77hDnBmaigWWEn5qP8T9BG59jIeyQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vue-docgen-api": {
+ "version": "4.79.2",
+ "resolved": "https://registry.npmjs.org/vue-docgen-api/-/vue-docgen-api-4.79.2.tgz",
+ "integrity": "sha512-n9ENAcs+40awPZMsas7STqjkZiVlIjxIKgiJr5rSohDP0/JCrD9VtlzNojafsA1MChm/hz2h3PDtUedx3lbgfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "@vue/compiler-dom": "^3.2.0",
+ "@vue/compiler-sfc": "^3.2.0",
+ "ast-types": "^0.16.1",
+ "esm-resolve": "^1.0.8",
+ "hash-sum": "^2.0.0",
+ "lru-cache": "^8.0.3",
+ "pug": "^3.0.2",
+ "recast": "^0.23.1",
+ "ts-map": "^1.0.3",
+ "vue-inbrowser-compiler-independent-utils": "^4.69.0"
+ },
+ "peerDependencies": {
+ "vue": ">=2"
+ }
+ },
+ "node_modules/vue-docgen-api/node_modules/lru-cache": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
+ "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16.14"
+ }
+ },
+ "node_modules/vue-eslint-parser": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz",
+ "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "eslint-scope": "^8.2.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.6.0",
+ "semver": "^7.6.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ }
+ },
+ "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/vue-inbrowser-compiler-independent-utils": {
+ "version": "4.71.1",
+ "resolved": "https://registry.npmjs.org/vue-inbrowser-compiler-independent-utils/-/vue-inbrowser-compiler-independent-utils-4.71.1.tgz",
+ "integrity": "sha512-K3wt3iVmNGaFEOUR4JIThQRWfqokxLfnPslD41FDZB2ajXp789+wCqJyGYlIFsvEQ2P61PInw6/ph5iiqg51gg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "vue": ">=2"
+ }
+ },
+ "node_modules/vue-router": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.3.tgz",
+ "integrity": "sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.6.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "vue": "^3.5.0"
+ }
+ },
+ "node_modules/vue-router/node_modules/@vue/devtools-api": {
+ "version": "6.6.4",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+ "license": "MIT"
+ },
+ "node_modules/vue-tsc": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.1.4.tgz",
+ "integrity": "sha512-GsRJxttj4WkmXW/zDwYPGMJAN3np/4jTzoDFQTpTsI5Vg/JKMWamBwamlmLihgSVHO66y9P7GX+uoliYxeI4Hw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/typescript": "2.4.23",
+ "@vue/language-core": "3.1.4"
+ },
+ "bin": {
+ "vue-tsc": "bin/vue-tsc.js"
+ },
+ "peerDependencies": {
+ "typescript": ">=5.0.0"
+ }
+ },
+ "node_modules/vue-tsc/node_modules/@volar/language-core": {
+ "version": "2.4.23",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.23.tgz",
+ "integrity": "sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/source-map": "2.4.23"
+ }
+ },
+ "node_modules/vue-tsc/node_modules/@volar/source-map": {
+ "version": "2.4.23",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.23.tgz",
+ "integrity": "sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vue-tsc/node_modules/@volar/typescript": {
+ "version": "2.4.23",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.23.tgz",
+ "integrity": "sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "2.4.23",
+ "path-browserify": "^1.0.1",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "node_modules/vue-tsc/node_modules/@vue/language-core": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.1.4.tgz",
+ "integrity": "sha512-n/58wm8SkmoxMWkUNUH/PwoovWe4hmdyPJU2ouldr3EPi1MLoS7iDN46je8CsP95SnVBs2axInzRglPNKvqMcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "2.4.23",
+ "@vue/compiler-dom": "^3.5.0",
+ "@vue/shared": "^3.5.0",
+ "alien-signals": "^3.0.0",
+ "muggle-string": "^0.4.1",
+ "path-browserify": "^1.0.1",
+ "picomatch": "^4.0.2"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue-tsc/node_modules/alien-signals": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.0.tgz",
+ "integrity": "sha512-yufC6VpSy8tK3I0lO67pjumo5JvDQVQyr38+3OHqe6CHl1t2VZekKZ7EKKZSqk0cRmE7U7tfZbpXiKNzuc+ckg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vue-tsc/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/w3c-xmlserializer": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/w3c-xmlserializer/node_modules/xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/wait-on": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.3.tgz",
+ "integrity": "sha512-13zBnyYvFDW1rBvWiJ6Av3ymAaq8EDQuvxZnPIw3g04UqGi4TyoIJABmfJ6zrvKo9yeFQExNkOk7idQbDJcuKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "axios": "^1.13.2",
+ "joi": "^18.0.1",
+ "lodash": "^4.17.21",
+ "minimist": "^1.2.8",
+ "rxjs": "^7.8.2"
+ },
+ "bin": {
+ "wait-on": "bin/wait-on"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz",
+ "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/webpack-virtual-modules": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.1.0.tgz",
+ "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tr46": "^6.0.0",
+ "webidl-conversions": "^8.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/why-is-node-running": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
+ "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "siginfo": "^2.0.0",
+ "stackback": "0.0.2"
+ },
+ "bin": {
+ "why-is-node-running": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/with": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
+ "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.9.6",
+ "@babel/types": "^7.9.6",
+ "assert-never": "^1.2.1",
+ "babel-walk": "3.0.0-canary-5"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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/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/wrap-ansi/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/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/wrap-ansi/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/wrap-ansi/node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "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/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/write-file-atomic": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/write-file-atomic/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/ws": {
+ "version": "8.18.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/wsl-utils": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz",
+ "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-wsl": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/xmlhttprequest-ssl": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
+ "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.24.0",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.0.tgz",
+ "integrity": "sha512-Hz+wiY8yD0VLA2k/+nsg2Abez674dDGTai33SwNvMPuf9uIrBC9eFgIMQxBBbHFxVXi8W+5nX9DcAh9YNSQm/w==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index b7a89dc..8115fe0 100644
--- a/package.json
+++ b/package.json
@@ -1,13 +1,16 @@
{
"name": "patchcord",
"version": "0.0.0",
+ "description": "Patchcord for Web",
"private": true,
"type": "module",
+ "author": "Vladislav Koshelev",
+ "license": "ISC",
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
"scripts": {
- "dev": "vite",
+ "dev": "vite --host",
"build": "run-p type-check \"build-only {@}\" --",
"preview": "vite preview",
"test:unit": "vitest",
@@ -16,18 +19,26 @@
"test:e2e:dev": "start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'",
"build-only": "vite build",
"type-check": "vue-tsc --build",
- "lint": "eslint . --fix --cache",
- "format": "prettier --write src/"
+ "lint:script": "eslint . --fix --cache",
+ "lint:style": "npx stylelint 'src/**/*.{css,scss,vue}' --fix",
+ "format": "prettier --write src/",
+ "storybook": "storybook dev -p 6006",
+ "build-storybook": "storybook build"
},
"dependencies": {
+ "@floating-ui/vue": "^1.1.10",
+ "@vee-validate/zod": "^4.15.1",
+ "mediasoup-client": "^3.18.7",
"pinia": "^3.0.3",
+ "socket.io-client": "^4.8.3",
"vue": "^3.5.22",
- "vue-router": "^4.6.3"
+ "vue-router": "^4.6.3",
+ "zod": "^3.24.0"
},
"devDependencies": {
+ "@storybook/vue3-vite": "^10.0.8",
"@tsconfig/node22": "^22.0.2",
"@types/jsdom": "^27.0.0",
- "@types/node": "^22.18.11",
"@vitejs/plugin-vue": "^6.0.1",
"@vitest/eslint-plugin": "^1.3.23",
"@vue/eslint-config-prettier": "^10.2.0",
@@ -37,16 +48,25 @@
"cypress": "^15.5.0",
"eslint": "^9.37.0",
"eslint-plugin-cypress": "^5.2.0",
+ "eslint-plugin-storybook": "^10.0.8",
"eslint-plugin-vue": "~10.5.0",
"jiti": "^2.6.1",
"jsdom": "^27.0.1",
"npm-run-all2": "^8.0.4",
"prettier": "3.6.2",
+ "sass-embedded": "^1.93.3",
"start-server-and-test": "^2.1.2",
+ "storybook": "^10.0.8",
+ "stylelint": "^16.25.0",
+ "stylelint-config-standard": "^39.0.1",
+ "stylelint-config-standard-scss": "^16.0.0",
+ "stylelint-config-standard-vue": "^1.0.0",
+ "stylelint-order": "^7.0.0",
"typescript": "~5.9.0",
"vite": "^7.1.11",
"vite-plugin-vue-devtools": "^8.0.3",
"vitest": "^3.2.4",
"vue-tsc": "^3.1.1"
- }
+ },
+ "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
diff --git a/public/favicon.ico b/public/favicon.ico
index df36fcf..7895cd5 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/public/favicon.png b/public/favicon.png
new file mode 100644
index 0000000..4f17526
Binary files /dev/null and b/public/favicon.png differ
diff --git a/public/favicon.svg b/public/favicon.svg
new file mode 100644
index 0000000..58bc1a3
--- /dev/null
+++ b/public/favicon.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/public/images/og_image.jpg b/public/images/og_image.jpg
new file mode 100644
index 0000000..ec63f9a
Binary files /dev/null and b/public/images/og_image.jpg differ
diff --git a/public/manifest.webmanifest b/public/manifest.webmanifest
new file mode 100644
index 0000000..f86ccdc
--- /dev/null
+++ b/public/manifest.webmanifest
@@ -0,0 +1,26 @@
+{
+ "name": "Patchcord",
+ "short_name": "Patchcord",
+ "start_url": "/",
+ "display_override": ["window-controls-overlay"],
+ "display": "standalone",
+ "background_color": "#121214",
+ "lang": "ru",
+ "scope": "/",
+ "description": "Patchcord отлично подходит для игр и общения с друзьями или даже создание всемирного сообщества. Настройте свое собственное пространство для общения, игр и времяпрепровождения.",
+ "categories": ["communication", "chat", "messaging"],
+ "orientation": "portrait",
+ "theme_color": "#121214",
+ "icons": [
+ {
+ "src": "/favicon.png",
+ "type": "image/png",
+ "sizes": "150x150"
+ },
+ {
+ "src": "/favicon.svg",
+ "type": "image/svg+xml",
+ "sizes": "48x48 72x72 96x96 128x128 256x256"
+ }
+ ]
+}
diff --git a/src/App.vue b/src/App.vue
deleted file mode 100644
index abfd315..0000000
--- a/src/App.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- You did it!
-
- Visit vuejs.org to read the
- documentation
-
-
-
-
diff --git a/src/__tests__/App.spec.ts b/src/__tests__/App.spec.ts
index 5b17801..daca13f 100644
--- a/src/__tests__/App.spec.ts
+++ b/src/__tests__/App.spec.ts
@@ -1,7 +1,7 @@
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
-import App from '../App.vue'
+import App from '../app/App.vue'
describe('App', () => {
it('mounts renders properly', () => {
diff --git a/src/app/App.vue b/src/app/App.vue
new file mode 100644
index 0000000..85fc328
--- /dev/null
+++ b/src/app/App.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/index.ts b/src/app/index.ts
new file mode 100644
index 0000000..34f6e3a
--- /dev/null
+++ b/src/app/index.ts
@@ -0,0 +1,12 @@
+import { createApp } from 'vue'
+import { createPinia } from 'pinia'
+
+import App from './App.vue'
+import router from './router'
+
+const app = createApp(App)
+
+app.use(createPinia())
+app.use(router)
+
+export { app }
diff --git a/src/app/router/index.ts b/src/app/router/index.ts
new file mode 100644
index 0000000..4060f6a
--- /dev/null
+++ b/src/app/router/index.ts
@@ -0,0 +1,32 @@
+import { nextTick } from 'vue'
+import { createRouter, createWebHistory } from 'vue-router'
+
+import routes from './routes'
+
+const router = createRouter({
+ history: createWebHistory(),
+ routes,
+})
+
+router.beforeEach(async (to, from) => {
+ const middlewares = to.meta.middleware
+ if (Array.isArray(middlewares)) {
+ for (const middleware of middlewares) {
+ const result = await middleware(to, from)
+ if (result !== true) {
+ return result
+ }
+ }
+ }
+ return true
+})
+
+router.afterEach((to) => {
+ nextTick(() => {
+ document.title = (to.meta.title as string)
+ ? `Patchcord | ${to.meta.title as string}`
+ : 'Patchcord'
+ })
+})
+
+export default router
diff --git a/src/app/router/middleware/auth.middleware.ts b/src/app/router/middleware/auth.middleware.ts
new file mode 100644
index 0000000..b05caf9
--- /dev/null
+++ b/src/app/router/middleware/auth.middleware.ts
@@ -0,0 +1,22 @@
+import type { RouteLocation } from 'vue-router'
+
+const AUTH_PAGES = ['login', 'register', 'reset']
+
+export default async (to: RouteLocation): Promise => {
+ const token = localStorage.getItem('token')
+ const isAuthenticated = !!token
+
+ const isAuthPage = AUTH_PAGES.includes(String(to.name))
+
+ // 1. Если нет токена и пытается зайти на закрытую страницу -> на логин
+ if (!isAuthenticated && !isAuthPage) {
+ return { name: 'login' }
+ }
+
+ // 2. Если есть токен и пытается зайти на страницу логина -> в приватные каналы
+ if (isAuthenticated && isAuthPage) {
+ return { name: 'friends' }
+ }
+
+ return true
+}
diff --git a/src/app/router/middleware/index.ts b/src/app/router/middleware/index.ts
new file mode 100644
index 0000000..5224dc4
--- /dev/null
+++ b/src/app/router/middleware/index.ts
@@ -0,0 +1,3 @@
+import authMiddleware from './auth.middleware'
+
+export { authMiddleware }
diff --git a/src/app/router/routes.ts b/src/app/router/routes.ts
new file mode 100644
index 0000000..1b43f51
--- /dev/null
+++ b/src/app/router/routes.ts
@@ -0,0 +1,116 @@
+import type { RouteRecordRaw } from 'vue-router'
+import { authMiddleware } from './middleware'
+
+const routes: RouteRecordRaw[] = [
+ {
+ path: '/',
+ name: 'auth',
+ redirect: { name: 'login' },
+ component: () => import('@/widgets/auth-layout'),
+ meta: {
+ middleware: [authMiddleware],
+ },
+ children: [
+ {
+ path: 'login',
+ name: 'login',
+ component: () => import('@/pages/login'),
+ },
+ {
+ path: 'register',
+ name: 'register',
+ component: () => import('@/pages/register'),
+ },
+ {
+ path: 'reset',
+ name: 'reset',
+ component: () => import('@/pages/reset'),
+ },
+ ],
+ },
+ {
+ path: '/',
+ name: 'home',
+ redirect: { name: 'channels' },
+ component: () => import('@/widgets/main-layout'),
+ meta: {
+ middleware: [authMiddleware],
+ },
+ children: [
+ {
+ path: 'channels',
+ children: [
+ {
+ path: '@me',
+ name: 'private',
+ components: {
+ sidebar: () => import('@/pages/dm-sidebar'),
+ content: () => import('@/pages/dm-content'),
+ },
+ children: [
+ {
+ path: '',
+ name: 'friends',
+ component: () => import('@/pages/friends-content'),
+ meta: { title: 'Друзья', icon: 'misc.greeting' },
+ },
+ {
+ path: ':dmId',
+ name: 'dm-chat',
+ component: () => import('@/pages/dm-channel'),
+ meta: { title: 'Личные сообщения', icon: 'logos.patchcord.symbol' },
+ },
+ ],
+ },
+ {
+ path: ':serverId',
+ name: 'server',
+ components: {
+ sidebar: () => import('@/pages/server-sidebar'),
+ content: () => import('@/pages/server-content'),
+ },
+ meta: { title: 'Каналы' },
+ children: [
+ {
+ path: ':channelId',
+ name: 'channel',
+ component: () => import('@/pages/channel'),
+ },
+ ],
+ },
+ ],
+ },
+ {
+ path: 'discovery',
+ name: 'discovery',
+ redirect: { name: 'discovery-applications' },
+ meta: { title: 'Путешествие', icon: 'misc.compass-circle' },
+ children: [
+ {
+ path: 'applications',
+ name: 'discovery-applications',
+ components: {
+ sidebar: () => import('@/pages/server-sidebar'),
+ content: () => import('@/pages/server-content'),
+ },
+ },
+ {
+ path: 'servers',
+ name: 'discovery-servers',
+ components: {
+ sidebar: () => import('@/pages/server-sidebar'),
+ content: () => import('@/pages/server-content'),
+ },
+ },
+ ],
+ },
+ ],
+ },
+ {
+ path: '/:catchAll(.*)',
+ name: 'not-found',
+ component: () => import('@/pages/not-found'),
+ },
+]
+
+export default routes
diff --git a/src/app/styles/base/animations.scss b/src/app/styles/base/animations.scss
new file mode 100644
index 0000000..b94a3d6
--- /dev/null
+++ b/src/app/styles/base/animations.scss
@@ -0,0 +1,156 @@
+/* fade */
+@keyframes fade-enter {
+ from {
+ opacity: 0;
+ transform: scale(0.95);
+ }
+
+ to {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+
+@keyframes fade-leave {
+ from {
+ opacity: 1;
+ transform: scale(1);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale(0.95);
+ }
+}
+
+.fade-enter-active {
+ transform-origin: center;
+ animation: fade-enter 0.1s ease forwards;
+}
+
+.fade-leave-active {
+ transform-origin: center;
+ animation: fade-leave 0.1s ease forwards;
+}
+
+/* slide-fade-top */
+@keyframes slide-fade-top-enter {
+ from {
+ opacity: 0;
+ transform: translateY(-30px) scale(1);
+ }
+
+ to {
+ opacity: 1;
+ transform: translateY(0) scale(1);
+ }
+}
+
+@keyframes slide-fade-top-leave {
+ from {
+ opacity: 1;
+ transform: translateY(0) scale(1);
+ }
+
+ to {
+ opacity: 0;
+ transform: translateY(-30px) scale(1);
+ }
+}
+
+.slide-fade-top-enter-active {
+ animation: slide-fade-top-enter 0.2s ease forwards;
+}
+
+.slide-fade-top-leave-active {
+ animation: slide-fade-top-leave 0.2s ease forwards;
+}
+
+/* slide-fade-down */
+@keyframes slide-fade-down-enter {
+ from {
+ opacity: 0;
+ transform: translateY(30px);
+ }
+
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@keyframes slide-fade-down-leave {
+ from {
+ opacity: 1;
+ transform: translateY(0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translateY(30px);
+ }
+}
+
+.slide-fade-down-enter-active {
+ animation: slide-fade-down-enter 0.2s ease forwards;
+}
+
+.slide-fade-down-leave-active {
+ animation: slide-fade-down-leave 0.2s ease forwards;
+}
+
+/* expand-fade-down */
+@keyframes expand-fade-down-enter {
+ from {
+ height: 0;
+ opacity: 0;
+ transform: translateY(-4px);
+ }
+
+ to {
+ height: auto;
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@keyframes expand-fade-down-leave {
+ from {
+ height: auto;
+ opacity: 1;
+ transform: translateY(0);
+ }
+
+ to {
+ height: 0;
+ opacity: 0;
+ transform: translateY(-4px);
+ }
+}
+
+.expand-fade-down-enter-active {
+ overflow: hidden;
+ animation: expand-fade-down-enter 0.3s ease forwards;
+}
+
+.expand-fade-down-leave-active {
+ overflow: hidden;
+ animation: expand-fade-down-leave 0.3s ease forwards;
+}
+
+@keyframes spinner-pulsing-ellipsis {
+ 0% {
+ opacity: 1;
+ transform: scale(1)
+ }
+
+ 50% {
+ opacity: .3;
+ transform: scale(.8)
+ }
+
+ 100% {
+ opacity: 1;
+ transform: scale(1)
+ }
+}
\ No newline at end of file
diff --git a/src/app/styles/base/colors.scss b/src/app/styles/base/colors.scss
new file mode 100644
index 0000000..1e4f108
--- /dev/null
+++ b/src/app/styles/base/colors.scss
@@ -0,0 +1,404 @@
+:root {
+ --white: #fff;
+ --black: #000;
+ --transparent: transparent;
+
+ /* Colors */
+
+ /* blue */
+ --blue-100: #e6eeff;
+ --blue-130: #e6eeff;
+ --blue-160: #e6eeff;
+ --blue-200: #d4e5ff;
+ --blue-230: #bad6fd;
+ --blue-260: #a4cafb;
+ --blue-300: #87b8f7;
+ --blue-330: #66a4f1;
+ --blue-345: #59e;
+ --blue-360: #3f8cea;
+ --blue-400: #257fe6;
+ --blue-430: #0272de;
+ --blue-460: #0666c4;
+ --blue-500: #0358a7;
+ --blue-530: #004d91;
+ --blue-560: #004481;
+ --blue-600: #003c71;
+ --blue-630: #003565;
+ --blue-660: #002f5a;
+ --blue-700: #00294f;
+ --blue-730: #002547;
+ --blue-760: #001f3d;
+ --blue-800: #001b36;
+ --blue-830: #00172f;
+ --blue-860: #00142b;
+ --blue-900: #000f21;
+
+ /* brand */
+ --brand-100: #e7eaff;
+ --brand-130: #e7eaff;
+ --brand-160: #e7eaff;
+ --brand-200: #dce2ff;
+ --brand-230: #d1daff;
+ --brand-260: #c7d2ff;
+ --brand-300: #b9c7ff;
+ --brand-330: #a3b4fe;
+ --brand-345: #93a7fd;
+ --brand-360: #8da1fc;
+ --brand-400: #7588f8;
+ --brand-430: #6a7df6;
+ --brand-460: #6374f4;
+ --brand-500: #5865f2;
+ --brand-530: #505edb;
+ --brand-560: #4654c0;
+ --brand-600: #3a48a3;
+ --brand-630: #303e8d;
+ --brand-660: #28367c;
+ --brand-700: #1c295f;
+ --brand-730: #1a275b;
+ --brand-760: #172454;
+ --brand-800: #121e48;
+ --brand-830: #0c173a;
+ --brand-860: #050d24;
+ --brand-900: #01030c;
+
+ /* blurple */
+ --blurple-50: #5865f2;
+ --blurple-60: #4452bb;
+ --blurple-65: #3a48a3;
+
+ /* green */
+ --green-100: #cfffd7;
+ --green-130: #cfffd7;
+ --green-160: #c7fbd0;
+ --green-200: #a8e7b2;
+ --green-230: #96daa1;
+ --green-260: #83cd90;
+ --green-300: #75c383;
+ --green-330: #62b673;
+ --green-345: #53ac66;
+ --green-360: #43a25a;
+ --green-400: #289248;
+ --green-430: #038138;
+ --green-460: #047031;
+ --green-500: #02662c;
+ --green-530: #005925;
+ --green-560: #004d1e;
+ --green-600: #1a1a1e;
+ --green-630: #003f16;
+ --green-660: #003611;
+ --green-700: #002f0d;
+ --green-730: #002b0b;
+ --green-760: #002207;
+ --green-800: #002006;
+ --green-830: #001904;
+ --green-860: #001603;
+ --green-900: #001403;
+
+ /* orange */
+ --orange-100: #ffe3da;
+ --orange-130: #ffe3da;
+ --orange-160: #ffe3da;
+ --orange-200: #ffddd0;
+ --orange-230: #fdcdb6;
+ --orange-260: #f7ba99;
+ --orange-300: #eda176;
+ --orange-330: #e28c59;
+ --orange-345: #d87942;
+ --orange-360: #d37036;
+ --orange-400: #cd672a;
+ --orange-430: #c75e1e;
+ --orange-460: #9f4203;
+ --orange-500: #8d3901;
+ --orange-530: #803200;
+ --orange-560: #732b00;
+ --orange-600: #662400;
+ --orange-630: #5d1f00;
+ --orange-660: #501800;
+ --orange-700: #471300;
+ --orange-730: #3f0e00;
+ --orange-760: #360900;
+ --orange-800: #360900;
+ --orange-830: #2d0500;
+ --orange-860: #2d0500;
+ --orange-900: #140001;
+
+ /* red */
+ --red-100: #ffdfde;
+ --red-130: #ffdfde;
+ --red-160: #ffdfde;
+ --red-200: #ffdfde;
+ --red-230: #ffd0cd;
+ --red-260: #ffbdba;
+ --red-300: #ffaba7;
+ --red-330: #fd928d;
+ --red-345: #f57976;
+ --red-360: #e75959;
+ --red-400: #da3e44;
+ --red-430: #d6363f;
+ --red-460: #bc2934;
+ --red-500: #a4232c;
+ --red-530: #911e25;
+ --red-560: #821920;
+ --red-600: #701219;
+ --red-630: #650e16;
+ --red-660: #5b0a12;
+ --red-700: #540810;
+ --red-730: #4a050c;
+ --red-760: #3d0208;
+ --red-800: #370107;
+ --red-830: #2c0005;
+ --red-860: #270004;
+ --red-900: #1b0003;
+
+ /* yellow */
+ --yellow-100: #ffe8d4;
+ --yellow-130: #ffe8d4;
+ --yellow-160: #ffe8d4;
+ --yellow-200: #f8dabb;
+ --yellow-230: #ebc69a;
+ --yellow-260: #d6a76c;
+ --yellow-300: #ce9c5c;
+ --yellow-330: #ca9654;
+ --yellow-345: #c18b45;
+ --yellow-360: #b77e32;
+ --yellow-400: #ae7322;
+ --yellow-430: #a36607;
+ --yellow-460: #8c5403;
+ --yellow-500: #804b01;
+ --yellow-530: #724000;
+ --yellow-560: #653600;
+ --yellow-600: #5d3000;
+ --yellow-630: #552a00;
+ --yellow-660: #502500;
+ --yellow-700: #461d00;
+ --yellow-730: #411900;
+ --yellow-760: #3a1400;
+ --yellow-800: #351000;
+ --yellow-830: #300c00;
+ --yellow-860: #2b0800;
+ --yellow-900: #280600;
+
+ /* teal */
+ --teal-100: #c8fbff;
+ --teal-130: #c8fbff;
+ --teal-160: #c5f8fe;
+ --teal-200: #b6eef4;
+ --teal-230: #9ddce2;
+ --teal-260: #8bcfd6;
+ --teal-300: #76bfc7;
+ --teal-330: #64b3ba;
+ --teal-345: #56a9b1;
+ --teal-360: #439ca4;
+ --teal-400: #288d96;
+ --teal-430: #037c85;
+ --teal-460: #046c75;
+ --teal-500: #016068;
+ --teal-530: #00535b;
+ --teal-560: #004a52;
+ --teal-600: #004148;
+ --teal-630: #003a42;
+ --teal-660: #00333b;
+ --teal-700: #002c34;
+ --teal-730: #00262e;
+ --teal-760: #002229;
+ --teal-800: #001c23;
+ --teal-830: #001921;
+ --teal-860: #00151c;
+ --teal-900: #001219;
+
+ /* primary */
+ --primary-100: #fbfbfb;
+ --primary-130: #f3f3f4;
+ --primary-160: #ebebed;
+ --primary-200: #e3e3e6;
+ --primary-230: #dbdcdf;
+ --primary-260: #d3d4d7;
+ --primary-300: #c8c8cd;
+ --primary-330: #b9b9bf;
+ --primary-345: #aaaab1;
+ --primary-360: #97989f;
+ --primary-400: #82838b;
+ --primary-430: #6d6e77;
+ --primary-460: #5c5d67;
+ --primary-500: #4f505a;
+ --primary-530: #41424a;
+ --primary-560: #393a41;
+ --primary-600: #323339;
+ --primary-630: #2c2d32;
+ --primary-645: #292a2f;
+ --primary-660: #242429;
+ --primary-700: #1e1f22;
+ --primary-730: #1a1a1e;
+ --primary-760: #161619;
+ --primary-800: #121214;
+ --primary-830: #0c0c0e;
+ --primary-860: #050506;
+ --primary-900: #020203;
+
+ /* neutral */
+ --neutral-1: white;
+ --neutral-2: #fbfbfb;
+ --neutral-3: #f7f7f8;
+ --neutral-4: #f3f3f4;
+ --neutral-5: #efeff0;
+ --neutral-6: #ebebed;
+ --neutral-7: #e7e7e9;
+ --neutral-8: #e3e3e6;
+ --neutral-9: #dfe0e2;
+ --neutral-10: #dbdcdf;
+ --neutral-11: #d7d8db;
+ --neutral-12: #d3d4d7;
+ --neutral-13: #d0d0d4;
+ --neutral-14: #ccccd0;
+ --neutral-15: #c8c8cd;
+ --neutral-16: #c4c5c9;
+ --neutral-17: #c0c1c6;
+ --neutral-18: #bcbdc2;
+ --neutral-19: #b9b9bf;
+ --neutral-20: #b5b6bb;
+ --neutral-21: #b1b2b8;
+ --neutral-22: #adaeb4;
+ --neutral-23: #aaaab1;
+ --neutral-24: #a6a7ad;
+ --neutral-25: #a2a3aa;
+ --neutral-26: #9f9fa6;
+ --neutral-27: #9b9ca3;
+ --neutral-28: #97989f;
+ --neutral-29: #94959c;
+ --neutral-30: #909199;
+ --neutral-31: #8c8d95;
+ --neutral-32: #898a92;
+ --neutral-33: #85868e;
+ --neutral-34: #82838b;
+ --neutral-35: #7e7f88;
+ --neutral-36: #7b7c84;
+ --neutral-37: #777881;
+ --neutral-38: #74757e;
+ --neutral-39: #70717a;
+ --neutral-40: #6d6e77;
+ --neutral-41: #6a6b74;
+ --neutral-42: #666771;
+ --neutral-43: #63646d;
+ --neutral-44: #5f606a;
+ --neutral-45: #5c5d67;
+ --neutral-46: #595a64;
+ --neutral-47: #555760;
+ --neutral-48: #52535d;
+ --neutral-49: #4f505a;
+ --neutral-50: #4f505a;
+ --neutral-51: #4d4e58;
+ --neutral-52: #4c4d56;
+ --neutral-53: #4a4b55;
+ --neutral-54: #494a53;
+ --neutral-55: #474851;
+ --neutral-56: #46474f;
+ --neutral-57: #44454d;
+ --neutral-58: #43434c;
+ --neutral-59: #41424a;
+ --neutral-60: #3f4048;
+ --neutral-61: #3e3f46;
+ --neutral-62: #3c3d45;
+ --neutral-63: #3b3c43;
+ --neutral-64: #393a41;
+ --neutral-65: #383940;
+ --neutral-66: #36373e;
+ --neutral-67: #35363c;
+ --neutral-68: #34343a;
+ --neutral-69: #323339;
+ --neutral-70: #313137;
+ --neutral-71: #2f3035;
+ --neutral-72: #2e2e34;
+ --neutral-73: #2c2d32;
+ --neutral-74: #2b2b31;
+ --neutral-75: #292a2f;
+ --neutral-76: #28282d;
+ --neutral-77: #27272c;
+ --neutral-78: #25262a;
+ --neutral-79: #242429;
+ --neutral-80: #222327;
+ --neutral-81: #212125;
+ --neutral-82: #202024;
+ --neutral-83: #1e1f22;
+ --neutral-84: #1d1d21;
+ --neutral-85: #1b1c1f;
+ --neutral-86: #1a1a1e;
+ --neutral-87: #19191c;
+ --neutral-88: #17181b;
+ --neutral-89: #161619;
+ --neutral-90: #151518;
+ --neutral-91: #131416;
+ --neutral-92: #121214;
+ --neutral-93: #101013;
+ --neutral-94: #0e0e10;
+ --neutral-95: #0c0c0e;
+ --neutral-96: #0a0a0c;
+ --neutral-97: #070709;
+ --neutral-98: #050506;
+ --neutral-99: #020203;
+ --neutral-100: black;
+
+ /* opacity */
+ --opacity-1: #97979f05;
+ --opacity-4: #97979f0a;
+ --opacity-8: #97979f14;
+ --opacity-12: #97979f1f;
+ --opacity-16: #97979f29;
+ --opacity-20: #97979f33;
+ --opacity-24: #97979f3d;
+ --opacity-28: #97979f47;
+ --opacity-32: #97979f52;
+ --opacity-36: #97979f5c;
+ --opacity-40: #97979f66;
+ --opacity-44: #97979f70;
+ --opacity-48: #97979f7a;
+ --opacity-52: #97979f85;
+ --opacity-56: #97979f8f;
+ --opacity-60: #97979f99;
+ --opacity-64: #97979fa3;
+ --opacity-68: #97979fad;
+ --opacity-72: #97979fb8;
+ --opacity-76: #97979fc2;
+ --opacity-80: #97979fcc;
+ --opacity-84: #97979fd6;
+ --opacity-88: #97979fe0;
+ --opacity-92: #97979feb;
+ --opacity-96: #97979ff5;
+
+ /* opacity-black */
+ --opacity-black-1: #00000005;
+ --opacity-black-4: #0000000a;
+ --opacity-black-8: #00000014;
+ --opacity-black-12: #0000001f;
+ --opacity-black-16: #00000029;
+ --opacity-black-20: #0003;
+ --opacity-black-24: #0000003d;
+ --opacity-black-28: #00000047;
+ --opacity-black-32: #00000052;
+ --opacity-black-36: #0000005c;
+ --opacity-black-40: #0006;
+ --opacity-black-44: #00000070;
+ --opacity-black-48: #0000007a;
+ --opacity-black-52: #00000085;
+ --opacity-black-56: #0000008f;
+ --opacity-black-60: #0009;
+ --opacity-black-64: #000000a3;
+ --opacity-black-68: #000000ad;
+ --opacity-black-72: #000000b8;
+ --opacity-black-76: #000000c2;
+ --opacity-black-80: #000c;
+ --opacity-black-84: #000000d6;
+ --opacity-black-88: #000000e0;
+ --opacity-black-92: #000000eb;
+ --opacity-black-96: #000000f5;
+
+ /* opacity-white */
+ --opacity-white-8: #ffffff14;
+
+ /* opacity-red */
+ --opacity-red-4: #d22d390a;
+ --opacity-red-12: #d22d391f;
+ --opacity-red-24: #d22d393d;
+
+ /* opacity-blurple */
+ --opacity-blurple-16: #5865f229;
+}
\ No newline at end of file
diff --git a/src/app/styles/base/effects.scss b/src/app/styles/base/effects.scss
new file mode 100644
index 0000000..8d259d3
--- /dev/null
+++ b/src/app/styles/base/effects.scss
@@ -0,0 +1,62 @@
+:root {
+ /* Radius */
+ --radius-none: 0rem;
+ --radius-xs: 0.25rem;
+ --radius-sm: 0.5rem;
+ --radius-md: 0.75rem;
+ --radius-lg: 1rem;
+ --radius-xl: 1.5rem;
+ --radius-xxl: 2rem;
+ --radius-round: 50%;
+
+ /* Sizes */
+ --size-xxs: 0.25rem;
+ --size-xs: 0.5rem;
+ --size-sm: 0.75rem;
+ --size-md: 1rem;
+ --size-lg: 1.25rem;
+ --size-xl: 1.5rem;
+ --size-xxl: 2rem;
+
+ /* Control Item Sizes */
+ --control-item-height-md: 2.5rem;
+ --control-item-height-sm: 2rem;
+
+ /* Icon Sizes */
+ --icon-size-xxs: 0.75rem;
+ --icon-size-xs: 1rem;
+ --icon-size-sm: 1.125rem;
+ --icon-size-md: 1.5rem;
+ --icon-size-lg: 2rem;
+
+ /* Avatar Sizes */
+ --avatar-size-xxxs: 1rem;
+ --avatar-size-xxs: 1.25rem;
+ --avatar-size-xs: 1.5rem;
+ --avatar-size-sm: 2rem;
+ --avatar-size-md: 2.5rem;
+ --avatar-size-lg: 2.75rem;
+ --avatar-size-xl: 3rem;
+ --avatar-size-xxl: 3.5rem;
+ --avatar-size-xxxl: 4.5rem;
+ --avatar-size-4xl: 5rem;
+ --avatar-size-5xl: 6rem;
+ --avatar-size-6xl: 7.5rem;
+
+ /* Input Heights */
+ --input-height-sm: 2rem;
+ --input-height-md: 2.75rem;
+
+ /* Spaces */
+ --space-xxs: 0.25rem;
+ --space-xs: 0.5rem;
+ --space-sm: 0.75rem;
+ --space-md: 1rem;
+ --space-lg: 1.25rem;
+ --space-xl: 1.5rem;
+ --space-xxl: 2rem;
+
+ /* Box Shadows */
+ --box-shadow-low: 0 0.063rem 0.313rem 0 var(--opacity-black-28);
+ --box-shadow-high: 0 0.125rem 0.625rem 0 var(--opacity-black-20);
+}
\ No newline at end of file
diff --git a/src/app/styles/base/reset.scss b/src/app/styles/base/reset.scss
new file mode 100644
index 0000000..bc9f0a7
--- /dev/null
+++ b/src/app/styles/base/reset.scss
@@ -0,0 +1,360 @@
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+ margin: 0;
+ padding: 0;
+ font: inherit;
+ font-size: 100%;
+ vertical-align: baseline;
+ border: 0;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+ display: block;
+}
+
+body {
+ height: 100%;
+ line-height: 1;
+}
+
+ol,
+ul {
+ list-style: none;
+}
+
+blockquote,
+q {
+ quotes: none;
+}
+
+blockquote::before,
+blockquote::after,
+q::before,
+q::after {
+ content: '';
+ content: none;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+html {
+ height: 100%;
+ line-height: 1.15;
+ text-size-adjust: 100%;
+}
+
+main {
+ display: block;
+}
+
+hr {
+ overflow: visible;
+ height: 0;
+ box-sizing: content-box;
+}
+
+pre {
+ font-family: monospace;
+ font-size: 1em;
+}
+
+a {
+ background-color: transparent;
+ cursor: revert;
+}
+
+abbr[title] {
+ text-decoration: underline;
+ text-decoration: underline dotted;
+ border-bottom: none;
+}
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+code,
+kbd,
+samp {
+ font-family: monospace;
+ font-size: 1em;
+}
+
+small {
+ font-size: 80%;
+}
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+img {
+ max-width: 100%;
+ border-style: none;
+}
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font-family: inherit;
+ font-size: 100%;
+ line-height: 1.15;
+}
+
+button,
+input {
+ overflow: visible;
+}
+
+button,
+select {
+ text-transform: none;
+}
+
+button {
+ cursor: revert;
+}
+
+button,
+[type='button'],
+[type='reset'],
+[type='submit'] {
+ appearance: auto;
+}
+
+button::-moz-focus-inner,
+[type='button']::-moz-focus-inner,
+[type='reset']::-moz-focus-inner,
+[type='submit']::-moz-focus-inner {
+ padding: 0;
+ border-style: none;
+}
+
+button:-moz-focusring,
+[type='button']:-moz-focusring,
+[type='reset']:-moz-focusring,
+[type='submit']:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+fieldset {
+ padding: 0.35em 0.75em 0.625em;
+}
+
+legend {
+ display: table;
+ max-width: 100%;
+ padding: 0;
+ box-sizing: border-box;
+ color: inherit;
+ white-space: normal;
+}
+
+progress {
+ vertical-align: baseline;
+}
+
+textarea {
+ overflow: auto;
+ white-space: revert;
+}
+
+[type='checkbox'],
+[type='radio'] {
+ padding: 0;
+ box-sizing: border-box;
+}
+
+[type='number']::-webkit-inner-spin-button,
+[type='number']::-webkit-outer-spin-button {
+ height: auto;
+}
+
+[type='search'] {
+ outline-offset: -2px;
+ appearance: textfield;
+}
+
+[type='search']::-webkit-search-decoration {
+ appearance: none;
+}
+
+::-webkit-file-upload-button {
+ font: inherit;
+ appearance: auto;
+}
+
+details {
+ display: block;
+}
+
+summary {
+ display: list-item;
+}
+
+template {
+ display: none;
+}
+
+[hidden] {
+ display: none;
+}
+
+*:where(:not(iframe, canvas, img, svg, video, svg *, symbol *)) {
+ all: unset;
+ display: revert;
+}
+
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+}
+
+ol,
+ul,
+menu {
+ list-style: none;
+}
+
+meter {
+ appearance: revert;
+}
+
+::placeholder {
+ color: unset;
+}
+
+:where([hidden]) {
+ display: none;
+}
+
+:where([contenteditable]) {
+ overflow-wrap: break-word;
+ -webkit-line-break: after-white-space;
+ line-break: after;
+}
+
+:where([draggable='true']) {
+ -webkit-user-drag: element;
+}
+
+input[type='number']::-webkit-outer-spin-button,
+input[type='number']::-webkit-inner-spin-button {
+ appearance: none;
+}
+
+input[type='number'],
+input[type='number']:hover,
+input[type='number']:focus {
+ appearance: textfield;
+ appearance: none;
+}
\ No newline at end of file
diff --git a/src/app/styles/base/typography.scss b/src/app/styles/base/typography.scss
new file mode 100644
index 0000000..3110f8b
--- /dev/null
+++ b/src/app/styles/base/typography.scss
@@ -0,0 +1,31 @@
+:root {
+ /* Font Families */
+ --font-primary: "Noto Sans", sans-serif;
+ --font-display: "Noto Sans", sans-serif;
+ --font-headline: "Noto Sans", sans-serif;
+ --font-code: "Noto Sans Mono", monospace;
+
+ /* Font Sizes */
+ --font-size-32: 2rem;
+ --font-size-24: 1.5rem;
+ --font-size-20: 1.25rem;
+ --font-size-16: 1rem;
+ --font-size-14: .875rem;
+ --font-size-12: .75rem;
+ --font-size-10: .625rem;
+
+ /* Line Heights */
+ --line-height-10: 1.2;
+ --line-height-12: 1.33;
+ --line-height-14: 1.28;
+ --line-height-16: 1.2;
+ --line-height-20: 1.2;
+ --line-height-24: 1.25;
+ --line-height-32: 1.25;
+
+ /* Font Weights */
+ --font-weight-normal: 400;
+ --font-weight-medium: 500;
+ --font-weight-semibold: 600;
+ --font-weight-bold: 700;
+}
\ No newline at end of file
diff --git a/src/app/styles/index.scss b/src/app/styles/index.scss
new file mode 100644
index 0000000..1e0d594
--- /dev/null
+++ b/src/app/styles/index.scss
@@ -0,0 +1,37 @@
+// Base
+@use 'base/animations';
+@use 'base/colors';
+@use 'base/effects';
+@use 'base/reset';
+@use 'base/typography';
+
+// Themes
+@use 'themes/dark';
+@use 'themes/light';
+
+html {
+ background-color: var(--background-base-lowest) !important;
+}
+
+body {
+ width: 100%;
+ height: 100%;
+ color: var(--text-primary);
+ font-family: var(--font-primary);
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ background: var(--background-base-lowest);
+}
+
+#app-mount {
+ width: 100%;
+ height: 100%;
+}
+
+#floating {
+ position: absolute;
+ z-index: 1002;
+ background: none !important;
+ pointer-events: none;
+ inset: 0;
+}
\ No newline at end of file
diff --git a/src/app/styles/themes/dark.scss b/src/app/styles/themes/dark.scss
new file mode 100644
index 0000000..913eb97
--- /dev/null
+++ b/src/app/styles/themes/dark.scss
@@ -0,0 +1,213 @@
+:root.theme-dark {
+ /* Button Colors */
+
+ /* Button Danger */
+ --button-danger-background: var(--red-430);
+ --button-danger-background-active: var(--red-500);
+ --button-danger-background-disabled: var(--red-430);
+ --button-danger-background-hover: var(--red-460);
+ --button-danger-border: var(--transparent);
+
+ /* Button Positive */
+ --button-positive-background: var(--green-400);
+ --button-positive-background-active: var(--green-400);
+ --button-positive-background-disabled: var(--green-430);
+ --button-positive-background-hover: var(--green-430);
+ --button-positive-border: var(--opacity-8);
+
+ /* Button Secondary */
+ --button-secondary-background: var(--opacity-12);
+ --button-secondary-background-active: var(--primary-500);
+ --button-secondary-background-disabled: var(--opacity-12);
+ --button-secondary-background-hover: var(--opacity-20);
+ --button-secondary-text: var(--neutral-6);
+
+ /* Button Filled Brand */
+ --button-filled-brand-background: var(--brand-500);
+ --button-filled-brand-background-active: var(--brand-600);
+ --button-filled-brand-background-hover: var(--brand-560);
+ --button-filled-brand-border: var(--opacity-white-8);
+ --button-filled-brand-text: var(--white);
+
+ /* Button Filled White */
+ --button-filled-white-background: var(--white);
+ --button-filled-white-background-active: var(--neutral-17);
+ --button-filled-white-background-hover: var(--neutral-9);
+ --button-filled-white-text: var(--black);
+
+ /* Button Outline Brand */
+ --button-outline-brand-background: var(--white-hsl);
+ --button-outline-brand-background-active: var(--brand-560);
+ --button-outline-brand-background-hover: var(--brand-500);
+ --button-outline-brand-border: var(--brand-500);
+ --button-outline-brand-border-active: var(--brand-560);
+ --button-outline-brand-border-hover: var(--brand-500);
+ --button-outline-brand-text: var(--white);
+ --button-outline-brand-text-active: var(--white);
+ --button-outline-brand-text-hover: var(--white);
+
+ /* Button Outline Danger */
+ --button-outline-danger-background: var(--opacity-12);
+ --button-outline-danger-background-active: var(--primary-500);
+ --button-outline-danger-background-hover: var(--opacity-20);
+ --button-outline-danger-border: var(--opacity-4);
+ --button-outline-danger-border-active: var(--opacity-4);
+ --button-outline-danger-border-hover: var(--opacity-4);
+ --button-outline-danger-text: var(--red-345);
+ --button-outline-danger-text-active: var(--red-345);
+ --button-outline-danger-text-hover: var(--red-345);
+
+ /* Button Outline Positive */
+ --button-outline-positive-background: var(--white-hsl);
+ --button-outline-positive-background-active: var(--green-530);
+ --button-outline-positive-background-hover: var(--green-430);
+ --button-outline-positive-border: var(--green-360);
+ --button-outline-positive-border-active: var(--green-530);
+ --button-outline-positive-border-hover: var(--green-430);
+ --button-outline-positive-text: var(--white);
+ --button-outline-positive-text-active: var(--white);
+ --button-outline-positive-text-hover: var(--white);
+
+ /* Button Outline Primary */
+ --button-outline-primary-background: var(--opacity-1);
+ --button-outline-primary-background-active: var(--opacity-40);
+ --button-outline-primary-background-hover: var(--opacity-49);
+ --button-outline-primary-border: var(--primary-500);
+ --button-outline-primary-border-active: var(--opacity-40);
+ --button-outline-primary-border-hover: var(--opacity-49);
+ --button-outline-primary-text: var(--white);
+ --button-outline-primary-text-active: var(--white);
+ --button-outline-primary-text-hover: var(--white);
+
+ /* Input Colors */
+ --input-background: var(--opacity-12);
+ --input-background-critical: var(--red-430);
+ --input-background-default: var(--opacity-12);
+ --input-border: var(--opacity-8);
+ --input-border-active: var(--blue-300);
+ --input-border-critical: var(--red-430);
+ --input-border-critical-hover: var(--red-500);
+ --input-border-default: var(--opacity-8);
+ --input-border-default-hover: var(--primary-500);
+ --input-border-read-only: var(--opacity-8);
+ --input-background-error: var(--opacity-red-4);
+ --input-border-error: var(--red-345);
+ --input-text-error: var(--red-345);
+ --input-border-focused: var(--brand-500);
+ --input-placeholder-text: var(--neutral-32);
+
+ /* Modal Colors */
+ --modal-background: var(--neutral-64)
+
+ /* Checkbox Colors */;
+ --checkbox-border-checked: var(--brand-500);
+ --checkbox-background-checked: var(--brand-500);
+ --checkbox-border-default: var(--neutral-34);
+ --checkbox-background-default: var(--opacity-4);
+
+ /** Radio Colors */
+ --radio-background-default: var(--opacity-black-8);
+ --radio-background-hover: var(--opacity-black-8);
+ --radio-border-default: var(--opacity-64);
+ --radio-border-hover: var(--opacity-80);
+ --radio-thumb-background-active: var(--neutral-1);
+ --radio-background-selected-default: var(--brand-500);
+ --radio-background-selected-hover: var(--brand-530);
+ --radio-border-selected-default: var(--opacity-12);
+ --radio-border-selected-hover: var(--opacity-12);
+
+ /** Switch Colors */
+ --switch-background-default: var(--opacity-black-8);
+ --switch-background-hover: var(--opacity-black-8);
+ --switch-background-selected-default: var(--brand-500);
+ --switch-background-selected-hover: var(--brand-530);
+ --switch-border-selected-default: var(--opacity-12);
+ --switch-border-selected-hover: var(--opacity-12);
+ --switch-border-default: var(--opacity-24);
+ --switch-border-hover: var(--opacity-80);
+
+ /* Control Colors */
+ --control-primary-border-default: var(--opacity-white-8);
+ --control-primary-background-default: var(--blurple-50);
+ --control-primary-background-hover: var(--blurple-60);
+ --control-primary-background-active: var(--blurple-65);
+
+ /* Background Colors */
+ --background-brand: var(--brand-500);
+ --background-scrim: var(--opacity-black-72);
+ --background-base-low: var(--neutral-82);
+ --background-base-lower: var(--neutral-86);
+ --background-base-lowest: var(--neutral-92);
+ --background-surface-high: var(--neutral-79);
+ --background-surface-higher: var(--neutral-76);
+ --background-modifier-hover: var(--opacity-8);
+ --background-modifier-selected: var(--opacity-20);
+ --background-modifier-strong: var(--opacity-20);
+ --background-modifier-normal: var(--opacity-16);
+ --background-modifier-muted: var(--opacity-4);
+
+ /* Text Colors */
+ --text-link: var(--blue-300);
+ --text-brand: var(--brand-500);
+ --text-muted: var(--neutral-22);
+ --text-danger: var(--red-345);
+ --text-primary: var(--neutral-1);
+ --text-default: var(--neutral-5);
+ --text-strong: var(--neutral-2);
+ --text-secondary: var(--neutral-16);
+ --text-subtle: var(--neutral-23);
+
+ /* Text Feedback Colors */
+ --text-feedback-info: var(--blue-300);
+ --text-feedback-positive: var(--green-360);
+ --text-feedback-warning: var(--yellow-345);
+ --text-feedback-critical: var(--red-345);
+
+ /* Header Colors */
+ --header-primary: var(--neutral-1);
+ --header-secondary: var(--neutral-9);
+
+ /* Icons Colors */
+ --icon-strong: var(--neutral-2);
+ --icon-tertiary: var(--neutral-29);
+ --icon-voice-muted: var(--red-460);
+ --icon-subtle: var(--neutral-23);
+ --interactive-text-hover: var(--neutral-2);
+ --interactive-text-default: var(--neutral-23);
+ --interactive-text-active: var(--neutral-2);
+ --interactive-background-hover: var(--opacity-8);
+ --interactive-background-selected: var(--opacity-20);
+ --interactive-background-active: var(--opacity-16);
+ --slider-track-background: var(--neutral-55);
+
+ /* Border Colors */
+ --border-normal: var(--opacity-20);
+ --border-subtle: var(--opacity-12);
+ --border-muted: var(--opacity-4);
+ --app-border-frame: var(--opacity-12);
+
+ /* Icon Colors */
+ --icon-status-dnd: var(--red-400);
+ --icon-status-idle: var(--yellow-300);
+ --icon-status-online: var(--green-360);
+ --icon-status-offline: var(--neutral-28);
+
+ /* Statuses */
+ --status-speaking: var(--green-360);
+
+ /* Scrollbar Colors */
+ --scrollbar-thin-thumb: var(--neutral-38);
+ --scrollbar-thin-track: var(--transparent);
+
+ /* Channels */
+ --channels-default: var(--neutral-35);
+ --channel-icon: var(--neutral-35);
+ --channel-text-area-placeholder: var(--neutral-40);
+
+ /* Chat */
+ --chat-background-default: var(--neutral-80);
+
+ /* Shadow */
+ --shadow-high: 0 12px 24px 0 var(--opacity-black-24);
+ --shadow-low: 0 1px 4px 0 var(--opacity-black-24);
+}
\ No newline at end of file
diff --git a/src/app/styles/themes/light.scss b/src/app/styles/themes/light.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/styles/utils/functions.scss b/src/app/styles/utils/functions.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/styles/utils/mixins.scss b/src/app/styles/utils/mixins.scss
new file mode 100644
index 0000000..4da7347
--- /dev/null
+++ b/src/app/styles/utils/mixins.scss
@@ -0,0 +1,362 @@
+@mixin scrollbar-thin {
+ scrollbar-color: var(--scrollbar-thin-thumb) var(--scrollbar-thin-track);
+ scrollbar-width: thin;
+
+ &::-webkit-scrollbar {
+ width: var(--size-xxs);
+ height: var(--size-xxs);
+ }
+
+ &:-webkit-scrollbar-corner {
+ background-color: var(--transparent);
+ }
+
+ &::-webkit-scrollbar-thumb {
+ min-height: 2.5rem;
+ border: 2px solid transparent;
+ border-radius: var(--radius-xs);
+ background-clip: padding-box;
+ background-color: var(--scrollbar-thin-thumb);
+ }
+
+ &:not(:hover)::-webkit-scrollbar-thumb {
+ background: transparent;
+ }
+
+ &::-webkit-scrollbar-track {
+ border: 2px solid var(--scrollbar-thin-track);
+ border-color: var(--scrollbar-thin-track);
+ background-color: var(--scrollbar-thin-track);
+ }
+
+ &::-webkit-scrollbar-button {
+ display: none;
+ }
+}
+
+/* XXS */
+@mixin text-xxs-normal {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-10);
+ font-weight: var(--font-weight-normal);
+ line-height: var(--line-height-10);
+}
+
+@mixin text-xxs-medium {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-10);
+ font-weight: var(--font-weight-medium);
+ line-height: var(--line-height-10);
+}
+
+@mixin text-xxs-semibold {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-10);
+ font-weight: var(--font-weight-semibold);
+ line-height: var(--line-height-10);
+}
+
+@mixin text-xxs-bold {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-10);
+ font-weight: var(--font-weight-bold);
+ line-height: var(--line-height-10);
+}
+
+/* XS */
+@mixin text-xs-normal {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-12);
+ font-weight: var(--font-weight-normal);
+ line-height: var(--line-height-12);
+}
+
+@mixin text-xs-medium {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-12);
+ font-weight: var(--font-weight-medium);
+ line-height: var(--line-height-12);
+}
+
+@mixin text-xs-semibold {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-12);
+ font-weight: var(--font-weight-semibold);
+ line-height: var(--line-height-12);
+}
+
+@mixin text-xs-bold {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-12);
+ font-weight: var(--font-weight-bold);
+ line-height: var(--line-height-12);
+}
+
+/* SM */
+@mixin text-sm-normal {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-14);
+ font-weight: var(--font-weight-normal);
+ line-height: var(--line-height-14);
+}
+
+@mixin text-sm-medium {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-14);
+ font-weight: var(--font-weight-medium);
+ line-height: var(--line-height-14);
+}
+
+@mixin text-sm-semibold {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-14);
+ font-weight: var(--font-weight-semibold);
+ line-height: var(--line-height-14);
+}
+
+@mixin text-sm-bold {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-14);
+ font-weight: var(--font-weight-bold);
+ line-height: var(--line-height-14);
+}
+
+/* MD */
+@mixin text-md-normal {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-16);
+ font-weight: var(--font-weight-normal);
+ line-height: var(--line-height-16);
+}
+
+@mixin text-md-medium {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-16);
+ font-weight: var(--font-weight-medium);
+ line-height: var(--line-height-16);
+}
+
+@mixin text-md-semibold {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-16);
+ font-weight: var(--font-weight-semibold);
+ line-height: var(--line-height-16);
+}
+
+@mixin text-md-bold {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-16);
+ font-weight: var(--font-weight-bold);
+ line-height: var(--line-height-16);
+}
+
+/* LG */
+@mixin text-lg-normal {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-20);
+ font-weight: var(--font-weight-normal);
+ line-height: var(--line-height-20);
+}
+
+@mixin text-lg-medium {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-20);
+ font-weight: var(--font-weight-medium);
+ line-height: var(--line-height-20);
+}
+
+@mixin text-lg-semibold {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-20);
+ font-weight: var(--font-weight-semibold);
+ line-height: var(--line-height-20);
+}
+
+@mixin text-lg-bold {
+ font-family: var(--font-primary);
+ font-size: var(--font-size-20);
+ font-weight: var(--font-weight-bold);
+ line-height: var(--line-height-20);
+}
+
+/* Heading */
+
+/* SM */
+@mixin heading-sm-normal {
+ font-family: var(--font-display);
+ font-size: var(--font-size-14);
+ font-weight: var(--font-weight-normal);
+ line-height: var(--line-height-14);
+}
+
+@mixin heading-sm-medium {
+ font-family: var(--font-display);
+ font-size: var(--font-size-14);
+ font-weight: var(--font-weight-medium);
+ line-height: var(--line-height-14);
+}
+
+@mixin heading-sm-semibold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-14);
+ font-weight: var(--font-weight-semibold);
+ line-height: var(--line-height-14);
+}
+
+@mixin heading-sm-bold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-14);
+ font-weight: var(--font-weight-bold);
+ line-height: var(--line-height-14);
+}
+
+@mixin heading-sm-extrabold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-14);
+ font-weight: var(--font-weight-extrabold);
+ line-height: var(--line-height-14);
+}
+
+/* MD */
+@mixin heading-md-normal {
+ font-family: var(--font-display);
+ font-size: var(--font-size-16);
+ font-weight: var(--font-weight-normal);
+ line-height: var(--line-height-16);
+}
+
+@mixin heading-md-medium {
+ font-family: var(--font-display);
+ font-size: var(--font-size-16);
+ font-weight: var(--font-weight-medium);
+ line-height: var(--line-height-16);
+}
+
+@mixin heading-md-semibold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-16);
+ font-weight: var(--font-weight-semibold);
+ line-height: var(--line-height-16);
+}
+
+@mixin heading-md-bold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-16);
+ font-weight: var(--font-weight-bold);
+ line-height: var(--line-height-16);
+}
+
+@mixin heading-md-extrabold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-16);
+ font-weight: var(--font-weight-extrabold);
+ line-height: var(--line-height-16);
+}
+
+/* LG */
+@mixin heading-lg-normal {
+ font-family: var(--font-display);
+ font-size: var(--font-size-20);
+ font-weight: var(--font-weight-normal);
+ line-height: var(--line-height-20);
+}
+
+@mixin heading-lg-medium {
+ font-family: var(--font-display);
+ font-size: var(--font-size-20);
+ font-weight: var(--font-weight-medium);
+ line-height: var(--line-height-20);
+}
+
+@mixin heading-lg-semibold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-20);
+ font-weight: var(--font-weight-semibold);
+ line-height: var(--line-height-20);
+}
+
+@mixin heading-lg-bold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-20);
+ font-weight: var(--font-weight-bold);
+ line-height: var(--line-height-20);
+}
+
+@mixin heading-lg-extrabold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-20);
+ font-weight: var(--font-weight-extrabold);
+ line-height: var(--line-height-20);
+}
+
+/* XL */
+@mixin heading-xl-normal {
+ font-family: var(--font-display);
+ font-size: var(--font-size-24);
+ font-weight: var(--font-weight-normal);
+ line-height: var(--line-height-24);
+}
+
+@mixin heading-xl-medium {
+ font-family: var(--font-display);
+ font-size: var(--font-size-24);
+ font-weight: var(--font-weight-medium);
+ line-height: var(--line-height-24);
+}
+
+@mixin heading-xl-semibold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-24);
+ font-weight: var(--font-weight-semibold);
+ line-height: var(--line-height-24);
+}
+
+@mixin heading-xl-bold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-24);
+ font-weight: var(--font-weight-bold);
+ line-height: var(--line-height-24);
+}
+
+@mixin heading-xl-extrabold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-24);
+ font-weight: var(--font-weight-extrabold);
+ line-height: var(--line-height-24);
+}
+
+/* XXL */
+@mixin heading-xxl-normal {
+ font-family: var(--font-display);
+ font-size: var(--font-size-32);
+ font-weight: var(--font-weight-normal);
+ line-height: var(--line-height-32);
+}
+
+@mixin heading-xxl-medium {
+ font-family: var(--font-display);
+ font-size: var(--font-size-32);
+ font-weight: var(--font-weight-medium);
+ line-height: var(--line-height-32);
+}
+
+@mixin heading-xxl-semibold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-32);
+ font-weight: var(--font-weight-semibold);
+ line-height: var(--line-height-32);
+}
+
+@mixin heading-xxl-bold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-32);
+ font-weight: var(--font-weight-bold);
+ line-height: var(--line-height-32);
+}
+
+@mixin heading-xxl-extrabold {
+ font-family: var(--font-display);
+ font-size: var(--font-size-32);
+ font-weight: var(--font-weight-extrabold);
+ line-height: var(--line-height-32);
+}
\ No newline at end of file
diff --git a/src/app/styles/utils/variables.scss b/src/app/styles/utils/variables.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/ui/SplashScreen/SplashScreen.vue b/src/app/ui/SplashScreen/SplashScreen.vue
new file mode 100644
index 0000000..e264583
--- /dev/null
+++ b/src/app/ui/SplashScreen/SplashScreen.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
Знаете ли вы?
+
+
Мы придумали Patchcord, в алкогольном угаре.
+
+
+
+
Проблемы с подключением? Сообщите нам!
+
+
+
+
+ Напишите нам в Telegram
+
+
+
+
+ Состояние сервера
+
+
+
+
+
+
+
+
+
diff --git a/src/app/ui/SplashScreen/index.ts b/src/app/ui/SplashScreen/index.ts
new file mode 100644
index 0000000..9b8e3f7
--- /dev/null
+++ b/src/app/ui/SplashScreen/index.ts
@@ -0,0 +1,3 @@
+import SplashScreen from './SplashScreen.vue'
+
+export default SplashScreen
diff --git a/src/app/ui/SvgDefs/SvgDefs.vue b/src/app/ui/SvgDefs/SvgDefs.vue
new file mode 100644
index 0000000..753e871
--- /dev/null
+++ b/src/app/ui/SvgDefs/SvgDefs.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/ui/SvgDefs/index.ts b/src/app/ui/SvgDefs/index.ts
new file mode 100644
index 0000000..b29c681
--- /dev/null
+++ b/src/app/ui/SvgDefs/index.ts
@@ -0,0 +1,3 @@
+import SvgDefs from './SvgDefs.vue'
+
+export default SvgDefs
diff --git a/src/app/ui/index.ts b/src/app/ui/index.ts
new file mode 100644
index 0000000..bdbd6e0
--- /dev/null
+++ b/src/app/ui/index.ts
@@ -0,0 +1,4 @@
+import SvgDefs from './SvgDefs'
+import SplashScreen from './SplashScreen'
+
+export { SvgDefs, SplashScreen }
diff --git a/src/entities/channel/api/channel.api.ts b/src/entities/channel/api/channel.api.ts
new file mode 100644
index 0000000..5a46369
--- /dev/null
+++ b/src/entities/channel/api/channel.api.ts
@@ -0,0 +1,22 @@
+import { apiClient } from '@/shared/api'
+import type { Channel, CreateChannelDto, CreatePrivateChannelDto } from '../model/channel.types'
+
+export const channelApi = {
+ fetchChannels: (serverId: string) => apiClient.get(`/servers/${serverId}/channels`),
+
+ fetchChannelById: (channelId: string) => apiClient.get(`/channels/${channelId}`),
+
+ createChannel: (serverId: string, data: CreateChannelDto) =>
+ apiClient.post(`/servers/${serverId}/channels`, data),
+
+ updateChannel: (channelId: string, data: Partial) =>
+ apiClient.patch(`/channels/${channelId}`, data),
+
+ deleteChannel: (serverId: string, channelId: string) =>
+ apiClient.delete(`/servers/${serverId}/channels/${channelId}`),
+
+ fetchPrivateChannels: () => apiClient.get(`/users/@me/channels`),
+
+ createPrivateChannel: (data: CreatePrivateChannelDto) =>
+ apiClient.post(`/users/@me/channels`, data),
+}
diff --git a/src/entities/channel/api/index.ts b/src/entities/channel/api/index.ts
new file mode 100644
index 0000000..80b3a79
--- /dev/null
+++ b/src/entities/channel/api/index.ts
@@ -0,0 +1 @@
+export * from './channel.api'
diff --git a/src/entities/channel/index.ts b/src/entities/channel/index.ts
new file mode 100644
index 0000000..a114feb
--- /dev/null
+++ b/src/entities/channel/index.ts
@@ -0,0 +1,3 @@
+export * from './api'
+export * from './model'
+export * from './ui'
diff --git a/src/entities/channel/model/channel.store.ts b/src/entities/channel/model/channel.store.ts
new file mode 100644
index 0000000..21d64dc
--- /dev/null
+++ b/src/entities/channel/model/channel.store.ts
@@ -0,0 +1,137 @@
+import { reactive, computed } from 'vue'
+import { useRoute } from 'vue-router'
+import { defineStore } from 'pinia'
+import { channelApi } from '../api/channel.api'
+import type { Channel, CreateChannelDto } from './channel.types'
+
+export const useChannelStore = defineStore('channel', () => {
+ const route = useRoute()
+
+ // State
+ const channels = reactive>({})
+ const activeId = computed(() => route.params.channelId as string)
+ const activeChannel = computed(() => getChannelById(activeId.value))
+
+ // Getters
+ const getChannelsByServerId = (serverId: string) => channels[serverId] ?? []
+ const getActiveChannel = (): Channel | undefined => getChannelById(activeId.value)
+ const getChannelById = (channelId: string) =>
+ Object.values(channels)
+ .flat()
+ .find((ch) => ch.id === channelId)
+
+ // Actions
+ /**
+ * Получить каналы сервера
+ */
+ const fetchChannels = async (serverId: string) => {
+ try {
+ const { data } = await channelApi.fetchChannels(serverId)
+
+ channels[serverId] = data
+ } catch (err) {
+ console.error('Error fetching channels:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Создать новый канал
+ */
+ const createChannel = async (serverId: string, payload: CreateChannelDto) => {
+ try {
+ const { data: newChannel } = await channelApi.createChannel(serverId, payload)
+ addChannel(serverId, newChannel)
+
+ return newChannel
+ } catch (err) {
+ console.error('Error creating channel:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Обновить канал
+ */
+ const updateServer = async (serverId: string, channelId: string, payload: Partial) => {
+ try {
+ const { data: updatedChannel } = await channelApi.updateChannel(channelId, payload)
+
+ // Обновить в списке
+ const serverChannel = channels[serverId]
+ if (serverChannel) {
+ const index = serverChannel.findIndex((ch) => ch.id === channelId)
+ if (index !== -1) {
+ serverChannel[index] = updatedChannel
+ }
+ }
+
+ return updatedChannel
+ } catch (err) {
+ console.error('Error updating channel:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Удалить канал
+ */
+ const deleteChannel = async (serverId: string, channelId: string) => {
+ try {
+ await channelApi.deleteChannel(serverId, channelId)
+
+ removeChannel(serverId, channelId)
+ } catch (err) {
+ console.error('Error deleting channel:', err)
+ throw err
+ }
+ }
+
+ // Helpers
+ /**
+ * Добавить канал в state
+ */
+ function addChannel(serverId: string, channel: Channel) {
+ if (!channels[serverId]) {
+ channels[serverId] = []
+ }
+ channels[serverId].push(channel)
+ }
+
+ /**
+ * Удалить канал из state
+ */
+ function removeChannel(serverId: string, channelId: string) {
+ if (channels[serverId]) {
+ channels[serverId] = channels[serverId].filter((ch) => ch.id !== channelId)
+ }
+ }
+
+ /**
+ * Сбросить state
+ */
+ const $reset = () => {
+ Object.entries(channels).forEach(([serverId]) => {
+ delete channels[serverId]
+ })
+ }
+
+ return {
+ // State
+ channels,
+ activeId,
+ activeChannel,
+
+ // Getters
+ getChannelsByServerId,
+ getChannelById,
+ getActiveChannel,
+
+ // Actions
+ fetchChannels,
+ createChannel,
+ updateServer,
+ deleteChannel,
+ $reset,
+ }
+})
diff --git a/src/entities/channel/model/channel.types.ts b/src/entities/channel/model/channel.types.ts
new file mode 100644
index 0000000..1f56f41
--- /dev/null
+++ b/src/entities/channel/model/channel.types.ts
@@ -0,0 +1,33 @@
+export interface Channel {
+ id: string
+ type: ChannelTypes
+ server_id: string
+ position: number
+ name: string
+ last_message_id?: string
+ user_limit: number
+ recipients: string[]
+ owner_id: string
+ member_count: number
+ flags: number
+ created_at: number
+ updated_at: number
+}
+
+export interface CreateChannelDto {
+ name: string
+ type: number
+ position?: number
+ user_limit?: number
+}
+
+export interface CreatePrivateChannelDto {
+ recipients: string[]
+}
+
+export enum ChannelTypes {
+ TEXT = 0,
+ VOICE = 1,
+ DM = 2,
+ GROUP_DM = 3,
+}
diff --git a/src/entities/channel/model/index.ts b/src/entities/channel/model/index.ts
new file mode 100644
index 0000000..b69aef5
--- /dev/null
+++ b/src/entities/channel/model/index.ts
@@ -0,0 +1,2 @@
+export * from './channel.store'
+export * from './channel.types'
diff --git a/src/entities/channel/ui/PrivateChannel.vue b/src/entities/channel/ui/PrivateChannel.vue
new file mode 100644
index 0000000..0aaf6b1
--- /dev/null
+++ b/src/entities/channel/ui/PrivateChannel.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+ dredhorse5
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/entities/channel/ui/ServerChannel.vue b/src/entities/channel/ui/ServerChannel.vue
new file mode 100644
index 0000000..20d86f8
--- /dev/null
+++ b/src/entities/channel/ui/ServerChannel.vue
@@ -0,0 +1,132 @@
+
+
+
+
+
+ {{ props.channel.name }}
+
+
+
+
+
+
+
+
+
diff --git a/src/entities/channel/ui/index.ts b/src/entities/channel/ui/index.ts
new file mode 100644
index 0000000..08ccc0f
--- /dev/null
+++ b/src/entities/channel/ui/index.ts
@@ -0,0 +1,2 @@
+export { default as ServerChannel } from './ServerChannel.vue'
+export { default as PrivateChannel } from './PrivateChannel.vue'
diff --git a/src/entities/message/api/index.ts b/src/entities/message/api/index.ts
new file mode 100644
index 0000000..eafae26
--- /dev/null
+++ b/src/entities/message/api/index.ts
@@ -0,0 +1 @@
+export * from './message.api'
diff --git a/src/entities/message/api/message.api.ts b/src/entities/message/api/message.api.ts
new file mode 100644
index 0000000..c08b0d6
--- /dev/null
+++ b/src/entities/message/api/message.api.ts
@@ -0,0 +1,18 @@
+import { apiClient } from '@/shared/api'
+import type { Message, CreateMessageDto } from '../model/message.types'
+
+export const messageApi = {
+ fetchMessages: (channelId: string) => apiClient.get(`/channels/${channelId}/messages`),
+
+ fetchMessageById: (channelId: string, messageId: string) =>
+ apiClient.get(`/channels/${channelId}/messages/${messageId}`),
+
+ createMessage: (channelId: string, payload: CreateMessageDto) =>
+ apiClient.post(`/channels/${channelId}/messages`, payload),
+
+ updateMessage: (channelId: string, messageId: string, data: Partial) =>
+ apiClient.patch(`/channels/${channelId}/messages/${messageId}`, data),
+
+ deleteMessage: (channelId: string, messageId: string) =>
+ apiClient.delete(`/channels/${channelId}/messages/${messageId}`),
+}
diff --git a/src/entities/message/index.ts b/src/entities/message/index.ts
new file mode 100644
index 0000000..a114feb
--- /dev/null
+++ b/src/entities/message/index.ts
@@ -0,0 +1,3 @@
+export * from './api'
+export * from './model'
+export * from './ui'
diff --git a/src/entities/message/model/index.ts b/src/entities/message/model/index.ts
new file mode 100644
index 0000000..35cc8b5
--- /dev/null
+++ b/src/entities/message/model/index.ts
@@ -0,0 +1,2 @@
+export * from './message.store'
+export * from './message.types'
diff --git a/src/entities/message/model/message.store.ts b/src/entities/message/model/message.store.ts
new file mode 100644
index 0000000..3792678
--- /dev/null
+++ b/src/entities/message/model/message.store.ts
@@ -0,0 +1,159 @@
+import { reactive } from 'vue'
+import { defineStore } from 'pinia'
+import { messageApi } from '../api/message.api'
+import type { CreateMessageDto, Message } from './message.types'
+import { useSocket } from '@/shared/api/socket'
+
+export const useMessageStore = defineStore('message', () => {
+ const { socket } = useSocket()
+
+ // State
+ const messages = reactive>>({})
+
+ // Getters
+ const getMessages = (channelId: string): Message[] => {
+ return Object.values(messages[channelId] || {})
+ }
+
+ // Mutations
+ const addMessage = (message: Message) => {
+ const channelId = message.channel_id
+ if (!messages[channelId]) {
+ messages[channelId] = {}
+ }
+ messages[channelId][message.id] = message
+ }
+
+ const deleteMessageFromState = (channelId: string, messageId: string) => {
+ if (!messages[channelId]) return
+
+ delete messages[channelId][messageId]
+ }
+
+ // Actions
+ /**
+ * Загрузить список сообщений для канала
+ */
+ const fetchMessages = async (channelId: string) => {
+ try {
+ const { data } = await messageApi.fetchMessages(channelId)
+
+ if (!messages[channelId]) {
+ messages[channelId] = {}
+ }
+ const channelMessages = messages[channelId]
+
+ data.forEach((message) => (channelMessages[message.id] = message))
+ } catch (err) {
+ console.error('Error fetching messages:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Загрузить сообщение по ID
+ */
+ const fetchMessageById = async (channelId: string, messageId: string) => {
+ try {
+ const { data: message } = await messageApi.fetchMessageById(channelId, messageId)
+
+ if (!messages[channelId]) {
+ messages[channelId] = {}
+ }
+ const channelMessages = messages[channelId]
+
+ channelMessages[message.id] = message
+ } catch (err) {
+ console.error('Error fetching message:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Создать новое сообщение
+ */
+ const createMessage = async (channelId: string, payload: CreateMessageDto) => {
+ try {
+ const { data: newMessage } = await messageApi.createMessage(channelId, payload)
+
+ if (!messages[channelId]) {
+ messages[channelId] = {}
+ }
+ const channelMessages = messages[channelId]
+
+ channelMessages[newMessage.id] = newMessage
+ } catch (err) {
+ console.error('Error creating message:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Обновить сообщение
+ */
+ const updateMessage = async (
+ channelId: string,
+ messageId: string,
+ payload: Partial,
+ ) => {
+ try {
+ const { data: updatedMessage } = await messageApi.updateMessage(channelId, messageId, payload)
+
+ if (!messages[channelId]) {
+ messages[channelId] = {}
+ }
+
+ const channelMessages = messages[channelId]
+
+ channelMessages[updatedMessage.id] = updatedMessage
+ } catch (err) {
+ console.error('Error updating server:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Удалить сообщение
+ */
+ const deleteMessage = async (channelId: string, messageId: string) => {
+ try {
+ await messageApi.deleteMessage(channelId, messageId)
+
+ deleteMessageFromState(channelId, messageId)
+ } catch (err) {
+ console.error('Error deleting server:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Сбросить state
+ */
+ const $reset = () => {
+ Object.entries(messages).forEach(([id]) => {
+ delete messages[id]
+ })
+ }
+
+ // Socket events
+ socket.on('message:create', (message) => addMessage(message as Message))
+
+ return {
+ // State
+ messages,
+
+ // Getters
+ getMessages,
+
+ // Mutations
+ addMessage,
+
+ // Actions
+ fetchMessages,
+ fetchMessageById,
+ createMessage,
+ updateMessage,
+ deleteMessage,
+ $reset,
+ }
+})
diff --git a/src/entities/message/model/message.types.ts b/src/entities/message/model/message.types.ts
new file mode 100644
index 0000000..2b9a962
--- /dev/null
+++ b/src/entities/message/model/message.types.ts
@@ -0,0 +1,53 @@
+export enum MessageTypes {
+ DEFAULT = 0,
+ RECIPIENT_ADD = 1,
+ RECIPIENT_REMOVE = 2,
+ CALL = 3,
+ CHANNEL_NAME_CHANGE = 4,
+ CHANNEL_ICON_CHANGE = 5,
+ CHANNEL_PINNED_MESSAGE = 6,
+ USER_JOIN = 7,
+ REPLY = 8,
+ CHAT_INPUT_COMMAND = 9,
+}
+
+export enum MessageFlags {
+ NONE = 0,
+ PINNED = 1 << 0,
+ LOADING = 1 << 1,
+ IS_VOICE_MESSAGE = 1 << 2,
+}
+
+export interface IReaction {
+ emoji: string
+ count: number
+ users: string[]
+}
+
+export interface Message {
+ id: string
+ channel_id: string
+ author: {
+ id: string
+ username: string
+ global_name: string
+ bot: boolean
+ avatar?: string
+ }
+ content: string
+ timestamp: number
+ edited_timestamp: number | null
+ tts: boolean
+ attachments: string[]
+ reactions: IReaction[]
+ pinned: boolean
+ type: MessageTypes
+ flags: number
+ created_at: number
+ updated_at: number
+}
+
+export interface CreateMessageDto {
+ content: string
+ tts?: boolean
+}
diff --git a/src/entities/message/ui/MessageCard.vue b/src/entities/message/ui/MessageCard.vue
new file mode 100644
index 0000000..c119605
--- /dev/null
+++ b/src/entities/message/ui/MessageCard.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+ {{ props.message.content }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/entities/message/ui/MessageCardSkeleton.vue b/src/entities/message/ui/MessageCardSkeleton.vue
new file mode 100644
index 0000000..e4c3d66
--- /dev/null
+++ b/src/entities/message/ui/MessageCardSkeleton.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
diff --git a/src/entities/message/ui/index.ts b/src/entities/message/ui/index.ts
new file mode 100644
index 0000000..4a159b8
--- /dev/null
+++ b/src/entities/message/ui/index.ts
@@ -0,0 +1,4 @@
+import MessageCard from './MessageCard.vue'
+import MessageCardSkeleton from './MessageCardSkeleton.vue'
+
+export { MessageCard, MessageCardSkeleton }
diff --git a/src/entities/peer/index.ts b/src/entities/peer/index.ts
new file mode 100644
index 0000000..551001f
--- /dev/null
+++ b/src/entities/peer/index.ts
@@ -0,0 +1,2 @@
+export * from './model'
+export * from './ui'
diff --git a/src/entities/peer/model/index.ts b/src/entities/peer/model/index.ts
new file mode 100644
index 0000000..f73c306
--- /dev/null
+++ b/src/entities/peer/model/index.ts
@@ -0,0 +1,2 @@
+export * from './peer.types'
+export * from './peer.store'
diff --git a/src/entities/peer/model/peer.store.ts b/src/entities/peer/model/peer.store.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/entities/peer/model/peer.types.ts b/src/entities/peer/model/peer.types.ts
new file mode 100644
index 0000000..91dab83
--- /dev/null
+++ b/src/entities/peer/model/peer.types.ts
@@ -0,0 +1,6 @@
+export interface RemotePeer {
+ userId: string
+ audioStream?: MediaStream
+ videoStream?: MediaStream
+ isSpeaking?: boolean
+}
diff --git a/src/entities/peer/ui/PeerCard.vue b/src/entities/peer/ui/PeerCard.vue
new file mode 100644
index 0000000..316a4c3
--- /dev/null
+++ b/src/entities/peer/ui/PeerCard.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/entities/peer/ui/index.ts b/src/entities/peer/ui/index.ts
new file mode 100644
index 0000000..94038db
--- /dev/null
+++ b/src/entities/peer/ui/index.ts
@@ -0,0 +1,3 @@
+import PeerCard from './PeerCard.vue'
+
+export { PeerCard }
diff --git a/src/entities/relationship/api/index.ts b/src/entities/relationship/api/index.ts
new file mode 100644
index 0000000..fbefe74
--- /dev/null
+++ b/src/entities/relationship/api/index.ts
@@ -0,0 +1 @@
+export * from './relationship.api'
diff --git a/src/entities/relationship/api/relationship.api.ts b/src/entities/relationship/api/relationship.api.ts
new file mode 100644
index 0000000..e5a4649
--- /dev/null
+++ b/src/entities/relationship/api/relationship.api.ts
@@ -0,0 +1,26 @@
+import { apiClient } from '@/shared/api'
+import type { Relationship } from '../model/relationship.types'
+
+export const relationshipApi = {
+ fetchRelationships: () => apiClient.get(`/users/@me/relationships`),
+
+ sendFriendRequest: (payload: { username: string }) =>
+ apiClient.post(`/users/@me/relationships`, payload),
+
+ createRelationship: (userId: string, payload: { type: number }) =>
+ apiClient.put(`/users/@me/relationships/${userId}`, payload),
+
+ updateRelationship: (userId: string, payload: { nickname: string }) =>
+ apiClient.patch(`/users/@me/relationships/${userId}`, payload),
+
+ deleteRelationship: (userId: string) => apiClient.delete(`/users/@me/relationships/${userId}`),
+
+ bulkDeleteRelationships: () => apiClient.delete(`/users/@me/relationships`),
+
+ bulkAddRelationships: (payload: { userIds: string[] }) =>
+ apiClient.post(`/users/@me/relationships/bulk`, payload),
+
+ ignoreUser: (userId: string) => apiClient.put(`/users/@me/relationships/${userId}/ignore`),
+
+ unignoreUser: (userId: string) => apiClient.delete(`/users/@me/relationships/${userId}/ignore`),
+}
diff --git a/src/entities/relationship/index.ts b/src/entities/relationship/index.ts
new file mode 100644
index 0000000..a114feb
--- /dev/null
+++ b/src/entities/relationship/index.ts
@@ -0,0 +1,3 @@
+export * from './api'
+export * from './model'
+export * from './ui'
diff --git a/src/entities/relationship/model/index.ts b/src/entities/relationship/model/index.ts
new file mode 100644
index 0000000..2e4acaf
--- /dev/null
+++ b/src/entities/relationship/model/index.ts
@@ -0,0 +1,2 @@
+export * from './relationship.store'
+export * from './relationship.types'
diff --git a/src/entities/relationship/model/relationship.store.ts b/src/entities/relationship/model/relationship.store.ts
new file mode 100644
index 0000000..6d2dcf7
--- /dev/null
+++ b/src/entities/relationship/model/relationship.store.ts
@@ -0,0 +1,110 @@
+import { reactive } from 'vue'
+import { defineStore } from 'pinia'
+import { relationshipApi } from '../api/relationship.api'
+import type { Relationship } from './relationship.types'
+
+export const useRelationshipStore = defineStore('relationship', () => {
+ // State
+ const relationships = reactive>({})
+
+ const fetchRelationships = async () => {
+ try {
+ const { data } = await relationshipApi.fetchRelationships()
+
+ data.forEach((rel: Relationship) => {
+ relationships[rel.id] = rel
+ })
+ } catch (err) {
+ console.error('Error fetching relationships:', err)
+ throw err
+ }
+ }
+
+ const createRelationship = async (userId: string, payload: { type: number }) => {
+ try {
+ await relationshipApi.createRelationship(userId, payload)
+ } catch (err) {
+ console.error('Error creating relationship:', err)
+ throw err
+ }
+ }
+
+ const updateRelationship = async (userId: string, payload: { nickname: string }) => {
+ try {
+ await relationshipApi.updateRelationship(userId, payload)
+ } catch (err) {
+ console.error('Error updating relationship:', err)
+ throw err
+ }
+ }
+
+ const deleteRelationship = async (userId: string) => {
+ try {
+ await relationshipApi.deleteRelationship(userId)
+ } catch (err) {
+ console.error('Error deleting relationship:', err)
+ throw err
+ }
+ }
+
+ const bulkDeleteRelationships = async () => {
+ try {
+ await relationshipApi.bulkDeleteRelationships()
+ } catch (err) {
+ console.error('Error bulk deleting relationships:', err)
+ throw err
+ }
+ }
+
+ const bulkAddRelationships = async (payload: { userIds: string[] }) => {
+ try {
+ await relationshipApi.bulkAddRelationships(payload)
+ } catch (err) {
+ console.error('Error bulk adding relationships:', err)
+ throw err
+ }
+ }
+
+ const sendFriendRequest = async (payload: { username: string }) => {
+ try {
+ await relationshipApi.sendFriendRequest(payload)
+ } catch (err) {
+ console.error('Error creating friend request:', err)
+ throw err
+ }
+ }
+
+ const ignoreUser = async (userId: string) => {
+ try {
+ await relationshipApi.ignoreUser(userId)
+ } catch (err) {
+ console.error('Error ignoring user:', err)
+ throw err
+ }
+ }
+
+ const unignoreUser = async (userId: string) => {
+ try {
+ await relationshipApi.unignoreUser(userId)
+ } catch (err) {
+ console.error('Error unignoring user:', err)
+ throw err
+ }
+ }
+
+ return {
+ // State
+ relationships,
+
+ // Actions
+ fetchRelationships,
+ sendFriendRequest,
+ createRelationship,
+ updateRelationship,
+ deleteRelationship,
+ bulkDeleteRelationships,
+ bulkAddRelationships,
+ ignoreUser,
+ unignoreUser,
+ }
+})
diff --git a/src/entities/relationship/model/relationship.types.ts b/src/entities/relationship/model/relationship.types.ts
new file mode 100644
index 0000000..e242621
--- /dev/null
+++ b/src/entities/relationship/model/relationship.types.ts
@@ -0,0 +1,8 @@
+export interface Relationship {
+ id: string
+ user_id: string
+ friend_id: string
+ status: number
+ created_at: string
+ update_at: string
+}
diff --git a/src/entities/relationship/ui/index.ts b/src/entities/relationship/ui/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/entities/server/api/index.ts b/src/entities/server/api/index.ts
new file mode 100644
index 0000000..e87be62
--- /dev/null
+++ b/src/entities/server/api/index.ts
@@ -0,0 +1 @@
+export * from './server.api'
diff --git a/src/entities/server/api/server.api.ts b/src/entities/server/api/server.api.ts
new file mode 100644
index 0000000..c7e3b9d
--- /dev/null
+++ b/src/entities/server/api/server.api.ts
@@ -0,0 +1,17 @@
+import { apiClient } from '@/shared/api'
+import type { Server, CreateServerDto } from '../model/server.types'
+
+export const serverApi = {
+ fetchServers: () => apiClient.get('/servers'),
+
+ fetchMyServers: () => apiClient.get('/users/@me/servers'),
+
+ fetchServerById: (id: string) => apiClient.get(`/servers/${id}`),
+
+ createServer: (data: CreateServerDto) => apiClient.post('/servers', data),
+
+ updateServer: (id: string, data: Partial) =>
+ apiClient.patch(`/servers/${id}`, data),
+
+ deleteServer: (id: string) => apiClient.delete(`/servers/${id}`),
+}
diff --git a/src/entities/server/index.ts b/src/entities/server/index.ts
new file mode 100644
index 0000000..304e2b6
--- /dev/null
+++ b/src/entities/server/index.ts
@@ -0,0 +1,2 @@
+export * from './api'
+export * from './model'
diff --git a/src/entities/server/model/index.ts b/src/entities/server/model/index.ts
new file mode 100644
index 0000000..8a001c2
--- /dev/null
+++ b/src/entities/server/model/index.ts
@@ -0,0 +1,2 @@
+export * from './server.store'
+export * from './server.types'
diff --git a/src/entities/server/model/server.store.ts b/src/entities/server/model/server.store.ts
new file mode 100644
index 0000000..fc68290
--- /dev/null
+++ b/src/entities/server/model/server.store.ts
@@ -0,0 +1,119 @@
+import { reactive, computed } from 'vue'
+import { useRoute } from 'vue-router'
+import { defineStore } from 'pinia'
+import { serverApi } from '../api/server.api'
+import type { CreateServerDto, Server } from './server.types'
+
+export const useServerStore = defineStore('server', () => {
+ const route = useRoute()
+
+ // State
+ const servers = reactive>({})
+ const activeId = computed(() => route.params.serverId as string)
+ const activeServer = computed(() => getServerById(activeId.value))
+
+ // Getters
+ const getServerById = (id: string): Server | undefined => servers[id]
+ const getActiveServer = () => getServerById(activeId.value)
+
+ // Actions
+ /**
+ * Загрузить список серверов
+ */
+ const fetchMyServers = async () => {
+ try {
+ const { data } = await serverApi.fetchMyServers()
+ data.forEach((server) => (servers[server.id] = server))
+ } catch (err) {
+ console.error('Error fetching servers:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Загрузить сервер по ID
+ */
+ const fetchServerById = async (id: string) => {
+ try {
+ const { data: server } = await serverApi.fetchServerById(id)
+
+ servers[id] = server
+ return server
+ } catch (err) {
+ console.error('Error fetching server:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Создать новый сервер
+ */
+ const createServer = async (payload: CreateServerDto) => {
+ try {
+ const { data: newServer } = await serverApi.createServer(payload)
+ servers[newServer.id] = newServer
+
+ return newServer
+ } catch (err) {
+ console.error('Error creating server:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Обновить сервер
+ */
+ const updateServer = async (id: string, payload: Partial) => {
+ try {
+ const { data: updatedServer } = await serverApi.updateServer(id, payload)
+
+ servers[id] = updatedServer
+ return updatedServer
+ } catch (err) {
+ console.error('Error updating server:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Удалить сервер
+ */
+ const deleteServer = async (id: string) => {
+ try {
+ await serverApi.deleteServer(id)
+
+ delete servers[id]
+ } catch (err) {
+ console.error('Error deleting server:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Сбросить состояние
+ */
+ const $reset = () => {
+ Object.entries(servers).forEach(([id]) => {
+ delete servers[id]
+ })
+ }
+
+ return {
+ // State
+ servers,
+ activeId,
+ activeServer,
+
+ // Getters
+ getServerById,
+ getActiveServer,
+
+ // Actions
+ fetchMyServers,
+ fetchServerById,
+ createServer,
+ updateServer,
+ deleteServer,
+ $reset,
+ }
+})
diff --git a/src/entities/server/model/server.types.ts b/src/entities/server/model/server.types.ts
new file mode 100644
index 0000000..83a4c42
--- /dev/null
+++ b/src/entities/server/model/server.types.ts
@@ -0,0 +1,17 @@
+export interface Server {
+ id: string
+ name: string
+ icon?: string
+ owner_id: string
+ description: string
+ afk_timeout: number
+ created_at: string
+ updated_at: string
+}
+
+export interface CreateServerDto {
+ name: string
+ description?: string
+ icon?: string
+ afk_timeout?: number
+}
diff --git a/src/entities/session/api/index.ts b/src/entities/session/api/index.ts
new file mode 100644
index 0000000..512851d
--- /dev/null
+++ b/src/entities/session/api/index.ts
@@ -0,0 +1 @@
+export * from './session.api'
diff --git a/src/entities/session/api/session.api.ts b/src/entities/session/api/session.api.ts
new file mode 100644
index 0000000..ea22e6a
--- /dev/null
+++ b/src/entities/session/api/session.api.ts
@@ -0,0 +1,11 @@
+import type { LoginDto, RegisterDto, AuthResponse } from '../model/session.types'
+import { apiClient } from '@/shared/api'
+
+export const sessionApi = {
+ login: (credentials: LoginDto) => apiClient.post('/auth/login', credentials),
+
+ register: (credentials: RegisterDto) =>
+ apiClient.post('/auth/register', credentials),
+
+ logout: () => apiClient.post('/auth/logout'),
+}
diff --git a/src/entities/session/index.ts b/src/entities/session/index.ts
new file mode 100644
index 0000000..304e2b6
--- /dev/null
+++ b/src/entities/session/index.ts
@@ -0,0 +1,2 @@
+export * from './api'
+export * from './model'
diff --git a/src/entities/session/lib/validation.ts b/src/entities/session/lib/validation.ts
new file mode 100644
index 0000000..1c8539c
--- /dev/null
+++ b/src/entities/session/lib/validation.ts
@@ -0,0 +1,22 @@
+import { date, string } from 'zod'
+
+export const emailRule = string({ required_error: 'Обязательное поле' }).email('Некорректный email')
+
+export const passwordRule = string({ required_error: 'Обязательное поле' })
+ .min(8, 'Минимум 8 символов')
+ .max(72, 'Максимум 72 символов')
+
+export const usernameRule = string()
+ .min(2, 'Минимум 2 символа')
+ .max(32, 'Максимум 32 символов')
+ .optional()
+
+export const globalNameRule = string()
+ .min(1, 'Минимум 1 символ')
+ .max(32, 'Максимум 32 символов')
+ .optional()
+
+export const dateOfBirthRule = date()
+ .min(new Date('1873-01-01'))
+ .max(new Date('2022-01-01'))
+ .optional()
diff --git a/src/entities/session/model/index.ts b/src/entities/session/model/index.ts
new file mode 100644
index 0000000..79577e1
--- /dev/null
+++ b/src/entities/session/model/index.ts
@@ -0,0 +1,2 @@
+export * from './session.store'
+export * from './session.types'
diff --git a/src/entities/session/model/session.store.ts b/src/entities/session/model/session.store.ts
new file mode 100644
index 0000000..1276e4b
--- /dev/null
+++ b/src/entities/session/model/session.store.ts
@@ -0,0 +1,69 @@
+import { ref, computed } from 'vue'
+import { defineStore } from 'pinia'
+import { sessionApi } from '../api'
+import type { LoginDto, RegisterDto } from './session.types'
+
+export const useSessionStore = defineStore('session', () => {
+ // State
+ const userId = ref(null)
+ const isAuthenticated = ref(false)
+ const token = computed(() => localStorage.getItem('token') ?? null)
+
+ // Actions
+ const register = async (payload: RegisterDto) => {
+ try {
+ const { data } = await sessionApi.register(payload)
+
+ userId.value = data.user_id
+ localStorage.setItem('token', data.token)
+ isAuthenticated.value = true
+ } catch (err) {
+ console.error('Error logging in:', err)
+ throw err
+ }
+ }
+
+ const login = async (payload: LoginDto) => {
+ try {
+ const { data } = await sessionApi.login(payload)
+
+ localStorage.setItem('token', data.token)
+ userId.value = data.user_id
+ isAuthenticated.value = true
+ } catch (err) {
+ console.error('Error logging in:', err)
+ throw err
+ }
+ }
+
+ const logout = async () => {
+ try {
+ await sessionApi.logout()
+ $reset()
+ } catch (err) {
+ console.error('Error logging out:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Сбросить состояние
+ */
+ const $reset = () => {
+ userId.value = null
+ isAuthenticated.value = false
+ }
+
+ return {
+ // State
+ userId,
+ token,
+ isAuthenticated,
+
+ // Actions
+ register,
+ login,
+ logout,
+ $reset,
+ }
+})
diff --git a/src/entities/session/model/session.types.ts b/src/entities/session/model/session.types.ts
new file mode 100644
index 0000000..11e837b
--- /dev/null
+++ b/src/entities/session/model/session.types.ts
@@ -0,0 +1,17 @@
+export interface LoginDto {
+ email: string
+ password: string
+}
+
+export interface RegisterDto extends LoginDto {
+ username?: string
+ global_name?: string
+ date_of_birth?: Date
+ consent?: boolean
+ promotional_email_opt_in?: boolean
+}
+
+export interface AuthResponse {
+ user_id: string
+ token: string
+}
diff --git a/src/entities/user/api/index.ts b/src/entities/user/api/index.ts
new file mode 100644
index 0000000..8e58aba
--- /dev/null
+++ b/src/entities/user/api/index.ts
@@ -0,0 +1 @@
+export * from './user.api'
diff --git a/src/entities/user/api/user.api.ts b/src/entities/user/api/user.api.ts
new file mode 100644
index 0000000..435fbd9
--- /dev/null
+++ b/src/entities/user/api/user.api.ts
@@ -0,0 +1,25 @@
+import { apiClient } from '@/shared/api'
+import type { User, CurrentUser } from '../model/user.types'
+
+export const userApi = {
+ fetchCurrentUser: () => apiClient.get('/users/@me'),
+
+ updateCurrentUser: (data: Partial) =>
+ apiClient.patch('/users/@me', data),
+
+ updateUserAccount: (data: Partial) =>
+ apiClient.patch('/users/@me/account', data),
+
+ fetchRecentAvatars: () => apiClient.get('/users/@me/avatars'),
+
+ deleteRecentAvatar: (avatarId: string) => apiClient.delete(`/users/@me/avatars/${avatarId}`),
+
+ fetchUserById: (userId: string) => apiClient.get(`/users/${userId}`),
+
+ fetchUserProfile: (userId: string) => apiClient.get(`/users/${userId}`),
+
+ updateUserProfile: (userId: string, data: Partial) =>
+ apiClient.patch(`/users/${userId}`, data),
+
+ fetchRelationShips: (userId: string) => apiClient.get(`/users/${userId}/relationships`),
+}
diff --git a/src/entities/user/index.ts b/src/entities/user/index.ts
new file mode 100644
index 0000000..a114feb
--- /dev/null
+++ b/src/entities/user/index.ts
@@ -0,0 +1,3 @@
+export * from './api'
+export * from './model'
+export * from './ui'
diff --git a/src/entities/user/model/current-user.store.ts b/src/entities/user/model/current-user.store.ts
new file mode 100644
index 0000000..267a979
--- /dev/null
+++ b/src/entities/user/model/current-user.store.ts
@@ -0,0 +1,54 @@
+import { ref } from 'vue'
+import { defineStore } from 'pinia'
+import { userApi } from '../api/user.api'
+import { type CurrentUser } from './user.types'
+
+export const useCurrentUserStore = defineStore('current-user', () => {
+ // State
+ const currentUser = ref()
+
+ // Actions
+ /**
+ * Загрузить текущего пользователя
+ */
+ const fetchCurrentUser = async () => {
+ try {
+ const { data } = await userApi.fetchCurrentUser()
+
+ currentUser.value = data
+ } catch (err) {
+ console.error('Error fetching servers:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Обновить текущего пользователя
+ */
+ const updateCurrentUser = async (payload: Partial) => {
+ try {
+ const { data } = await userApi.updateCurrentUser(payload)
+ currentUser.value = data
+ } catch (err) {
+ console.error('Error updating user:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Сбросить состояние
+ */
+ const $reset = () => {
+ currentUser.value = undefined
+ }
+
+ return {
+ // State
+ currentUser,
+
+ // Actions
+ fetchCurrentUser,
+ updateCurrentUser,
+ $reset,
+ }
+})
diff --git a/src/entities/user/model/index.ts b/src/entities/user/model/index.ts
new file mode 100644
index 0000000..16a0ea3
--- /dev/null
+++ b/src/entities/user/model/index.ts
@@ -0,0 +1,3 @@
+export * from './user.store'
+export * from './user.types'
+export * from './current-user.store'
diff --git a/src/entities/user/model/user.store.ts b/src/entities/user/model/user.store.ts
new file mode 100644
index 0000000..bb4b3f1
--- /dev/null
+++ b/src/entities/user/model/user.store.ts
@@ -0,0 +1,58 @@
+import { reactive } from 'vue'
+import { defineStore } from 'pinia'
+import { userApi } from '../api/user.api'
+import { type User } from './user.types'
+
+export const useUserStore = defineStore('user', () => {
+ // State
+ const users = reactive>({})
+ const userProfiles = reactive>({})
+
+ // Actions
+ /**
+ * Загрузить пользователя по ID
+ */
+ const fetchCurrentUser = async (userId: string) => {
+ try {
+ const { data: user } = await userApi.fetchUserById(userId)
+
+ users[user.id] = user
+ } catch (err) {
+ console.error('Error fetching servers:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Получить профиль пользователя по ID
+ */
+ const fetchUserProfile = async (userId: string) => {
+ try {
+ const { data } = await userApi.fetchUserProfile(userId)
+
+ userProfiles[userId] = data
+ } catch (err) {
+ console.error('Error updating user:', err)
+ throw err
+ }
+ }
+
+ /**
+ * Сбросить состояние
+ */
+ const $reset = () => {
+ Object.entries(users).forEach(([id]) => {
+ delete users[id]
+ })
+ }
+
+ return {
+ // State
+ users,
+
+ // Actions
+ fetchCurrentUser,
+ fetchUserProfile,
+ $reset,
+ }
+})
diff --git a/src/entities/user/model/user.types.ts b/src/entities/user/model/user.types.ts
new file mode 100644
index 0000000..8de0c5e
--- /dev/null
+++ b/src/entities/user/model/user.types.ts
@@ -0,0 +1,28 @@
+export interface User {
+ id: string
+ username: string
+ avatar?: string
+ public_flags: number
+ flags: number
+ global_name?: string
+}
+
+export interface CurrentUser extends User {
+ email: string
+ verified: boolean
+ phone?: string
+ bio: string
+}
+
+export enum UserFlags {
+ NONE = 0,
+ DELETED = 1 << 0,
+ SELF_DELETED = 1 << 1,
+ DISABLED = 1 << 2,
+}
+
+export enum UserPublicFlags {
+ NONE = 0,
+ STAFF = 1 << 3,
+ SPAMMER = 1 << 4,
+}
diff --git a/src/entities/user/ui/index.ts b/src/entities/user/ui/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/features/add-friend/index.ts b/src/features/add-friend/index.ts
new file mode 100644
index 0000000..37f1d75
--- /dev/null
+++ b/src/features/add-friend/index.ts
@@ -0,0 +1,3 @@
+import AddFriendForm from './ui/AddFriendForm.vue'
+
+export default AddFriendForm
diff --git a/src/features/add-friend/model/index.ts b/src/features/add-friend/model/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/features/add-friend/model/schema.ts b/src/features/add-friend/model/schema.ts
new file mode 100644
index 0000000..a7c8a36
--- /dev/null
+++ b/src/features/add-friend/model/schema.ts
@@ -0,0 +1,7 @@
+import { z } from 'zod'
+
+export const addFriendSchema = z.object({
+ username: z.string().min(2, 'Минимум 2 символа').max(32, 'Максимум 32 символов'),
+})
+
+export type AddFriendFormData = z.infer
diff --git a/src/features/add-friend/model/useAddFriendForm.ts b/src/features/add-friend/model/useAddFriendForm.ts
new file mode 100644
index 0000000..27b6c2d
--- /dev/null
+++ b/src/features/add-friend/model/useAddFriendForm.ts
@@ -0,0 +1,49 @@
+import { ref, computed } from 'vue'
+import { useForm } from 'vee-validate'
+import { AxiosError } from 'axios'
+import { toTypedSchema } from '@vee-validate/zod'
+import { addFriendSchema, type AddFriendFormData } from './schema'
+import { useRelationshipStore } from '@/entities/relationship'
+
+export const useAddFriendForm = () => {
+ const serverError = ref(undefined)
+
+ const { handleSubmit, errors, isSubmitting, defineField, values, meta } =
+ useForm({
+ validationSchema: toTypedSchema(addFriendSchema),
+ })
+
+ const isValid = computed(() => meta.value.valid)
+
+ const [username, usernameAttrs] = defineField('username')
+
+ const onSubmit = handleSubmit(async (values) => {
+ serverError.value = undefined
+
+ try {
+ await useRelationshipStore().sendFriendRequest(values)
+ } catch (error: AxiosError | unknown) {
+ if (error instanceof AxiosError) {
+ serverError.value = error.response?.data?.message || 'Ошибка создания сервера'
+ } else {
+ serverError.value = 'Произошла непредвиденная ошибка'
+ }
+ }
+ })
+
+ return {
+ // Fields
+ username,
+ usernameAttrs,
+
+ // State
+ values,
+ errors,
+ serverError,
+ isSubmitting,
+ isValid,
+
+ // Actions
+ onSubmit,
+ }
+}
diff --git a/src/features/add-friend/ui/AddFriendForm.vue b/src/features/add-friend/ui/AddFriendForm.vue
new file mode 100644
index 0000000..40bc68d
--- /dev/null
+++ b/src/features/add-friend/ui/AddFriendForm.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/features/audio-control/index.ts b/src/features/audio-control/index.ts
new file mode 100644
index 0000000..551001f
--- /dev/null
+++ b/src/features/audio-control/index.ts
@@ -0,0 +1,2 @@
+export * from './model'
+export * from './ui'
diff --git a/src/features/audio-control/model/audio-control.store.ts b/src/features/audio-control/model/audio-control.store.ts
new file mode 100644
index 0000000..c475059
--- /dev/null
+++ b/src/features/audio-control/model/audio-control.store.ts
@@ -0,0 +1,76 @@
+import { defineStore } from 'pinia'
+import { ref, shallowRef, watch } from 'vue'
+import { useMediaDevices } from '@/shared/composables/useMediaDevices'
+
+export const useAudioStore = defineStore('audio-control', () => {
+ // State
+ const { audioInputs, audioOutputs, requestAudioPermissions, getAudioStream } = useMediaDevices()
+
+ const selectedMicId = ref(localStorage.getItem('mic-id') || 'default')
+ const selectedSpeakerId = ref(localStorage.getItem('speaker-id') || 'default')
+
+ const isMicMuted = ref(false)
+ const isDeafened = ref(false)
+
+ const currentStream = shallowRef(null)
+
+ // Actions
+ const init = async () => {
+ await requestAudioPermissions()
+ await updateStream()
+ }
+
+ const updateStream = async () => {
+ if (currentStream.value) {
+ currentStream.value.getTracks().forEach((t) => t.stop())
+ }
+
+ try {
+ const stream = await getAudioStream(selectedMicId.value)
+ applyMuteState(stream)
+ currentStream.value = stream
+ } catch (err) {
+ console.error('Failed to update stream:', err)
+ }
+ }
+
+ const applyMuteState = (stream: MediaStream | null = currentStream.value) => {
+ if (!stream) return
+ stream.getAudioTracks().forEach((track) => {
+ track.enabled = !isMicMuted.value && !isDeafened.value
+ })
+ }
+
+ const toggleMic = () => {
+ isMicMuted.value = !isMicMuted.value
+ applyMuteState()
+ }
+
+ const toggleDeafen = () => {
+ isDeafened.value = !isDeafened.value
+ applyMuteState()
+ }
+
+ // Следим за сменой устройств
+ watch([selectedMicId, selectedSpeakerId], () => {
+ localStorage.setItem('mic-id', selectedMicId.value)
+ localStorage.setItem('speaker-id', selectedSpeakerId.value)
+ updateStream()
+ })
+
+ return {
+ // State
+ audioInputs,
+ audioOutputs,
+ isMicMuted,
+ isDeafened,
+ selectedMicId,
+ selectedSpeakerId,
+ currentStream,
+
+ // Actions
+ init,
+ toggleMic,
+ toggleDeafen,
+ }
+})
diff --git a/src/features/audio-control/model/index.ts b/src/features/audio-control/model/index.ts
new file mode 100644
index 0000000..8d04a84
--- /dev/null
+++ b/src/features/audio-control/model/index.ts
@@ -0,0 +1 @@
+export * from './audio-control.store'
diff --git a/src/features/audio-control/ui/AudioButton.vue b/src/features/audio-control/ui/AudioButton.vue
new file mode 100644
index 0000000..1b2fc1e
--- /dev/null
+++ b/src/features/audio-control/ui/AudioButton.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/features/audio-control/ui/MicControl.vue b/src/features/audio-control/ui/MicControl.vue
new file mode 100644
index 0000000..0e967d1
--- /dev/null
+++ b/src/features/audio-control/ui/MicControl.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/features/audio-control/ui/SpeakerControl.vue b/src/features/audio-control/ui/SpeakerControl.vue
new file mode 100644
index 0000000..ee4f701
--- /dev/null
+++ b/src/features/audio-control/ui/SpeakerControl.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/features/audio-control/ui/index.ts b/src/features/audio-control/ui/index.ts
new file mode 100644
index 0000000..e2b4bb4
--- /dev/null
+++ b/src/features/audio-control/ui/index.ts
@@ -0,0 +1,2 @@
+export { default as MicControl } from './MicControl.vue'
+export { default as SpeakerControl } from './SpeakerControl.vue'
diff --git a/src/features/call-session/index.ts b/src/features/call-session/index.ts
new file mode 100644
index 0000000..116e668
--- /dev/null
+++ b/src/features/call-session/index.ts
@@ -0,0 +1 @@
+export * from './model'
diff --git a/src/features/call-session/model/call-session.store.ts b/src/features/call-session/model/call-session.store.ts
new file mode 100644
index 0000000..39c49db
--- /dev/null
+++ b/src/features/call-session/model/call-session.store.ts
@@ -0,0 +1,306 @@
+import { defineStore, storeToRefs } from 'pinia'
+import { ref, shallowRef, reactive, computed, watch } from 'vue'
+import { Device } from 'mediasoup-client'
+import type { Transport, Producer, RtpCapabilities } from 'mediasoup-client/types'
+import { useSocket } from '@/shared/api'
+import { useAudioStore } from '@/features/audio-control'
+import { useChannelStore } from '@/entities/channel'
+import { useSound } from '@/shared/composables'
+import type { RemotePeer } from '@/entities/peer'
+
+export const useCallSessionStore = defineStore('call-session', () => {
+ const { socket } = useSocket()
+ const { play } = useSound()
+ const audioStore = useAudioStore()
+ const { currentStream, isMicMuted } = storeToRefs(audioStore)
+ const { activeId: channelId } = storeToRefs(useChannelStore())
+
+ // State
+ const userId = ref(`user-${Math.floor(Math.random() * 1000)}`)
+ const joined = ref(false)
+ const speaking = ref(false)
+ const isVideoEnabled = ref(false)
+ const localVideoStream = shallowRef()
+
+ // reactive Map
+ const remotePeersMap = reactive(new Map())
+ const remotePeers = computed(() => Array.from(remotePeersMap.values()))
+
+ // Mediasoup internals
+ let device: Device | null = null
+ let producerTransport: Transport | null = null
+ let consumerTransport: Transport | null = null
+ let audioProducer: Producer | null = null
+ let videoProducer: Producer | null = null
+
+ let listenersAttached = false
+
+ // Socket listeners
+ const attachListeners = () => {
+ if (listenersAttached) return
+ socket.on('call:media:producer_added', onProducerAdded)
+ socket.on('call:user_joined', onUserJoined)
+ socket.on('call:user_left', onUserLeft)
+ socket.on('call:user_speaking', onUserSpeaking)
+ listenersAttached = true
+ }
+
+ const detachListeners = () => {
+ socket.off('call:media:producer_added', onProducerAdded)
+ socket.off('call:user_joined', onUserJoined)
+ socket.off('call:user_left', onUserLeft)
+ socket.off('call:user_speaking', onUserSpeaking)
+ listenersAttached = false
+ }
+
+ const onProducerAdded = async (data: {
+ producer_id: string
+ user_id: string
+ kind: 'audio' | 'video'
+ }) => {
+ if (data.user_id === userId.value) return
+ await consumeSource(data.producer_id, data.user_id, data.kind)
+ }
+
+ const onUserJoined = (data: { user_id: string }) => {
+ if (!remotePeersMap.has(data.user_id)) {
+ remotePeersMap.set(data.user_id, { userId: data.user_id })
+ }
+ }
+
+ const onUserLeft = (data: { user_id: string }) => {
+ remotePeersMap.delete(data.user_id)
+ }
+
+ const onUserSpeaking = (data: { user_id: string; speaking: boolean }) => {
+ const peer = remotePeersMap.get(data.user_id)
+ if (!peer) return
+ // Пересоздаём запись, чтобы reactive Map увидел изменение
+ remotePeersMap.set(data.user_id, { ...peer, isSpeaking: data.speaking })
+ }
+
+ // --- Actions ---
+ const join = async () => {
+ if (!userId.value || !channelId.value || joined.value) return
+
+ attachListeners()
+
+ socket.emit(
+ 'call:join',
+ { channel_id: channelId.value, user_id: userId.value },
+ async (response: { error?: string; rtpCapabilities: RtpCapabilities; peers?: any }) => {
+ if (response.error) return console.error(response.error)
+
+ device = new Device()
+ await device.load({ routerRtpCapabilities: response.rtpCapabilities })
+ await initTransports()
+
+ joined.value = true
+ play('user_join')
+
+ await publishMic()
+
+ if (response.peers) {
+ for (const peer of response.peers) {
+ if (!remotePeersMap.has(peer.userId)) {
+ remotePeersMap.set(peer.userId, { userId: peer.userId })
+ }
+ for (const producer of peer.producers) {
+ await consumeSource(producer.id, peer.userId, producer.kind)
+ }
+ }
+ }
+ },
+ )
+ }
+
+ const initTransports = async () => {
+ if (!device) return
+
+ const sendParams = await new Promise((resolve) =>
+ socket.emit('call:media:create_transport', { forceTcp: false }, resolve),
+ )
+
+ producerTransport = device.createSendTransport(sendParams)
+
+ producerTransport.on('connect', ({ dtlsParameters }, cb) => {
+ socket.emit(
+ 'call:media:connect_transport',
+ { transport_id: producerTransport!.id, dtls_parameters: dtlsParameters },
+ cb,
+ )
+ })
+
+ producerTransport.on('produce', ({ kind, rtpParameters, appData }, cb) => {
+ socket.emit(
+ 'call:media:produce',
+ {
+ transport_id: producerTransport!.id,
+ kind,
+ rtp_parameters: rtpParameters,
+ app_data: { ...appData, user_id: userId.value },
+ },
+ ({ id }: any) => cb({ id }),
+ )
+ })
+
+ const recvParams = await new Promise((resolve) =>
+ socket.emit('call:media:create_transport', { force_tcp: false }, resolve),
+ )
+
+ consumerTransport = device.createRecvTransport(recvParams)
+
+ consumerTransport.on('connect', ({ dtlsParameters }, cb) => {
+ socket.emit(
+ 'call:media:connect_transport',
+ { transport_id: consumerTransport!.id, dtls_parameters: dtlsParameters },
+ cb,
+ )
+ })
+ }
+
+ const publishMic = async () => {
+ if (!producerTransport) return
+
+ try {
+ if (!currentStream.value) await audioStore.init()
+
+ const track = currentStream.value?.getAudioTracks()[0]
+ if (!track) throw new Error('Аудио трек недоступен')
+
+ audioProducer = await producerTransport.produce({
+ track,
+ appData: { kind: 'audio' },
+ })
+
+ if (isMicMuted.value) audioProducer.pause()
+ } catch (e) {
+ console.error('Mic error', e)
+ }
+ }
+
+ const consumeSource = async (
+ producerId: string,
+ remoteUserId: string,
+ kind: 'audio' | 'video',
+ ) => {
+ if (!device || !consumerTransport) return
+
+ socket.emit(
+ 'call:media:consume',
+ {
+ transport_id: consumerTransport.id,
+ producer_id: producerId,
+ rtp_capabilities: device.rtpCapabilities,
+ },
+ async (params: any) => {
+ if (params.error) return console.error(params.error)
+
+ const consumer = await consumerTransport!.consume({
+ id: params.id,
+ producerId: params.producerId,
+ kind: params.kind,
+ rtpParameters: params.rtpParameters,
+ })
+
+ const stream = new MediaStream([consumer.track])
+ const existing = remotePeersMap.get(remoteUserId) ?? { userId: remoteUserId }
+
+ // Пересоздаём объект — иначе reactive не заметит изменение вложенного поля
+ remotePeersMap.set(remoteUserId, {
+ ...existing,
+ ...(kind === 'video' ? { videoStream: stream } : { audioStream: stream }),
+ })
+
+ socket.emit('call:media:resume', { consumer_id: consumer.id })
+ },
+ )
+ }
+
+ const toggleVideo = async () => {
+ if (isVideoEnabled.value) {
+ videoProducer?.close()
+ localVideoStream.value?.getTracks().forEach((t) => t.stop())
+ localVideoStream.value = undefined
+ videoProducer = null
+ isVideoEnabled.value = false
+ play('camera_off')
+ } else {
+ try {
+ const stream = await navigator.mediaDevices.getUserMedia({ video: true })
+ localVideoStream.value = stream
+
+ if (producerTransport) {
+ videoProducer = await producerTransport.produce({
+ track: stream.getVideoTracks()[0],
+ appData: { kind: 'video' },
+ })
+ }
+
+ isVideoEnabled.value = true
+ play('camera_on')
+ } catch (e) {
+ console.error('Camera error', e)
+ }
+ }
+ }
+
+ const leave = () => {
+ if (!joined.value) return
+
+ joined.value = false
+ detachListeners()
+
+ if (speaking.value) {
+ speaking.value = false
+ socket.emit('call:speaking', {
+ user_id: userId.value,
+ channel_id: channelId.value,
+ speaking: false,
+ })
+ }
+
+ localVideoStream.value?.getTracks().forEach((t) => t.stop())
+ localVideoStream.value = undefined
+ isVideoEnabled.value = false
+
+ audioProducer?.close()
+ videoProducer?.close()
+ audioProducer = null
+ videoProducer = null
+
+ remotePeersMap.clear()
+
+ socket.emit('call:leave')
+ play('user_leave')
+ }
+
+ // --- Watchers ---
+ watch(currentStream, async (newStream) => {
+ if (!newStream || !audioProducer) return
+ const track = newStream.getAudioTracks()[0]
+ if (track) await audioProducer.replaceTrack({ track })
+ })
+
+ watch(isMicMuted, (muted) => {
+ if (!audioProducer) return
+ if (muted) {
+ audioProducer.pause()
+ play('mute')
+ } else {
+ audioProducer.resume()
+ play('unmute')
+ }
+ })
+
+ return {
+ joined,
+ speaking,
+ isVideoEnabled,
+ localVideoStream,
+ remotePeers,
+ join,
+ leave,
+ toggleVideo,
+ }
+})
diff --git a/src/features/call-session/model/index.ts b/src/features/call-session/model/index.ts
new file mode 100644
index 0000000..dd1bfee
--- /dev/null
+++ b/src/features/call-session/model/index.ts
@@ -0,0 +1 @@
+export * from './call-session.store'
diff --git a/src/features/channel-tools/index.ts b/src/features/channel-tools/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/features/channel-tools/model/index.ts b/src/features/channel-tools/model/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/features/channel-tools/ui/index.ts b/src/features/channel-tools/ui/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/features/create-channel/index.ts b/src/features/create-channel/index.ts
new file mode 100644
index 0000000..b27c13f
--- /dev/null
+++ b/src/features/create-channel/index.ts
@@ -0,0 +1,3 @@
+import CreateChannelForm from './ui'
+
+export default CreateChannelForm
diff --git a/src/features/create-channel/model/index.ts b/src/features/create-channel/model/index.ts
new file mode 100644
index 0000000..69bde4f
--- /dev/null
+++ b/src/features/create-channel/model/index.ts
@@ -0,0 +1,3 @@
+import { useCreateChannelForm } from './useCreateChannelForm'
+export { createChannelSchema, type CreateChannelFormData } from './schema'
+export { useCreateChannelForm }
diff --git a/src/features/create-channel/model/schema.ts b/src/features/create-channel/model/schema.ts
new file mode 100644
index 0000000..046ba1a
--- /dev/null
+++ b/src/features/create-channel/model/schema.ts
@@ -0,0 +1,11 @@
+import { z } from 'zod'
+
+export const createChannelSchema = z.object({
+ name: z
+ .string({ required_error: 'Введите название канала' })
+ .min(1, 'Минимум 1 символ')
+ .max(100, 'Максимум 100 символов'),
+ type: z.number().int().min(0, 'Недопустимый тип канала').max(3, 'Недопустимый тип канала'),
+})
+
+export type CreateChannelFormData = z.infer
diff --git a/src/features/create-channel/model/useCreateChannelForm.ts b/src/features/create-channel/model/useCreateChannelForm.ts
new file mode 100644
index 0000000..4333707
--- /dev/null
+++ b/src/features/create-channel/model/useCreateChannelForm.ts
@@ -0,0 +1,57 @@
+import { ref, computed } from 'vue'
+import { useForm } from 'vee-validate'
+import { toTypedSchema } from '@vee-validate/zod'
+import { AxiosError } from 'axios'
+import { createChannelSchema, type CreateChannelFormData } from './schema'
+import { useChannelStore } from '@/entities/channel'
+
+export const useCreateChannelForm = (onSuccess?: () => void) => {
+ const serverError = ref(undefined)
+ const serverId = ref('')
+
+ const { handleSubmit, errors, isSubmitting, defineField, values, meta } =
+ useForm({
+ validationSchema: toTypedSchema(createChannelSchema),
+ initialValues: {
+ type: 0,
+ },
+ })
+
+ const isValid = computed(() => meta.value.valid)
+
+ const [name, nameAttrs] = defineField('name')
+ const [type, typeAttrs] = defineField('type')
+
+ const onSubmit = handleSubmit(async (values) => {
+ try {
+ await useChannelStore().createChannel(serverId.value, values)
+
+ if (onSuccess) onSuccess()
+ } catch (error: AxiosError | unknown) {
+ if (error instanceof AxiosError) {
+ serverError.value = error.response?.data?.message || 'Ошибка создания сервера'
+ } else {
+ serverError.value = 'Произошла непредвиденная ошибка'
+ }
+ }
+ })
+
+ return {
+ // Fields
+ name,
+ nameAttrs,
+ type,
+ typeAttrs,
+
+ // State
+ values,
+ errors,
+ serverError,
+ isSubmitting,
+ serverId,
+ isValid,
+
+ // Actions
+ onSubmit,
+ }
+}
diff --git a/src/features/create-channel/ui/CreateChannelForm.vue b/src/features/create-channel/ui/CreateChannelForm.vue
new file mode 100644
index 0000000..a91b47c
--- /dev/null
+++ b/src/features/create-channel/ui/CreateChannelForm.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
diff --git a/src/features/create-channel/ui/index.ts b/src/features/create-channel/ui/index.ts
new file mode 100644
index 0000000..81736aa
--- /dev/null
+++ b/src/features/create-channel/ui/index.ts
@@ -0,0 +1,3 @@
+import CreateChannelForm from './CreateChannelForm.vue'
+
+export default CreateChannelForm
diff --git a/src/features/create-dm/index.ts b/src/features/create-dm/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/features/create-dm/model/index.ts b/src/features/create-dm/model/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/features/create-dm/model/schema.ts b/src/features/create-dm/model/schema.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/features/create-dm/model/useCreateDMFrom.ts b/src/features/create-dm/model/useCreateDMFrom.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/features/create-dm/ui/CreateDMForm.vue b/src/features/create-dm/ui/CreateDMForm.vue
new file mode 100644
index 0000000..b4b4f95
--- /dev/null
+++ b/src/features/create-dm/ui/CreateDMForm.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/src/features/create-dm/ui/index.ts b/src/features/create-dm/ui/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/features/create-message/index.ts b/src/features/create-message/index.ts
new file mode 100644
index 0000000..a78db1f
--- /dev/null
+++ b/src/features/create-message/index.ts
@@ -0,0 +1,3 @@
+import CreateMessageForm from './ui'
+
+export default CreateMessageForm
diff --git a/src/features/create-message/model/index.ts b/src/features/create-message/model/index.ts
new file mode 100644
index 0000000..d50930b
--- /dev/null
+++ b/src/features/create-message/model/index.ts
@@ -0,0 +1,2 @@
+export * from './useCreateMessageForm'
+export * from './schema'
diff --git a/src/features/create-message/model/schema.ts b/src/features/create-message/model/schema.ts
new file mode 100644
index 0000000..e9b8561
--- /dev/null
+++ b/src/features/create-message/model/schema.ts
@@ -0,0 +1,7 @@
+import { z } from 'zod'
+
+export const createMessageSchema = z.object({
+ content: z.string().min(1).max(2000),
+})
+
+export type createMessageFormData = z.infer
diff --git a/src/features/create-message/model/useCreateMessageForm.ts b/src/features/create-message/model/useCreateMessageForm.ts
new file mode 100644
index 0000000..1322206
--- /dev/null
+++ b/src/features/create-message/model/useCreateMessageForm.ts
@@ -0,0 +1,57 @@
+import { ref } from 'vue'
+import { useForm } from 'vee-validate'
+import { storeToRefs } from 'pinia'
+import { toTypedSchema } from '@vee-validate/zod'
+import { AxiosError } from 'axios'
+import { createMessageSchema, type createMessageFormData } from './schema'
+import { useMessageStore } from '@/entities/message'
+import { useChannelStore } from '@/entities/channel'
+
+export const useCreateMessageForm = () => {
+ const channelStore = useChannelStore()
+ const { activeId: channelId } = storeToRefs(channelStore)
+
+ const { createMessage } = useMessageStore()
+ const serverError = ref(undefined)
+ const isSubmitting = ref(false)
+
+ const { errors, defineField, values } = useForm({
+ validationSchema: toTypedSchema(createMessageSchema),
+ })
+
+ const [content, contentAttrs] = defineField('content')
+
+ const onSubmit = async (content: string) => {
+ if (isSubmitting.value) return
+ isSubmitting.value = true
+ serverError.value = undefined
+
+ try {
+ await createMessage(channelId.value, { content })
+ } catch (error: AxiosError | unknown) {
+ if (error instanceof AxiosError) {
+ serverError.value = error.response?.data?.message || 'Ошибка создания сообщения'
+ } else {
+ serverError.value = 'Произошла непредвиденная ошибка'
+ }
+ } finally {
+ isSubmitting.value = false
+ }
+ }
+
+ return {
+ // Поля
+ content,
+ contentAttrs,
+
+ // Состояние формы
+ values,
+ errors,
+ serverError,
+ isSubmitting,
+ channelId,
+
+ // Методы
+ onSubmit,
+ }
+}
diff --git a/src/features/create-message/ui/ActionToolbar.vue b/src/features/create-message/ui/ActionToolbar.vue
new file mode 100644
index 0000000..dc3a3d4
--- /dev/null
+++ b/src/features/create-message/ui/ActionToolbar.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/src/features/create-message/ui/AttachAction.vue b/src/features/create-message/ui/AttachAction.vue
new file mode 100644
index 0000000..ca74282
--- /dev/null
+++ b/src/features/create-message/ui/AttachAction.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
diff --git a/src/features/create-message/ui/AttachmentArea.vue b/src/features/create-message/ui/AttachmentArea.vue
new file mode 100644
index 0000000..6fb792c
--- /dev/null
+++ b/src/features/create-message/ui/AttachmentArea.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/features/create-message/ui/CreateMessageForm.vue b/src/features/create-message/ui/CreateMessageForm.vue
new file mode 100644
index 0000000..57337bc
--- /dev/null
+++ b/src/features/create-message/ui/CreateMessageForm.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
diff --git a/src/features/create-message/ui/UploadInput.vue b/src/features/create-message/ui/UploadInput.vue
new file mode 100644
index 0000000..25b200e
--- /dev/null
+++ b/src/features/create-message/ui/UploadInput.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/features/create-message/ui/index.ts b/src/features/create-message/ui/index.ts
new file mode 100644
index 0000000..7790c46
--- /dev/null
+++ b/src/features/create-message/ui/index.ts
@@ -0,0 +1,3 @@
+import CreateMessageForm from './CreateMessageForm.vue'
+
+export default CreateMessageForm
diff --git a/src/features/create-server/index.ts b/src/features/create-server/index.ts
new file mode 100644
index 0000000..bcba84a
--- /dev/null
+++ b/src/features/create-server/index.ts
@@ -0,0 +1,5 @@
+import CreateServerForm from './ui/CreateServerForm.vue'
+export { useCreateServerForm } from './model/useCreateServerForm'
+export type { createServerSchema, CreateServerFormData } from './model/schema'
+
+export default CreateServerForm
diff --git a/src/features/create-server/model/index.ts b/src/features/create-server/model/index.ts
new file mode 100644
index 0000000..2c4a918
--- /dev/null
+++ b/src/features/create-server/model/index.ts
@@ -0,0 +1,8 @@
+import type { InjectionKey } from 'vue'
+import { useCreateServerForm } from './useCreateServerForm'
+export { createServerSchema, type CreateServerFormData } from './schema'
+export { useCreateServerForm }
+
+type CreateServerContext = ReturnType
+
+export const CREATE_SERVER_FORM_KEY: InjectionKey = Symbol('CreateServerForm')
diff --git a/src/features/create-server/model/schema.ts b/src/features/create-server/model/schema.ts
new file mode 100644
index 0000000..de54ed0
--- /dev/null
+++ b/src/features/create-server/model/schema.ts
@@ -0,0 +1,25 @@
+import { z } from 'zod'
+
+const base64ImageRegex =
+ /^data:image\/(png|jpg|jpeg|gif|webp);base64,([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/
+
+export const createServerSchema = z.object({
+ name: z
+ .string({ required_error: 'Введите название сервера' })
+ .min(2, 'Минимум 2 символа')
+ .max(100, 'Максимум 100 символов'),
+ icon: z
+ .string()
+ .optional()
+ .refine((val) => {
+ if (!val) return true
+ return base64ImageRegex.test(val)
+ }, 'Некорректный формат изображения')
+ .refine((val) => {
+ if (!val) return true
+ const sizeInBytes = (val.length * 3) / 4
+ return sizeInBytes <= 5 * 1024 * 1024
+ }, 'Изображение слишком большое (макс. 5МБ)'),
+})
+
+export type CreateServerFormData = z.infer
diff --git a/src/features/create-server/model/useCreateServerForm.ts b/src/features/create-server/model/useCreateServerForm.ts
new file mode 100644
index 0000000..96c9eef
--- /dev/null
+++ b/src/features/create-server/model/useCreateServerForm.ts
@@ -0,0 +1,86 @@
+import { ref, computed } from 'vue'
+import { useForm } from 'vee-validate'
+import { toTypedSchema } from '@vee-validate/zod'
+import { AxiosError } from 'axios'
+import { createServerSchema, type CreateServerFormData } from './schema'
+import { useServerStore } from '@/entities/server'
+import { useRouter } from 'vue-router'
+
+enum Step {
+ TEMPLATE = 0,
+ AUDIENCE = 1,
+ CUSTOMIZE = 2,
+}
+
+export const useCreateServerForm = (onSuccess?: () => void) => {
+ const router = useRouter()
+ const currentStep = ref(Step.TEMPLATE)
+ const serverError = ref(undefined)
+
+ const { handleSubmit, errors, isSubmitting, defineField, values, meta } =
+ useForm({
+ validationSchema: toTypedSchema(createServerSchema),
+ })
+
+ const isValid = computed(() => meta.value.valid)
+
+ const [name, nameAttrs] = defineField('name')
+ const [icon, iconAttrs] = defineField('icon')
+
+ const isLastStep = computed(() => currentStep.value === Step.CUSTOMIZE)
+ const isFirstStep = computed(() => currentStep.value === Step.TEMPLATE)
+
+ const nextStep: () => void = async () => {
+ currentStep.value++
+ }
+
+ const prevStep: () => void = () => {
+ if (!isFirstStep.value) {
+ currentStep.value--
+ }
+ }
+
+ const onSubmit = handleSubmit(async (values) => {
+ serverError.value = undefined
+
+ try {
+ const newServer = await useServerStore().createServer(values)
+
+ await router.push({ name: 'server', params: { serverId: newServer.id } })
+
+ if (onSuccess) onSuccess()
+ } catch (error: AxiosError | unknown) {
+ if (error instanceof AxiosError) {
+ serverError.value = error.response?.data?.message || 'Ошибка создания сервера'
+ } else {
+ serverError.value = 'Произошла непредвиденная ошибка'
+ }
+ }
+ })
+
+ return {
+ // Fields
+ name,
+ nameAttrs,
+ icon,
+ iconAttrs,
+
+ // State
+ values,
+ errors,
+ serverError,
+ isSubmitting,
+ isValid,
+
+ // Wizard state
+ currentStep,
+ isLastStep,
+ isFirstStep,
+ Step,
+
+ // Actions
+ nextStep,
+ prevStep,
+ onSubmit,
+ }
+}
diff --git a/src/features/create-server/ui/AudienceStep.vue b/src/features/create-server/ui/AudienceStep.vue
new file mode 100644
index 0000000..ac38c34
--- /dev/null
+++ b/src/features/create-server/ui/AudienceStep.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
Для меня и друзей
+
+
Для клуба или сообщества
+
+
+
+
+
+
+
diff --git a/src/features/create-server/ui/CreateServerForm.vue b/src/features/create-server/ui/CreateServerForm.vue
new file mode 100644
index 0000000..4fee7c7
--- /dev/null
+++ b/src/features/create-server/ui/CreateServerForm.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/src/features/create-server/ui/CustomizeStep.vue b/src/features/create-server/ui/CustomizeStep.vue
new file mode 100644
index 0000000..e9456f1
--- /dev/null
+++ b/src/features/create-server/ui/CustomizeStep.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
diff --git a/src/features/create-server/ui/PurposeOption.vue b/src/features/create-server/ui/PurposeOption.vue
new file mode 100644
index 0000000..c87f684
--- /dev/null
+++ b/src/features/create-server/ui/PurposeOption.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/features/create-server/ui/TemplateStep.vue b/src/features/create-server/ui/TemplateStep.vue
new file mode 100644
index 0000000..54c68eb
--- /dev/null
+++ b/src/features/create-server/ui/TemplateStep.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
Свой шаблон
+
+
+
+
Игры
+
+
Друзья
+
+
Учебная группа
+
+
Школьный клуб
+
+
Местное сообщество
+
+
Художники и авторы
+
+
+
+
+
+
+
+
+
diff --git a/src/features/login/index.ts b/src/features/login/index.ts
new file mode 100644
index 0000000..72caef4
--- /dev/null
+++ b/src/features/login/index.ts
@@ -0,0 +1,2 @@
+export { LoginForm } from './ui'
+export { useLoginForm, type LoginFormData } from './model'
diff --git a/src/features/login/model/index.ts b/src/features/login/model/index.ts
new file mode 100644
index 0000000..e1bd05c
--- /dev/null
+++ b/src/features/login/model/index.ts
@@ -0,0 +1,2 @@
+export { useLoginForm } from './useLoginForm'
+export { loginSchema, type LoginFormData } from './schema'
diff --git a/src/features/login/model/schema.ts b/src/features/login/model/schema.ts
new file mode 100644
index 0000000..e36d197
--- /dev/null
+++ b/src/features/login/model/schema.ts
@@ -0,0 +1,9 @@
+import { z } from 'zod'
+import { emailRule, passwordRule } from '@/entities/session/lib/validation'
+
+export const loginSchema = z.object({
+ email: emailRule,
+ password: passwordRule,
+})
+
+export type LoginFormData = z.infer
diff --git a/src/features/login/model/useLoginForm.ts b/src/features/login/model/useLoginForm.ts
new file mode 100644
index 0000000..b2545d1
--- /dev/null
+++ b/src/features/login/model/useLoginForm.ts
@@ -0,0 +1,63 @@
+import { ref } from 'vue'
+import { useRouter } from 'vue-router'
+import { useForm } from 'vee-validate'
+import { toTypedSchema } from '@vee-validate/zod'
+import { loginSchema } from './schema'
+import { AxiosError } from 'axios'
+import { useSessionStore } from '@/entities/session'
+
+export const useLoginForm = () => {
+ const router = useRouter()
+ const { login } = useSessionStore()
+ const serverError = ref(undefined)
+
+ const { handleSubmit, errors, isSubmitting, defineField } = useForm({
+ validationSchema: toTypedSchema(loginSchema),
+ })
+
+ const fieldOptions = {
+ validateOnInput: false,
+ validateOnModelUpdate: false,
+ validateOnBlur: false,
+ validateOnChange: false,
+ }
+
+ const [email, emailAttrs] = defineField('email', fieldOptions)
+ const [password, passwordAttrs] = defineField('password', fieldOptions)
+
+ const onSubmit = handleSubmit(async (values) => {
+ serverError.value = undefined
+
+ try {
+ await login(values)
+
+ await router.push({ name: 'friends' })
+ } catch (error: AxiosError | unknown) {
+ if (error instanceof AxiosError) {
+ if (error.response?.status === 401) {
+ serverError.value = 'Неверный email или пароль'
+ } else {
+ serverError.value = error.response?.data?.message || 'Ошибка входа'
+ }
+ } else {
+ serverError.value = 'Ошибка входа'
+ }
+ }
+ })
+
+ return {
+ // Поля
+ email,
+ emailAttrs,
+ password,
+ passwordAttrs,
+
+ // Состояние
+ errors,
+ serverError,
+ isSubmitting,
+
+ // Методы
+ onSubmit,
+ }
+}
diff --git a/src/features/login/ui/LoginForm.vue b/src/features/login/ui/LoginForm.vue
new file mode 100644
index 0000000..d2f1904
--- /dev/null
+++ b/src/features/login/ui/LoginForm.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/features/login/ui/index.ts b/src/features/login/ui/index.ts
new file mode 100644
index 0000000..d13bb0c
--- /dev/null
+++ b/src/features/login/ui/index.ts
@@ -0,0 +1 @@
+export { default as LoginForm } from './LoginForm.vue'
diff --git a/src/features/register/index.ts b/src/features/register/index.ts
new file mode 100644
index 0000000..776499f
--- /dev/null
+++ b/src/features/register/index.ts
@@ -0,0 +1,3 @@
+export { default as RegisterForm } from './ui/RegisterForm.vue'
+export { useRegisterForm } from './model/useRegisterForm'
+export type { registerSchema, RegisterFormData } from './model/schema'
diff --git a/src/features/register/model/index.ts b/src/features/register/model/index.ts
new file mode 100644
index 0000000..643ec8c
--- /dev/null
+++ b/src/features/register/model/index.ts
@@ -0,0 +1,2 @@
+export { useRegisterForm } from './useRegisterForm'
+export { registerSchema, type RegisterFormData } from './schema'
diff --git a/src/features/register/model/schema.ts b/src/features/register/model/schema.ts
new file mode 100644
index 0000000..a97889e
--- /dev/null
+++ b/src/features/register/model/schema.ts
@@ -0,0 +1,20 @@
+import { z } from 'zod'
+import {
+ usernameRule,
+ globalNameRule,
+ dateOfBirthRule,
+ emailRule,
+ passwordRule,
+} from '@/entities/session/lib/validation'
+
+export const registerSchema = z.object({
+ username: usernameRule,
+ global_name: globalNameRule,
+ email: emailRule,
+ password: passwordRule,
+ date_of_birth: dateOfBirthRule,
+ consent: z.boolean().optional(),
+ promotional_email_opt_in: z.boolean().optional(),
+})
+
+export type RegisterFormData = z.infer
diff --git a/src/features/register/model/useRegisterForm.ts b/src/features/register/model/useRegisterForm.ts
new file mode 100644
index 0000000..31cdf9e
--- /dev/null
+++ b/src/features/register/model/useRegisterForm.ts
@@ -0,0 +1,120 @@
+import { ref, computed } from 'vue'
+import { useRouter } from 'vue-router'
+import { useForm } from 'vee-validate'
+import { toTypedSchema } from '@vee-validate/zod'
+import { registerSchema } from './schema'
+import { AxiosError } from 'axios'
+import { useSessionStore } from '@/entities/session'
+
+interface MonthItem {
+ title: string
+ value: number
+}
+
+export const useRegisterForm = () => {
+ const router = useRouter()
+ const { register } = useSessionStore()
+ const serverError = ref(undefined)
+
+ const { handleSubmit, errors, isSubmitting, defineField } = useForm({
+ validationSchema: toTypedSchema(registerSchema),
+ })
+
+ const fieldOptions = {
+ validateOnInput: false,
+ validateOnModelUpdate: false,
+ validateOnBlur: false,
+ validateOnChange: false,
+ }
+
+ const [username, usernameAttrs] = defineField('username', fieldOptions)
+ const [globalName, globalNameAttrs] = defineField('global_name', fieldOptions)
+ const [email, emailAttrs] = defineField('email', fieldOptions)
+ const [password, passwordAttrs] = defineField('password', fieldOptions)
+ const [consent, consentAttrs] = defineField('consent')
+ const [promotionalEmailOptIn, promotionalEmailOptInAttrs] = defineField(
+ 'promotional_email_opt_in',
+ )
+
+ const selectedMonth = ref(null)
+ const selectedYear = ref(null)
+ const selectedDay = ref(null)
+
+ const maxYear = new Date().getFullYear() - 13
+ const years: number[] = Array.from({ length: 100 }, (_, index) => maxYear - index)
+
+ const months: MonthItem[] = Array.from({ length: 12 }, (_, i) => {
+ const monthNumber = i + 1
+ const date = new Date(2026, i, 1)
+ return {
+ title: date.toLocaleString('ru-RU', { month: 'long' }),
+ value: monthNumber,
+ }
+ })
+
+ const days = computed(() => {
+ if (!selectedMonth.value || !selectedYear.value) {
+ return Array.from({ length: 31 }, (_, i) => i + 1)
+ }
+ const daysInMonth = new Date(selectedYear.value, selectedMonth.value, 0).getDate()
+
+ return Array.from({ length: daysInMonth }, (_, i) => i + 1)
+ })
+
+ const onSubmit = handleSubmit(async (values) => {
+ serverError.value = undefined
+
+ try {
+ const dateOfBirthValue =
+ selectedDay.value && selectedMonth.value && selectedYear.value
+ ? new Date(selectedYear.value, selectedMonth.value - 1, selectedDay.value)
+ : undefined
+
+ await register({ ...values, date_of_birth: dateOfBirthValue })
+
+ await router.push({ name: 'friends' })
+ } catch (error: AxiosError | unknown) {
+ if (error instanceof AxiosError) {
+ if (error.response?.status === 400) {
+ serverError.value = 'Неверные данные'
+ } else if (error.response?.status === 409) {
+ serverError.value = 'Адрес электронной почты уже зарегистрирован'
+ }
+ } else {
+ serverError.value = 'Ошибка регистрации'
+ }
+ }
+ })
+
+ return {
+ // Поля
+ username,
+ usernameAttrs,
+ globalName,
+ globalNameAttrs,
+ email,
+ emailAttrs,
+ password,
+ passwordAttrs,
+ consent,
+ consentAttrs,
+ promotionalEmailOptIn,
+ promotionalEmailOptInAttrs,
+
+ // Date of birth
+ selectedDay,
+ selectedMonth,
+ selectedYear,
+ days,
+ months,
+ years,
+
+ // Состояние
+ errors,
+ serverError,
+ isSubmitting,
+
+ // Методы
+ onSubmit,
+ }
+}
diff --git a/src/features/register/ui/RegisterForm.vue b/src/features/register/ui/RegisterForm.vue
new file mode 100644
index 0000000..d2efacd
--- /dev/null
+++ b/src/features/register/ui/RegisterForm.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/features/register/ui/index.ts b/src/features/register/ui/index.ts
new file mode 100644
index 0000000..69a0138
--- /dev/null
+++ b/src/features/register/ui/index.ts
@@ -0,0 +1 @@
+export { default as RegisterForm } from './RegisterForm.vue'
diff --git a/src/global.d.ts b/src/global.d.ts
new file mode 100644
index 0000000..421d637
--- /dev/null
+++ b/src/global.d.ts
@@ -0,0 +1,7 @@
+export {}
+
+declare global {
+ interface Window {
+ app_ready: boolean
+ }
+}
diff --git a/src/main.ts b/src/main.ts
index fda1e6e..d1f2abb 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,12 +1,3 @@
-import { createApp } from 'vue'
-import { createPinia } from 'pinia'
+import { app } from './app'
-import App from './App.vue'
-import router from './router'
-
-const app = createApp(App)
-
-app.use(createPinia())
-app.use(router)
-
-app.mount('#app')
+app.mount('#app-mount')
diff --git a/src/pages/channel/index.ts b/src/pages/channel/index.ts
new file mode 100644
index 0000000..c5aa4ea
--- /dev/null
+++ b/src/pages/channel/index.ts
@@ -0,0 +1,3 @@
+import ChannelPage from './ui/ChannelPage.vue'
+
+export default ChannelPage
diff --git a/src/pages/channel/ui/ChannelPage.vue b/src/pages/channel/ui/ChannelPage.vue
new file mode 100644
index 0000000..9e5bcec
--- /dev/null
+++ b/src/pages/channel/ui/ChannelPage.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/src/pages/discovery/index.ts b/src/pages/discovery/index.ts
new file mode 100644
index 0000000..b74758c
--- /dev/null
+++ b/src/pages/discovery/index.ts
@@ -0,0 +1,3 @@
+import DiscoveryPage from './ui/DiscoveryPage.vue'
+
+export default DiscoveryPage
diff --git a/src/pages/discovery/ui/DiscoveryPage.vue b/src/pages/discovery/ui/DiscoveryPage.vue
new file mode 100644
index 0000000..8f01dcf
--- /dev/null
+++ b/src/pages/discovery/ui/DiscoveryPage.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/pages/dm-channel/index.ts b/src/pages/dm-channel/index.ts
new file mode 100644
index 0000000..49da3d2
--- /dev/null
+++ b/src/pages/dm-channel/index.ts
@@ -0,0 +1,3 @@
+import DmChannelPage from './ui/DmChannelPage.vue'
+
+export default DmChannelPage
diff --git a/src/pages/dm-channel/ui/DmChannelPage.vue b/src/pages/dm-channel/ui/DmChannelPage.vue
new file mode 100644
index 0000000..a8d5a5a
--- /dev/null
+++ b/src/pages/dm-channel/ui/DmChannelPage.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/dm-content/index.ts b/src/pages/dm-content/index.ts
new file mode 100644
index 0000000..52a549b
--- /dev/null
+++ b/src/pages/dm-content/index.ts
@@ -0,0 +1,3 @@
+import DmContent from './ui/DmContent.vue'
+
+export default DmContent
diff --git a/src/pages/dm-content/ui/DmContent.vue b/src/pages/dm-content/ui/DmContent.vue
new file mode 100644
index 0000000..e3bc8ac
--- /dev/null
+++ b/src/pages/dm-content/ui/DmContent.vue
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/pages/dm-sidebar/index.ts b/src/pages/dm-sidebar/index.ts
new file mode 100644
index 0000000..9f0ab01
--- /dev/null
+++ b/src/pages/dm-sidebar/index.ts
@@ -0,0 +1,3 @@
+import DmSidebar from './ui/DmSidebar.vue'
+
+export default DmSidebar
diff --git a/src/pages/dm-sidebar/ui/DmSidebar.vue b/src/pages/dm-sidebar/ui/DmSidebar.vue
new file mode 100644
index 0000000..7f0a4d1
--- /dev/null
+++ b/src/pages/dm-sidebar/ui/DmSidebar.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/dm-sidebar/ui/FriendsButton.vue b/src/pages/dm-sidebar/ui/FriendsButton.vue
new file mode 100644
index 0000000..a14b5c1
--- /dev/null
+++ b/src/pages/dm-sidebar/ui/FriendsButton.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+ Друзья
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/dm-sidebar/ui/FriendsHeader.vue b/src/pages/dm-sidebar/ui/FriendsHeader.vue
new file mode 100644
index 0000000..481ec24
--- /dev/null
+++ b/src/pages/dm-sidebar/ui/FriendsHeader.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/friends-content/index.ts b/src/pages/friends-content/index.ts
new file mode 100644
index 0000000..c752e36
--- /dev/null
+++ b/src/pages/friends-content/index.ts
@@ -0,0 +1,3 @@
+import FriendsContent from './ui/FriendsContent.vue'
+
+export default FriendsContent
diff --git a/src/pages/friends-content/ui/FriendsContent.vue b/src/pages/friends-content/ui/FriendsContent.vue
new file mode 100644
index 0000000..261764f
--- /dev/null
+++ b/src/pages/friends-content/ui/FriendsContent.vue
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/friends-content/ui/Tabs/AddFriend.vue b/src/pages/friends-content/ui/Tabs/AddFriend.vue
new file mode 100644
index 0000000..791be5f
--- /dev/null
+++ b/src/pages/friends-content/ui/Tabs/AddFriend.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/friends-content/ui/Tabs/AllFriends.vue b/src/pages/friends-content/ui/Tabs/AllFriends.vue
new file mode 100644
index 0000000..461ddc9
--- /dev/null
+++ b/src/pages/friends-content/ui/Tabs/AllFriends.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/friends-content/ui/Tabs/OnlineFriends.vue b/src/pages/friends-content/ui/Tabs/OnlineFriends.vue
new file mode 100644
index 0000000..461ddc9
--- /dev/null
+++ b/src/pages/friends-content/ui/Tabs/OnlineFriends.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/friends-content/ui/Tabs/PendingFriends.vue b/src/pages/friends-content/ui/Tabs/PendingFriends.vue
new file mode 100644
index 0000000..461ddc9
--- /dev/null
+++ b/src/pages/friends-content/ui/Tabs/PendingFriends.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/friends-content/ui/Tabs/PeopleColumn.vue b/src/pages/friends-content/ui/Tabs/PeopleColumn.vue
new file mode 100644
index 0000000..176d95d
--- /dev/null
+++ b/src/pages/friends-content/ui/Tabs/PeopleColumn.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+ Нет друзей. Нажмите «Добавить в друзья», чтобы отправить запросы дружбы.
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/friends-content/ui/Tabs/index.ts b/src/pages/friends-content/ui/Tabs/index.ts
new file mode 100644
index 0000000..36b6f9f
--- /dev/null
+++ b/src/pages/friends-content/ui/Tabs/index.ts
@@ -0,0 +1,4 @@
+export { default as AddFriend } from './AddFriend.vue'
+export { default as AllFriends } from './AllFriends.vue'
+export { default as OnlineFriends } from './OnlineFriends.vue'
+export { default as PendingFriends } from './PendingFriends.vue'
diff --git a/src/pages/login/index.ts b/src/pages/login/index.ts
new file mode 100644
index 0000000..ad580fc
--- /dev/null
+++ b/src/pages/login/index.ts
@@ -0,0 +1,3 @@
+import LoginPage from './ui/LoginPage.vue'
+
+export default LoginPage
diff --git a/src/pages/login/ui/LoginPage.vue b/src/pages/login/ui/LoginPage.vue
new file mode 100644
index 0000000..11724d6
--- /dev/null
+++ b/src/pages/login/ui/LoginPage.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/src/pages/not-found/index.ts b/src/pages/not-found/index.ts
new file mode 100644
index 0000000..1002984
--- /dev/null
+++ b/src/pages/not-found/index.ts
@@ -0,0 +1,3 @@
+import NotFoundPage from './ui/NotFoundPage.vue'
+
+export default NotFoundPage
diff --git a/src/pages/not-found/ui/NotFoundPage.vue b/src/pages/not-found/ui/NotFoundPage.vue
new file mode 100644
index 0000000..a723bfb
--- /dev/null
+++ b/src/pages/not-found/ui/NotFoundPage.vue
@@ -0,0 +1,48 @@
+
+
+
+
Заблудились?
+
+
+ Вы выглядите растерянно. Знаете, что помогает, если вы заблудились? Миска с горячей лапшой.
+ Присаживайтесь, мы тут в поте лица пытаемся приготовить что-нибудь вкусненькое.
+
+
+
+
+
+
+
+
diff --git a/src/pages/register/index.ts b/src/pages/register/index.ts
new file mode 100644
index 0000000..a000517
--- /dev/null
+++ b/src/pages/register/index.ts
@@ -0,0 +1,3 @@
+import RegisterPage from './ui/RegisterPage.vue'
+
+export default RegisterPage
diff --git a/src/pages/register/ui/RegisterPage.vue b/src/pages/register/ui/RegisterPage.vue
new file mode 100644
index 0000000..f919710
--- /dev/null
+++ b/src/pages/register/ui/RegisterPage.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/src/pages/reset/index.ts b/src/pages/reset/index.ts
new file mode 100644
index 0000000..dc07ecd
--- /dev/null
+++ b/src/pages/reset/index.ts
@@ -0,0 +1,3 @@
+import ResetPage from './ui/ResetPage.vue'
+
+export default ResetPage
diff --git a/src/pages/reset/ui/ResetPage.vue b/src/pages/reset/ui/ResetPage.vue
new file mode 100644
index 0000000..8f01dcf
--- /dev/null
+++ b/src/pages/reset/ui/ResetPage.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/pages/server-content/index.ts b/src/pages/server-content/index.ts
new file mode 100644
index 0000000..da07f66
--- /dev/null
+++ b/src/pages/server-content/index.ts
@@ -0,0 +1,3 @@
+import ServerContent from './ui/ServerContent.vue'
+
+export default ServerContent
diff --git a/src/pages/server-content/ui/ServerContent.vue b/src/pages/server-content/ui/ServerContent.vue
new file mode 100644
index 0000000..4d23952
--- /dev/null
+++ b/src/pages/server-content/ui/ServerContent.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/server-sidebar/index.ts b/src/pages/server-sidebar/index.ts
new file mode 100644
index 0000000..64f7530
--- /dev/null
+++ b/src/pages/server-sidebar/index.ts
@@ -0,0 +1,3 @@
+import ServerSidebar from './ui/ServerSidebar.vue'
+
+export default ServerSidebar
diff --git a/src/pages/server-sidebar/ui/ServerDropdown.vue b/src/pages/server-sidebar/ui/ServerDropdown.vue
new file mode 100644
index 0000000..424ab0e
--- /dev/null
+++ b/src/pages/server-sidebar/ui/ServerDropdown.vue
@@ -0,0 +1,62 @@
+
+
+
+
{{ activeServer?.name }}
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/server-sidebar/ui/ServerSidebar.vue b/src/pages/server-sidebar/ui/ServerSidebar.vue
new file mode 100644
index 0000000..b0b5f58
--- /dev/null
+++ b/src/pages/server-sidebar/ui/ServerSidebar.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
diff --git a/src/router/index.ts b/src/router/index.ts
deleted file mode 100644
index e1eab52..0000000
--- a/src/router/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { createRouter, createWebHistory } from 'vue-router'
-
-const router = createRouter({
- history: createWebHistory(import.meta.env.BASE_URL),
- routes: [],
-})
-
-export default router
diff --git a/src/shared/api/client/index.ts b/src/shared/api/client/index.ts
new file mode 100644
index 0000000..c9847df
--- /dev/null
+++ b/src/shared/api/client/index.ts
@@ -0,0 +1,33 @@
+import axios from 'axios'
+import { apiConfig } from '@/shared/config'
+
+const apiClient = axios.create({
+ baseURL: apiConfig.baseUrl,
+ timeout: apiConfig.timeout,
+ headers: {
+ Accept: 'application/json',
+ },
+})
+
+apiClient.interceptors.request.use((config) => {
+ const token = localStorage.getItem('token')
+ if (token) {
+ config.headers.Authorization = token
+ }
+ return config
+})
+
+apiClient.interceptors.response.use(
+ (response) => response,
+ async (error) => {
+ if (error.response.status === 401) {
+ localStorage.removeItem('token')
+ const { default: router } = await import('@/app/router')
+
+ router.push('/login')
+ }
+ return Promise.reject(error)
+ },
+)
+
+export default apiClient
diff --git a/src/shared/api/index.ts b/src/shared/api/index.ts
new file mode 100644
index 0000000..1f1b5db
--- /dev/null
+++ b/src/shared/api/index.ts
@@ -0,0 +1,4 @@
+import apiClient from './client'
+import { useSocket } from './socket'
+
+export { apiClient, useSocket }
diff --git a/src/shared/api/socket/index.ts b/src/shared/api/socket/index.ts
new file mode 100644
index 0000000..aaf3966
--- /dev/null
+++ b/src/shared/api/socket/index.ts
@@ -0,0 +1,41 @@
+import { ref } from 'vue'
+import { io, Socket } from 'socket.io-client'
+import { apiConfig } from '@/shared/config'
+
+let socket: Socket | null = null
+
+const isConnected = ref(false)
+
+export function useSocket() {
+ /**
+ * Инициализация сокета
+ */
+ ;(function initSocket() {
+ if (socket) return
+
+ socket = io(apiConfig.baseUrl, {
+ transports: ['polling', 'websocket'],
+ reconnection: true,
+ extraHeaders: {
+ authorization: localStorage.getItem('token') || '',
+ },
+ })
+
+ socket.on('connect', () => {
+ console.log('[Socket] Connected. ID:', socket?.id)
+ isConnected.value = true
+ })
+
+ socket.on('disconnect', (reason) => {
+ console.log('[Socket] Disconnected. Reason:', reason)
+ isConnected.value = false
+ })
+
+ socket.on('connect_error', (error) => {
+ console.error('[Socket] Connection error:', error.message)
+ isConnected.value = false
+ })
+ })()
+
+ return { socket, isConnected }
+}
diff --git a/src/shared/assets/icons/emoji/100.svg b/src/shared/assets/icons/emoji/100.svg
new file mode 100644
index 0000000..3d565cc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/100.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/1234.svg b/src/shared/assets/icons/emoji/1234.svg
new file mode 100644
index 0000000..316f8ee
--- /dev/null
+++ b/src/shared/assets/icons/emoji/1234.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/8ball.svg b/src/shared/assets/icons/emoji/8ball.svg
new file mode 100644
index 0000000..28abf33
--- /dev/null
+++ b/src/shared/assets/icons/emoji/8ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/a.svg b/src/shared/assets/icons/emoji/a.svg
new file mode 100644
index 0000000..5555b84
--- /dev/null
+++ b/src/shared/assets/icons/emoji/a.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ab.svg b/src/shared/assets/icons/emoji/ab.svg
new file mode 100644
index 0000000..d19a2a4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/abacus.svg b/src/shared/assets/icons/emoji/abacus.svg
new file mode 100644
index 0000000..c619bb0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/abacus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/abc.svg b/src/shared/assets/icons/emoji/abc.svg
new file mode 100644
index 0000000..e3e9464
--- /dev/null
+++ b/src/shared/assets/icons/emoji/abc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/abcd.svg b/src/shared/assets/icons/emoji/abcd.svg
new file mode 100644
index 0000000..3c2076e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/abcd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/accept.svg b/src/shared/assets/icons/emoji/accept.svg
new file mode 100644
index 0000000..4bb227b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/accept.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/adhesive_bandage.svg b/src/shared/assets/icons/emoji/adhesive_bandage.svg
new file mode 100644
index 0000000..41d5722
--- /dev/null
+++ b/src/shared/assets/icons/emoji/adhesive_bandage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/adult.svg b/src/shared/assets/icons/emoji/adult.svg
new file mode 100644
index 0000000..3c71659
--- /dev/null
+++ b/src/shared/assets/icons/emoji/adult.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/aerial_tramway.svg b/src/shared/assets/icons/emoji/aerial_tramway.svg
new file mode 100644
index 0000000..855c566
--- /dev/null
+++ b/src/shared/assets/icons/emoji/aerial_tramway.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/airplane.svg b/src/shared/assets/icons/emoji/airplane.svg
new file mode 100644
index 0000000..ebce3af
--- /dev/null
+++ b/src/shared/assets/icons/emoji/airplane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/airplane_arriving.svg b/src/shared/assets/icons/emoji/airplane_arriving.svg
new file mode 100644
index 0000000..ee10bec
--- /dev/null
+++ b/src/shared/assets/icons/emoji/airplane_arriving.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/airplane_departure.svg b/src/shared/assets/icons/emoji/airplane_departure.svg
new file mode 100644
index 0000000..7bcbb8c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/airplane_departure.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/airplane_small.svg b/src/shared/assets/icons/emoji/airplane_small.svg
new file mode 100644
index 0000000..fce6b51
--- /dev/null
+++ b/src/shared/assets/icons/emoji/airplane_small.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/alarm_clock.svg b/src/shared/assets/icons/emoji/alarm_clock.svg
new file mode 100644
index 0000000..ea9ad14
--- /dev/null
+++ b/src/shared/assets/icons/emoji/alarm_clock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/alembic.svg b/src/shared/assets/icons/emoji/alembic.svg
new file mode 100644
index 0000000..3fe8c15
--- /dev/null
+++ b/src/shared/assets/icons/emoji/alembic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/alien.svg b/src/shared/assets/icons/emoji/alien.svg
new file mode 100644
index 0000000..f6e98d1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/alien.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ambulance.svg b/src/shared/assets/icons/emoji/ambulance.svg
new file mode 100644
index 0000000..844dd40
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ambulance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/amphora.svg b/src/shared/assets/icons/emoji/amphora.svg
new file mode 100644
index 0000000..4c6b4d8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/amphora.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/anchor.svg b/src/shared/assets/icons/emoji/anchor.svg
new file mode 100644
index 0000000..09f3fe4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/anchor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/angel.svg b/src/shared/assets/icons/emoji/angel.svg
new file mode 100644
index 0000000..1233b93
--- /dev/null
+++ b/src/shared/assets/icons/emoji/angel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/anger.svg b/src/shared/assets/icons/emoji/anger.svg
new file mode 100644
index 0000000..78f797b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/anger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/anger_right.svg b/src/shared/assets/icons/emoji/anger_right.svg
new file mode 100644
index 0000000..3aba53c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/anger_right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/angry.svg b/src/shared/assets/icons/emoji/angry.svg
new file mode 100644
index 0000000..97e829a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/angry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/anguished.svg b/src/shared/assets/icons/emoji/anguished.svg
new file mode 100644
index 0000000..5c33852
--- /dev/null
+++ b/src/shared/assets/icons/emoji/anguished.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ant.svg b/src/shared/assets/icons/emoji/ant.svg
new file mode 100644
index 0000000..385b616
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ant.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/apple.svg b/src/shared/assets/icons/emoji/apple.svg
new file mode 100644
index 0000000..2fe9886
--- /dev/null
+++ b/src/shared/assets/icons/emoji/apple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/aquarius.svg b/src/shared/assets/icons/emoji/aquarius.svg
new file mode 100644
index 0000000..41e4623
--- /dev/null
+++ b/src/shared/assets/icons/emoji/aquarius.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/aries.svg b/src/shared/assets/icons/emoji/aries.svg
new file mode 100644
index 0000000..0f00d2d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/aries.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_backward.svg b/src/shared/assets/icons/emoji/arrow_backward.svg
new file mode 100644
index 0000000..af74e9c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_backward.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_double_down.svg b/src/shared/assets/icons/emoji/arrow_double_down.svg
new file mode 100644
index 0000000..5846fae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_double_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_double_up.svg b/src/shared/assets/icons/emoji/arrow_double_up.svg
new file mode 100644
index 0000000..a33e0f8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_double_up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_down.svg b/src/shared/assets/icons/emoji/arrow_down.svg
new file mode 100644
index 0000000..ed33773
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_down_small.svg b/src/shared/assets/icons/emoji/arrow_down_small.svg
new file mode 100644
index 0000000..09ec874
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_down_small.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_forward.svg b/src/shared/assets/icons/emoji/arrow_forward.svg
new file mode 100644
index 0000000..b373a4f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_forward.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_heading_down.svg b/src/shared/assets/icons/emoji/arrow_heading_down.svg
new file mode 100644
index 0000000..e06163b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_heading_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_heading_up.svg b/src/shared/assets/icons/emoji/arrow_heading_up.svg
new file mode 100644
index 0000000..7c2e675
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_heading_up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_left.svg b/src/shared/assets/icons/emoji/arrow_left.svg
new file mode 100644
index 0000000..6ac3f63
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_lower_left.svg b/src/shared/assets/icons/emoji/arrow_lower_left.svg
new file mode 100644
index 0000000..f327e40
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_lower_left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_lower_right.svg b/src/shared/assets/icons/emoji/arrow_lower_right.svg
new file mode 100644
index 0000000..129dd62
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_lower_right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_right.svg b/src/shared/assets/icons/emoji/arrow_right.svg
new file mode 100644
index 0000000..55d2d62
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_right_hook.svg b/src/shared/assets/icons/emoji/arrow_right_hook.svg
new file mode 100644
index 0000000..a9c586e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_right_hook.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_up.svg b/src/shared/assets/icons/emoji/arrow_up.svg
new file mode 100644
index 0000000..080ca19
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_up_down.svg b/src/shared/assets/icons/emoji/arrow_up_down.svg
new file mode 100644
index 0000000..e7a5254
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_up_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_up_small.svg b/src/shared/assets/icons/emoji/arrow_up_small.svg
new file mode 100644
index 0000000..b057a59
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_up_small.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_upper_left.svg b/src/shared/assets/icons/emoji/arrow_upper_left.svg
new file mode 100644
index 0000000..a6889d1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_upper_left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrow_upper_right.svg b/src/shared/assets/icons/emoji/arrow_upper_right.svg
new file mode 100644
index 0000000..62e4c0f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrow_upper_right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrows_clockwise.svg b/src/shared/assets/icons/emoji/arrows_clockwise.svg
new file mode 100644
index 0000000..e35eb88
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrows_clockwise.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/arrows_counterclockwise.svg b/src/shared/assets/icons/emoji/arrows_counterclockwise.svg
new file mode 100644
index 0000000..c88a827
--- /dev/null
+++ b/src/shared/assets/icons/emoji/arrows_counterclockwise.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/art.svg b/src/shared/assets/icons/emoji/art.svg
new file mode 100644
index 0000000..3bfdea0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/art.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/articulated_lorry.svg b/src/shared/assets/icons/emoji/articulated_lorry.svg
new file mode 100644
index 0000000..271fec1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/articulated_lorry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/asterisk.svg b/src/shared/assets/icons/emoji/asterisk.svg
new file mode 100644
index 0000000..d9c53c9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/asterisk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/astonished.svg b/src/shared/assets/icons/emoji/astonished.svg
new file mode 100644
index 0000000..e279321
--- /dev/null
+++ b/src/shared/assets/icons/emoji/astonished.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/athletic_shoe.svg b/src/shared/assets/icons/emoji/athletic_shoe.svg
new file mode 100644
index 0000000..f0c998c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/athletic_shoe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/atm.svg b/src/shared/assets/icons/emoji/atm.svg
new file mode 100644
index 0000000..e4c0000
--- /dev/null
+++ b/src/shared/assets/icons/emoji/atm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/atom.svg b/src/shared/assets/icons/emoji/atom.svg
new file mode 100644
index 0000000..385c18c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/atom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/auto_rickshaw.svg b/src/shared/assets/icons/emoji/auto_rickshaw.svg
new file mode 100644
index 0000000..aae4e94
--- /dev/null
+++ b/src/shared/assets/icons/emoji/auto_rickshaw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/avocado.svg b/src/shared/assets/icons/emoji/avocado.svg
new file mode 100644
index 0000000..ed1d9f9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/avocado.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/axe.svg b/src/shared/assets/icons/emoji/axe.svg
new file mode 100644
index 0000000..f886dfa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/axe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/b.svg b/src/shared/assets/icons/emoji/b.svg
new file mode 100644
index 0000000..f77618a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/b.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/baby.svg b/src/shared/assets/icons/emoji/baby.svg
new file mode 100644
index 0000000..e065d3b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/baby.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/baby_bottle.svg b/src/shared/assets/icons/emoji/baby_bottle.svg
new file mode 100644
index 0000000..61f6c8f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/baby_bottle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/baby_chick.svg b/src/shared/assets/icons/emoji/baby_chick.svg
new file mode 100644
index 0000000..1286ed3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/baby_chick.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/baby_symbol.svg b/src/shared/assets/icons/emoji/baby_symbol.svg
new file mode 100644
index 0000000..300b10e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/baby_symbol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/back.svg b/src/shared/assets/icons/emoji/back.svg
new file mode 100644
index 0000000..ddf8fbd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/back.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bacon.svg b/src/shared/assets/icons/emoji/bacon.svg
new file mode 100644
index 0000000..82d4c82
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bacon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/badger.svg b/src/shared/assets/icons/emoji/badger.svg
new file mode 100644
index 0000000..92f42fd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/badger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/badminton.svg b/src/shared/assets/icons/emoji/badminton.svg
new file mode 100644
index 0000000..143f8ea
--- /dev/null
+++ b/src/shared/assets/icons/emoji/badminton.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bagel.svg b/src/shared/assets/icons/emoji/bagel.svg
new file mode 100644
index 0000000..6a65f4c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bagel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/baggage_claim.svg b/src/shared/assets/icons/emoji/baggage_claim.svg
new file mode 100644
index 0000000..63edd5a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/baggage_claim.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ballet_shoes.svg b/src/shared/assets/icons/emoji/ballet_shoes.svg
new file mode 100644
index 0000000..a8df4c6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ballet_shoes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/balloon.svg b/src/shared/assets/icons/emoji/balloon.svg
new file mode 100644
index 0000000..6d431bc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/balloon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ballot_box.svg b/src/shared/assets/icons/emoji/ballot_box.svg
new file mode 100644
index 0000000..9c643d3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ballot_box.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ballot_box_with_check.svg b/src/shared/assets/icons/emoji/ballot_box_with_check.svg
new file mode 100644
index 0000000..904d0fc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ballot_box_with_check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bamboo.svg b/src/shared/assets/icons/emoji/bamboo.svg
new file mode 100644
index 0000000..a774540
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bamboo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/banana.svg b/src/shared/assets/icons/emoji/banana.svg
new file mode 100644
index 0000000..b4120ba
--- /dev/null
+++ b/src/shared/assets/icons/emoji/banana.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bangbang.svg b/src/shared/assets/icons/emoji/bangbang.svg
new file mode 100644
index 0000000..d3579ee
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bangbang.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/banjo.svg b/src/shared/assets/icons/emoji/banjo.svg
new file mode 100644
index 0000000..da6e25d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/banjo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bank.svg b/src/shared/assets/icons/emoji/bank.svg
new file mode 100644
index 0000000..2fd3fb0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bank.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bar_chart.svg b/src/shared/assets/icons/emoji/bar_chart.svg
new file mode 100644
index 0000000..3c572cb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bar_chart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/barber.svg b/src/shared/assets/icons/emoji/barber.svg
new file mode 100644
index 0000000..33ed332
--- /dev/null
+++ b/src/shared/assets/icons/emoji/barber.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/baseball.svg b/src/shared/assets/icons/emoji/baseball.svg
new file mode 100644
index 0000000..210b8ef
--- /dev/null
+++ b/src/shared/assets/icons/emoji/baseball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/basket.svg b/src/shared/assets/icons/emoji/basket.svg
new file mode 100644
index 0000000..947d954
--- /dev/null
+++ b/src/shared/assets/icons/emoji/basket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/basketball.svg b/src/shared/assets/icons/emoji/basketball.svg
new file mode 100644
index 0000000..2469395
--- /dev/null
+++ b/src/shared/assets/icons/emoji/basketball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bat.svg b/src/shared/assets/icons/emoji/bat.svg
new file mode 100644
index 0000000..4ebb5ad
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bath.svg b/src/shared/assets/icons/emoji/bath.svg
new file mode 100644
index 0000000..1ccfa20
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bath.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bathtub.svg b/src/shared/assets/icons/emoji/bathtub.svg
new file mode 100644
index 0000000..399bd44
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bathtub.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/battery.svg b/src/shared/assets/icons/emoji/battery.svg
new file mode 100644
index 0000000..66d420f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/battery.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/beach.svg b/src/shared/assets/icons/emoji/beach.svg
new file mode 100644
index 0000000..9428f90
--- /dev/null
+++ b/src/shared/assets/icons/emoji/beach.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/beach_umbrella.svg b/src/shared/assets/icons/emoji/beach_umbrella.svg
new file mode 100644
index 0000000..589f385
--- /dev/null
+++ b/src/shared/assets/icons/emoji/beach_umbrella.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bear.svg b/src/shared/assets/icons/emoji/bear.svg
new file mode 100644
index 0000000..5022441
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bearded_person.svg b/src/shared/assets/icons/emoji/bearded_person.svg
new file mode 100644
index 0000000..edabdc0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bearded_person.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bed.svg b/src/shared/assets/icons/emoji/bed.svg
new file mode 100644
index 0000000..9c34ec0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bee.svg b/src/shared/assets/icons/emoji/bee.svg
new file mode 100644
index 0000000..31e7882
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bee.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/beer.svg b/src/shared/assets/icons/emoji/beer.svg
new file mode 100644
index 0000000..9e6a547
--- /dev/null
+++ b/src/shared/assets/icons/emoji/beer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/beers.svg b/src/shared/assets/icons/emoji/beers.svg
new file mode 100644
index 0000000..a8bcb20
--- /dev/null
+++ b/src/shared/assets/icons/emoji/beers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/beetle.svg b/src/shared/assets/icons/emoji/beetle.svg
new file mode 100644
index 0000000..f314ca9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/beetle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/beginner.svg b/src/shared/assets/icons/emoji/beginner.svg
new file mode 100644
index 0000000..a6b9fbe
--- /dev/null
+++ b/src/shared/assets/icons/emoji/beginner.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bell.svg b/src/shared/assets/icons/emoji/bell.svg
new file mode 100644
index 0000000..9e89a7c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bell.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bellhop.svg b/src/shared/assets/icons/emoji/bellhop.svg
new file mode 100644
index 0000000..80343b6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bellhop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bento.svg b/src/shared/assets/icons/emoji/bento.svg
new file mode 100644
index 0000000..c481184
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bento.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/beverage_box.svg b/src/shared/assets/icons/emoji/beverage_box.svg
new file mode 100644
index 0000000..51a3f26
--- /dev/null
+++ b/src/shared/assets/icons/emoji/beverage_box.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bike.svg b/src/shared/assets/icons/emoji/bike.svg
new file mode 100644
index 0000000..b3626ae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bike.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bikini.svg b/src/shared/assets/icons/emoji/bikini.svg
new file mode 100644
index 0000000..ed327f1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bikini.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/billed_cap.svg b/src/shared/assets/icons/emoji/billed_cap.svg
new file mode 100644
index 0000000..c2dd6c6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/billed_cap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/biohazard.svg b/src/shared/assets/icons/emoji/biohazard.svg
new file mode 100644
index 0000000..6e7d858
--- /dev/null
+++ b/src/shared/assets/icons/emoji/biohazard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bird.svg b/src/shared/assets/icons/emoji/bird.svg
new file mode 100644
index 0000000..06d93a9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bird.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/birthday.svg b/src/shared/assets/icons/emoji/birthday.svg
new file mode 100644
index 0000000..35f9a00
--- /dev/null
+++ b/src/shared/assets/icons/emoji/birthday.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/black_circle.svg b/src/shared/assets/icons/emoji/black_circle.svg
new file mode 100644
index 0000000..169b72c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/black_circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/black_heart.svg b/src/shared/assets/icons/emoji/black_heart.svg
new file mode 100644
index 0000000..51ec883
--- /dev/null
+++ b/src/shared/assets/icons/emoji/black_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/black_joker.svg b/src/shared/assets/icons/emoji/black_joker.svg
new file mode 100644
index 0000000..0d05191
--- /dev/null
+++ b/src/shared/assets/icons/emoji/black_joker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/black_large_square.svg b/src/shared/assets/icons/emoji/black_large_square.svg
new file mode 100644
index 0000000..42b60e3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/black_large_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/black_medium_small_square.svg b/src/shared/assets/icons/emoji/black_medium_small_square.svg
new file mode 100644
index 0000000..9c0abf0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/black_medium_small_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/black_medium_square.svg b/src/shared/assets/icons/emoji/black_medium_square.svg
new file mode 100644
index 0000000..b91ca80
--- /dev/null
+++ b/src/shared/assets/icons/emoji/black_medium_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/black_nib.svg b/src/shared/assets/icons/emoji/black_nib.svg
new file mode 100644
index 0000000..8eaec69
--- /dev/null
+++ b/src/shared/assets/icons/emoji/black_nib.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/black_small_square.svg b/src/shared/assets/icons/emoji/black_small_square.svg
new file mode 100644
index 0000000..cb4f63b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/black_small_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/black_square_button.svg b/src/shared/assets/icons/emoji/black_square_button.svg
new file mode 100644
index 0000000..a2e37de
--- /dev/null
+++ b/src/shared/assets/icons/emoji/black_square_button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blond_haired_man.svg b/src/shared/assets/icons/emoji/blond_haired_man.svg
new file mode 100644
index 0000000..f73f9f5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blond_haired_man.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blond_haired_person.svg b/src/shared/assets/icons/emoji/blond_haired_person.svg
new file mode 100644
index 0000000..b524f21
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blond_haired_person.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blond_haired_woman.svg b/src/shared/assets/icons/emoji/blond_haired_woman.svg
new file mode 100644
index 0000000..2fec72c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blond_haired_woman.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blossom.svg b/src/shared/assets/icons/emoji/blossom.svg
new file mode 100644
index 0000000..4ee1cc0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blossom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blowfish.svg b/src/shared/assets/icons/emoji/blowfish.svg
new file mode 100644
index 0000000..13a7ddc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blowfish.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blue_book.svg b/src/shared/assets/icons/emoji/blue_book.svg
new file mode 100644
index 0000000..ce45928
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blue_book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blue_car.svg b/src/shared/assets/icons/emoji/blue_car.svg
new file mode 100644
index 0000000..28e2771
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blue_car.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blue_circle.svg b/src/shared/assets/icons/emoji/blue_circle.svg
new file mode 100644
index 0000000..9d4ab8f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blue_circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blue_heart.svg b/src/shared/assets/icons/emoji/blue_heart.svg
new file mode 100644
index 0000000..9eade12
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blue_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blue_square.svg b/src/shared/assets/icons/emoji/blue_square.svg
new file mode 100644
index 0000000..0824226
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blue_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/blush.svg b/src/shared/assets/icons/emoji/blush.svg
new file mode 100644
index 0000000..a6d9c1b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/blush.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/boar.svg b/src/shared/assets/icons/emoji/boar.svg
new file mode 100644
index 0000000..ad7a77d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/boar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bomb.svg b/src/shared/assets/icons/emoji/bomb.svg
new file mode 100644
index 0000000..feb2c9d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bomb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bone.svg b/src/shared/assets/icons/emoji/bone.svg
new file mode 100644
index 0000000..624de72
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/book.svg b/src/shared/assets/icons/emoji/book.svg
new file mode 100644
index 0000000..0dfd083
--- /dev/null
+++ b/src/shared/assets/icons/emoji/book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bookmark.svg b/src/shared/assets/icons/emoji/bookmark.svg
new file mode 100644
index 0000000..38dc790
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bookmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bookmark_tabs.svg b/src/shared/assets/icons/emoji/bookmark_tabs.svg
new file mode 100644
index 0000000..b3bdc36
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bookmark_tabs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/books.svg b/src/shared/assets/icons/emoji/books.svg
new file mode 100644
index 0000000..422d388
--- /dev/null
+++ b/src/shared/assets/icons/emoji/books.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/boom.svg b/src/shared/assets/icons/emoji/boom.svg
new file mode 100644
index 0000000..36c50d6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/boom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/boot.svg b/src/shared/assets/icons/emoji/boot.svg
new file mode 100644
index 0000000..641dd8b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/boot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bouquet.svg b/src/shared/assets/icons/emoji/bouquet.svg
new file mode 100644
index 0000000..f080ef7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bouquet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bow_and_arrow.svg b/src/shared/assets/icons/emoji/bow_and_arrow.svg
new file mode 100644
index 0000000..3792212
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bow_and_arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bowl_with_spoon.svg b/src/shared/assets/icons/emoji/bowl_with_spoon.svg
new file mode 100644
index 0000000..00e5ae6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bowl_with_spoon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bowling.svg b/src/shared/assets/icons/emoji/bowling.svg
new file mode 100644
index 0000000..9227f28
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bowling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/boxing_glove.svg b/src/shared/assets/icons/emoji/boxing_glove.svg
new file mode 100644
index 0000000..fa16edb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/boxing_glove.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/boy.svg b/src/shared/assets/icons/emoji/boy.svg
new file mode 100644
index 0000000..de1318c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/boy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/brain.svg b/src/shared/assets/icons/emoji/brain.svg
new file mode 100644
index 0000000..653427d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/brain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bread.svg b/src/shared/assets/icons/emoji/bread.svg
new file mode 100644
index 0000000..7d2af4e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bread.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/breast_feeding.svg b/src/shared/assets/icons/emoji/breast_feeding.svg
new file mode 100644
index 0000000..86dc551
--- /dev/null
+++ b/src/shared/assets/icons/emoji/breast_feeding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bricks.svg b/src/shared/assets/icons/emoji/bricks.svg
new file mode 100644
index 0000000..c7f3482
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bricks.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bride_with_veil.svg b/src/shared/assets/icons/emoji/bride_with_veil.svg
new file mode 100644
index 0000000..e68b534
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bride_with_veil.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bridge_at_night.svg b/src/shared/assets/icons/emoji/bridge_at_night.svg
new file mode 100644
index 0000000..e49295b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bridge_at_night.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/briefcase.svg b/src/shared/assets/icons/emoji/briefcase.svg
new file mode 100644
index 0000000..c5336c7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/briefcase.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/briefs.svg b/src/shared/assets/icons/emoji/briefs.svg
new file mode 100644
index 0000000..7486e6a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/briefs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/broccoli.svg b/src/shared/assets/icons/emoji/broccoli.svg
new file mode 100644
index 0000000..ee2bc1c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/broccoli.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/broken_heart.svg b/src/shared/assets/icons/emoji/broken_heart.svg
new file mode 100644
index 0000000..d50c770
--- /dev/null
+++ b/src/shared/assets/icons/emoji/broken_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/broom.svg b/src/shared/assets/icons/emoji/broom.svg
new file mode 100644
index 0000000..2bcbda8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/broom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/brown_circle.svg b/src/shared/assets/icons/emoji/brown_circle.svg
new file mode 100644
index 0000000..ebbc3a7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/brown_circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/brown_heart.svg b/src/shared/assets/icons/emoji/brown_heart.svg
new file mode 100644
index 0000000..275f3c9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/brown_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/brown_square.svg b/src/shared/assets/icons/emoji/brown_square.svg
new file mode 100644
index 0000000..24ee982
--- /dev/null
+++ b/src/shared/assets/icons/emoji/brown_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bug.svg b/src/shared/assets/icons/emoji/bug.svg
new file mode 100644
index 0000000..f8986dd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bulb.svg b/src/shared/assets/icons/emoji/bulb.svg
new file mode 100644
index 0000000..88b62e3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bulb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bullettrain_front.svg b/src/shared/assets/icons/emoji/bullettrain_front.svg
new file mode 100644
index 0000000..2b24d9a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bullettrain_front.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bullettrain_side.svg b/src/shared/assets/icons/emoji/bullettrain_side.svg
new file mode 100644
index 0000000..31e4d69
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bullettrain_side.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/burrito.svg b/src/shared/assets/icons/emoji/burrito.svg
new file mode 100644
index 0000000..c76d82c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/burrito.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bus.svg b/src/shared/assets/icons/emoji/bus.svg
new file mode 100644
index 0000000..4575169
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/busstop.svg b/src/shared/assets/icons/emoji/busstop.svg
new file mode 100644
index 0000000..f833b4a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/busstop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/bust_in_silhouette.svg b/src/shared/assets/icons/emoji/bust_in_silhouette.svg
new file mode 100644
index 0000000..51d02dd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/bust_in_silhouette.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/busts_in_silhouette.svg b/src/shared/assets/icons/emoji/busts_in_silhouette.svg
new file mode 100644
index 0000000..076c6e7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/busts_in_silhouette.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/butter.svg b/src/shared/assets/icons/emoji/butter.svg
new file mode 100644
index 0000000..d7a5674
--- /dev/null
+++ b/src/shared/assets/icons/emoji/butter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/butterfly.svg b/src/shared/assets/icons/emoji/butterfly.svg
new file mode 100644
index 0000000..22c6ead
--- /dev/null
+++ b/src/shared/assets/icons/emoji/butterfly.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cactus.svg b/src/shared/assets/icons/emoji/cactus.svg
new file mode 100644
index 0000000..097dc13
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cactus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cake.svg b/src/shared/assets/icons/emoji/cake.svg
new file mode 100644
index 0000000..c6f2cf4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/calendar.svg b/src/shared/assets/icons/emoji/calendar.svg
new file mode 100644
index 0000000..ff073d7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/calendar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/calendar_spiral.svg b/src/shared/assets/icons/emoji/calendar_spiral.svg
new file mode 100644
index 0000000..526191c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/calendar_spiral.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/call_me.svg b/src/shared/assets/icons/emoji/call_me.svg
new file mode 100644
index 0000000..4ab0454
--- /dev/null
+++ b/src/shared/assets/icons/emoji/call_me.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/calling.svg b/src/shared/assets/icons/emoji/calling.svg
new file mode 100644
index 0000000..82f5293
--- /dev/null
+++ b/src/shared/assets/icons/emoji/calling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/camel.svg b/src/shared/assets/icons/emoji/camel.svg
new file mode 100644
index 0000000..8d60286
--- /dev/null
+++ b/src/shared/assets/icons/emoji/camel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/camera.svg b/src/shared/assets/icons/emoji/camera.svg
new file mode 100644
index 0000000..aa2d9c5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/camera.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/camera_with_flash.svg b/src/shared/assets/icons/emoji/camera_with_flash.svg
new file mode 100644
index 0000000..9bf3cf7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/camera_with_flash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/camping.svg b/src/shared/assets/icons/emoji/camping.svg
new file mode 100644
index 0000000..7a2fb80
--- /dev/null
+++ b/src/shared/assets/icons/emoji/camping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cancer.svg b/src/shared/assets/icons/emoji/cancer.svg
new file mode 100644
index 0000000..c5c8b66
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cancer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/candle.svg b/src/shared/assets/icons/emoji/candle.svg
new file mode 100644
index 0000000..c0e45ac
--- /dev/null
+++ b/src/shared/assets/icons/emoji/candle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/candy.svg b/src/shared/assets/icons/emoji/candy.svg
new file mode 100644
index 0000000..f6fbf3b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/candy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/canned_food.svg b/src/shared/assets/icons/emoji/canned_food.svg
new file mode 100644
index 0000000..9c451ed
--- /dev/null
+++ b/src/shared/assets/icons/emoji/canned_food.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/canoe.svg b/src/shared/assets/icons/emoji/canoe.svg
new file mode 100644
index 0000000..b6a2165
--- /dev/null
+++ b/src/shared/assets/icons/emoji/canoe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/capital_abcd.svg b/src/shared/assets/icons/emoji/capital_abcd.svg
new file mode 100644
index 0000000..429f113
--- /dev/null
+++ b/src/shared/assets/icons/emoji/capital_abcd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/capricorn.svg b/src/shared/assets/icons/emoji/capricorn.svg
new file mode 100644
index 0000000..f3ccf92
--- /dev/null
+++ b/src/shared/assets/icons/emoji/capricorn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/card_box.svg b/src/shared/assets/icons/emoji/card_box.svg
new file mode 100644
index 0000000..48dd45b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/card_box.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/card_index.svg b/src/shared/assets/icons/emoji/card_index.svg
new file mode 100644
index 0000000..097a715
--- /dev/null
+++ b/src/shared/assets/icons/emoji/card_index.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/carousel_horse.svg b/src/shared/assets/icons/emoji/carousel_horse.svg
new file mode 100644
index 0000000..35c75b6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/carousel_horse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/carrot.svg b/src/shared/assets/icons/emoji/carrot.svg
new file mode 100644
index 0000000..b949554
--- /dev/null
+++ b/src/shared/assets/icons/emoji/carrot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cat.svg b/src/shared/assets/icons/emoji/cat.svg
new file mode 100644
index 0000000..cc75dcc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cat2.svg b/src/shared/assets/icons/emoji/cat2.svg
new file mode 100644
index 0000000..edb55b1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cat2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cd.svg b/src/shared/assets/icons/emoji/cd.svg
new file mode 100644
index 0000000..6824a06
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chains.svg b/src/shared/assets/icons/emoji/chains.svg
new file mode 100644
index 0000000..a7b213e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chains.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chair.svg b/src/shared/assets/icons/emoji/chair.svg
new file mode 100644
index 0000000..8db5801
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/champagne.svg b/src/shared/assets/icons/emoji/champagne.svg
new file mode 100644
index 0000000..a02a17e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/champagne.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/champagne_glass.svg b/src/shared/assets/icons/emoji/champagne_glass.svg
new file mode 100644
index 0000000..30167b0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/champagne_glass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chart.svg b/src/shared/assets/icons/emoji/chart.svg
new file mode 100644
index 0000000..f6143a0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chart_with_downwards_trend.svg b/src/shared/assets/icons/emoji/chart_with_downwards_trend.svg
new file mode 100644
index 0000000..ac8c258
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chart_with_downwards_trend.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chart_with_upwards_trend.svg b/src/shared/assets/icons/emoji/chart_with_upwards_trend.svg
new file mode 100644
index 0000000..cbf108f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chart_with_upwards_trend.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/checkered_flag.svg b/src/shared/assets/icons/emoji/checkered_flag.svg
new file mode 100644
index 0000000..695f0ef
--- /dev/null
+++ b/src/shared/assets/icons/emoji/checkered_flag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cheese.svg b/src/shared/assets/icons/emoji/cheese.svg
new file mode 100644
index 0000000..20e6a92
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cheese.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cherries.svg b/src/shared/assets/icons/emoji/cherries.svg
new file mode 100644
index 0000000..bdba6bd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cherries.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cherry_blossom.svg b/src/shared/assets/icons/emoji/cherry_blossom.svg
new file mode 100644
index 0000000..46ba420
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cherry_blossom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chess_pawn.svg b/src/shared/assets/icons/emoji/chess_pawn.svg
new file mode 100644
index 0000000..10c880c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chess_pawn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chestnut.svg b/src/shared/assets/icons/emoji/chestnut.svg
new file mode 100644
index 0000000..d0e84b5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chestnut.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chicken.svg b/src/shared/assets/icons/emoji/chicken.svg
new file mode 100644
index 0000000..b08f7a2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chicken.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/child.svg b/src/shared/assets/icons/emoji/child.svg
new file mode 100644
index 0000000..23dce9f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/child.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/children_crossing.svg b/src/shared/assets/icons/emoji/children_crossing.svg
new file mode 100644
index 0000000..a9dca0f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/children_crossing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chipmunk.svg b/src/shared/assets/icons/emoji/chipmunk.svg
new file mode 100644
index 0000000..3676874
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chipmunk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chocolate_bar.svg b/src/shared/assets/icons/emoji/chocolate_bar.svg
new file mode 100644
index 0000000..a993c9b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chocolate_bar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/chopsticks.svg b/src/shared/assets/icons/emoji/chopsticks.svg
new file mode 100644
index 0000000..adde7aa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/chopsticks.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/christmas_tree.svg b/src/shared/assets/icons/emoji/christmas_tree.svg
new file mode 100644
index 0000000..6e9b11e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/christmas_tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/church.svg b/src/shared/assets/icons/emoji/church.svg
new file mode 100644
index 0000000..79b8ce5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/church.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cinema.svg b/src/shared/assets/icons/emoji/cinema.svg
new file mode 100644
index 0000000..04ba5e3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cinema.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/circus_tent.svg b/src/shared/assets/icons/emoji/circus_tent.svg
new file mode 100644
index 0000000..fec7dd2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/circus_tent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/city_dusk.svg b/src/shared/assets/icons/emoji/city_dusk.svg
new file mode 100644
index 0000000..9e7ae82
--- /dev/null
+++ b/src/shared/assets/icons/emoji/city_dusk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/city_sunset.svg b/src/shared/assets/icons/emoji/city_sunset.svg
new file mode 100644
index 0000000..a783fe3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/city_sunset.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cityscape.svg b/src/shared/assets/icons/emoji/cityscape.svg
new file mode 100644
index 0000000..b379d80
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cityscape.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cl.svg b/src/shared/assets/icons/emoji/cl.svg
new file mode 100644
index 0000000..eaebb55
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clap.svg b/src/shared/assets/icons/emoji/clap.svg
new file mode 100644
index 0000000..2ed7b62
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clapper.svg b/src/shared/assets/icons/emoji/clapper.svg
new file mode 100644
index 0000000..3a32676
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clapper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/classical_building.svg b/src/shared/assets/icons/emoji/classical_building.svg
new file mode 100644
index 0000000..bdd0d45
--- /dev/null
+++ b/src/shared/assets/icons/emoji/classical_building.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clipboard.svg b/src/shared/assets/icons/emoji/clipboard.svg
new file mode 100644
index 0000000..a51b34a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clipboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock.svg b/src/shared/assets/icons/emoji/clock.svg
new file mode 100644
index 0000000..da6fd26
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock1.svg b/src/shared/assets/icons/emoji/clock1.svg
new file mode 100644
index 0000000..da82d97
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock10.svg b/src/shared/assets/icons/emoji/clock10.svg
new file mode 100644
index 0000000..331f702
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock10.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock1030.svg b/src/shared/assets/icons/emoji/clock1030.svg
new file mode 100644
index 0000000..f658fa3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock1030.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock11.svg b/src/shared/assets/icons/emoji/clock11.svg
new file mode 100644
index 0000000..5883449
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock11.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock1130.svg b/src/shared/assets/icons/emoji/clock1130.svg
new file mode 100644
index 0000000..41e105f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock1130.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock12.svg b/src/shared/assets/icons/emoji/clock12.svg
new file mode 100644
index 0000000..85010ae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock12.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock1230.svg b/src/shared/assets/icons/emoji/clock1230.svg
new file mode 100644
index 0000000..7178a88
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock1230.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock130.svg b/src/shared/assets/icons/emoji/clock130.svg
new file mode 100644
index 0000000..f471871
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock130.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock2.svg b/src/shared/assets/icons/emoji/clock2.svg
new file mode 100644
index 0000000..96ab682
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock230.svg b/src/shared/assets/icons/emoji/clock230.svg
new file mode 100644
index 0000000..feb77f8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock230.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock3.svg b/src/shared/assets/icons/emoji/clock3.svg
new file mode 100644
index 0000000..ce4c487
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock330.svg b/src/shared/assets/icons/emoji/clock330.svg
new file mode 100644
index 0000000..8ab841f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock330.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock4.svg b/src/shared/assets/icons/emoji/clock4.svg
new file mode 100644
index 0000000..2ac4ead
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock430.svg b/src/shared/assets/icons/emoji/clock430.svg
new file mode 100644
index 0000000..81ccc7e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock430.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock5.svg b/src/shared/assets/icons/emoji/clock5.svg
new file mode 100644
index 0000000..1a2ef1c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock5.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock530.svg b/src/shared/assets/icons/emoji/clock530.svg
new file mode 100644
index 0000000..098c47f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock530.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock6.svg b/src/shared/assets/icons/emoji/clock6.svg
new file mode 100644
index 0000000..5021b16
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock630.svg b/src/shared/assets/icons/emoji/clock630.svg
new file mode 100644
index 0000000..3a50a9a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock630.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock7.svg b/src/shared/assets/icons/emoji/clock7.svg
new file mode 100644
index 0000000..a2eb7ef
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock7.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock730.svg b/src/shared/assets/icons/emoji/clock730.svg
new file mode 100644
index 0000000..f2c6ace
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock730.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock8.svg b/src/shared/assets/icons/emoji/clock8.svg
new file mode 100644
index 0000000..3a7ff9b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock8.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock830.svg b/src/shared/assets/icons/emoji/clock830.svg
new file mode 100644
index 0000000..a14e0dc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock830.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock9.svg b/src/shared/assets/icons/emoji/clock9.svg
new file mode 100644
index 0000000..e9d3cb5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clock930.svg b/src/shared/assets/icons/emoji/clock930.svg
new file mode 100644
index 0000000..4d6f873
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clock930.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/closed_book.svg b/src/shared/assets/icons/emoji/closed_book.svg
new file mode 100644
index 0000000..701ff01
--- /dev/null
+++ b/src/shared/assets/icons/emoji/closed_book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/closed_lock_with_key.svg b/src/shared/assets/icons/emoji/closed_lock_with_key.svg
new file mode 100644
index 0000000..014079e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/closed_lock_with_key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/closed_umbrella.svg b/src/shared/assets/icons/emoji/closed_umbrella.svg
new file mode 100644
index 0000000..e611e6b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/closed_umbrella.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cloud.svg b/src/shared/assets/icons/emoji/cloud.svg
new file mode 100644
index 0000000..928baa6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cloud.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cloud_lightning.svg b/src/shared/assets/icons/emoji/cloud_lightning.svg
new file mode 100644
index 0000000..0deaddc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cloud_lightning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cloud_rain.svg b/src/shared/assets/icons/emoji/cloud_rain.svg
new file mode 100644
index 0000000..99f42f5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cloud_rain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cloud_snow.svg b/src/shared/assets/icons/emoji/cloud_snow.svg
new file mode 100644
index 0000000..f937107
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cloud_snow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cloud_tornado.svg b/src/shared/assets/icons/emoji/cloud_tornado.svg
new file mode 100644
index 0000000..b462010
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cloud_tornado.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clown.svg b/src/shared/assets/icons/emoji/clown.svg
new file mode 100644
index 0000000..6d16a66
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/clubs.svg b/src/shared/assets/icons/emoji/clubs.svg
new file mode 100644
index 0000000..a9dce6f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/clubs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/coat.svg b/src/shared/assets/icons/emoji/coat.svg
new file mode 100644
index 0000000..392af56
--- /dev/null
+++ b/src/shared/assets/icons/emoji/coat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cocktail.svg b/src/shared/assets/icons/emoji/cocktail.svg
new file mode 100644
index 0000000..c8bc0ce
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cocktail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/coconut.svg b/src/shared/assets/icons/emoji/coconut.svg
new file mode 100644
index 0000000..7f16927
--- /dev/null
+++ b/src/shared/assets/icons/emoji/coconut.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/coffee.svg b/src/shared/assets/icons/emoji/coffee.svg
new file mode 100644
index 0000000..bb68dd5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/coffee.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/coffin.svg b/src/shared/assets/icons/emoji/coffin.svg
new file mode 100644
index 0000000..c1ea4d6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/coffin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cold_face.svg b/src/shared/assets/icons/emoji/cold_face.svg
new file mode 100644
index 0000000..e32efdd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cold_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cold_sweat.svg b/src/shared/assets/icons/emoji/cold_sweat.svg
new file mode 100644
index 0000000..de3d95c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cold_sweat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/comet.svg b/src/shared/assets/icons/emoji/comet.svg
new file mode 100644
index 0000000..07df915
--- /dev/null
+++ b/src/shared/assets/icons/emoji/comet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/compass.svg b/src/shared/assets/icons/emoji/compass.svg
new file mode 100644
index 0000000..fd3d583
--- /dev/null
+++ b/src/shared/assets/icons/emoji/compass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/compression.svg b/src/shared/assets/icons/emoji/compression.svg
new file mode 100644
index 0000000..6f35d17
--- /dev/null
+++ b/src/shared/assets/icons/emoji/compression.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/computer.svg b/src/shared/assets/icons/emoji/computer.svg
new file mode 100644
index 0000000..93357fa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/computer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/confetti_ball.svg b/src/shared/assets/icons/emoji/confetti_ball.svg
new file mode 100644
index 0000000..e709775
--- /dev/null
+++ b/src/shared/assets/icons/emoji/confetti_ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/confounded.svg b/src/shared/assets/icons/emoji/confounded.svg
new file mode 100644
index 0000000..2b8871c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/confounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/confused.svg b/src/shared/assets/icons/emoji/confused.svg
new file mode 100644
index 0000000..339a6a2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/confused.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/congratulations.svg b/src/shared/assets/icons/emoji/congratulations.svg
new file mode 100644
index 0000000..7adbcf1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/congratulations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/construction.svg b/src/shared/assets/icons/emoji/construction.svg
new file mode 100644
index 0000000..a5d135c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/construction.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/construction_site.svg b/src/shared/assets/icons/emoji/construction_site.svg
new file mode 100644
index 0000000..e77a170
--- /dev/null
+++ b/src/shared/assets/icons/emoji/construction_site.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/construction_worker.svg b/src/shared/assets/icons/emoji/construction_worker.svg
new file mode 100644
index 0000000..5843060
--- /dev/null
+++ b/src/shared/assets/icons/emoji/construction_worker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/control_knobs.svg b/src/shared/assets/icons/emoji/control_knobs.svg
new file mode 100644
index 0000000..9d355c4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/control_knobs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/convenience_store.svg b/src/shared/assets/icons/emoji/convenience_store.svg
new file mode 100644
index 0000000..87f3f96
--- /dev/null
+++ b/src/shared/assets/icons/emoji/convenience_store.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cookie.svg b/src/shared/assets/icons/emoji/cookie.svg
new file mode 100644
index 0000000..d1b604b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cookie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cooking.svg b/src/shared/assets/icons/emoji/cooking.svg
new file mode 100644
index 0000000..733dc2b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cooking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cool.svg b/src/shared/assets/icons/emoji/cool.svg
new file mode 100644
index 0000000..3207dcf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cool.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/corn.svg b/src/shared/assets/icons/emoji/corn.svg
new file mode 100644
index 0000000..6c4ae3b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/corn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/couch.svg b/src/shared/assets/icons/emoji/couch.svg
new file mode 100644
index 0000000..c80d190
--- /dev/null
+++ b/src/shared/assets/icons/emoji/couch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/couple.svg b/src/shared/assets/icons/emoji/couple.svg
new file mode 100644
index 0000000..59ca8c0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/couple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/couple_mm.svg b/src/shared/assets/icons/emoji/couple_mm.svg
new file mode 100644
index 0000000..cace24f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/couple_mm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/couple_with_heart.svg b/src/shared/assets/icons/emoji/couple_with_heart.svg
new file mode 100644
index 0000000..ece280d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/couple_with_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/couple_with_heart_woman_man.svg b/src/shared/assets/icons/emoji/couple_with_heart_woman_man.svg
new file mode 100644
index 0000000..ece280d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/couple_with_heart_woman_man.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/couple_ww.svg b/src/shared/assets/icons/emoji/couple_ww.svg
new file mode 100644
index 0000000..62abb03
--- /dev/null
+++ b/src/shared/assets/icons/emoji/couple_ww.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/couplekiss.svg b/src/shared/assets/icons/emoji/couplekiss.svg
new file mode 100644
index 0000000..69cec3c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/couplekiss.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cow.svg b/src/shared/assets/icons/emoji/cow.svg
new file mode 100644
index 0000000..40fede0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cow2.svg b/src/shared/assets/icons/emoji/cow2.svg
new file mode 100644
index 0000000..4c791dc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cow2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cowboy.svg b/src/shared/assets/icons/emoji/cowboy.svg
new file mode 100644
index 0000000..da7cfa2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cowboy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/crab.svg b/src/shared/assets/icons/emoji/crab.svg
new file mode 100644
index 0000000..8f45b53
--- /dev/null
+++ b/src/shared/assets/icons/emoji/crab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/crayon.svg b/src/shared/assets/icons/emoji/crayon.svg
new file mode 100644
index 0000000..5a4cbe8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/crayon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/credit_card.svg b/src/shared/assets/icons/emoji/credit_card.svg
new file mode 100644
index 0000000..97641af
--- /dev/null
+++ b/src/shared/assets/icons/emoji/credit_card.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/crescent_moon.svg b/src/shared/assets/icons/emoji/crescent_moon.svg
new file mode 100644
index 0000000..d98dc2f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/crescent_moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cricket.svg b/src/shared/assets/icons/emoji/cricket.svg
new file mode 100644
index 0000000..f26413f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cricket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cricket_game.svg b/src/shared/assets/icons/emoji/cricket_game.svg
new file mode 100644
index 0000000..140db58
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cricket_game.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/crocodile.svg b/src/shared/assets/icons/emoji/crocodile.svg
new file mode 100644
index 0000000..a9a6deb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/crocodile.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/croissant.svg b/src/shared/assets/icons/emoji/croissant.svg
new file mode 100644
index 0000000..eef4358
--- /dev/null
+++ b/src/shared/assets/icons/emoji/croissant.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cross.svg b/src/shared/assets/icons/emoji/cross.svg
new file mode 100644
index 0000000..270b812
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cross.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/crossed_flags.svg b/src/shared/assets/icons/emoji/crossed_flags.svg
new file mode 100644
index 0000000..a0dd350
--- /dev/null
+++ b/src/shared/assets/icons/emoji/crossed_flags.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/crossed_swords.svg b/src/shared/assets/icons/emoji/crossed_swords.svg
new file mode 100644
index 0000000..3cf2fa4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/crossed_swords.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/crown.svg b/src/shared/assets/icons/emoji/crown.svg
new file mode 100644
index 0000000..4db8d2b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/crown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cruise_ship.svg b/src/shared/assets/icons/emoji/cruise_ship.svg
new file mode 100644
index 0000000..4486213
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cruise_ship.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cry.svg b/src/shared/assets/icons/emoji/cry.svg
new file mode 100644
index 0000000..1122bf5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/crying_cat_face.svg b/src/shared/assets/icons/emoji/crying_cat_face.svg
new file mode 100644
index 0000000..cdd8439
--- /dev/null
+++ b/src/shared/assets/icons/emoji/crying_cat_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/crystal_ball.svg b/src/shared/assets/icons/emoji/crystal_ball.svg
new file mode 100644
index 0000000..d7e0923
--- /dev/null
+++ b/src/shared/assets/icons/emoji/crystal_ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cucumber.svg b/src/shared/assets/icons/emoji/cucumber.svg
new file mode 100644
index 0000000..83cba03
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cucumber.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cup_with_straw.svg b/src/shared/assets/icons/emoji/cup_with_straw.svg
new file mode 100644
index 0000000..3556dd9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cup_with_straw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cupcake.svg b/src/shared/assets/icons/emoji/cupcake.svg
new file mode 100644
index 0000000..1f966c3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cupcake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cupid.svg b/src/shared/assets/icons/emoji/cupid.svg
new file mode 100644
index 0000000..32d819f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cupid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/curling_stone.svg b/src/shared/assets/icons/emoji/curling_stone.svg
new file mode 100644
index 0000000..9bc8f8a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/curling_stone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/curly_loop.svg b/src/shared/assets/icons/emoji/curly_loop.svg
new file mode 100644
index 0000000..33abaa9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/curly_loop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/currency_exchange.svg b/src/shared/assets/icons/emoji/currency_exchange.svg
new file mode 100644
index 0000000..b67b0cd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/currency_exchange.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/curry.svg b/src/shared/assets/icons/emoji/curry.svg
new file mode 100644
index 0000000..be3be22
--- /dev/null
+++ b/src/shared/assets/icons/emoji/curry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/custard.svg b/src/shared/assets/icons/emoji/custard.svg
new file mode 100644
index 0000000..8ec5179
--- /dev/null
+++ b/src/shared/assets/icons/emoji/custard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/customs.svg b/src/shared/assets/icons/emoji/customs.svg
new file mode 100644
index 0000000..9e58a3b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/customs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cut_of_meat.svg b/src/shared/assets/icons/emoji/cut_of_meat.svg
new file mode 100644
index 0000000..28a6a1a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cut_of_meat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/cyclone.svg b/src/shared/assets/icons/emoji/cyclone.svg
new file mode 100644
index 0000000..1de6f25
--- /dev/null
+++ b/src/shared/assets/icons/emoji/cyclone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dagger.svg b/src/shared/assets/icons/emoji/dagger.svg
new file mode 100644
index 0000000..2741fb8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dagger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dancer.svg b/src/shared/assets/icons/emoji/dancer.svg
new file mode 100644
index 0000000..abc19e5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dancer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dango.svg b/src/shared/assets/icons/emoji/dango.svg
new file mode 100644
index 0000000..e2537d9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dango.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dark_sunglasses.svg b/src/shared/assets/icons/emoji/dark_sunglasses.svg
new file mode 100644
index 0000000..5d5c04f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dark_sunglasses.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dart.svg b/src/shared/assets/icons/emoji/dart.svg
new file mode 100644
index 0000000..9562c6c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dash.svg b/src/shared/assets/icons/emoji/dash.svg
new file mode 100644
index 0000000..006e04a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/date.svg b/src/shared/assets/icons/emoji/date.svg
new file mode 100644
index 0000000..ca68a82
--- /dev/null
+++ b/src/shared/assets/icons/emoji/date.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/deaf_man.svg b/src/shared/assets/icons/emoji/deaf_man.svg
new file mode 100644
index 0000000..8c119c9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/deaf_man.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/deaf_person.svg b/src/shared/assets/icons/emoji/deaf_person.svg
new file mode 100644
index 0000000..b632521
--- /dev/null
+++ b/src/shared/assets/icons/emoji/deaf_person.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/deaf_woman.svg b/src/shared/assets/icons/emoji/deaf_woman.svg
new file mode 100644
index 0000000..7d8f058
--- /dev/null
+++ b/src/shared/assets/icons/emoji/deaf_woman.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/deciduous_tree.svg b/src/shared/assets/icons/emoji/deciduous_tree.svg
new file mode 100644
index 0000000..3937fc4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/deciduous_tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/deer.svg b/src/shared/assets/icons/emoji/deer.svg
new file mode 100644
index 0000000..8662368
--- /dev/null
+++ b/src/shared/assets/icons/emoji/deer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/department_store.svg b/src/shared/assets/icons/emoji/department_store.svg
new file mode 100644
index 0000000..c30d022
--- /dev/null
+++ b/src/shared/assets/icons/emoji/department_store.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/desert.svg b/src/shared/assets/icons/emoji/desert.svg
new file mode 100644
index 0000000..99baa8d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/desert.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/desktop.svg b/src/shared/assets/icons/emoji/desktop.svg
new file mode 100644
index 0000000..e1a0633
--- /dev/null
+++ b/src/shared/assets/icons/emoji/desktop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/detective.svg b/src/shared/assets/icons/emoji/detective.svg
new file mode 100644
index 0000000..e82b8d9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/detective.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/diamond_shape_with_a_dot_inside.svg b/src/shared/assets/icons/emoji/diamond_shape_with_a_dot_inside.svg
new file mode 100644
index 0000000..9c80565
--- /dev/null
+++ b/src/shared/assets/icons/emoji/diamond_shape_with_a_dot_inside.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/diamonds.svg b/src/shared/assets/icons/emoji/diamonds.svg
new file mode 100644
index 0000000..02f93aa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/diamonds.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/disappointed.svg b/src/shared/assets/icons/emoji/disappointed.svg
new file mode 100644
index 0000000..7ae60a5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/disappointed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/disappointed_relieved.svg b/src/shared/assets/icons/emoji/disappointed_relieved.svg
new file mode 100644
index 0000000..0b4293f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/disappointed_relieved.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dividers.svg b/src/shared/assets/icons/emoji/dividers.svg
new file mode 100644
index 0000000..822a927
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dividers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/diving_mask.svg b/src/shared/assets/icons/emoji/diving_mask.svg
new file mode 100644
index 0000000..01239db
--- /dev/null
+++ b/src/shared/assets/icons/emoji/diving_mask.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/diya_lamp.svg b/src/shared/assets/icons/emoji/diya_lamp.svg
new file mode 100644
index 0000000..34c5f38
--- /dev/null
+++ b/src/shared/assets/icons/emoji/diya_lamp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dizzy.svg b/src/shared/assets/icons/emoji/dizzy.svg
new file mode 100644
index 0000000..af3261c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dizzy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dizzy_face.svg b/src/shared/assets/icons/emoji/dizzy_face.svg
new file mode 100644
index 0000000..7a45cf5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dizzy_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dna.svg b/src/shared/assets/icons/emoji/dna.svg
new file mode 100644
index 0000000..689cc3e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dna.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/do_not_litter.svg b/src/shared/assets/icons/emoji/do_not_litter.svg
new file mode 100644
index 0000000..74fad21
--- /dev/null
+++ b/src/shared/assets/icons/emoji/do_not_litter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dog.svg b/src/shared/assets/icons/emoji/dog.svg
new file mode 100644
index 0000000..8b2e685
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dog2.svg b/src/shared/assets/icons/emoji/dog2.svg
new file mode 100644
index 0000000..c959deb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dog2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dollar.svg b/src/shared/assets/icons/emoji/dollar.svg
new file mode 100644
index 0000000..113c6d0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dollar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dolls.svg b/src/shared/assets/icons/emoji/dolls.svg
new file mode 100644
index 0000000..56b4b80
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dolls.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dolphin.svg b/src/shared/assets/icons/emoji/dolphin.svg
new file mode 100644
index 0000000..ee782f2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dolphin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/door.svg b/src/shared/assets/icons/emoji/door.svg
new file mode 100644
index 0000000..1542aba
--- /dev/null
+++ b/src/shared/assets/icons/emoji/door.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/doughnut.svg b/src/shared/assets/icons/emoji/doughnut.svg
new file mode 100644
index 0000000..3c2aa58
--- /dev/null
+++ b/src/shared/assets/icons/emoji/doughnut.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dove.svg b/src/shared/assets/icons/emoji/dove.svg
new file mode 100644
index 0000000..613e495
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dove.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dragon.svg b/src/shared/assets/icons/emoji/dragon.svg
new file mode 100644
index 0000000..14e1765
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dragon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dragon_face.svg b/src/shared/assets/icons/emoji/dragon_face.svg
new file mode 100644
index 0000000..1c1b434
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dragon_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dress.svg b/src/shared/assets/icons/emoji/dress.svg
new file mode 100644
index 0000000..29cc45c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dress.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dromedary_camel.svg b/src/shared/assets/icons/emoji/dromedary_camel.svg
new file mode 100644
index 0000000..278e144
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dromedary_camel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/drooling_face.svg b/src/shared/assets/icons/emoji/drooling_face.svg
new file mode 100644
index 0000000..9af71fc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/drooling_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/drop_of_blood.svg b/src/shared/assets/icons/emoji/drop_of_blood.svg
new file mode 100644
index 0000000..2dc83a5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/drop_of_blood.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/droplet.svg b/src/shared/assets/icons/emoji/droplet.svg
new file mode 100644
index 0000000..3116ec3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/droplet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/drum.svg b/src/shared/assets/icons/emoji/drum.svg
new file mode 100644
index 0000000..e197d16
--- /dev/null
+++ b/src/shared/assets/icons/emoji/drum.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/duck.svg b/src/shared/assets/icons/emoji/duck.svg
new file mode 100644
index 0000000..085c900
--- /dev/null
+++ b/src/shared/assets/icons/emoji/duck.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dumpling.svg b/src/shared/assets/icons/emoji/dumpling.svg
new file mode 100644
index 0000000..57f13af
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dumpling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/dvd.svg b/src/shared/assets/icons/emoji/dvd.svg
new file mode 100644
index 0000000..1b3b38b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/dvd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/e_mail.svg b/src/shared/assets/icons/emoji/e_mail.svg
new file mode 100644
index 0000000..d8ce780
--- /dev/null
+++ b/src/shared/assets/icons/emoji/e_mail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/eagle.svg b/src/shared/assets/icons/emoji/eagle.svg
new file mode 100644
index 0000000..81b7b3c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/eagle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ear.svg b/src/shared/assets/icons/emoji/ear.svg
new file mode 100644
index 0000000..1b386c7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ear_of_rice.svg b/src/shared/assets/icons/emoji/ear_of_rice.svg
new file mode 100644
index 0000000..320f149
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ear_of_rice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ear_with_hearing_aid.svg b/src/shared/assets/icons/emoji/ear_with_hearing_aid.svg
new file mode 100644
index 0000000..05bc020
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ear_with_hearing_aid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/earth_africa.svg b/src/shared/assets/icons/emoji/earth_africa.svg
new file mode 100644
index 0000000..f813610
--- /dev/null
+++ b/src/shared/assets/icons/emoji/earth_africa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/earth_americas.svg b/src/shared/assets/icons/emoji/earth_americas.svg
new file mode 100644
index 0000000..0793e72
--- /dev/null
+++ b/src/shared/assets/icons/emoji/earth_americas.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/earth_asia.svg b/src/shared/assets/icons/emoji/earth_asia.svg
new file mode 100644
index 0000000..30c0186
--- /dev/null
+++ b/src/shared/assets/icons/emoji/earth_asia.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/egg.svg b/src/shared/assets/icons/emoji/egg.svg
new file mode 100644
index 0000000..1e76017
--- /dev/null
+++ b/src/shared/assets/icons/emoji/egg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/eggplant.svg b/src/shared/assets/icons/emoji/eggplant.svg
new file mode 100644
index 0000000..14688a6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/eggplant.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/eight.svg b/src/shared/assets/icons/emoji/eight.svg
new file mode 100644
index 0000000..b912265
--- /dev/null
+++ b/src/shared/assets/icons/emoji/eight.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/eight_pointed_black_star.svg b/src/shared/assets/icons/emoji/eight_pointed_black_star.svg
new file mode 100644
index 0000000..17ed819
--- /dev/null
+++ b/src/shared/assets/icons/emoji/eight_pointed_black_star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/eight_spoked_asterisk.svg b/src/shared/assets/icons/emoji/eight_spoked_asterisk.svg
new file mode 100644
index 0000000..0aac14f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/eight_spoked_asterisk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/eject.svg b/src/shared/assets/icons/emoji/eject.svg
new file mode 100644
index 0000000..d53497c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/eject.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/electric_plug.svg b/src/shared/assets/icons/emoji/electric_plug.svg
new file mode 100644
index 0000000..8f432f0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/electric_plug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/elephant.svg b/src/shared/assets/icons/emoji/elephant.svg
new file mode 100644
index 0000000..fb9656c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/elephant.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/elf.svg b/src/shared/assets/icons/emoji/elf.svg
new file mode 100644
index 0000000..3e82899
--- /dev/null
+++ b/src/shared/assets/icons/emoji/elf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/end.svg b/src/shared/assets/icons/emoji/end.svg
new file mode 100644
index 0000000..d964c52
--- /dev/null
+++ b/src/shared/assets/icons/emoji/end.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/england.svg b/src/shared/assets/icons/emoji/england.svg
new file mode 100644
index 0000000..fa20956
--- /dev/null
+++ b/src/shared/assets/icons/emoji/england.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/envelope.svg b/src/shared/assets/icons/emoji/envelope.svg
new file mode 100644
index 0000000..d880c42
--- /dev/null
+++ b/src/shared/assets/icons/emoji/envelope.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/envelope_with_arrow.svg b/src/shared/assets/icons/emoji/envelope_with_arrow.svg
new file mode 100644
index 0000000..1847cd1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/envelope_with_arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/euro.svg b/src/shared/assets/icons/emoji/euro.svg
new file mode 100644
index 0000000..1869987
--- /dev/null
+++ b/src/shared/assets/icons/emoji/euro.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/european_castle.svg b/src/shared/assets/icons/emoji/european_castle.svg
new file mode 100644
index 0000000..b4e3d19
--- /dev/null
+++ b/src/shared/assets/icons/emoji/european_castle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/european_post_office.svg b/src/shared/assets/icons/emoji/european_post_office.svg
new file mode 100644
index 0000000..7ac74e4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/european_post_office.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/evergreen_tree.svg b/src/shared/assets/icons/emoji/evergreen_tree.svg
new file mode 100644
index 0000000..540f186
--- /dev/null
+++ b/src/shared/assets/icons/emoji/evergreen_tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/exclamation.svg b/src/shared/assets/icons/emoji/exclamation.svg
new file mode 100644
index 0000000..e730a08
--- /dev/null
+++ b/src/shared/assets/icons/emoji/exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/exploding_head.svg b/src/shared/assets/icons/emoji/exploding_head.svg
new file mode 100644
index 0000000..664d960
--- /dev/null
+++ b/src/shared/assets/icons/emoji/exploding_head.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/expressionless.svg b/src/shared/assets/icons/emoji/expressionless.svg
new file mode 100644
index 0000000..55be4fd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/expressionless.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/eye.svg b/src/shared/assets/icons/emoji/eye.svg
new file mode 100644
index 0000000..75e9c48
--- /dev/null
+++ b/src/shared/assets/icons/emoji/eye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/eye_in_speech_bubble.svg b/src/shared/assets/icons/emoji/eye_in_speech_bubble.svg
new file mode 100644
index 0000000..ebe9061
--- /dev/null
+++ b/src/shared/assets/icons/emoji/eye_in_speech_bubble.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/eyeglasses.svg b/src/shared/assets/icons/emoji/eyeglasses.svg
new file mode 100644
index 0000000..18d9998
--- /dev/null
+++ b/src/shared/assets/icons/emoji/eyeglasses.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/eyes.svg b/src/shared/assets/icons/emoji/eyes.svg
new file mode 100644
index 0000000..46a268f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/eyes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/face_vomiting.svg b/src/shared/assets/icons/emoji/face_vomiting.svg
new file mode 100644
index 0000000..d792679
--- /dev/null
+++ b/src/shared/assets/icons/emoji/face_vomiting.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/face_with_hand_over_mouth.svg b/src/shared/assets/icons/emoji/face_with_hand_over_mouth.svg
new file mode 100644
index 0000000..b79e067
--- /dev/null
+++ b/src/shared/assets/icons/emoji/face_with_hand_over_mouth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/face_with_monocle.svg b/src/shared/assets/icons/emoji/face_with_monocle.svg
new file mode 100644
index 0000000..86198f7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/face_with_monocle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/face_with_raised_eyebrow.svg b/src/shared/assets/icons/emoji/face_with_raised_eyebrow.svg
new file mode 100644
index 0000000..126e459
--- /dev/null
+++ b/src/shared/assets/icons/emoji/face_with_raised_eyebrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/face_with_symbols_over_mouth.svg b/src/shared/assets/icons/emoji/face_with_symbols_over_mouth.svg
new file mode 100644
index 0000000..c26a5aa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/face_with_symbols_over_mouth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/factory.svg b/src/shared/assets/icons/emoji/factory.svg
new file mode 100644
index 0000000..04ee162
--- /dev/null
+++ b/src/shared/assets/icons/emoji/factory.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fairy.svg b/src/shared/assets/icons/emoji/fairy.svg
new file mode 100644
index 0000000..5c9ea36
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fairy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/falafel.svg b/src/shared/assets/icons/emoji/falafel.svg
new file mode 100644
index 0000000..c360564
--- /dev/null
+++ b/src/shared/assets/icons/emoji/falafel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fallen_leaf.svg b/src/shared/assets/icons/emoji/fallen_leaf.svg
new file mode 100644
index 0000000..1c9072a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fallen_leaf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family.svg b/src/shared/assets/icons/emoji/family.svg
new file mode 100644
index 0000000..945b1a8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_man_boy.svg b/src/shared/assets/icons/emoji/family_man_boy.svg
new file mode 100644
index 0000000..26c8de9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_man_boy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_man_boy_boy.svg b/src/shared/assets/icons/emoji/family_man_boy_boy.svg
new file mode 100644
index 0000000..89b3ad3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_man_boy_boy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_man_girl.svg b/src/shared/assets/icons/emoji/family_man_girl.svg
new file mode 100644
index 0000000..4cda751
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_man_girl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_man_girl_boy.svg b/src/shared/assets/icons/emoji/family_man_girl_boy.svg
new file mode 100644
index 0000000..a2008f1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_man_girl_boy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_man_girl_girl.svg b/src/shared/assets/icons/emoji/family_man_girl_girl.svg
new file mode 100644
index 0000000..acb7b7d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_man_girl_girl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_man_woman_boy.svg b/src/shared/assets/icons/emoji/family_man_woman_boy.svg
new file mode 100644
index 0000000..8f5fad9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_man_woman_boy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_mmb.svg b/src/shared/assets/icons/emoji/family_mmb.svg
new file mode 100644
index 0000000..d3a5877
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_mmb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_mmbb.svg b/src/shared/assets/icons/emoji/family_mmbb.svg
new file mode 100644
index 0000000..efa5db9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_mmbb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_mmg.svg b/src/shared/assets/icons/emoji/family_mmg.svg
new file mode 100644
index 0000000..48c4e73
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_mmg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_mmgb.svg b/src/shared/assets/icons/emoji/family_mmgb.svg
new file mode 100644
index 0000000..4d12c1a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_mmgb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_mmgg.svg b/src/shared/assets/icons/emoji/family_mmgg.svg
new file mode 100644
index 0000000..a694e42
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_mmgg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_mwbb.svg b/src/shared/assets/icons/emoji/family_mwbb.svg
new file mode 100644
index 0000000..9c3f3da
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_mwbb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_mwg.svg b/src/shared/assets/icons/emoji/family_mwg.svg
new file mode 100644
index 0000000..22a662f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_mwg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_mwgb.svg b/src/shared/assets/icons/emoji/family_mwgb.svg
new file mode 100644
index 0000000..8856807
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_mwgb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_mwgg.svg b/src/shared/assets/icons/emoji/family_mwgg.svg
new file mode 100644
index 0000000..58111c6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_mwgg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_woman_boy.svg b/src/shared/assets/icons/emoji/family_woman_boy.svg
new file mode 100644
index 0000000..6ae66b6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_woman_boy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_woman_boy_boy.svg b/src/shared/assets/icons/emoji/family_woman_boy_boy.svg
new file mode 100644
index 0000000..a10b019
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_woman_boy_boy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_woman_girl.svg b/src/shared/assets/icons/emoji/family_woman_girl.svg
new file mode 100644
index 0000000..43e4333
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_woman_girl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_woman_girl_boy.svg b/src/shared/assets/icons/emoji/family_woman_girl_boy.svg
new file mode 100644
index 0000000..710fb8e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_woman_girl_boy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_woman_girl_girl.svg b/src/shared/assets/icons/emoji/family_woman_girl_girl.svg
new file mode 100644
index 0000000..88da46e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_woman_girl_girl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_wwb.svg b/src/shared/assets/icons/emoji/family_wwb.svg
new file mode 100644
index 0000000..8cd8bad
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_wwb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_wwbb.svg b/src/shared/assets/icons/emoji/family_wwbb.svg
new file mode 100644
index 0000000..8915200
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_wwbb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_wwg.svg b/src/shared/assets/icons/emoji/family_wwg.svg
new file mode 100644
index 0000000..9201b66
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_wwg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_wwgb.svg b/src/shared/assets/icons/emoji/family_wwgb.svg
new file mode 100644
index 0000000..976e848
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_wwgb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/family_wwgg.svg b/src/shared/assets/icons/emoji/family_wwgg.svg
new file mode 100644
index 0000000..96e0434
--- /dev/null
+++ b/src/shared/assets/icons/emoji/family_wwgg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fast_forward.svg b/src/shared/assets/icons/emoji/fast_forward.svg
new file mode 100644
index 0000000..1ef719c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fast_forward.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fax.svg b/src/shared/assets/icons/emoji/fax.svg
new file mode 100644
index 0000000..5f88b13
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fax.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fearful.svg b/src/shared/assets/icons/emoji/fearful.svg
new file mode 100644
index 0000000..716302e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fearful.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/feet.svg b/src/shared/assets/icons/emoji/feet.svg
new file mode 100644
index 0000000..4001367
--- /dev/null
+++ b/src/shared/assets/icons/emoji/feet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/female_sign.svg b/src/shared/assets/icons/emoji/female_sign.svg
new file mode 100644
index 0000000..db5291c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/female_sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ferris_wheel.svg b/src/shared/assets/icons/emoji/ferris_wheel.svg
new file mode 100644
index 0000000..c35744a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ferris_wheel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ferry.svg b/src/shared/assets/icons/emoji/ferry.svg
new file mode 100644
index 0000000..70b3542
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ferry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/field_hockey.svg b/src/shared/assets/icons/emoji/field_hockey.svg
new file mode 100644
index 0000000..c367cef
--- /dev/null
+++ b/src/shared/assets/icons/emoji/field_hockey.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/file_cabinet.svg b/src/shared/assets/icons/emoji/file_cabinet.svg
new file mode 100644
index 0000000..4c065fb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/file_cabinet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/file_folder.svg b/src/shared/assets/icons/emoji/file_folder.svg
new file mode 100644
index 0000000..099d58b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/file_folder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/film_frames.svg b/src/shared/assets/icons/emoji/film_frames.svg
new file mode 100644
index 0000000..01f9311
--- /dev/null
+++ b/src/shared/assets/icons/emoji/film_frames.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fingers_crossed.svg b/src/shared/assets/icons/emoji/fingers_crossed.svg
new file mode 100644
index 0000000..f85ba65
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fingers_crossed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fire.svg b/src/shared/assets/icons/emoji/fire.svg
new file mode 100644
index 0000000..e7dee6d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fire.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fire_engine.svg b/src/shared/assets/icons/emoji/fire_engine.svg
new file mode 100644
index 0000000..711c996
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fire_engine.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fire_extinguisher.svg b/src/shared/assets/icons/emoji/fire_extinguisher.svg
new file mode 100644
index 0000000..e8b17ac
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fire_extinguisher.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/firecracker.svg b/src/shared/assets/icons/emoji/firecracker.svg
new file mode 100644
index 0000000..ff03820
--- /dev/null
+++ b/src/shared/assets/icons/emoji/firecracker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fireworks.svg b/src/shared/assets/icons/emoji/fireworks.svg
new file mode 100644
index 0000000..54a4f32
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fireworks.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/first_place.svg b/src/shared/assets/icons/emoji/first_place.svg
new file mode 100644
index 0000000..c67af77
--- /dev/null
+++ b/src/shared/assets/icons/emoji/first_place.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/first_quarter_moon.svg b/src/shared/assets/icons/emoji/first_quarter_moon.svg
new file mode 100644
index 0000000..f668b75
--- /dev/null
+++ b/src/shared/assets/icons/emoji/first_quarter_moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/first_quarter_moon_with_face.svg b/src/shared/assets/icons/emoji/first_quarter_moon_with_face.svg
new file mode 100644
index 0000000..3fffcdd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/first_quarter_moon_with_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fish.svg b/src/shared/assets/icons/emoji/fish.svg
new file mode 100644
index 0000000..7d9ef41
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fish.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fish_cake.svg b/src/shared/assets/icons/emoji/fish_cake.svg
new file mode 100644
index 0000000..fd448da
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fish_cake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fishing_pole_and_fish.svg b/src/shared/assets/icons/emoji/fishing_pole_and_fish.svg
new file mode 100644
index 0000000..1a1df4f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fishing_pole_and_fish.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fist.svg b/src/shared/assets/icons/emoji/fist.svg
new file mode 100644
index 0000000..9991043
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/five.svg b/src/shared/assets/icons/emoji/five.svg
new file mode 100644
index 0000000..be3b062
--- /dev/null
+++ b/src/shared/assets/icons/emoji/five.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ac.svg b/src/shared/assets/icons/emoji/flag_ac.svg
new file mode 100644
index 0000000..53f90dc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ac.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ad.svg b/src/shared/assets/icons/emoji/flag_ad.svg
new file mode 100644
index 0000000..be10594
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ad.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ae.svg b/src/shared/assets/icons/emoji/flag_ae.svg
new file mode 100644
index 0000000..be8e114
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ae.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_af.svg b/src/shared/assets/icons/emoji/flag_af.svg
new file mode 100644
index 0000000..769efca
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_af.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ag.svg b/src/shared/assets/icons/emoji/flag_ag.svg
new file mode 100644
index 0000000..2716617
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ai.svg b/src/shared/assets/icons/emoji/flag_ai.svg
new file mode 100644
index 0000000..6a91dd9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ai.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_al.svg b/src/shared/assets/icons/emoji/flag_al.svg
new file mode 100644
index 0000000..2c8655d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_al.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_am.svg b/src/shared/assets/icons/emoji/flag_am.svg
new file mode 100644
index 0000000..0a966ab
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_am.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ao.svg b/src/shared/assets/icons/emoji/flag_ao.svg
new file mode 100644
index 0000000..65803b6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ao.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_aq.svg b/src/shared/assets/icons/emoji/flag_aq.svg
new file mode 100644
index 0000000..fd29680
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_aq.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ar.svg b/src/shared/assets/icons/emoji/flag_ar.svg
new file mode 100644
index 0000000..e8e60ef
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_as.svg b/src/shared/assets/icons/emoji/flag_as.svg
new file mode 100644
index 0000000..8b27532
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_as.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_at.svg b/src/shared/assets/icons/emoji/flag_at.svg
new file mode 100644
index 0000000..bfe1ec7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_at.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_au.svg b/src/shared/assets/icons/emoji/flag_au.svg
new file mode 100644
index 0000000..989da76
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_au.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_aw.svg b/src/shared/assets/icons/emoji/flag_aw.svg
new file mode 100644
index 0000000..f383951
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_aw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ax.svg b/src/shared/assets/icons/emoji/flag_ax.svg
new file mode 100644
index 0000000..03bc680
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ax.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_az.svg b/src/shared/assets/icons/emoji/flag_az.svg
new file mode 100644
index 0000000..b584854
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_az.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ba.svg b/src/shared/assets/icons/emoji/flag_ba.svg
new file mode 100644
index 0000000..bbcd3b5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ba.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bb.svg b/src/shared/assets/icons/emoji/flag_bb.svg
new file mode 100644
index 0000000..7f9e8c9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bd.svg b/src/shared/assets/icons/emoji/flag_bd.svg
new file mode 100644
index 0000000..6edc844
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_be.svg b/src/shared/assets/icons/emoji/flag_be.svg
new file mode 100644
index 0000000..e956194
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_be.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bf.svg b/src/shared/assets/icons/emoji/flag_bf.svg
new file mode 100644
index 0000000..8bceec7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bg.svg b/src/shared/assets/icons/emoji/flag_bg.svg
new file mode 100644
index 0000000..6e81fba
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bh.svg b/src/shared/assets/icons/emoji/flag_bh.svg
new file mode 100644
index 0000000..73de582
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bi.svg b/src/shared/assets/icons/emoji/flag_bi.svg
new file mode 100644
index 0000000..e53644c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bj.svg b/src/shared/assets/icons/emoji/flag_bj.svg
new file mode 100644
index 0000000..133d711
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bj.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bl.svg b/src/shared/assets/icons/emoji/flag_bl.svg
new file mode 100644
index 0000000..9d4904d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_black.svg b/src/shared/assets/icons/emoji/flag_black.svg
new file mode 100644
index 0000000..819ff64
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_black.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bm.svg b/src/shared/assets/icons/emoji/flag_bm.svg
new file mode 100644
index 0000000..5e7b7f6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bn.svg b/src/shared/assets/icons/emoji/flag_bn.svg
new file mode 100644
index 0000000..3c20edb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bo.svg b/src/shared/assets/icons/emoji/flag_bo.svg
new file mode 100644
index 0000000..ad0a8c9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bq.svg b/src/shared/assets/icons/emoji/flag_bq.svg
new file mode 100644
index 0000000..bde4921
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bq.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_br.svg b/src/shared/assets/icons/emoji/flag_br.svg
new file mode 100644
index 0000000..956e39d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_br.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bs.svg b/src/shared/assets/icons/emoji/flag_bs.svg
new file mode 100644
index 0000000..a75f68b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bt.svg b/src/shared/assets/icons/emoji/flag_bt.svg
new file mode 100644
index 0000000..e822f94
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bv.svg b/src/shared/assets/icons/emoji/flag_bv.svg
new file mode 100644
index 0000000..3d104a6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bv.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bw.svg b/src/shared/assets/icons/emoji/flag_bw.svg
new file mode 100644
index 0000000..5edeb5d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_by.svg b/src/shared/assets/icons/emoji/flag_by.svg
new file mode 100644
index 0000000..3fef573
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_by.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_bz.svg b/src/shared/assets/icons/emoji/flag_bz.svg
new file mode 100644
index 0000000..6f43e4a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_bz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ca.svg b/src/shared/assets/icons/emoji/flag_ca.svg
new file mode 100644
index 0000000..d9c386d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ca.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cc.svg b/src/shared/assets/icons/emoji/flag_cc.svg
new file mode 100644
index 0000000..ce130d7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cd.svg b/src/shared/assets/icons/emoji/flag_cd.svg
new file mode 100644
index 0000000..d1b15c9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cf.svg b/src/shared/assets/icons/emoji/flag_cf.svg
new file mode 100644
index 0000000..72166cb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cg.svg b/src/shared/assets/icons/emoji/flag_cg.svg
new file mode 100644
index 0000000..3d466e3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ch.svg b/src/shared/assets/icons/emoji/flag_ch.svg
new file mode 100644
index 0000000..741b521
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ci.svg b/src/shared/assets/icons/emoji/flag_ci.svg
new file mode 100644
index 0000000..bd2c3e0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ci.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ck.svg b/src/shared/assets/icons/emoji/flag_ck.svg
new file mode 100644
index 0000000..04e0344
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ck.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cl.svg b/src/shared/assets/icons/emoji/flag_cl.svg
new file mode 100644
index 0000000..52b3a00
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cm.svg b/src/shared/assets/icons/emoji/flag_cm.svg
new file mode 100644
index 0000000..7da7b66
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cn.svg b/src/shared/assets/icons/emoji/flag_cn.svg
new file mode 100644
index 0000000..c10116d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_co.svg b/src/shared/assets/icons/emoji/flag_co.svg
new file mode 100644
index 0000000..dc825d2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_co.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cp.svg b/src/shared/assets/icons/emoji/flag_cp.svg
new file mode 100644
index 0000000..4eafe7a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cr.svg b/src/shared/assets/icons/emoji/flag_cr.svg
new file mode 100644
index 0000000..acecc89
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cu.svg b/src/shared/assets/icons/emoji/flag_cu.svg
new file mode 100644
index 0000000..13b6370
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cv.svg b/src/shared/assets/icons/emoji/flag_cv.svg
new file mode 100644
index 0000000..9b2cc18
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cv.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cw.svg b/src/shared/assets/icons/emoji/flag_cw.svg
new file mode 100644
index 0000000..c53d09f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cx.svg b/src/shared/assets/icons/emoji/flag_cx.svg
new file mode 100644
index 0000000..6a322f5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cx.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cy.svg b/src/shared/assets/icons/emoji/flag_cy.svg
new file mode 100644
index 0000000..19bead4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_cz.svg b/src/shared/assets/icons/emoji/flag_cz.svg
new file mode 100644
index 0000000..fd3b470
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_cz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_de.svg b/src/shared/assets/icons/emoji/flag_de.svg
new file mode 100644
index 0000000..10a5399
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_de.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_dg.svg b/src/shared/assets/icons/emoji/flag_dg.svg
new file mode 100644
index 0000000..565a7aa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_dg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_dj.svg b/src/shared/assets/icons/emoji/flag_dj.svg
new file mode 100644
index 0000000..42cbb24
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_dj.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_dk.svg b/src/shared/assets/icons/emoji/flag_dk.svg
new file mode 100644
index 0000000..5ab629b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_dk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_dm.svg b/src/shared/assets/icons/emoji/flag_dm.svg
new file mode 100644
index 0000000..750424f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_dm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_do.svg b/src/shared/assets/icons/emoji/flag_do.svg
new file mode 100644
index 0000000..c627c34
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_do.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_dz.svg b/src/shared/assets/icons/emoji/flag_dz.svg
new file mode 100644
index 0000000..c29a7e2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_dz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ea.svg b/src/shared/assets/icons/emoji/flag_ea.svg
new file mode 100644
index 0000000..d1fd565
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ea.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ec.svg b/src/shared/assets/icons/emoji/flag_ec.svg
new file mode 100644
index 0000000..c035be7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ec.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ee.svg b/src/shared/assets/icons/emoji/flag_ee.svg
new file mode 100644
index 0000000..47a5589
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ee.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_eg.svg b/src/shared/assets/icons/emoji/flag_eg.svg
new file mode 100644
index 0000000..2034a3e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_eg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_eh.svg b/src/shared/assets/icons/emoji/flag_eh.svg
new file mode 100644
index 0000000..9b8dc5a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_eh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_er.svg b/src/shared/assets/icons/emoji/flag_er.svg
new file mode 100644
index 0000000..8e1e510
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_er.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_es.svg b/src/shared/assets/icons/emoji/flag_es.svg
new file mode 100644
index 0000000..d1fd565
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_es.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_et.svg b/src/shared/assets/icons/emoji/flag_et.svg
new file mode 100644
index 0000000..762cc1f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_et.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_eu.svg b/src/shared/assets/icons/emoji/flag_eu.svg
new file mode 100644
index 0000000..045024a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_eu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_fi.svg b/src/shared/assets/icons/emoji/flag_fi.svg
new file mode 100644
index 0000000..e07328e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_fi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_fj.svg b/src/shared/assets/icons/emoji/flag_fj.svg
new file mode 100644
index 0000000..190134b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_fj.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_fk.svg b/src/shared/assets/icons/emoji/flag_fk.svg
new file mode 100644
index 0000000..0091bc7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_fk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_fm.svg b/src/shared/assets/icons/emoji/flag_fm.svg
new file mode 100644
index 0000000..b49556b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_fm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_fo.svg b/src/shared/assets/icons/emoji/flag_fo.svg
new file mode 100644
index 0000000..93a1272
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_fo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_fr.svg b/src/shared/assets/icons/emoji/flag_fr.svg
new file mode 100644
index 0000000..4eafe7a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_fr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ga.svg b/src/shared/assets/icons/emoji/flag_ga.svg
new file mode 100644
index 0000000..a8c6fa4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ga.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gb.svg b/src/shared/assets/icons/emoji/flag_gb.svg
new file mode 100644
index 0000000..21b97e9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gd.svg b/src/shared/assets/icons/emoji/flag_gd.svg
new file mode 100644
index 0000000..e4f37f9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ge.svg b/src/shared/assets/icons/emoji/flag_ge.svg
new file mode 100644
index 0000000..8c2bd5a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gf.svg b/src/shared/assets/icons/emoji/flag_gf.svg
new file mode 100644
index 0000000..2f10cee
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gg.svg b/src/shared/assets/icons/emoji/flag_gg.svg
new file mode 100644
index 0000000..84f6043
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gh.svg b/src/shared/assets/icons/emoji/flag_gh.svg
new file mode 100644
index 0000000..3330218
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gi.svg b/src/shared/assets/icons/emoji/flag_gi.svg
new file mode 100644
index 0000000..432a727
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gl.svg b/src/shared/assets/icons/emoji/flag_gl.svg
new file mode 100644
index 0000000..8a2ba3e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gm.svg b/src/shared/assets/icons/emoji/flag_gm.svg
new file mode 100644
index 0000000..383cf9d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gn.svg b/src/shared/assets/icons/emoji/flag_gn.svg
new file mode 100644
index 0000000..16f4a90
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gp.svg b/src/shared/assets/icons/emoji/flag_gp.svg
new file mode 100644
index 0000000..ca9e4c6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gq.svg b/src/shared/assets/icons/emoji/flag_gq.svg
new file mode 100644
index 0000000..d4e7119
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gq.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gr.svg b/src/shared/assets/icons/emoji/flag_gr.svg
new file mode 100644
index 0000000..74d842d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gs.svg b/src/shared/assets/icons/emoji/flag_gs.svg
new file mode 100644
index 0000000..d8b1e5f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gt.svg b/src/shared/assets/icons/emoji/flag_gt.svg
new file mode 100644
index 0000000..fea623c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gu.svg b/src/shared/assets/icons/emoji/flag_gu.svg
new file mode 100644
index 0000000..2098ecc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gw.svg b/src/shared/assets/icons/emoji/flag_gw.svg
new file mode 100644
index 0000000..6e01b9e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_gy.svg b/src/shared/assets/icons/emoji/flag_gy.svg
new file mode 100644
index 0000000..1edc6ef
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_gy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_hk.svg b/src/shared/assets/icons/emoji/flag_hk.svg
new file mode 100644
index 0000000..ef5ca3b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_hk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_hm.svg b/src/shared/assets/icons/emoji/flag_hm.svg
new file mode 100644
index 0000000..989da76
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_hm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_hn.svg b/src/shared/assets/icons/emoji/flag_hn.svg
new file mode 100644
index 0000000..298ec95
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_hn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_hr.svg b/src/shared/assets/icons/emoji/flag_hr.svg
new file mode 100644
index 0000000..7b8740c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_hr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ht.svg b/src/shared/assets/icons/emoji/flag_ht.svg
new file mode 100644
index 0000000..8ccca42
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ht.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_hu.svg b/src/shared/assets/icons/emoji/flag_hu.svg
new file mode 100644
index 0000000..206baa1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_hu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ic.svg b/src/shared/assets/icons/emoji/flag_ic.svg
new file mode 100644
index 0000000..46b0949
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_id.svg b/src/shared/assets/icons/emoji/flag_id.svg
new file mode 100644
index 0000000..de31273
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_id.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ie.svg b/src/shared/assets/icons/emoji/flag_ie.svg
new file mode 100644
index 0000000..3c50257
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_il.svg b/src/shared/assets/icons/emoji/flag_il.svg
new file mode 100644
index 0000000..5cf3241
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_il.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_im.svg b/src/shared/assets/icons/emoji/flag_im.svg
new file mode 100644
index 0000000..7fc9d46
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_im.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_in.svg b/src/shared/assets/icons/emoji/flag_in.svg
new file mode 100644
index 0000000..7af1daf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_in.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_io.svg b/src/shared/assets/icons/emoji/flag_io.svg
new file mode 100644
index 0000000..565a7aa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_io.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_iq.svg b/src/shared/assets/icons/emoji/flag_iq.svg
new file mode 100644
index 0000000..06cfe31
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_iq.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ir.svg b/src/shared/assets/icons/emoji/flag_ir.svg
new file mode 100644
index 0000000..e8ae7b1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ir.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_is.svg b/src/shared/assets/icons/emoji/flag_is.svg
new file mode 100644
index 0000000..c8e918c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_is.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_it.svg b/src/shared/assets/icons/emoji/flag_it.svg
new file mode 100644
index 0000000..6c38017
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_it.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_je.svg b/src/shared/assets/icons/emoji/flag_je.svg
new file mode 100644
index 0000000..a17c379
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_je.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_jm.svg b/src/shared/assets/icons/emoji/flag_jm.svg
new file mode 100644
index 0000000..dd82d4f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_jm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_jo.svg b/src/shared/assets/icons/emoji/flag_jo.svg
new file mode 100644
index 0000000..40710a5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_jo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_jp.svg b/src/shared/assets/icons/emoji/flag_jp.svg
new file mode 100644
index 0000000..3a724e9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_jp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ke.svg b/src/shared/assets/icons/emoji/flag_ke.svg
new file mode 100644
index 0000000..5bee37f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ke.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_kg.svg b/src/shared/assets/icons/emoji/flag_kg.svg
new file mode 100644
index 0000000..2616d9e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_kg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_kh.svg b/src/shared/assets/icons/emoji/flag_kh.svg
new file mode 100644
index 0000000..54f6e90
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_kh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ki.svg b/src/shared/assets/icons/emoji/flag_ki.svg
new file mode 100644
index 0000000..233cce8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ki.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_km.svg b/src/shared/assets/icons/emoji/flag_km.svg
new file mode 100644
index 0000000..91c12b8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_km.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_kn.svg b/src/shared/assets/icons/emoji/flag_kn.svg
new file mode 100644
index 0000000..461e0f2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_kn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_kp.svg b/src/shared/assets/icons/emoji/flag_kp.svg
new file mode 100644
index 0000000..d530523
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_kp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_kr.svg b/src/shared/assets/icons/emoji/flag_kr.svg
new file mode 100644
index 0000000..7b5ee23
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_kr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_kw.svg b/src/shared/assets/icons/emoji/flag_kw.svg
new file mode 100644
index 0000000..db949b2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_kw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ky.svg b/src/shared/assets/icons/emoji/flag_ky.svg
new file mode 100644
index 0000000..57323f8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ky.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_kz.svg b/src/shared/assets/icons/emoji/flag_kz.svg
new file mode 100644
index 0000000..d2101ab
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_kz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_la.svg b/src/shared/assets/icons/emoji/flag_la.svg
new file mode 100644
index 0000000..0ea005d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_la.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_lb.svg b/src/shared/assets/icons/emoji/flag_lb.svg
new file mode 100644
index 0000000..4271b73
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_lb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_lc.svg b/src/shared/assets/icons/emoji/flag_lc.svg
new file mode 100644
index 0000000..12b2237
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_lc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_li.svg b/src/shared/assets/icons/emoji/flag_li.svg
new file mode 100644
index 0000000..9e474bc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_li.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_lk.svg b/src/shared/assets/icons/emoji/flag_lk.svg
new file mode 100644
index 0000000..a2fe814
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_lk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_lr.svg b/src/shared/assets/icons/emoji/flag_lr.svg
new file mode 100644
index 0000000..dd4a1e4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_lr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ls.svg b/src/shared/assets/icons/emoji/flag_ls.svg
new file mode 100644
index 0000000..ec06e4f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ls.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_lt.svg b/src/shared/assets/icons/emoji/flag_lt.svg
new file mode 100644
index 0000000..5fcfd8b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_lt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_lu.svg b/src/shared/assets/icons/emoji/flag_lu.svg
new file mode 100644
index 0000000..e66c904
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_lu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_lv.svg b/src/shared/assets/icons/emoji/flag_lv.svg
new file mode 100644
index 0000000..f5f3922
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_lv.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ly.svg b/src/shared/assets/icons/emoji/flag_ly.svg
new file mode 100644
index 0000000..c6c12ed
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ly.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ma.svg b/src/shared/assets/icons/emoji/flag_ma.svg
new file mode 100644
index 0000000..d6d689a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ma.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mc.svg b/src/shared/assets/icons/emoji/flag_mc.svg
new file mode 100644
index 0000000..8604a1c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_md.svg b/src/shared/assets/icons/emoji/flag_md.svg
new file mode 100644
index 0000000..eb2d4a2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_md.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_me.svg b/src/shared/assets/icons/emoji/flag_me.svg
new file mode 100644
index 0000000..47c5b2e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_me.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mf.svg b/src/shared/assets/icons/emoji/flag_mf.svg
new file mode 100644
index 0000000..4eafe7a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mg.svg b/src/shared/assets/icons/emoji/flag_mg.svg
new file mode 100644
index 0000000..becf2f4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mh.svg b/src/shared/assets/icons/emoji/flag_mh.svg
new file mode 100644
index 0000000..6774f9b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mk.svg b/src/shared/assets/icons/emoji/flag_mk.svg
new file mode 100644
index 0000000..371b235
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ml.svg b/src/shared/assets/icons/emoji/flag_ml.svg
new file mode 100644
index 0000000..3a522a0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ml.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mm.svg b/src/shared/assets/icons/emoji/flag_mm.svg
new file mode 100644
index 0000000..69db533
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mn.svg b/src/shared/assets/icons/emoji/flag_mn.svg
new file mode 100644
index 0000000..b9635cf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mo.svg b/src/shared/assets/icons/emoji/flag_mo.svg
new file mode 100644
index 0000000..790900e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mp.svg b/src/shared/assets/icons/emoji/flag_mp.svg
new file mode 100644
index 0000000..f0a5fb4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mq.svg b/src/shared/assets/icons/emoji/flag_mq.svg
new file mode 100644
index 0000000..f705309
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mq.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mr.svg b/src/shared/assets/icons/emoji/flag_mr.svg
new file mode 100644
index 0000000..8335c8b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ms.svg b/src/shared/assets/icons/emoji/flag_ms.svg
new file mode 100644
index 0000000..04a1cc1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ms.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mt.svg b/src/shared/assets/icons/emoji/flag_mt.svg
new file mode 100644
index 0000000..5538102
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mu.svg b/src/shared/assets/icons/emoji/flag_mu.svg
new file mode 100644
index 0000000..6c24981
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mv.svg b/src/shared/assets/icons/emoji/flag_mv.svg
new file mode 100644
index 0000000..b57be9c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mv.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mw.svg b/src/shared/assets/icons/emoji/flag_mw.svg
new file mode 100644
index 0000000..9b8ddf5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mx.svg b/src/shared/assets/icons/emoji/flag_mx.svg
new file mode 100644
index 0000000..93d54c4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mx.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_my.svg b/src/shared/assets/icons/emoji/flag_my.svg
new file mode 100644
index 0000000..0480330
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_my.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_mz.svg b/src/shared/assets/icons/emoji/flag_mz.svg
new file mode 100644
index 0000000..cfa9577
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_mz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_na.svg b/src/shared/assets/icons/emoji/flag_na.svg
new file mode 100644
index 0000000..d2a79fd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_na.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_nc.svg b/src/shared/assets/icons/emoji/flag_nc.svg
new file mode 100644
index 0000000..e5dff93
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_nc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ne.svg b/src/shared/assets/icons/emoji/flag_ne.svg
new file mode 100644
index 0000000..53f25f5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ne.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_nf.svg b/src/shared/assets/icons/emoji/flag_nf.svg
new file mode 100644
index 0000000..990687f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_nf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ng.svg b/src/shared/assets/icons/emoji/flag_ng.svg
new file mode 100644
index 0000000..6c6e31c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ng.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ni.svg b/src/shared/assets/icons/emoji/flag_ni.svg
new file mode 100644
index 0000000..990868a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ni.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_nl.svg b/src/shared/assets/icons/emoji/flag_nl.svg
new file mode 100644
index 0000000..65e8be9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_nl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_no.svg b/src/shared/assets/icons/emoji/flag_no.svg
new file mode 100644
index 0000000..4f5260a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_np.svg b/src/shared/assets/icons/emoji/flag_np.svg
new file mode 100644
index 0000000..5e5faaf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_np.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_nr.svg b/src/shared/assets/icons/emoji/flag_nr.svg
new file mode 100644
index 0000000..72485e7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_nr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_nu.svg b/src/shared/assets/icons/emoji/flag_nu.svg
new file mode 100644
index 0000000..dd50901
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_nu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_nz.svg b/src/shared/assets/icons/emoji/flag_nz.svg
new file mode 100644
index 0000000..956a9d2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_nz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_om.svg b/src/shared/assets/icons/emoji/flag_om.svg
new file mode 100644
index 0000000..29af825
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_om.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pa.svg b/src/shared/assets/icons/emoji/flag_pa.svg
new file mode 100644
index 0000000..4fc55f5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pe.svg b/src/shared/assets/icons/emoji/flag_pe.svg
new file mode 100644
index 0000000..fc93b29
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pf.svg b/src/shared/assets/icons/emoji/flag_pf.svg
new file mode 100644
index 0000000..333c6d0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pg.svg b/src/shared/assets/icons/emoji/flag_pg.svg
new file mode 100644
index 0000000..2d20ed8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ph.svg b/src/shared/assets/icons/emoji/flag_ph.svg
new file mode 100644
index 0000000..e9f011d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ph.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pk.svg b/src/shared/assets/icons/emoji/flag_pk.svg
new file mode 100644
index 0000000..a718df6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pl.svg b/src/shared/assets/icons/emoji/flag_pl.svg
new file mode 100644
index 0000000..8169875
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pm.svg b/src/shared/assets/icons/emoji/flag_pm.svg
new file mode 100644
index 0000000..dc55c02
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pn.svg b/src/shared/assets/icons/emoji/flag_pn.svg
new file mode 100644
index 0000000..234f53f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pr.svg b/src/shared/assets/icons/emoji/flag_pr.svg
new file mode 100644
index 0000000..f4c2ace
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ps.svg b/src/shared/assets/icons/emoji/flag_ps.svg
new file mode 100644
index 0000000..6ce8ec7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ps.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pt.svg b/src/shared/assets/icons/emoji/flag_pt.svg
new file mode 100644
index 0000000..78b29a8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_pw.svg b/src/shared/assets/icons/emoji/flag_pw.svg
new file mode 100644
index 0000000..043f7a5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_pw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_py.svg b/src/shared/assets/icons/emoji/flag_py.svg
new file mode 100644
index 0000000..c8e83dc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_py.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_qa.svg b/src/shared/assets/icons/emoji/flag_qa.svg
new file mode 100644
index 0000000..f3e91d0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_qa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_re.svg b/src/shared/assets/icons/emoji/flag_re.svg
new file mode 100644
index 0000000..ab1399f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_re.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ro.svg b/src/shared/assets/icons/emoji/flag_ro.svg
new file mode 100644
index 0000000..33ac6ed
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ro.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_rs.svg b/src/shared/assets/icons/emoji/flag_rs.svg
new file mode 100644
index 0000000..5c6c69e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_rs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ru.svg b/src/shared/assets/icons/emoji/flag_ru.svg
new file mode 100644
index 0000000..46f74d5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ru.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_rw.svg b/src/shared/assets/icons/emoji/flag_rw.svg
new file mode 100644
index 0000000..6175c02
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_rw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sa.svg b/src/shared/assets/icons/emoji/flag_sa.svg
new file mode 100644
index 0000000..d0d9580
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sb.svg b/src/shared/assets/icons/emoji/flag_sb.svg
new file mode 100644
index 0000000..a55ff60
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sc.svg b/src/shared/assets/icons/emoji/flag_sc.svg
new file mode 100644
index 0000000..40e42ea
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sd.svg b/src/shared/assets/icons/emoji/flag_sd.svg
new file mode 100644
index 0000000..ddb60ba
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_se.svg b/src/shared/assets/icons/emoji/flag_se.svg
new file mode 100644
index 0000000..a039dc2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_se.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sg.svg b/src/shared/assets/icons/emoji/flag_sg.svg
new file mode 100644
index 0000000..199e54e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sh.svg b/src/shared/assets/icons/emoji/flag_sh.svg
new file mode 100644
index 0000000..57d004d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_si.svg b/src/shared/assets/icons/emoji/flag_si.svg
new file mode 100644
index 0000000..e25c04c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_si.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sj.svg b/src/shared/assets/icons/emoji/flag_sj.svg
new file mode 100644
index 0000000..4f5260a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sj.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sk.svg b/src/shared/assets/icons/emoji/flag_sk.svg
new file mode 100644
index 0000000..c4f7caf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sl.svg b/src/shared/assets/icons/emoji/flag_sl.svg
new file mode 100644
index 0000000..b08dd1d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sm.svg b/src/shared/assets/icons/emoji/flag_sm.svg
new file mode 100644
index 0000000..b53d00d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sn.svg b/src/shared/assets/icons/emoji/flag_sn.svg
new file mode 100644
index 0000000..c233472
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_so.svg b/src/shared/assets/icons/emoji/flag_so.svg
new file mode 100644
index 0000000..293dd34
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_so.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sr.svg b/src/shared/assets/icons/emoji/flag_sr.svg
new file mode 100644
index 0000000..c483fb9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ss.svg b/src/shared/assets/icons/emoji/flag_ss.svg
new file mode 100644
index 0000000..0aa63d7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ss.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_st.svg b/src/shared/assets/icons/emoji/flag_st.svg
new file mode 100644
index 0000000..f2bb52a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_st.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sv.svg b/src/shared/assets/icons/emoji/flag_sv.svg
new file mode 100644
index 0000000..873310c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sv.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sx.svg b/src/shared/assets/icons/emoji/flag_sx.svg
new file mode 100644
index 0000000..2047243
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sx.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sy.svg b/src/shared/assets/icons/emoji/flag_sy.svg
new file mode 100644
index 0000000..5e32d2c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_sz.svg b/src/shared/assets/icons/emoji/flag_sz.svg
new file mode 100644
index 0000000..cb7f84a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_sz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ta.svg b/src/shared/assets/icons/emoji/flag_ta.svg
new file mode 100644
index 0000000..547fa05
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ta.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tc.svg b/src/shared/assets/icons/emoji/flag_tc.svg
new file mode 100644
index 0000000..3c61bc7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_td.svg b/src/shared/assets/icons/emoji/flag_td.svg
new file mode 100644
index 0000000..d106ba8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_td.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tf.svg b/src/shared/assets/icons/emoji/flag_tf.svg
new file mode 100644
index 0000000..cf4bfac
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tg.svg b/src/shared/assets/icons/emoji/flag_tg.svg
new file mode 100644
index 0000000..4a05a30
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_th.svg b/src/shared/assets/icons/emoji/flag_th.svg
new file mode 100644
index 0000000..ff2a66f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_th.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tj.svg b/src/shared/assets/icons/emoji/flag_tj.svg
new file mode 100644
index 0000000..6045f46
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tj.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tk.svg b/src/shared/assets/icons/emoji/flag_tk.svg
new file mode 100644
index 0000000..bfa9362
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tl.svg b/src/shared/assets/icons/emoji/flag_tl.svg
new file mode 100644
index 0000000..6030072
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tm.svg b/src/shared/assets/icons/emoji/flag_tm.svg
new file mode 100644
index 0000000..a57c35c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tn.svg b/src/shared/assets/icons/emoji/flag_tn.svg
new file mode 100644
index 0000000..c13e730
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_to.svg b/src/shared/assets/icons/emoji/flag_to.svg
new file mode 100644
index 0000000..20a9555
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_to.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tr.svg b/src/shared/assets/icons/emoji/flag_tr.svg
new file mode 100644
index 0000000..861da57
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tt.svg b/src/shared/assets/icons/emoji/flag_tt.svg
new file mode 100644
index 0000000..578c8eb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tv.svg b/src/shared/assets/icons/emoji/flag_tv.svg
new file mode 100644
index 0000000..6558df6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tv.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tw.svg b/src/shared/assets/icons/emoji/flag_tw.svg
new file mode 100644
index 0000000..4cd304e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_tz.svg b/src/shared/assets/icons/emoji/flag_tz.svg
new file mode 100644
index 0000000..a9ddb8e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_tz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ua.svg b/src/shared/assets/icons/emoji/flag_ua.svg
new file mode 100644
index 0000000..989b5c2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ua.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ug.svg b/src/shared/assets/icons/emoji/flag_ug.svg
new file mode 100644
index 0000000..6602ca9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_um.svg b/src/shared/assets/icons/emoji/flag_um.svg
new file mode 100644
index 0000000..d51f600
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_um.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_us.svg b/src/shared/assets/icons/emoji/flag_us.svg
new file mode 100644
index 0000000..d51f600
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_us.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_uy.svg b/src/shared/assets/icons/emoji/flag_uy.svg
new file mode 100644
index 0000000..796244c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_uy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_uz.svg b/src/shared/assets/icons/emoji/flag_uz.svg
new file mode 100644
index 0000000..b913772
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_uz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_va.svg b/src/shared/assets/icons/emoji/flag_va.svg
new file mode 100644
index 0000000..7b2bffa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_va.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_vc.svg b/src/shared/assets/icons/emoji/flag_vc.svg
new file mode 100644
index 0000000..fb97611
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_vc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ve.svg b/src/shared/assets/icons/emoji/flag_ve.svg
new file mode 100644
index 0000000..294b5c6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ve.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_vg.svg b/src/shared/assets/icons/emoji/flag_vg.svg
new file mode 100644
index 0000000..d8194cd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_vg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_vi.svg b/src/shared/assets/icons/emoji/flag_vi.svg
new file mode 100644
index 0000000..d0602d2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_vi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_vn.svg b/src/shared/assets/icons/emoji/flag_vn.svg
new file mode 100644
index 0000000..4e0e1b5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_vn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_vu.svg b/src/shared/assets/icons/emoji/flag_vu.svg
new file mode 100644
index 0000000..151e7aa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_vu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_wf.svg b/src/shared/assets/icons/emoji/flag_wf.svg
new file mode 100644
index 0000000..9895422
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_wf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_white.svg b/src/shared/assets/icons/emoji/flag_white.svg
new file mode 100644
index 0000000..2f21575
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_white.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ws.svg b/src/shared/assets/icons/emoji/flag_ws.svg
new file mode 100644
index 0000000..6b075cb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ws.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_xk.svg b/src/shared/assets/icons/emoji/flag_xk.svg
new file mode 100644
index 0000000..39890a9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_xk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_ye.svg b/src/shared/assets/icons/emoji/flag_ye.svg
new file mode 100644
index 0000000..a82532c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_ye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_yt.svg b/src/shared/assets/icons/emoji/flag_yt.svg
new file mode 100644
index 0000000..76765b9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_yt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_za.svg b/src/shared/assets/icons/emoji/flag_za.svg
new file mode 100644
index 0000000..275c136
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_za.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_zm.svg b/src/shared/assets/icons/emoji/flag_zm.svg
new file mode 100644
index 0000000..d276896
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_zm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flag_zw.svg b/src/shared/assets/icons/emoji/flag_zw.svg
new file mode 100644
index 0000000..15a8464
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flag_zw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flags.svg b/src/shared/assets/icons/emoji/flags.svg
new file mode 100644
index 0000000..5457d1e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flags.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flamingo.svg b/src/shared/assets/icons/emoji/flamingo.svg
new file mode 100644
index 0000000..aaa5cfa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flamingo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flashlight.svg b/src/shared/assets/icons/emoji/flashlight.svg
new file mode 100644
index 0000000..1aff8ae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flashlight.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fleur_de_lis.svg b/src/shared/assets/icons/emoji/fleur_de_lis.svg
new file mode 100644
index 0000000..27be9c3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fleur_de_lis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/floppy_disk.svg b/src/shared/assets/icons/emoji/floppy_disk.svg
new file mode 100644
index 0000000..7c97626
--- /dev/null
+++ b/src/shared/assets/icons/emoji/floppy_disk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flower_playing_cards.svg b/src/shared/assets/icons/emoji/flower_playing_cards.svg
new file mode 100644
index 0000000..33d3e0f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flower_playing_cards.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flushed.svg b/src/shared/assets/icons/emoji/flushed.svg
new file mode 100644
index 0000000..2663c8c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flushed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flying_disc.svg b/src/shared/assets/icons/emoji/flying_disc.svg
new file mode 100644
index 0000000..84fdba4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flying_disc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/flying_saucer.svg b/src/shared/assets/icons/emoji/flying_saucer.svg
new file mode 100644
index 0000000..5f015fe
--- /dev/null
+++ b/src/shared/assets/icons/emoji/flying_saucer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fog.svg b/src/shared/assets/icons/emoji/fog.svg
new file mode 100644
index 0000000..fe6e480
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/foggy.svg b/src/shared/assets/icons/emoji/foggy.svg
new file mode 100644
index 0000000..d6298de
--- /dev/null
+++ b/src/shared/assets/icons/emoji/foggy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/foot.svg b/src/shared/assets/icons/emoji/foot.svg
new file mode 100644
index 0000000..abbbbac
--- /dev/null
+++ b/src/shared/assets/icons/emoji/foot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/football.svg b/src/shared/assets/icons/emoji/football.svg
new file mode 100644
index 0000000..4f5530d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/football.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/footprints.svg b/src/shared/assets/icons/emoji/footprints.svg
new file mode 100644
index 0000000..bc37ac0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/footprints.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fork_and_knife.svg b/src/shared/assets/icons/emoji/fork_and_knife.svg
new file mode 100644
index 0000000..e7de6c0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fork_and_knife.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fork_knife_plate.svg b/src/shared/assets/icons/emoji/fork_knife_plate.svg
new file mode 100644
index 0000000..7437a35
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fork_knife_plate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fortune_cookie.svg b/src/shared/assets/icons/emoji/fortune_cookie.svg
new file mode 100644
index 0000000..5d61144
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fortune_cookie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fountain.svg b/src/shared/assets/icons/emoji/fountain.svg
new file mode 100644
index 0000000..659c228
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fountain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/four.svg b/src/shared/assets/icons/emoji/four.svg
new file mode 100644
index 0000000..b1004f3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/four.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/four_leaf_clover.svg b/src/shared/assets/icons/emoji/four_leaf_clover.svg
new file mode 100644
index 0000000..cac00d4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/four_leaf_clover.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fox.svg b/src/shared/assets/icons/emoji/fox.svg
new file mode 100644
index 0000000..13704a4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/frame_photo.svg b/src/shared/assets/icons/emoji/frame_photo.svg
new file mode 100644
index 0000000..1a2ad72
--- /dev/null
+++ b/src/shared/assets/icons/emoji/frame_photo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/free.svg b/src/shared/assets/icons/emoji/free.svg
new file mode 100644
index 0000000..2dc2d6a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/free.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/french_bread.svg b/src/shared/assets/icons/emoji/french_bread.svg
new file mode 100644
index 0000000..8da1042
--- /dev/null
+++ b/src/shared/assets/icons/emoji/french_bread.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fried_shrimp.svg b/src/shared/assets/icons/emoji/fried_shrimp.svg
new file mode 100644
index 0000000..9130422
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fried_shrimp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fries.svg b/src/shared/assets/icons/emoji/fries.svg
new file mode 100644
index 0000000..faac7ec
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fries.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/frog.svg b/src/shared/assets/icons/emoji/frog.svg
new file mode 100644
index 0000000..74ddb59
--- /dev/null
+++ b/src/shared/assets/icons/emoji/frog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/frowning.svg b/src/shared/assets/icons/emoji/frowning.svg
new file mode 100644
index 0000000..683c0d3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/frowning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/frowning2.svg b/src/shared/assets/icons/emoji/frowning2.svg
new file mode 100644
index 0000000..a2a4909
--- /dev/null
+++ b/src/shared/assets/icons/emoji/frowning2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/fuelpump.svg b/src/shared/assets/icons/emoji/fuelpump.svg
new file mode 100644
index 0000000..0081947
--- /dev/null
+++ b/src/shared/assets/icons/emoji/fuelpump.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/full_moon.svg b/src/shared/assets/icons/emoji/full_moon.svg
new file mode 100644
index 0000000..9a70427
--- /dev/null
+++ b/src/shared/assets/icons/emoji/full_moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/full_moon_with_face.svg b/src/shared/assets/icons/emoji/full_moon_with_face.svg
new file mode 100644
index 0000000..4c98969
--- /dev/null
+++ b/src/shared/assets/icons/emoji/full_moon_with_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/game_die.svg b/src/shared/assets/icons/emoji/game_die.svg
new file mode 100644
index 0000000..408f2f9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/game_die.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/garlic.svg b/src/shared/assets/icons/emoji/garlic.svg
new file mode 100644
index 0000000..37a9f36
--- /dev/null
+++ b/src/shared/assets/icons/emoji/garlic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/gear.svg b/src/shared/assets/icons/emoji/gear.svg
new file mode 100644
index 0000000..635ca02
--- /dev/null
+++ b/src/shared/assets/icons/emoji/gear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/gem.svg b/src/shared/assets/icons/emoji/gem.svg
new file mode 100644
index 0000000..a379f71
--- /dev/null
+++ b/src/shared/assets/icons/emoji/gem.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/gemini.svg b/src/shared/assets/icons/emoji/gemini.svg
new file mode 100644
index 0000000..9f05642
--- /dev/null
+++ b/src/shared/assets/icons/emoji/gemini.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/genie.svg b/src/shared/assets/icons/emoji/genie.svg
new file mode 100644
index 0000000..95be289
--- /dev/null
+++ b/src/shared/assets/icons/emoji/genie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ghost.svg b/src/shared/assets/icons/emoji/ghost.svg
new file mode 100644
index 0000000..02e70fa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ghost.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/gift.svg b/src/shared/assets/icons/emoji/gift.svg
new file mode 100644
index 0000000..1ab8298
--- /dev/null
+++ b/src/shared/assets/icons/emoji/gift.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/gift_heart.svg b/src/shared/assets/icons/emoji/gift_heart.svg
new file mode 100644
index 0000000..5db2632
--- /dev/null
+++ b/src/shared/assets/icons/emoji/gift_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/giraffe.svg b/src/shared/assets/icons/emoji/giraffe.svg
new file mode 100644
index 0000000..233e3c9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/giraffe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/girl.svg b/src/shared/assets/icons/emoji/girl.svg
new file mode 100644
index 0000000..e40a858
--- /dev/null
+++ b/src/shared/assets/icons/emoji/girl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/globe_with_meridians.svg b/src/shared/assets/icons/emoji/globe_with_meridians.svg
new file mode 100644
index 0000000..a9ec9e6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/globe_with_meridians.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/gloves.svg b/src/shared/assets/icons/emoji/gloves.svg
new file mode 100644
index 0000000..1b028b2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/gloves.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/goal.svg b/src/shared/assets/icons/emoji/goal.svg
new file mode 100644
index 0000000..4d187f2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/goal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/goat.svg b/src/shared/assets/icons/emoji/goat.svg
new file mode 100644
index 0000000..83d3e56
--- /dev/null
+++ b/src/shared/assets/icons/emoji/goat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/goggles.svg b/src/shared/assets/icons/emoji/goggles.svg
new file mode 100644
index 0000000..cdb79f9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/goggles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/golf.svg b/src/shared/assets/icons/emoji/golf.svg
new file mode 100644
index 0000000..c4f8916
--- /dev/null
+++ b/src/shared/assets/icons/emoji/golf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/gorilla.svg b/src/shared/assets/icons/emoji/gorilla.svg
new file mode 100644
index 0000000..aa59923
--- /dev/null
+++ b/src/shared/assets/icons/emoji/gorilla.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/grapes.svg b/src/shared/assets/icons/emoji/grapes.svg
new file mode 100644
index 0000000..e52e2f8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/grapes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/green_apple.svg b/src/shared/assets/icons/emoji/green_apple.svg
new file mode 100644
index 0000000..1423d8a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/green_apple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/green_book.svg b/src/shared/assets/icons/emoji/green_book.svg
new file mode 100644
index 0000000..ff74744
--- /dev/null
+++ b/src/shared/assets/icons/emoji/green_book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/green_circle.svg b/src/shared/assets/icons/emoji/green_circle.svg
new file mode 100644
index 0000000..3e68a3f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/green_circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/green_heart.svg b/src/shared/assets/icons/emoji/green_heart.svg
new file mode 100644
index 0000000..b81f702
--- /dev/null
+++ b/src/shared/assets/icons/emoji/green_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/green_square.svg b/src/shared/assets/icons/emoji/green_square.svg
new file mode 100644
index 0000000..73ed4fa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/green_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/grey_exclamation.svg b/src/shared/assets/icons/emoji/grey_exclamation.svg
new file mode 100644
index 0000000..40881c5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/grey_exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/grey_question.svg b/src/shared/assets/icons/emoji/grey_question.svg
new file mode 100644
index 0000000..ab6b64b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/grey_question.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/grimacing.svg b/src/shared/assets/icons/emoji/grimacing.svg
new file mode 100644
index 0000000..3fdb9bf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/grimacing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/grin.svg b/src/shared/assets/icons/emoji/grin.svg
new file mode 100644
index 0000000..9b792cb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/grin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/grinning.svg b/src/shared/assets/icons/emoji/grinning.svg
new file mode 100644
index 0000000..21afce4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/grinning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/guard.svg b/src/shared/assets/icons/emoji/guard.svg
new file mode 100644
index 0000000..d809a9f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/guard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/guide_dog.svg b/src/shared/assets/icons/emoji/guide_dog.svg
new file mode 100644
index 0000000..fc63587
--- /dev/null
+++ b/src/shared/assets/icons/emoji/guide_dog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/guitar.svg b/src/shared/assets/icons/emoji/guitar.svg
new file mode 100644
index 0000000..22074a1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/guitar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/gun.svg b/src/shared/assets/icons/emoji/gun.svg
new file mode 100644
index 0000000..3c8b6e4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/gun.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hamburger.svg b/src/shared/assets/icons/emoji/hamburger.svg
new file mode 100644
index 0000000..a129dcc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hamburger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hammer.svg b/src/shared/assets/icons/emoji/hammer.svg
new file mode 100644
index 0000000..1a0485e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hammer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hammer_pick.svg b/src/shared/assets/icons/emoji/hammer_pick.svg
new file mode 100644
index 0000000..3a8ff26
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hammer_pick.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hamster.svg b/src/shared/assets/icons/emoji/hamster.svg
new file mode 100644
index 0000000..9bb7bae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hamster.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hand_splayed.svg b/src/shared/assets/icons/emoji/hand_splayed.svg
new file mode 100644
index 0000000..1c8dd68
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hand_splayed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/handbag.svg b/src/shared/assets/icons/emoji/handbag.svg
new file mode 100644
index 0000000..3093d6b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/handbag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/handshake.svg b/src/shared/assets/icons/emoji/handshake.svg
new file mode 100644
index 0000000..3d797a0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/handshake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hash.svg b/src/shared/assets/icons/emoji/hash.svg
new file mode 100644
index 0000000..f2f1011
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hatched_chick.svg b/src/shared/assets/icons/emoji/hatched_chick.svg
new file mode 100644
index 0000000..bcbd218
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hatched_chick.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hatching_chick.svg b/src/shared/assets/icons/emoji/hatching_chick.svg
new file mode 100644
index 0000000..98f9c82
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hatching_chick.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/head_bandage.svg b/src/shared/assets/icons/emoji/head_bandage.svg
new file mode 100644
index 0000000..fce67fc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/head_bandage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/headphones.svg b/src/shared/assets/icons/emoji/headphones.svg
new file mode 100644
index 0000000..3a9df15
--- /dev/null
+++ b/src/shared/assets/icons/emoji/headphones.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hear_no_evil.svg b/src/shared/assets/icons/emoji/hear_no_evil.svg
new file mode 100644
index 0000000..377e0e6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hear_no_evil.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heart.svg b/src/shared/assets/icons/emoji/heart.svg
new file mode 100644
index 0000000..7eb5c59
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heart_decoration.svg b/src/shared/assets/icons/emoji/heart_decoration.svg
new file mode 100644
index 0000000..71adb41
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heart_decoration.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heart_exclamation.svg b/src/shared/assets/icons/emoji/heart_exclamation.svg
new file mode 100644
index 0000000..b78e878
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heart_exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heart_eyes.svg b/src/shared/assets/icons/emoji/heart_eyes.svg
new file mode 100644
index 0000000..18b1867
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heart_eyes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heart_eyes_cat.svg b/src/shared/assets/icons/emoji/heart_eyes_cat.svg
new file mode 100644
index 0000000..a4dd7e4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heart_eyes_cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heartbeat.svg b/src/shared/assets/icons/emoji/heartbeat.svg
new file mode 100644
index 0000000..404a6e7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heartbeat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heartpulse.svg b/src/shared/assets/icons/emoji/heartpulse.svg
new file mode 100644
index 0000000..295f9d4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heartpulse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hearts.svg b/src/shared/assets/icons/emoji/hearts.svg
new file mode 100644
index 0000000..67f49c3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hearts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heavy_check_mark.svg b/src/shared/assets/icons/emoji/heavy_check_mark.svg
new file mode 100644
index 0000000..1797238
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heavy_check_mark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heavy_division_sign.svg b/src/shared/assets/icons/emoji/heavy_division_sign.svg
new file mode 100644
index 0000000..6b8a7c1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heavy_division_sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heavy_dollar_sign.svg b/src/shared/assets/icons/emoji/heavy_dollar_sign.svg
new file mode 100644
index 0000000..1bc1ead
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heavy_dollar_sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heavy_minus_sign.svg b/src/shared/assets/icons/emoji/heavy_minus_sign.svg
new file mode 100644
index 0000000..589c012
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heavy_minus_sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heavy_multiplication_x.svg b/src/shared/assets/icons/emoji/heavy_multiplication_x.svg
new file mode 100644
index 0000000..d102373
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heavy_multiplication_x.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/heavy_plus_sign.svg b/src/shared/assets/icons/emoji/heavy_plus_sign.svg
new file mode 100644
index 0000000..5d55ec2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/heavy_plus_sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hedgehog.svg b/src/shared/assets/icons/emoji/hedgehog.svg
new file mode 100644
index 0000000..ebbfc2a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hedgehog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/helicopter.svg b/src/shared/assets/icons/emoji/helicopter.svg
new file mode 100644
index 0000000..8b7a403
--- /dev/null
+++ b/src/shared/assets/icons/emoji/helicopter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/helmet_with_cross.svg b/src/shared/assets/icons/emoji/helmet_with_cross.svg
new file mode 100644
index 0000000..e8457ae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/helmet_with_cross.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/herb.svg b/src/shared/assets/icons/emoji/herb.svg
new file mode 100644
index 0000000..9243e96
--- /dev/null
+++ b/src/shared/assets/icons/emoji/herb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hibiscus.svg b/src/shared/assets/icons/emoji/hibiscus.svg
new file mode 100644
index 0000000..19c2f89
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hibiscus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/high_brightness.svg b/src/shared/assets/icons/emoji/high_brightness.svg
new file mode 100644
index 0000000..2a2d58c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/high_brightness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/high_heel.svg b/src/shared/assets/icons/emoji/high_heel.svg
new file mode 100644
index 0000000..f3aaf44
--- /dev/null
+++ b/src/shared/assets/icons/emoji/high_heel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hiking_boot.svg b/src/shared/assets/icons/emoji/hiking_boot.svg
new file mode 100644
index 0000000..6715028
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hiking_boot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hindu_temple.svg b/src/shared/assets/icons/emoji/hindu_temple.svg
new file mode 100644
index 0000000..4a2e9be
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hindu_temple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hippopotamus.svg b/src/shared/assets/icons/emoji/hippopotamus.svg
new file mode 100644
index 0000000..2764249
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hippopotamus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hockey.svg b/src/shared/assets/icons/emoji/hockey.svg
new file mode 100644
index 0000000..382c629
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hockey.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hole.svg b/src/shared/assets/icons/emoji/hole.svg
new file mode 100644
index 0000000..213a6ab
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hole.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/homes.svg b/src/shared/assets/icons/emoji/homes.svg
new file mode 100644
index 0000000..483f1ad
--- /dev/null
+++ b/src/shared/assets/icons/emoji/homes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/honey_pot.svg b/src/shared/assets/icons/emoji/honey_pot.svg
new file mode 100644
index 0000000..38c4dd5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/honey_pot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/horse.svg b/src/shared/assets/icons/emoji/horse.svg
new file mode 100644
index 0000000..9aa7d69
--- /dev/null
+++ b/src/shared/assets/icons/emoji/horse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/horse_racing.svg b/src/shared/assets/icons/emoji/horse_racing.svg
new file mode 100644
index 0000000..e4cf152
--- /dev/null
+++ b/src/shared/assets/icons/emoji/horse_racing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hospital.svg b/src/shared/assets/icons/emoji/hospital.svg
new file mode 100644
index 0000000..0b2748a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hospital.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hot_face.svg b/src/shared/assets/icons/emoji/hot_face.svg
new file mode 100644
index 0000000..09e99a3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hot_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hot_pepper.svg b/src/shared/assets/icons/emoji/hot_pepper.svg
new file mode 100644
index 0000000..eaeef86
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hot_pepper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hotdog.svg b/src/shared/assets/icons/emoji/hotdog.svg
new file mode 100644
index 0000000..a450dbb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hotdog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hotel.svg b/src/shared/assets/icons/emoji/hotel.svg
new file mode 100644
index 0000000..2d67b9a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hotel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hotsprings.svg b/src/shared/assets/icons/emoji/hotsprings.svg
new file mode 100644
index 0000000..4a87bea
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hotsprings.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hourglass.svg b/src/shared/assets/icons/emoji/hourglass.svg
new file mode 100644
index 0000000..ed66084
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hourglass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hourglass_flowing_sand.svg b/src/shared/assets/icons/emoji/hourglass_flowing_sand.svg
new file mode 100644
index 0000000..3491504
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hourglass_flowing_sand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/house.svg b/src/shared/assets/icons/emoji/house.svg
new file mode 100644
index 0000000..0692739
--- /dev/null
+++ b/src/shared/assets/icons/emoji/house.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/house_abandoned.svg b/src/shared/assets/icons/emoji/house_abandoned.svg
new file mode 100644
index 0000000..5c5ade6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/house_abandoned.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/house_with_garden.svg b/src/shared/assets/icons/emoji/house_with_garden.svg
new file mode 100644
index 0000000..b44b728
--- /dev/null
+++ b/src/shared/assets/icons/emoji/house_with_garden.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hugging.svg b/src/shared/assets/icons/emoji/hugging.svg
new file mode 100644
index 0000000..1341675
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hugging.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/hushed.svg b/src/shared/assets/icons/emoji/hushed.svg
new file mode 100644
index 0000000..579bf48
--- /dev/null
+++ b/src/shared/assets/icons/emoji/hushed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ice_cream.svg b/src/shared/assets/icons/emoji/ice_cream.svg
new file mode 100644
index 0000000..187b2f4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ice_cream.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ice_cube.svg b/src/shared/assets/icons/emoji/ice_cube.svg
new file mode 100644
index 0000000..569fe03
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ice_cube.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ice_skate.svg b/src/shared/assets/icons/emoji/ice_skate.svg
new file mode 100644
index 0000000..022e86e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ice_skate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/icecream.svg b/src/shared/assets/icons/emoji/icecream.svg
new file mode 100644
index 0000000..9b869f8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/icecream.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/id.svg b/src/shared/assets/icons/emoji/id.svg
new file mode 100644
index 0000000..5796259
--- /dev/null
+++ b/src/shared/assets/icons/emoji/id.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ideograph_advantage.svg b/src/shared/assets/icons/emoji/ideograph_advantage.svg
new file mode 100644
index 0000000..c7465f8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ideograph_advantage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/imp.svg b/src/shared/assets/icons/emoji/imp.svg
new file mode 100644
index 0000000..61097f0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/imp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/inbox_tray.svg b/src/shared/assets/icons/emoji/inbox_tray.svg
new file mode 100644
index 0000000..921ca18
--- /dev/null
+++ b/src/shared/assets/icons/emoji/inbox_tray.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/incoming_envelope.svg b/src/shared/assets/icons/emoji/incoming_envelope.svg
new file mode 100644
index 0000000..7c59e93
--- /dev/null
+++ b/src/shared/assets/icons/emoji/incoming_envelope.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/infinity.svg b/src/shared/assets/icons/emoji/infinity.svg
new file mode 100644
index 0000000..03df2a6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/infinity.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/information_source.svg b/src/shared/assets/icons/emoji/information_source.svg
new file mode 100644
index 0000000..bc34155
--- /dev/null
+++ b/src/shared/assets/icons/emoji/information_source.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/innocent.svg b/src/shared/assets/icons/emoji/innocent.svg
new file mode 100644
index 0000000..f6260fd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/innocent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/interrobang.svg b/src/shared/assets/icons/emoji/interrobang.svg
new file mode 100644
index 0000000..8cf9985
--- /dev/null
+++ b/src/shared/assets/icons/emoji/interrobang.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/iphone.svg b/src/shared/assets/icons/emoji/iphone.svg
new file mode 100644
index 0000000..81c4e99
--- /dev/null
+++ b/src/shared/assets/icons/emoji/iphone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/island.svg b/src/shared/assets/icons/emoji/island.svg
new file mode 100644
index 0000000..d66d8d4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/island.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/izakaya_lantern.svg b/src/shared/assets/icons/emoji/izakaya_lantern.svg
new file mode 100644
index 0000000..a825f2b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/izakaya_lantern.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/jack_o_lantern.svg b/src/shared/assets/icons/emoji/jack_o_lantern.svg
new file mode 100644
index 0000000..591fc66
--- /dev/null
+++ b/src/shared/assets/icons/emoji/jack_o_lantern.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/japan.svg b/src/shared/assets/icons/emoji/japan.svg
new file mode 100644
index 0000000..a67c561
--- /dev/null
+++ b/src/shared/assets/icons/emoji/japan.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/japanese_castle.svg b/src/shared/assets/icons/emoji/japanese_castle.svg
new file mode 100644
index 0000000..2168399
--- /dev/null
+++ b/src/shared/assets/icons/emoji/japanese_castle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/japanese_goblin.svg b/src/shared/assets/icons/emoji/japanese_goblin.svg
new file mode 100644
index 0000000..bb0db74
--- /dev/null
+++ b/src/shared/assets/icons/emoji/japanese_goblin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/japanese_ogre.svg b/src/shared/assets/icons/emoji/japanese_ogre.svg
new file mode 100644
index 0000000..59babb1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/japanese_ogre.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/jeans.svg b/src/shared/assets/icons/emoji/jeans.svg
new file mode 100644
index 0000000..44191ae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/jeans.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/jigsaw.svg b/src/shared/assets/icons/emoji/jigsaw.svg
new file mode 100644
index 0000000..1505f68
--- /dev/null
+++ b/src/shared/assets/icons/emoji/jigsaw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/joy.svg b/src/shared/assets/icons/emoji/joy.svg
new file mode 100644
index 0000000..1ec7937
--- /dev/null
+++ b/src/shared/assets/icons/emoji/joy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/joy_cat.svg b/src/shared/assets/icons/emoji/joy_cat.svg
new file mode 100644
index 0000000..92f9022
--- /dev/null
+++ b/src/shared/assets/icons/emoji/joy_cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/joystick.svg b/src/shared/assets/icons/emoji/joystick.svg
new file mode 100644
index 0000000..33479b5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/joystick.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kaaba.svg b/src/shared/assets/icons/emoji/kaaba.svg
new file mode 100644
index 0000000..3cd63ee
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kaaba.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kangaroo.svg b/src/shared/assets/icons/emoji/kangaroo.svg
new file mode 100644
index 0000000..8a72b40
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kangaroo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/key.svg b/src/shared/assets/icons/emoji/key.svg
new file mode 100644
index 0000000..7b4dc2a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/key2.svg b/src/shared/assets/icons/emoji/key2.svg
new file mode 100644
index 0000000..9e97cea
--- /dev/null
+++ b/src/shared/assets/icons/emoji/key2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/keyboard.svg b/src/shared/assets/icons/emoji/keyboard.svg
new file mode 100644
index 0000000..c834ed6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/keyboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/keycap_ten.svg b/src/shared/assets/icons/emoji/keycap_ten.svg
new file mode 100644
index 0000000..05dc8b9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/keycap_ten.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kimono.svg b/src/shared/assets/icons/emoji/kimono.svg
new file mode 100644
index 0000000..7c955e9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kimono.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kiss.svg b/src/shared/assets/icons/emoji/kiss.svg
new file mode 100644
index 0000000..f71fc97
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kiss.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kiss_mm.svg b/src/shared/assets/icons/emoji/kiss_mm.svg
new file mode 100644
index 0000000..41dbd96
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kiss_mm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kiss_woman_man.svg b/src/shared/assets/icons/emoji/kiss_woman_man.svg
new file mode 100644
index 0000000..8248ed6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kiss_woman_man.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kiss_ww.svg b/src/shared/assets/icons/emoji/kiss_ww.svg
new file mode 100644
index 0000000..e46dfca
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kiss_ww.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kissing.svg b/src/shared/assets/icons/emoji/kissing.svg
new file mode 100644
index 0000000..6b817ee
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kissing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kissing_cat.svg b/src/shared/assets/icons/emoji/kissing_cat.svg
new file mode 100644
index 0000000..e982de7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kissing_cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kissing_closed_eyes.svg b/src/shared/assets/icons/emoji/kissing_closed_eyes.svg
new file mode 100644
index 0000000..cefa351
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kissing_closed_eyes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kissing_heart.svg b/src/shared/assets/icons/emoji/kissing_heart.svg
new file mode 100644
index 0000000..5e00b8e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kissing_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kissing_smiling_eyes.svg b/src/shared/assets/icons/emoji/kissing_smiling_eyes.svg
new file mode 100644
index 0000000..d9dfaa9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kissing_smiling_eyes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kite.svg b/src/shared/assets/icons/emoji/kite.svg
new file mode 100644
index 0000000..fd8605e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/kiwi.svg b/src/shared/assets/icons/emoji/kiwi.svg
new file mode 100644
index 0000000..4007a72
--- /dev/null
+++ b/src/shared/assets/icons/emoji/kiwi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/knife.svg b/src/shared/assets/icons/emoji/knife.svg
new file mode 100644
index 0000000..d2ba9e7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/knife.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/koala.svg b/src/shared/assets/icons/emoji/koala.svg
new file mode 100644
index 0000000..1da7190
--- /dev/null
+++ b/src/shared/assets/icons/emoji/koala.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/koko.svg b/src/shared/assets/icons/emoji/koko.svg
new file mode 100644
index 0000000..c4e6541
--- /dev/null
+++ b/src/shared/assets/icons/emoji/koko.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lab_coat.svg b/src/shared/assets/icons/emoji/lab_coat.svg
new file mode 100644
index 0000000..5d19b27
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lab_coat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/label.svg b/src/shared/assets/icons/emoji/label.svg
new file mode 100644
index 0000000..6046266
--- /dev/null
+++ b/src/shared/assets/icons/emoji/label.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lacrosse.svg b/src/shared/assets/icons/emoji/lacrosse.svg
new file mode 100644
index 0000000..2a4eb10
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lacrosse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/large_blue_diamond.svg b/src/shared/assets/icons/emoji/large_blue_diamond.svg
new file mode 100644
index 0000000..44acab2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/large_blue_diamond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/large_orange_diamond.svg b/src/shared/assets/icons/emoji/large_orange_diamond.svg
new file mode 100644
index 0000000..116e722
--- /dev/null
+++ b/src/shared/assets/icons/emoji/large_orange_diamond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/last_quarter_moon.svg b/src/shared/assets/icons/emoji/last_quarter_moon.svg
new file mode 100644
index 0000000..a5813f0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/last_quarter_moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/last_quarter_moon_with_face.svg b/src/shared/assets/icons/emoji/last_quarter_moon_with_face.svg
new file mode 100644
index 0000000..07501e9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/last_quarter_moon_with_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/laughing.svg b/src/shared/assets/icons/emoji/laughing.svg
new file mode 100644
index 0000000..e82c405
--- /dev/null
+++ b/src/shared/assets/icons/emoji/laughing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/leafy_green.svg b/src/shared/assets/icons/emoji/leafy_green.svg
new file mode 100644
index 0000000..6ef36cb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/leafy_green.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/leaves.svg b/src/shared/assets/icons/emoji/leaves.svg
new file mode 100644
index 0000000..650bfa9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/leaves.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ledger.svg b/src/shared/assets/icons/emoji/ledger.svg
new file mode 100644
index 0000000..ee15b16
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ledger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/left_facing_fist.svg b/src/shared/assets/icons/emoji/left_facing_fist.svg
new file mode 100644
index 0000000..a5a142b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/left_facing_fist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/left_luggage.svg b/src/shared/assets/icons/emoji/left_luggage.svg
new file mode 100644
index 0000000..f67135d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/left_luggage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/left_right_arrow.svg b/src/shared/assets/icons/emoji/left_right_arrow.svg
new file mode 100644
index 0000000..9884b42
--- /dev/null
+++ b/src/shared/assets/icons/emoji/left_right_arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/leftwards_arrow_with_hook.svg b/src/shared/assets/icons/emoji/leftwards_arrow_with_hook.svg
new file mode 100644
index 0000000..0a39004
--- /dev/null
+++ b/src/shared/assets/icons/emoji/leftwards_arrow_with_hook.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/leg.svg b/src/shared/assets/icons/emoji/leg.svg
new file mode 100644
index 0000000..178fd15
--- /dev/null
+++ b/src/shared/assets/icons/emoji/leg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lemon.svg b/src/shared/assets/icons/emoji/lemon.svg
new file mode 100644
index 0000000..ffbdc08
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lemon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/leo.svg b/src/shared/assets/icons/emoji/leo.svg
new file mode 100644
index 0000000..e9af63d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/leo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/leopard.svg b/src/shared/assets/icons/emoji/leopard.svg
new file mode 100644
index 0000000..4eaef09
--- /dev/null
+++ b/src/shared/assets/icons/emoji/leopard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/level_slider.svg b/src/shared/assets/icons/emoji/level_slider.svg
new file mode 100644
index 0000000..7071931
--- /dev/null
+++ b/src/shared/assets/icons/emoji/level_slider.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/levitate.svg b/src/shared/assets/icons/emoji/levitate.svg
new file mode 100644
index 0000000..d363425
--- /dev/null
+++ b/src/shared/assets/icons/emoji/levitate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/libra.svg b/src/shared/assets/icons/emoji/libra.svg
new file mode 100644
index 0000000..11583c1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/libra.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/light_rail.svg b/src/shared/assets/icons/emoji/light_rail.svg
new file mode 100644
index 0000000..160cc71
--- /dev/null
+++ b/src/shared/assets/icons/emoji/light_rail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/link.svg b/src/shared/assets/icons/emoji/link.svg
new file mode 100644
index 0000000..22ddbe0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/link.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lion_face.svg b/src/shared/assets/icons/emoji/lion_face.svg
new file mode 100644
index 0000000..674ff24
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lion_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lips.svg b/src/shared/assets/icons/emoji/lips.svg
new file mode 100644
index 0000000..e8a29c4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lips.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lipstick.svg b/src/shared/assets/icons/emoji/lipstick.svg
new file mode 100644
index 0000000..af7e861
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lipstick.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lizard.svg b/src/shared/assets/icons/emoji/lizard.svg
new file mode 100644
index 0000000..1164a73
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lizard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/llama.svg b/src/shared/assets/icons/emoji/llama.svg
new file mode 100644
index 0000000..b505faf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/llama.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lobster.svg b/src/shared/assets/icons/emoji/lobster.svg
new file mode 100644
index 0000000..8df2a74
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lobster.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lock.svg b/src/shared/assets/icons/emoji/lock.svg
new file mode 100644
index 0000000..378fabf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lock_with_ink_pen.svg b/src/shared/assets/icons/emoji/lock_with_ink_pen.svg
new file mode 100644
index 0000000..d2ae486
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lock_with_ink_pen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lollipop.svg b/src/shared/assets/icons/emoji/lollipop.svg
new file mode 100644
index 0000000..e13447e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lollipop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/loop.svg b/src/shared/assets/icons/emoji/loop.svg
new file mode 100644
index 0000000..0d7b5fa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/loop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/loud_sound.svg b/src/shared/assets/icons/emoji/loud_sound.svg
new file mode 100644
index 0000000..de54654
--- /dev/null
+++ b/src/shared/assets/icons/emoji/loud_sound.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/loudspeaker.svg b/src/shared/assets/icons/emoji/loudspeaker.svg
new file mode 100644
index 0000000..8bd0c94
--- /dev/null
+++ b/src/shared/assets/icons/emoji/loudspeaker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/love_hotel.svg b/src/shared/assets/icons/emoji/love_hotel.svg
new file mode 100644
index 0000000..9da5e44
--- /dev/null
+++ b/src/shared/assets/icons/emoji/love_hotel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/love_letter.svg b/src/shared/assets/icons/emoji/love_letter.svg
new file mode 100644
index 0000000..0734ecf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/love_letter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/love_you_gesture.svg b/src/shared/assets/icons/emoji/love_you_gesture.svg
new file mode 100644
index 0000000..4f3d74f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/love_you_gesture.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/low_brightness.svg b/src/shared/assets/icons/emoji/low_brightness.svg
new file mode 100644
index 0000000..998b8f4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/low_brightness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/luggage.svg b/src/shared/assets/icons/emoji/luggage.svg
new file mode 100644
index 0000000..7de2518
--- /dev/null
+++ b/src/shared/assets/icons/emoji/luggage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/lying_face.svg b/src/shared/assets/icons/emoji/lying_face.svg
new file mode 100644
index 0000000..9f25530
--- /dev/null
+++ b/src/shared/assets/icons/emoji/lying_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/m.svg b/src/shared/assets/icons/emoji/m.svg
new file mode 100644
index 0000000..29a9429
--- /dev/null
+++ b/src/shared/assets/icons/emoji/m.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mag.svg b/src/shared/assets/icons/emoji/mag.svg
new file mode 100644
index 0000000..038bbc2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mag_right.svg b/src/shared/assets/icons/emoji/mag_right.svg
new file mode 100644
index 0000000..778ae77
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mag_right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mage.svg b/src/shared/assets/icons/emoji/mage.svg
new file mode 100644
index 0000000..5537083
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/magnet.svg b/src/shared/assets/icons/emoji/magnet.svg
new file mode 100644
index 0000000..e81b464
--- /dev/null
+++ b/src/shared/assets/icons/emoji/magnet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mahjong.svg b/src/shared/assets/icons/emoji/mahjong.svg
new file mode 100644
index 0000000..f4fa584
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mahjong.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mailbox.svg b/src/shared/assets/icons/emoji/mailbox.svg
new file mode 100644
index 0000000..79ea795
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mailbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mailbox_closed.svg b/src/shared/assets/icons/emoji/mailbox_closed.svg
new file mode 100644
index 0000000..54f609e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mailbox_closed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mailbox_with_mail.svg b/src/shared/assets/icons/emoji/mailbox_with_mail.svg
new file mode 100644
index 0000000..27d6ebe
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mailbox_with_mail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mailbox_with_no_mail.svg b/src/shared/assets/icons/emoji/mailbox_with_no_mail.svg
new file mode 100644
index 0000000..4e969c9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mailbox_with_no_mail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/male_sign.svg b/src/shared/assets/icons/emoji/male_sign.svg
new file mode 100644
index 0000000..29868a8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/male_sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man.svg b/src/shared/assets/icons/emoji/man.svg
new file mode 100644
index 0000000..98b73b5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_artist.svg b/src/shared/assets/icons/emoji/man_artist.svg
new file mode 100644
index 0000000..eb21722
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_artist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_astronaut.svg b/src/shared/assets/icons/emoji/man_astronaut.svg
new file mode 100644
index 0000000..dd97a20
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_astronaut.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_bald.svg b/src/shared/assets/icons/emoji/man_bald.svg
new file mode 100644
index 0000000..ea49779
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_bald.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_biking.svg b/src/shared/assets/icons/emoji/man_biking.svg
new file mode 100644
index 0000000..ae3112e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_biking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_bouncing_ball.svg b/src/shared/assets/icons/emoji/man_bouncing_ball.svg
new file mode 100644
index 0000000..ee014e4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_bouncing_ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_bowing.svg b/src/shared/assets/icons/emoji/man_bowing.svg
new file mode 100644
index 0000000..7462b00
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_bowing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_cartwheeling.svg b/src/shared/assets/icons/emoji/man_cartwheeling.svg
new file mode 100644
index 0000000..7aa23fe
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_cartwheeling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_climbing.svg b/src/shared/assets/icons/emoji/man_climbing.svg
new file mode 100644
index 0000000..bb49709
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_climbing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_construction_worker.svg b/src/shared/assets/icons/emoji/man_construction_worker.svg
new file mode 100644
index 0000000..d1e6b36
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_construction_worker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_cook.svg b/src/shared/assets/icons/emoji/man_cook.svg
new file mode 100644
index 0000000..9344e17
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_cook.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_curly_haired.svg b/src/shared/assets/icons/emoji/man_curly_haired.svg
new file mode 100644
index 0000000..6ac5743
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_curly_haired.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_dancing.svg b/src/shared/assets/icons/emoji/man_dancing.svg
new file mode 100644
index 0000000..e63c1ec
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_dancing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_detective.svg b/src/shared/assets/icons/emoji/man_detective.svg
new file mode 100644
index 0000000..bba4b94
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_detective.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_elf.svg b/src/shared/assets/icons/emoji/man_elf.svg
new file mode 100644
index 0000000..f9c1e97
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_elf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_facepalming.svg b/src/shared/assets/icons/emoji/man_facepalming.svg
new file mode 100644
index 0000000..29cbd0b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_facepalming.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_factory_worker.svg b/src/shared/assets/icons/emoji/man_factory_worker.svg
new file mode 100644
index 0000000..6fc1eae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_factory_worker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_fairy.svg b/src/shared/assets/icons/emoji/man_fairy.svg
new file mode 100644
index 0000000..d538536
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_fairy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_farmer.svg b/src/shared/assets/icons/emoji/man_farmer.svg
new file mode 100644
index 0000000..0fcee4f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_farmer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_firefighter.svg b/src/shared/assets/icons/emoji/man_firefighter.svg
new file mode 100644
index 0000000..cfdef73
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_firefighter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_frowning.svg b/src/shared/assets/icons/emoji/man_frowning.svg
new file mode 100644
index 0000000..6a5ce08
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_frowning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_genie.svg b/src/shared/assets/icons/emoji/man_genie.svg
new file mode 100644
index 0000000..af17a48
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_genie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_gesturing_no.svg b/src/shared/assets/icons/emoji/man_gesturing_no.svg
new file mode 100644
index 0000000..ba0fc8e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_gesturing_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_gesturing_ok.svg b/src/shared/assets/icons/emoji/man_gesturing_ok.svg
new file mode 100644
index 0000000..1c4205d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_gesturing_ok.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_getting_face_massage.svg b/src/shared/assets/icons/emoji/man_getting_face_massage.svg
new file mode 100644
index 0000000..39bb75b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_getting_face_massage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_getting_haircut.svg b/src/shared/assets/icons/emoji/man_getting_haircut.svg
new file mode 100644
index 0000000..e3bc6d9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_getting_haircut.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_golfing.svg b/src/shared/assets/icons/emoji/man_golfing.svg
new file mode 100644
index 0000000..1381d6d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_golfing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_guard.svg b/src/shared/assets/icons/emoji/man_guard.svg
new file mode 100644
index 0000000..e8998c5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_guard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_health_worker.svg b/src/shared/assets/icons/emoji/man_health_worker.svg
new file mode 100644
index 0000000..627461f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_health_worker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_in_lotus_position.svg b/src/shared/assets/icons/emoji/man_in_lotus_position.svg
new file mode 100644
index 0000000..e0c1f48
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_in_lotus_position.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_in_manual_wheelchair.svg b/src/shared/assets/icons/emoji/man_in_manual_wheelchair.svg
new file mode 100644
index 0000000..b8d2858
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_in_manual_wheelchair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_in_motorized_wheelchair.svg b/src/shared/assets/icons/emoji/man_in_motorized_wheelchair.svg
new file mode 100644
index 0000000..7d37c87
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_in_motorized_wheelchair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_in_steamy_room.svg b/src/shared/assets/icons/emoji/man_in_steamy_room.svg
new file mode 100644
index 0000000..3ecdeee
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_in_steamy_room.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_in_tuxedo.svg b/src/shared/assets/icons/emoji/man_in_tuxedo.svg
new file mode 100644
index 0000000..5b0498b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_in_tuxedo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_judge.svg b/src/shared/assets/icons/emoji/man_judge.svg
new file mode 100644
index 0000000..759d307
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_judge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_juggling.svg b/src/shared/assets/icons/emoji/man_juggling.svg
new file mode 100644
index 0000000..62230dc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_juggling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_kneeling.svg b/src/shared/assets/icons/emoji/man_kneeling.svg
new file mode 100644
index 0000000..403d73e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_kneeling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_lifting_weights.svg b/src/shared/assets/icons/emoji/man_lifting_weights.svg
new file mode 100644
index 0000000..f9bbcc9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_lifting_weights.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_mage.svg b/src/shared/assets/icons/emoji/man_mage.svg
new file mode 100644
index 0000000..c747b34
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_mage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_mechanic.svg b/src/shared/assets/icons/emoji/man_mechanic.svg
new file mode 100644
index 0000000..6bc505e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_mechanic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_mountain_biking.svg b/src/shared/assets/icons/emoji/man_mountain_biking.svg
new file mode 100644
index 0000000..9914308
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_mountain_biking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_office_worker.svg b/src/shared/assets/icons/emoji/man_office_worker.svg
new file mode 100644
index 0000000..a3f56fe
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_office_worker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_pilot.svg b/src/shared/assets/icons/emoji/man_pilot.svg
new file mode 100644
index 0000000..b5ed35a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_pilot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_playing_handball.svg b/src/shared/assets/icons/emoji/man_playing_handball.svg
new file mode 100644
index 0000000..3efb466
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_playing_handball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_playing_water_polo.svg b/src/shared/assets/icons/emoji/man_playing_water_polo.svg
new file mode 100644
index 0000000..9469b6a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_playing_water_polo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_police_officer.svg b/src/shared/assets/icons/emoji/man_police_officer.svg
new file mode 100644
index 0000000..2974c98
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_police_officer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_pouting.svg b/src/shared/assets/icons/emoji/man_pouting.svg
new file mode 100644
index 0000000..97bec5b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_pouting.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_raising_hand.svg b/src/shared/assets/icons/emoji/man_raising_hand.svg
new file mode 100644
index 0000000..faf2f76
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_raising_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_red_haired.svg b/src/shared/assets/icons/emoji/man_red_haired.svg
new file mode 100644
index 0000000..1b633b3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_red_haired.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_rowing_boat.svg b/src/shared/assets/icons/emoji/man_rowing_boat.svg
new file mode 100644
index 0000000..d628229
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_rowing_boat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_running.svg b/src/shared/assets/icons/emoji/man_running.svg
new file mode 100644
index 0000000..42bc601
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_running.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_scientist.svg b/src/shared/assets/icons/emoji/man_scientist.svg
new file mode 100644
index 0000000..02a9e12
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_scientist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_shrugging.svg b/src/shared/assets/icons/emoji/man_shrugging.svg
new file mode 100644
index 0000000..29d7e1e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_shrugging.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_singer.svg b/src/shared/assets/icons/emoji/man_singer.svg
new file mode 100644
index 0000000..0462a6b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_singer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_standing.svg b/src/shared/assets/icons/emoji/man_standing.svg
new file mode 100644
index 0000000..450561e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_standing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_student.svg b/src/shared/assets/icons/emoji/man_student.svg
new file mode 100644
index 0000000..ab35970
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_student.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_superhero.svg b/src/shared/assets/icons/emoji/man_superhero.svg
new file mode 100644
index 0000000..404dcb2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_superhero.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_supervillain.svg b/src/shared/assets/icons/emoji/man_supervillain.svg
new file mode 100644
index 0000000..ed0e66c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_supervillain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_surfing.svg b/src/shared/assets/icons/emoji/man_surfing.svg
new file mode 100644
index 0000000..6da42a5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_surfing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_swimming.svg b/src/shared/assets/icons/emoji/man_swimming.svg
new file mode 100644
index 0000000..12bad06
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_swimming.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_teacher.svg b/src/shared/assets/icons/emoji/man_teacher.svg
new file mode 100644
index 0000000..95963cf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_teacher.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_technologist.svg b/src/shared/assets/icons/emoji/man_technologist.svg
new file mode 100644
index 0000000..e37b049
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_technologist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_tipping_hand.svg b/src/shared/assets/icons/emoji/man_tipping_hand.svg
new file mode 100644
index 0000000..1bb5433
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_tipping_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_vampire.svg b/src/shared/assets/icons/emoji/man_vampire.svg
new file mode 100644
index 0000000..1f104d1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_vampire.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_walking.svg b/src/shared/assets/icons/emoji/man_walking.svg
new file mode 100644
index 0000000..9217939
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_walking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_wearing_turban.svg b/src/shared/assets/icons/emoji/man_wearing_turban.svg
new file mode 100644
index 0000000..5ef43d4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_wearing_turban.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_white_haired.svg b/src/shared/assets/icons/emoji/man_white_haired.svg
new file mode 100644
index 0000000..a14e3fd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_white_haired.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_with_chinese_cap.svg b/src/shared/assets/icons/emoji/man_with_chinese_cap.svg
new file mode 100644
index 0000000..7ed6bd5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_with_chinese_cap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_with_probing_cane.svg b/src/shared/assets/icons/emoji/man_with_probing_cane.svg
new file mode 100644
index 0000000..321bc0d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_with_probing_cane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/man_zombie.svg b/src/shared/assets/icons/emoji/man_zombie.svg
new file mode 100644
index 0000000..21674c3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/man_zombie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mango.svg b/src/shared/assets/icons/emoji/mango.svg
new file mode 100644
index 0000000..b5607c1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mango.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mans_shoe.svg b/src/shared/assets/icons/emoji/mans_shoe.svg
new file mode 100644
index 0000000..fe94bf5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mans_shoe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/manual_wheelchair.svg b/src/shared/assets/icons/emoji/manual_wheelchair.svg
new file mode 100644
index 0000000..c371d4b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/manual_wheelchair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/map.svg b/src/shared/assets/icons/emoji/map.svg
new file mode 100644
index 0000000..337b3dc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/map.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/maple_leaf.svg b/src/shared/assets/icons/emoji/maple_leaf.svg
new file mode 100644
index 0000000..7cd7ad9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/maple_leaf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/martial_arts_uniform.svg b/src/shared/assets/icons/emoji/martial_arts_uniform.svg
new file mode 100644
index 0000000..33d6e21
--- /dev/null
+++ b/src/shared/assets/icons/emoji/martial_arts_uniform.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mask.svg b/src/shared/assets/icons/emoji/mask.svg
new file mode 100644
index 0000000..098e6b0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mask.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mate.svg b/src/shared/assets/icons/emoji/mate.svg
new file mode 100644
index 0000000..16b0db8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/meat_on_bone.svg b/src/shared/assets/icons/emoji/meat_on_bone.svg
new file mode 100644
index 0000000..44fab59
--- /dev/null
+++ b/src/shared/assets/icons/emoji/meat_on_bone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mechanical_arm.svg b/src/shared/assets/icons/emoji/mechanical_arm.svg
new file mode 100644
index 0000000..c3d2db4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mechanical_arm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mechanical_leg.svg b/src/shared/assets/icons/emoji/mechanical_leg.svg
new file mode 100644
index 0000000..db17a63
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mechanical_leg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/medal.svg b/src/shared/assets/icons/emoji/medal.svg
new file mode 100644
index 0000000..a576ba8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/medal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/medical_symbol.svg b/src/shared/assets/icons/emoji/medical_symbol.svg
new file mode 100644
index 0000000..add4c0e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/medical_symbol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mega.svg b/src/shared/assets/icons/emoji/mega.svg
new file mode 100644
index 0000000..20cbc7d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mega.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/melon.svg b/src/shared/assets/icons/emoji/melon.svg
new file mode 100644
index 0000000..f348273
--- /dev/null
+++ b/src/shared/assets/icons/emoji/melon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/men_with_bunny_ears_partying.svg b/src/shared/assets/icons/emoji/men_with_bunny_ears_partying.svg
new file mode 100644
index 0000000..13717aa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/men_with_bunny_ears_partying.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/men_wrestling.svg b/src/shared/assets/icons/emoji/men_wrestling.svg
new file mode 100644
index 0000000..13ec50b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/men_wrestling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/menorah.svg b/src/shared/assets/icons/emoji/menorah.svg
new file mode 100644
index 0000000..1ebcec5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/menorah.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mens.svg b/src/shared/assets/icons/emoji/mens.svg
new file mode 100644
index 0000000..2f7a492
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mens.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mermaid.svg b/src/shared/assets/icons/emoji/mermaid.svg
new file mode 100644
index 0000000..750f243
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mermaid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/merman.svg b/src/shared/assets/icons/emoji/merman.svg
new file mode 100644
index 0000000..07111b5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/merman.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/merperson.svg b/src/shared/assets/icons/emoji/merperson.svg
new file mode 100644
index 0000000..52f120c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/merperson.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/metal.svg b/src/shared/assets/icons/emoji/metal.svg
new file mode 100644
index 0000000..c3a1063
--- /dev/null
+++ b/src/shared/assets/icons/emoji/metal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/metro.svg b/src/shared/assets/icons/emoji/metro.svg
new file mode 100644
index 0000000..acd11bd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/metro.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/microbe.svg b/src/shared/assets/icons/emoji/microbe.svg
new file mode 100644
index 0000000..cea144e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/microbe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/microphone.svg b/src/shared/assets/icons/emoji/microphone.svg
new file mode 100644
index 0000000..e261334
--- /dev/null
+++ b/src/shared/assets/icons/emoji/microphone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/microphone2.svg b/src/shared/assets/icons/emoji/microphone2.svg
new file mode 100644
index 0000000..07881e4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/microphone2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/microscope.svg b/src/shared/assets/icons/emoji/microscope.svg
new file mode 100644
index 0000000..e910ee8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/microscope.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/middle_finger.svg b/src/shared/assets/icons/emoji/middle_finger.svg
new file mode 100644
index 0000000..e644c37
--- /dev/null
+++ b/src/shared/assets/icons/emoji/middle_finger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/military_medal.svg b/src/shared/assets/icons/emoji/military_medal.svg
new file mode 100644
index 0000000..b5c2269
--- /dev/null
+++ b/src/shared/assets/icons/emoji/military_medal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/milk.svg b/src/shared/assets/icons/emoji/milk.svg
new file mode 100644
index 0000000..73947e8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/milk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/milky_way.svg b/src/shared/assets/icons/emoji/milky_way.svg
new file mode 100644
index 0000000..7853bcd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/milky_way.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/minibus.svg b/src/shared/assets/icons/emoji/minibus.svg
new file mode 100644
index 0000000..d3f1057
--- /dev/null
+++ b/src/shared/assets/icons/emoji/minibus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/minidisc.svg b/src/shared/assets/icons/emoji/minidisc.svg
new file mode 100644
index 0000000..a557b9b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/minidisc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mobile_phone_off.svg b/src/shared/assets/icons/emoji/mobile_phone_off.svg
new file mode 100644
index 0000000..fc2d2cd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mobile_phone_off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/money_mouth.svg b/src/shared/assets/icons/emoji/money_mouth.svg
new file mode 100644
index 0000000..5616de7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/money_mouth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/money_with_wings.svg b/src/shared/assets/icons/emoji/money_with_wings.svg
new file mode 100644
index 0000000..d2d63ce
--- /dev/null
+++ b/src/shared/assets/icons/emoji/money_with_wings.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/moneybag.svg b/src/shared/assets/icons/emoji/moneybag.svg
new file mode 100644
index 0000000..5b41c52
--- /dev/null
+++ b/src/shared/assets/icons/emoji/moneybag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/monkey.svg b/src/shared/assets/icons/emoji/monkey.svg
new file mode 100644
index 0000000..6ffccee
--- /dev/null
+++ b/src/shared/assets/icons/emoji/monkey.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/monkey_face.svg b/src/shared/assets/icons/emoji/monkey_face.svg
new file mode 100644
index 0000000..ee6c57c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/monkey_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/monorail.svg b/src/shared/assets/icons/emoji/monorail.svg
new file mode 100644
index 0000000..64ab140
--- /dev/null
+++ b/src/shared/assets/icons/emoji/monorail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/moon_cake.svg b/src/shared/assets/icons/emoji/moon_cake.svg
new file mode 100644
index 0000000..ebb7ba9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/moon_cake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mortar_board.svg b/src/shared/assets/icons/emoji/mortar_board.svg
new file mode 100644
index 0000000..dcf3893
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mortar_board.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mosque.svg b/src/shared/assets/icons/emoji/mosque.svg
new file mode 100644
index 0000000..6ef5516
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mosque.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mosquito.svg b/src/shared/assets/icons/emoji/mosquito.svg
new file mode 100644
index 0000000..5888151
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mosquito.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/motor_scooter.svg b/src/shared/assets/icons/emoji/motor_scooter.svg
new file mode 100644
index 0000000..a1e0f4b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/motor_scooter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/motorboat.svg b/src/shared/assets/icons/emoji/motorboat.svg
new file mode 100644
index 0000000..b9badb2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/motorboat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/motorcycle.svg b/src/shared/assets/icons/emoji/motorcycle.svg
new file mode 100644
index 0000000..c51ccc3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/motorcycle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/motorized_wheelchair.svg b/src/shared/assets/icons/emoji/motorized_wheelchair.svg
new file mode 100644
index 0000000..153f553
--- /dev/null
+++ b/src/shared/assets/icons/emoji/motorized_wheelchair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/motorway.svg b/src/shared/assets/icons/emoji/motorway.svg
new file mode 100644
index 0000000..35e8215
--- /dev/null
+++ b/src/shared/assets/icons/emoji/motorway.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mount_fuji.svg b/src/shared/assets/icons/emoji/mount_fuji.svg
new file mode 100644
index 0000000..a8ad074
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mount_fuji.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mountain.svg b/src/shared/assets/icons/emoji/mountain.svg
new file mode 100644
index 0000000..ba331d1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mountain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mountain_cableway.svg b/src/shared/assets/icons/emoji/mountain_cableway.svg
new file mode 100644
index 0000000..8510956
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mountain_cableway.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mountain_railway.svg b/src/shared/assets/icons/emoji/mountain_railway.svg
new file mode 100644
index 0000000..79a9320
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mountain_railway.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mountain_snow.svg b/src/shared/assets/icons/emoji/mountain_snow.svg
new file mode 100644
index 0000000..8b78f31
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mountain_snow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mouse.svg b/src/shared/assets/icons/emoji/mouse.svg
new file mode 100644
index 0000000..91e1262
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mouse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mouse2.svg b/src/shared/assets/icons/emoji/mouse2.svg
new file mode 100644
index 0000000..365ab78
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mouse2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mouse_three_button.svg b/src/shared/assets/icons/emoji/mouse_three_button.svg
new file mode 100644
index 0000000..961f67e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mouse_three_button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/movie_camera.svg b/src/shared/assets/icons/emoji/movie_camera.svg
new file mode 100644
index 0000000..d6c68e0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/movie_camera.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/moyai.svg b/src/shared/assets/icons/emoji/moyai.svg
new file mode 100644
index 0000000..5ba18be
--- /dev/null
+++ b/src/shared/assets/icons/emoji/moyai.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mrs_claus.svg b/src/shared/assets/icons/emoji/mrs_claus.svg
new file mode 100644
index 0000000..6cabe58
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mrs_claus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/muscle.svg b/src/shared/assets/icons/emoji/muscle.svg
new file mode 100644
index 0000000..38a7bb5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/muscle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mushroom.svg b/src/shared/assets/icons/emoji/mushroom.svg
new file mode 100644
index 0000000..0cf7a79
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mushroom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/musical_keyboard.svg b/src/shared/assets/icons/emoji/musical_keyboard.svg
new file mode 100644
index 0000000..6ce8afd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/musical_keyboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/musical_note.svg b/src/shared/assets/icons/emoji/musical_note.svg
new file mode 100644
index 0000000..c9286d2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/musical_note.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/musical_score.svg b/src/shared/assets/icons/emoji/musical_score.svg
new file mode 100644
index 0000000..5628fca
--- /dev/null
+++ b/src/shared/assets/icons/emoji/musical_score.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/mute.svg b/src/shared/assets/icons/emoji/mute.svg
new file mode 100644
index 0000000..39dddb5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/mute.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/nail_care.svg b/src/shared/assets/icons/emoji/nail_care.svg
new file mode 100644
index 0000000..2ddba93
--- /dev/null
+++ b/src/shared/assets/icons/emoji/nail_care.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/name_badge.svg b/src/shared/assets/icons/emoji/name_badge.svg
new file mode 100644
index 0000000..00f1a10
--- /dev/null
+++ b/src/shared/assets/icons/emoji/name_badge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/nauseated_face.svg b/src/shared/assets/icons/emoji/nauseated_face.svg
new file mode 100644
index 0000000..ed7c86c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/nauseated_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/nazar_amulet.svg b/src/shared/assets/icons/emoji/nazar_amulet.svg
new file mode 100644
index 0000000..a45a528
--- /dev/null
+++ b/src/shared/assets/icons/emoji/nazar_amulet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/necktie.svg b/src/shared/assets/icons/emoji/necktie.svg
new file mode 100644
index 0000000..8e860d6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/necktie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/negative_squared_cross_mark.svg b/src/shared/assets/icons/emoji/negative_squared_cross_mark.svg
new file mode 100644
index 0000000..814a6e4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/negative_squared_cross_mark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/nerd.svg b/src/shared/assets/icons/emoji/nerd.svg
new file mode 100644
index 0000000..d430a68
--- /dev/null
+++ b/src/shared/assets/icons/emoji/nerd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/neutral_face.svg b/src/shared/assets/icons/emoji/neutral_face.svg
new file mode 100644
index 0000000..953f921
--- /dev/null
+++ b/src/shared/assets/icons/emoji/neutral_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/new.svg b/src/shared/assets/icons/emoji/new.svg
new file mode 100644
index 0000000..dcf5702
--- /dev/null
+++ b/src/shared/assets/icons/emoji/new.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/new_moon.svg b/src/shared/assets/icons/emoji/new_moon.svg
new file mode 100644
index 0000000..d71e4d1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/new_moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/new_moon_with_face.svg b/src/shared/assets/icons/emoji/new_moon_with_face.svg
new file mode 100644
index 0000000..6ccbb68
--- /dev/null
+++ b/src/shared/assets/icons/emoji/new_moon_with_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/newspaper.svg b/src/shared/assets/icons/emoji/newspaper.svg
new file mode 100644
index 0000000..a97d477
--- /dev/null
+++ b/src/shared/assets/icons/emoji/newspaper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/newspaper2.svg b/src/shared/assets/icons/emoji/newspaper2.svg
new file mode 100644
index 0000000..9567817
--- /dev/null
+++ b/src/shared/assets/icons/emoji/newspaper2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ng.svg b/src/shared/assets/icons/emoji/ng.svg
new file mode 100644
index 0000000..ccd7c36
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ng.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/night_with_stars.svg b/src/shared/assets/icons/emoji/night_with_stars.svg
new file mode 100644
index 0000000..d6c21b4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/night_with_stars.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/nine.svg b/src/shared/assets/icons/emoji/nine.svg
new file mode 100644
index 0000000..6936cfb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/nine.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/no_bell.svg b/src/shared/assets/icons/emoji/no_bell.svg
new file mode 100644
index 0000000..921d352
--- /dev/null
+++ b/src/shared/assets/icons/emoji/no_bell.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/no_bicycles.svg b/src/shared/assets/icons/emoji/no_bicycles.svg
new file mode 100644
index 0000000..ab08b6b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/no_bicycles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/no_entry.svg b/src/shared/assets/icons/emoji/no_entry.svg
new file mode 100644
index 0000000..fcab301
--- /dev/null
+++ b/src/shared/assets/icons/emoji/no_entry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/no_entry_sign.svg b/src/shared/assets/icons/emoji/no_entry_sign.svg
new file mode 100644
index 0000000..4b913ae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/no_entry_sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/no_mobile_phones.svg b/src/shared/assets/icons/emoji/no_mobile_phones.svg
new file mode 100644
index 0000000..fdbab38
--- /dev/null
+++ b/src/shared/assets/icons/emoji/no_mobile_phones.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/no_mouth.svg b/src/shared/assets/icons/emoji/no_mouth.svg
new file mode 100644
index 0000000..c208383
--- /dev/null
+++ b/src/shared/assets/icons/emoji/no_mouth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/no_pedestrians.svg b/src/shared/assets/icons/emoji/no_pedestrians.svg
new file mode 100644
index 0000000..ebe039f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/no_pedestrians.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/no_smoking.svg b/src/shared/assets/icons/emoji/no_smoking.svg
new file mode 100644
index 0000000..bda285a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/no_smoking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/non_potable_water.svg b/src/shared/assets/icons/emoji/non_potable_water.svg
new file mode 100644
index 0000000..5d2b5a0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/non_potable_water.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/nose.svg b/src/shared/assets/icons/emoji/nose.svg
new file mode 100644
index 0000000..654a6f2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/nose.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/notebook.svg b/src/shared/assets/icons/emoji/notebook.svg
new file mode 100644
index 0000000..b6f49c0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/notebook.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/notebook_with_decorative_cover.svg b/src/shared/assets/icons/emoji/notebook_with_decorative_cover.svg
new file mode 100644
index 0000000..2bfc4ca
--- /dev/null
+++ b/src/shared/assets/icons/emoji/notebook_with_decorative_cover.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/notepad_spiral.svg b/src/shared/assets/icons/emoji/notepad_spiral.svg
new file mode 100644
index 0000000..cbb6965
--- /dev/null
+++ b/src/shared/assets/icons/emoji/notepad_spiral.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/notes.svg b/src/shared/assets/icons/emoji/notes.svg
new file mode 100644
index 0000000..f13b3b8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/notes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/nut_and_bolt.svg b/src/shared/assets/icons/emoji/nut_and_bolt.svg
new file mode 100644
index 0000000..e02eaa6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/nut_and_bolt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/o.svg b/src/shared/assets/icons/emoji/o.svg
new file mode 100644
index 0000000..deb4cf1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/o.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/o2.svg b/src/shared/assets/icons/emoji/o2.svg
new file mode 100644
index 0000000..62f2f6d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/o2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ocean.svg b/src/shared/assets/icons/emoji/ocean.svg
new file mode 100644
index 0000000..0e68ec3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ocean.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/octagonal_sign.svg b/src/shared/assets/icons/emoji/octagonal_sign.svg
new file mode 100644
index 0000000..c8eb021
--- /dev/null
+++ b/src/shared/assets/icons/emoji/octagonal_sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/octopus.svg b/src/shared/assets/icons/emoji/octopus.svg
new file mode 100644
index 0000000..d915a8f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/octopus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/oden.svg b/src/shared/assets/icons/emoji/oden.svg
new file mode 100644
index 0000000..f5f7653
--- /dev/null
+++ b/src/shared/assets/icons/emoji/oden.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/office.svg b/src/shared/assets/icons/emoji/office.svg
new file mode 100644
index 0000000..8d06ecd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/office.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/oil.svg b/src/shared/assets/icons/emoji/oil.svg
new file mode 100644
index 0000000..b7f9cc6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/oil.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ok.svg b/src/shared/assets/icons/emoji/ok.svg
new file mode 100644
index 0000000..1c42dae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ok.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ok_hand.svg b/src/shared/assets/icons/emoji/ok_hand.svg
new file mode 100644
index 0000000..c36d774
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ok_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/older_adult.svg b/src/shared/assets/icons/emoji/older_adult.svg
new file mode 100644
index 0000000..ad713bb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/older_adult.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/older_man.svg b/src/shared/assets/icons/emoji/older_man.svg
new file mode 100644
index 0000000..eecf20c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/older_man.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/older_woman.svg b/src/shared/assets/icons/emoji/older_woman.svg
new file mode 100644
index 0000000..5186761
--- /dev/null
+++ b/src/shared/assets/icons/emoji/older_woman.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/om_symbol.svg b/src/shared/assets/icons/emoji/om_symbol.svg
new file mode 100644
index 0000000..9e6a1ef
--- /dev/null
+++ b/src/shared/assets/icons/emoji/om_symbol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/on.svg b/src/shared/assets/icons/emoji/on.svg
new file mode 100644
index 0000000..a885bab
--- /dev/null
+++ b/src/shared/assets/icons/emoji/on.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/oncoming_automobile.svg b/src/shared/assets/icons/emoji/oncoming_automobile.svg
new file mode 100644
index 0000000..25d8df0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/oncoming_automobile.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/oncoming_bus.svg b/src/shared/assets/icons/emoji/oncoming_bus.svg
new file mode 100644
index 0000000..68ca65f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/oncoming_bus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/oncoming_police_car.svg b/src/shared/assets/icons/emoji/oncoming_police_car.svg
new file mode 100644
index 0000000..ef1662d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/oncoming_police_car.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/oncoming_taxi.svg b/src/shared/assets/icons/emoji/oncoming_taxi.svg
new file mode 100644
index 0000000..e066a12
--- /dev/null
+++ b/src/shared/assets/icons/emoji/oncoming_taxi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/one.svg b/src/shared/assets/icons/emoji/one.svg
new file mode 100644
index 0000000..38197ad
--- /dev/null
+++ b/src/shared/assets/icons/emoji/one.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/one_piece_swimsuit.svg b/src/shared/assets/icons/emoji/one_piece_swimsuit.svg
new file mode 100644
index 0000000..df3eceb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/one_piece_swimsuit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/onion.svg b/src/shared/assets/icons/emoji/onion.svg
new file mode 100644
index 0000000..ab68cb1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/onion.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/open_file_folder.svg b/src/shared/assets/icons/emoji/open_file_folder.svg
new file mode 100644
index 0000000..60ec379
--- /dev/null
+++ b/src/shared/assets/icons/emoji/open_file_folder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/open_hands.svg b/src/shared/assets/icons/emoji/open_hands.svg
new file mode 100644
index 0000000..eebee25
--- /dev/null
+++ b/src/shared/assets/icons/emoji/open_hands.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/open_mouth.svg b/src/shared/assets/icons/emoji/open_mouth.svg
new file mode 100644
index 0000000..21fde1f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/open_mouth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ophiuchus.svg b/src/shared/assets/icons/emoji/ophiuchus.svg
new file mode 100644
index 0000000..4abec02
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ophiuchus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/orange_book.svg b/src/shared/assets/icons/emoji/orange_book.svg
new file mode 100644
index 0000000..b055f66
--- /dev/null
+++ b/src/shared/assets/icons/emoji/orange_book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/orange_circle.svg b/src/shared/assets/icons/emoji/orange_circle.svg
new file mode 100644
index 0000000..2db43d5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/orange_circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/orange_heart.svg b/src/shared/assets/icons/emoji/orange_heart.svg
new file mode 100644
index 0000000..26ae9e7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/orange_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/orange_square.svg b/src/shared/assets/icons/emoji/orange_square.svg
new file mode 100644
index 0000000..3cbdde4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/orange_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/orangutan.svg b/src/shared/assets/icons/emoji/orangutan.svg
new file mode 100644
index 0000000..0382845
--- /dev/null
+++ b/src/shared/assets/icons/emoji/orangutan.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/orthodox_cross.svg b/src/shared/assets/icons/emoji/orthodox_cross.svg
new file mode 100644
index 0000000..4d02f16
--- /dev/null
+++ b/src/shared/assets/icons/emoji/orthodox_cross.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/otter.svg b/src/shared/assets/icons/emoji/otter.svg
new file mode 100644
index 0000000..5ea0173
--- /dev/null
+++ b/src/shared/assets/icons/emoji/otter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/outbox_tray.svg b/src/shared/assets/icons/emoji/outbox_tray.svg
new file mode 100644
index 0000000..62d9033
--- /dev/null
+++ b/src/shared/assets/icons/emoji/outbox_tray.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/owl.svg b/src/shared/assets/icons/emoji/owl.svg
new file mode 100644
index 0000000..bb0d461
--- /dev/null
+++ b/src/shared/assets/icons/emoji/owl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ox.svg b/src/shared/assets/icons/emoji/ox.svg
new file mode 100644
index 0000000..378164c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/oyster.svg b/src/shared/assets/icons/emoji/oyster.svg
new file mode 100644
index 0000000..f0f4778
--- /dev/null
+++ b/src/shared/assets/icons/emoji/oyster.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/package.svg b/src/shared/assets/icons/emoji/package.svg
new file mode 100644
index 0000000..1ce0961
--- /dev/null
+++ b/src/shared/assets/icons/emoji/package.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/page_facing_up.svg b/src/shared/assets/icons/emoji/page_facing_up.svg
new file mode 100644
index 0000000..4631bc5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/page_facing_up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/page_with_curl.svg b/src/shared/assets/icons/emoji/page_with_curl.svg
new file mode 100644
index 0000000..bf19ad2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/page_with_curl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pager.svg b/src/shared/assets/icons/emoji/pager.svg
new file mode 100644
index 0000000..d7d4b5f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pager.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/paintbrush.svg b/src/shared/assets/icons/emoji/paintbrush.svg
new file mode 100644
index 0000000..b39bcbc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/paintbrush.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/palm_tree.svg b/src/shared/assets/icons/emoji/palm_tree.svg
new file mode 100644
index 0000000..55d246a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/palm_tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/palms_up_together.svg b/src/shared/assets/icons/emoji/palms_up_together.svg
new file mode 100644
index 0000000..96b6c65
--- /dev/null
+++ b/src/shared/assets/icons/emoji/palms_up_together.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pancakes.svg b/src/shared/assets/icons/emoji/pancakes.svg
new file mode 100644
index 0000000..795fb13
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pancakes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/panda_face.svg b/src/shared/assets/icons/emoji/panda_face.svg
new file mode 100644
index 0000000..8607893
--- /dev/null
+++ b/src/shared/assets/icons/emoji/panda_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/paperclip.svg b/src/shared/assets/icons/emoji/paperclip.svg
new file mode 100644
index 0000000..284cf66
--- /dev/null
+++ b/src/shared/assets/icons/emoji/paperclip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/paperclips.svg b/src/shared/assets/icons/emoji/paperclips.svg
new file mode 100644
index 0000000..a6ef181
--- /dev/null
+++ b/src/shared/assets/icons/emoji/paperclips.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/parachute.svg b/src/shared/assets/icons/emoji/parachute.svg
new file mode 100644
index 0000000..acb16e2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/parachute.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/park.svg b/src/shared/assets/icons/emoji/park.svg
new file mode 100644
index 0000000..940483b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/park.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/parking.svg b/src/shared/assets/icons/emoji/parking.svg
new file mode 100644
index 0000000..8a494b8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/parking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/parrot.svg b/src/shared/assets/icons/emoji/parrot.svg
new file mode 100644
index 0000000..f7f743c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/parrot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/part_alternation_mark.svg b/src/shared/assets/icons/emoji/part_alternation_mark.svg
new file mode 100644
index 0000000..e2c5c49
--- /dev/null
+++ b/src/shared/assets/icons/emoji/part_alternation_mark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/partly_sunny.svg b/src/shared/assets/icons/emoji/partly_sunny.svg
new file mode 100644
index 0000000..89d57dc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/partly_sunny.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/partying_face.svg b/src/shared/assets/icons/emoji/partying_face.svg
new file mode 100644
index 0000000..c7a9538
--- /dev/null
+++ b/src/shared/assets/icons/emoji/partying_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/passport_control.svg b/src/shared/assets/icons/emoji/passport_control.svg
new file mode 100644
index 0000000..2e9dfdf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/passport_control.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pause_button.svg b/src/shared/assets/icons/emoji/pause_button.svg
new file mode 100644
index 0000000..9cb0ac8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pause_button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/peace.svg b/src/shared/assets/icons/emoji/peace.svg
new file mode 100644
index 0000000..a0be08a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/peace.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/peach.svg b/src/shared/assets/icons/emoji/peach.svg
new file mode 100644
index 0000000..84e81f5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/peach.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/peacock.svg b/src/shared/assets/icons/emoji/peacock.svg
new file mode 100644
index 0000000..7606d38
--- /dev/null
+++ b/src/shared/assets/icons/emoji/peacock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/peanuts.svg b/src/shared/assets/icons/emoji/peanuts.svg
new file mode 100644
index 0000000..c809689
--- /dev/null
+++ b/src/shared/assets/icons/emoji/peanuts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pear.svg b/src/shared/assets/icons/emoji/pear.svg
new file mode 100644
index 0000000..2888963
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pen_ballpoint.svg b/src/shared/assets/icons/emoji/pen_ballpoint.svg
new file mode 100644
index 0000000..4e791e6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pen_ballpoint.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pen_fountain.svg b/src/shared/assets/icons/emoji/pen_fountain.svg
new file mode 100644
index 0000000..8a7f773
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pen_fountain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pencil.svg b/src/shared/assets/icons/emoji/pencil.svg
new file mode 100644
index 0000000..1697ffb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pencil.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pencil2.svg b/src/shared/assets/icons/emoji/pencil2.svg
new file mode 100644
index 0000000..a9b69e1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pencil2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/penguin.svg b/src/shared/assets/icons/emoji/penguin.svg
new file mode 100644
index 0000000..fe34d91
--- /dev/null
+++ b/src/shared/assets/icons/emoji/penguin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pensive.svg b/src/shared/assets/icons/emoji/pensive.svg
new file mode 100644
index 0000000..be03530
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pensive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/people_holding_hands.svg b/src/shared/assets/icons/emoji/people_holding_hands.svg
new file mode 100644
index 0000000..6c3d407
--- /dev/null
+++ b/src/shared/assets/icons/emoji/people_holding_hands.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/people_with_bunny_ears_partying.svg b/src/shared/assets/icons/emoji/people_with_bunny_ears_partying.svg
new file mode 100644
index 0000000..062ff26
--- /dev/null
+++ b/src/shared/assets/icons/emoji/people_with_bunny_ears_partying.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/people_wrestling.svg b/src/shared/assets/icons/emoji/people_wrestling.svg
new file mode 100644
index 0000000..fcd902e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/people_wrestling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/performing_arts.svg b/src/shared/assets/icons/emoji/performing_arts.svg
new file mode 100644
index 0000000..c8c9901
--- /dev/null
+++ b/src/shared/assets/icons/emoji/performing_arts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/persevere.svg b/src/shared/assets/icons/emoji/persevere.svg
new file mode 100644
index 0000000..e548a2e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/persevere.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_biking.svg b/src/shared/assets/icons/emoji/person_biking.svg
new file mode 100644
index 0000000..f1bbb72
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_biking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_bouncing_ball.svg b/src/shared/assets/icons/emoji/person_bouncing_ball.svg
new file mode 100644
index 0000000..e772c2c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_bouncing_ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_bowing.svg b/src/shared/assets/icons/emoji/person_bowing.svg
new file mode 100644
index 0000000..7ad69e9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_bowing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_climbing.svg b/src/shared/assets/icons/emoji/person_climbing.svg
new file mode 100644
index 0000000..9709f86
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_climbing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_doing_cartwheel.svg b/src/shared/assets/icons/emoji/person_doing_cartwheel.svg
new file mode 100644
index 0000000..aaf5b18
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_doing_cartwheel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_facepalming.svg b/src/shared/assets/icons/emoji/person_facepalming.svg
new file mode 100644
index 0000000..631e91c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_facepalming.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_fencing.svg b/src/shared/assets/icons/emoji/person_fencing.svg
new file mode 100644
index 0000000..5cfb388
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_fencing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_frowning.svg b/src/shared/assets/icons/emoji/person_frowning.svg
new file mode 100644
index 0000000..0506155
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_frowning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_gesturing_no.svg b/src/shared/assets/icons/emoji/person_gesturing_no.svg
new file mode 100644
index 0000000..d3d9854
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_gesturing_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_gesturing_ok.svg b/src/shared/assets/icons/emoji/person_gesturing_ok.svg
new file mode 100644
index 0000000..351e8d8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_gesturing_ok.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_getting_haircut.svg b/src/shared/assets/icons/emoji/person_getting_haircut.svg
new file mode 100644
index 0000000..1957fa0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_getting_haircut.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_getting_massage.svg b/src/shared/assets/icons/emoji/person_getting_massage.svg
new file mode 100644
index 0000000..57e3588
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_getting_massage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_golfing.svg b/src/shared/assets/icons/emoji/person_golfing.svg
new file mode 100644
index 0000000..6b973a2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_golfing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_in_lotus_position.svg b/src/shared/assets/icons/emoji/person_in_lotus_position.svg
new file mode 100644
index 0000000..e6b30ed
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_in_lotus_position.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_in_steamy_room.svg b/src/shared/assets/icons/emoji/person_in_steamy_room.svg
new file mode 100644
index 0000000..4974433
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_in_steamy_room.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_juggling.svg b/src/shared/assets/icons/emoji/person_juggling.svg
new file mode 100644
index 0000000..d79aad7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_juggling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_kneeling.svg b/src/shared/assets/icons/emoji/person_kneeling.svg
new file mode 100644
index 0000000..60fe537
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_kneeling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_lifting_weights.svg b/src/shared/assets/icons/emoji/person_lifting_weights.svg
new file mode 100644
index 0000000..78e9c7a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_lifting_weights.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_mountain_biking.svg b/src/shared/assets/icons/emoji/person_mountain_biking.svg
new file mode 100644
index 0000000..fb824d5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_mountain_biking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_playing_handball.svg b/src/shared/assets/icons/emoji/person_playing_handball.svg
new file mode 100644
index 0000000..b678e65
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_playing_handball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_playing_water_polo.svg b/src/shared/assets/icons/emoji/person_playing_water_polo.svg
new file mode 100644
index 0000000..df8453d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_playing_water_polo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_pouting.svg b/src/shared/assets/icons/emoji/person_pouting.svg
new file mode 100644
index 0000000..bc4da1c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_pouting.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_raising_hand.svg b/src/shared/assets/icons/emoji/person_raising_hand.svg
new file mode 100644
index 0000000..197e831
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_raising_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_rowing_boat.svg b/src/shared/assets/icons/emoji/person_rowing_boat.svg
new file mode 100644
index 0000000..a427ce6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_rowing_boat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_running.svg b/src/shared/assets/icons/emoji/person_running.svg
new file mode 100644
index 0000000..a9658d6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_running.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_shrugging.svg b/src/shared/assets/icons/emoji/person_shrugging.svg
new file mode 100644
index 0000000..d5984aa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_shrugging.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_standing.svg b/src/shared/assets/icons/emoji/person_standing.svg
new file mode 100644
index 0000000..331041b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_standing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_surfing.svg b/src/shared/assets/icons/emoji/person_surfing.svg
new file mode 100644
index 0000000..53b4ec6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_surfing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_swimming.svg b/src/shared/assets/icons/emoji/person_swimming.svg
new file mode 100644
index 0000000..4901376
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_swimming.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_tipping_hand.svg b/src/shared/assets/icons/emoji/person_tipping_hand.svg
new file mode 100644
index 0000000..eeffd85
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_tipping_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_walking.svg b/src/shared/assets/icons/emoji/person_walking.svg
new file mode 100644
index 0000000..124c296
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_walking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/person_wearing_turban.svg b/src/shared/assets/icons/emoji/person_wearing_turban.svg
new file mode 100644
index 0000000..216ebcc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/person_wearing_turban.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/petri_dish.svg b/src/shared/assets/icons/emoji/petri_dish.svg
new file mode 100644
index 0000000..8fdeaf9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/petri_dish.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pick.svg b/src/shared/assets/icons/emoji/pick.svg
new file mode 100644
index 0000000..ac8ac01
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pick.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pie.svg b/src/shared/assets/icons/emoji/pie.svg
new file mode 100644
index 0000000..5916cac
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pig.svg b/src/shared/assets/icons/emoji/pig.svg
new file mode 100644
index 0000000..49175ea
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pig.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pig2.svg b/src/shared/assets/icons/emoji/pig2.svg
new file mode 100644
index 0000000..9a71ef8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pig2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pig_nose.svg b/src/shared/assets/icons/emoji/pig_nose.svg
new file mode 100644
index 0000000..071722d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pig_nose.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pill.svg b/src/shared/assets/icons/emoji/pill.svg
new file mode 100644
index 0000000..931839b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pinching_hand.svg b/src/shared/assets/icons/emoji/pinching_hand.svg
new file mode 100644
index 0000000..626e3b5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pinching_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pineapple.svg b/src/shared/assets/icons/emoji/pineapple.svg
new file mode 100644
index 0000000..e96999d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pineapple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ping_pong.svg b/src/shared/assets/icons/emoji/ping_pong.svg
new file mode 100644
index 0000000..6201ef5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ping_pong.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pirate_flag.svg b/src/shared/assets/icons/emoji/pirate_flag.svg
new file mode 100644
index 0000000..ae0d531
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pirate_flag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pisces.svg b/src/shared/assets/icons/emoji/pisces.svg
new file mode 100644
index 0000000..854032a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pisces.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pizza.svg b/src/shared/assets/icons/emoji/pizza.svg
new file mode 100644
index 0000000..3a44bba
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pizza.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/place_of_worship.svg b/src/shared/assets/icons/emoji/place_of_worship.svg
new file mode 100644
index 0000000..086e273
--- /dev/null
+++ b/src/shared/assets/icons/emoji/place_of_worship.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/play_pause.svg b/src/shared/assets/icons/emoji/play_pause.svg
new file mode 100644
index 0000000..69c3d2d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/play_pause.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pleading_face.svg b/src/shared/assets/icons/emoji/pleading_face.svg
new file mode 100644
index 0000000..fe93360
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pleading_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/point_down.svg b/src/shared/assets/icons/emoji/point_down.svg
new file mode 100644
index 0000000..b3df617
--- /dev/null
+++ b/src/shared/assets/icons/emoji/point_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/point_left.svg b/src/shared/assets/icons/emoji/point_left.svg
new file mode 100644
index 0000000..10cf55f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/point_left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/point_right.svg b/src/shared/assets/icons/emoji/point_right.svg
new file mode 100644
index 0000000..f8c6a4b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/point_right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/point_up.svg b/src/shared/assets/icons/emoji/point_up.svg
new file mode 100644
index 0000000..95d8ddd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/point_up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/point_up_2.svg b/src/shared/assets/icons/emoji/point_up_2.svg
new file mode 100644
index 0000000..46bc359
--- /dev/null
+++ b/src/shared/assets/icons/emoji/point_up_2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/police_car.svg b/src/shared/assets/icons/emoji/police_car.svg
new file mode 100644
index 0000000..cbf344d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/police_car.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/police_officer.svg b/src/shared/assets/icons/emoji/police_officer.svg
new file mode 100644
index 0000000..feaeb0b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/police_officer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/poodle.svg b/src/shared/assets/icons/emoji/poodle.svg
new file mode 100644
index 0000000..4852dda
--- /dev/null
+++ b/src/shared/assets/icons/emoji/poodle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/poop.svg b/src/shared/assets/icons/emoji/poop.svg
new file mode 100644
index 0000000..19221f6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/poop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/popcorn.svg b/src/shared/assets/icons/emoji/popcorn.svg
new file mode 100644
index 0000000..ddbff6d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/popcorn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/post_office.svg b/src/shared/assets/icons/emoji/post_office.svg
new file mode 100644
index 0000000..132ba41
--- /dev/null
+++ b/src/shared/assets/icons/emoji/post_office.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/postal_horn.svg b/src/shared/assets/icons/emoji/postal_horn.svg
new file mode 100644
index 0000000..2fa1e2d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/postal_horn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/postbox.svg b/src/shared/assets/icons/emoji/postbox.svg
new file mode 100644
index 0000000..61c0332
--- /dev/null
+++ b/src/shared/assets/icons/emoji/postbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/potable_water.svg b/src/shared/assets/icons/emoji/potable_water.svg
new file mode 100644
index 0000000..40f5774
--- /dev/null
+++ b/src/shared/assets/icons/emoji/potable_water.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/potato.svg b/src/shared/assets/icons/emoji/potato.svg
new file mode 100644
index 0000000..b8d120d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/potato.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pouch.svg b/src/shared/assets/icons/emoji/pouch.svg
new file mode 100644
index 0000000..6d6b136
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pouch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/poultry_leg.svg b/src/shared/assets/icons/emoji/poultry_leg.svg
new file mode 100644
index 0000000..77d0b87
--- /dev/null
+++ b/src/shared/assets/icons/emoji/poultry_leg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pound.svg b/src/shared/assets/icons/emoji/pound.svg
new file mode 100644
index 0000000..93a16ff
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pound.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pouting_cat.svg b/src/shared/assets/icons/emoji/pouting_cat.svg
new file mode 100644
index 0000000..19a41d7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pouting_cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pray.svg b/src/shared/assets/icons/emoji/pray.svg
new file mode 100644
index 0000000..8b33d80
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pray.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/prayer_beads.svg b/src/shared/assets/icons/emoji/prayer_beads.svg
new file mode 100644
index 0000000..a38a8e2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/prayer_beads.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pregnant_woman.svg b/src/shared/assets/icons/emoji/pregnant_woman.svg
new file mode 100644
index 0000000..31a9377
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pregnant_woman.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pretzel.svg b/src/shared/assets/icons/emoji/pretzel.svg
new file mode 100644
index 0000000..10bd682
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pretzel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/prince.svg b/src/shared/assets/icons/emoji/prince.svg
new file mode 100644
index 0000000..666ac38
--- /dev/null
+++ b/src/shared/assets/icons/emoji/prince.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/princess.svg b/src/shared/assets/icons/emoji/princess.svg
new file mode 100644
index 0000000..9704853
--- /dev/null
+++ b/src/shared/assets/icons/emoji/princess.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/printer.svg b/src/shared/assets/icons/emoji/printer.svg
new file mode 100644
index 0000000..fae59fe
--- /dev/null
+++ b/src/shared/assets/icons/emoji/printer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/probing_cane.svg b/src/shared/assets/icons/emoji/probing_cane.svg
new file mode 100644
index 0000000..aba8a98
--- /dev/null
+++ b/src/shared/assets/icons/emoji/probing_cane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/projector.svg b/src/shared/assets/icons/emoji/projector.svg
new file mode 100644
index 0000000..b12b42c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/projector.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/punch.svg b/src/shared/assets/icons/emoji/punch.svg
new file mode 100644
index 0000000..813373e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/punch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/purple_circle.svg b/src/shared/assets/icons/emoji/purple_circle.svg
new file mode 100644
index 0000000..8a034ca
--- /dev/null
+++ b/src/shared/assets/icons/emoji/purple_circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/purple_heart.svg b/src/shared/assets/icons/emoji/purple_heart.svg
new file mode 100644
index 0000000..f1dc073
--- /dev/null
+++ b/src/shared/assets/icons/emoji/purple_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/purple_square.svg b/src/shared/assets/icons/emoji/purple_square.svg
new file mode 100644
index 0000000..c331b1f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/purple_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/purse.svg b/src/shared/assets/icons/emoji/purse.svg
new file mode 100644
index 0000000..bb404a2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/purse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/pushpin.svg b/src/shared/assets/icons/emoji/pushpin.svg
new file mode 100644
index 0000000..2ab6da3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/pushpin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/put_litter_in_its_place.svg b/src/shared/assets/icons/emoji/put_litter_in_its_place.svg
new file mode 100644
index 0000000..dadbe6e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/put_litter_in_its_place.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/question.svg b/src/shared/assets/icons/emoji/question.svg
new file mode 100644
index 0000000..d76931b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/question.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rabbit.svg b/src/shared/assets/icons/emoji/rabbit.svg
new file mode 100644
index 0000000..2f70f96
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rabbit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rabbit2.svg b/src/shared/assets/icons/emoji/rabbit2.svg
new file mode 100644
index 0000000..71be122
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rabbit2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/raccoon.svg b/src/shared/assets/icons/emoji/raccoon.svg
new file mode 100644
index 0000000..30c8872
--- /dev/null
+++ b/src/shared/assets/icons/emoji/raccoon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/race_car.svg b/src/shared/assets/icons/emoji/race_car.svg
new file mode 100644
index 0000000..3f42716
--- /dev/null
+++ b/src/shared/assets/icons/emoji/race_car.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/racehorse.svg b/src/shared/assets/icons/emoji/racehorse.svg
new file mode 100644
index 0000000..1cd00b5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/racehorse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/radio.svg b/src/shared/assets/icons/emoji/radio.svg
new file mode 100644
index 0000000..33808ad
--- /dev/null
+++ b/src/shared/assets/icons/emoji/radio.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/radio_button.svg b/src/shared/assets/icons/emoji/radio_button.svg
new file mode 100644
index 0000000..e4d0348
--- /dev/null
+++ b/src/shared/assets/icons/emoji/radio_button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/radioactive.svg b/src/shared/assets/icons/emoji/radioactive.svg
new file mode 100644
index 0000000..2039db1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/radioactive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rage.svg b/src/shared/assets/icons/emoji/rage.svg
new file mode 100644
index 0000000..f370594
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/railway_car.svg b/src/shared/assets/icons/emoji/railway_car.svg
new file mode 100644
index 0000000..775ae86
--- /dev/null
+++ b/src/shared/assets/icons/emoji/railway_car.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/railway_track.svg b/src/shared/assets/icons/emoji/railway_track.svg
new file mode 100644
index 0000000..f11069e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/railway_track.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rainbow.svg b/src/shared/assets/icons/emoji/rainbow.svg
new file mode 100644
index 0000000..ffe6a12
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rainbow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rainbow_flag.svg b/src/shared/assets/icons/emoji/rainbow_flag.svg
new file mode 100644
index 0000000..1969e49
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rainbow_flag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/raised_back_of_hand.svg b/src/shared/assets/icons/emoji/raised_back_of_hand.svg
new file mode 100644
index 0000000..a3d2b1c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/raised_back_of_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/raised_hand.svg b/src/shared/assets/icons/emoji/raised_hand.svg
new file mode 100644
index 0000000..31576f1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/raised_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/raised_hands.svg b/src/shared/assets/icons/emoji/raised_hands.svg
new file mode 100644
index 0000000..be95511
--- /dev/null
+++ b/src/shared/assets/icons/emoji/raised_hands.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ram.svg b/src/shared/assets/icons/emoji/ram.svg
new file mode 100644
index 0000000..f0ba99e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ram.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ramen.svg b/src/shared/assets/icons/emoji/ramen.svg
new file mode 100644
index 0000000..e9fc970
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ramen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rat.svg b/src/shared/assets/icons/emoji/rat.svg
new file mode 100644
index 0000000..d0a03a2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/razor.svg b/src/shared/assets/icons/emoji/razor.svg
new file mode 100644
index 0000000..3b261c9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/razor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/receipt.svg b/src/shared/assets/icons/emoji/receipt.svg
new file mode 100644
index 0000000..c6d288c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/receipt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/record_button.svg b/src/shared/assets/icons/emoji/record_button.svg
new file mode 100644
index 0000000..e8dfcca
--- /dev/null
+++ b/src/shared/assets/icons/emoji/record_button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/recycle.svg b/src/shared/assets/icons/emoji/recycle.svg
new file mode 100644
index 0000000..06352b9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/recycle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/red_car.svg b/src/shared/assets/icons/emoji/red_car.svg
new file mode 100644
index 0000000..97b5f10
--- /dev/null
+++ b/src/shared/assets/icons/emoji/red_car.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/red_circle.svg b/src/shared/assets/icons/emoji/red_circle.svg
new file mode 100644
index 0000000..d98cc6d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/red_circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/red_envelope.svg b/src/shared/assets/icons/emoji/red_envelope.svg
new file mode 100644
index 0000000..203e78d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/red_envelope.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/red_square.svg b/src/shared/assets/icons/emoji/red_square.svg
new file mode 100644
index 0000000..5326d65
--- /dev/null
+++ b/src/shared/assets/icons/emoji/red_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/relaxed.svg b/src/shared/assets/icons/emoji/relaxed.svg
new file mode 100644
index 0000000..5020134
--- /dev/null
+++ b/src/shared/assets/icons/emoji/relaxed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/relieved.svg b/src/shared/assets/icons/emoji/relieved.svg
new file mode 100644
index 0000000..f8d5623
--- /dev/null
+++ b/src/shared/assets/icons/emoji/relieved.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/reminder_ribbon.svg b/src/shared/assets/icons/emoji/reminder_ribbon.svg
new file mode 100644
index 0000000..1f419d4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/reminder_ribbon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/repeat.svg b/src/shared/assets/icons/emoji/repeat.svg
new file mode 100644
index 0000000..27efdab
--- /dev/null
+++ b/src/shared/assets/icons/emoji/repeat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/repeat_one.svg b/src/shared/assets/icons/emoji/repeat_one.svg
new file mode 100644
index 0000000..926d896
--- /dev/null
+++ b/src/shared/assets/icons/emoji/repeat_one.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/restroom.svg b/src/shared/assets/icons/emoji/restroom.svg
new file mode 100644
index 0000000..0ecbb53
--- /dev/null
+++ b/src/shared/assets/icons/emoji/restroom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/revolving_hearts.svg b/src/shared/assets/icons/emoji/revolving_hearts.svg
new file mode 100644
index 0000000..b9459b7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/revolving_hearts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rewind.svg b/src/shared/assets/icons/emoji/rewind.svg
new file mode 100644
index 0000000..0510ac7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rewind.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rhino.svg b/src/shared/assets/icons/emoji/rhino.svg
new file mode 100644
index 0000000..0d07017
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rhino.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ribbon.svg b/src/shared/assets/icons/emoji/ribbon.svg
new file mode 100644
index 0000000..03d4a75
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ribbon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rice.svg b/src/shared/assets/icons/emoji/rice.svg
new file mode 100644
index 0000000..04019a1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rice_ball.svg b/src/shared/assets/icons/emoji/rice_ball.svg
new file mode 100644
index 0000000..e508f8f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rice_ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rice_cracker.svg b/src/shared/assets/icons/emoji/rice_cracker.svg
new file mode 100644
index 0000000..f35a02e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rice_cracker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rice_scene.svg b/src/shared/assets/icons/emoji/rice_scene.svg
new file mode 100644
index 0000000..37c3a7e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rice_scene.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/right_facing_fist.svg b/src/shared/assets/icons/emoji/right_facing_fist.svg
new file mode 100644
index 0000000..afaa803
--- /dev/null
+++ b/src/shared/assets/icons/emoji/right_facing_fist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ring.svg b/src/shared/assets/icons/emoji/ring.svg
new file mode 100644
index 0000000..0834165
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ring.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ringed_planet.svg b/src/shared/assets/icons/emoji/ringed_planet.svg
new file mode 100644
index 0000000..46a0c53
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ringed_planet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/robot.svg b/src/shared/assets/icons/emoji/robot.svg
new file mode 100644
index 0000000..1dbe6d6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/robot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rocket.svg b/src/shared/assets/icons/emoji/rocket.svg
new file mode 100644
index 0000000..8658d43
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rocket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rofl.svg b/src/shared/assets/icons/emoji/rofl.svg
new file mode 100644
index 0000000..7ddfcae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rofl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/roll_of_paper.svg b/src/shared/assets/icons/emoji/roll_of_paper.svg
new file mode 100644
index 0000000..e8f7252
--- /dev/null
+++ b/src/shared/assets/icons/emoji/roll_of_paper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/roller_coaster.svg b/src/shared/assets/icons/emoji/roller_coaster.svg
new file mode 100644
index 0000000..b1e64ec
--- /dev/null
+++ b/src/shared/assets/icons/emoji/roller_coaster.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rolling_eyes.svg b/src/shared/assets/icons/emoji/rolling_eyes.svg
new file mode 100644
index 0000000..91c0b62
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rolling_eyes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rooster.svg b/src/shared/assets/icons/emoji/rooster.svg
new file mode 100644
index 0000000..29a4abe
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rooster.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rose.svg b/src/shared/assets/icons/emoji/rose.svg
new file mode 100644
index 0000000..500d925
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rose.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rosette.svg b/src/shared/assets/icons/emoji/rosette.svg
new file mode 100644
index 0000000..dfaa718
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rosette.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rotating_light.svg b/src/shared/assets/icons/emoji/rotating_light.svg
new file mode 100644
index 0000000..5ed7ec8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rotating_light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/round_pushpin.svg b/src/shared/assets/icons/emoji/round_pushpin.svg
new file mode 100644
index 0000000..8ab3159
--- /dev/null
+++ b/src/shared/assets/icons/emoji/round_pushpin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/rugby_football.svg b/src/shared/assets/icons/emoji/rugby_football.svg
new file mode 100644
index 0000000..5e12c43
--- /dev/null
+++ b/src/shared/assets/icons/emoji/rugby_football.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/running_shirt_with_sash.svg b/src/shared/assets/icons/emoji/running_shirt_with_sash.svg
new file mode 100644
index 0000000..8410aee
--- /dev/null
+++ b/src/shared/assets/icons/emoji/running_shirt_with_sash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sa.svg b/src/shared/assets/icons/emoji/sa.svg
new file mode 100644
index 0000000..7f1e841
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/safety_pin.svg b/src/shared/assets/icons/emoji/safety_pin.svg
new file mode 100644
index 0000000..a37a048
--- /dev/null
+++ b/src/shared/assets/icons/emoji/safety_pin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/safety_vest.svg b/src/shared/assets/icons/emoji/safety_vest.svg
new file mode 100644
index 0000000..50bf8e3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/safety_vest.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sagittarius.svg b/src/shared/assets/icons/emoji/sagittarius.svg
new file mode 100644
index 0000000..df13efc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sagittarius.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sailboat.svg b/src/shared/assets/icons/emoji/sailboat.svg
new file mode 100644
index 0000000..c76c0de
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sailboat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sake.svg b/src/shared/assets/icons/emoji/sake.svg
new file mode 100644
index 0000000..2bb872e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/salad.svg b/src/shared/assets/icons/emoji/salad.svg
new file mode 100644
index 0000000..f18b096
--- /dev/null
+++ b/src/shared/assets/icons/emoji/salad.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/salt.svg b/src/shared/assets/icons/emoji/salt.svg
new file mode 100644
index 0000000..40dea88
--- /dev/null
+++ b/src/shared/assets/icons/emoji/salt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sandal.svg b/src/shared/assets/icons/emoji/sandal.svg
new file mode 100644
index 0000000..c2f62e4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sandal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sandwich.svg b/src/shared/assets/icons/emoji/sandwich.svg
new file mode 100644
index 0000000..d514ba7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sandwich.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/santa.svg b/src/shared/assets/icons/emoji/santa.svg
new file mode 100644
index 0000000..9c61da6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/santa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sari.svg b/src/shared/assets/icons/emoji/sari.svg
new file mode 100644
index 0000000..846d591
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sari.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/satellite.svg b/src/shared/assets/icons/emoji/satellite.svg
new file mode 100644
index 0000000..dcb0294
--- /dev/null
+++ b/src/shared/assets/icons/emoji/satellite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/satellite_orbital.svg b/src/shared/assets/icons/emoji/satellite_orbital.svg
new file mode 100644
index 0000000..6d9bb3d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/satellite_orbital.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sauropod.svg b/src/shared/assets/icons/emoji/sauropod.svg
new file mode 100644
index 0000000..fb046c6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sauropod.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/saxophone.svg b/src/shared/assets/icons/emoji/saxophone.svg
new file mode 100644
index 0000000..ed0f849
--- /dev/null
+++ b/src/shared/assets/icons/emoji/saxophone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/scales.svg b/src/shared/assets/icons/emoji/scales.svg
new file mode 100644
index 0000000..61af844
--- /dev/null
+++ b/src/shared/assets/icons/emoji/scales.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/scarf.svg b/src/shared/assets/icons/emoji/scarf.svg
new file mode 100644
index 0000000..2c959f4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/scarf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/school.svg b/src/shared/assets/icons/emoji/school.svg
new file mode 100644
index 0000000..8be9e96
--- /dev/null
+++ b/src/shared/assets/icons/emoji/school.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/school_satchel.svg b/src/shared/assets/icons/emoji/school_satchel.svg
new file mode 100644
index 0000000..f44d568
--- /dev/null
+++ b/src/shared/assets/icons/emoji/school_satchel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/scissors.svg b/src/shared/assets/icons/emoji/scissors.svg
new file mode 100644
index 0000000..e5d3ac1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/scissors.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/scooter.svg b/src/shared/assets/icons/emoji/scooter.svg
new file mode 100644
index 0000000..e217dc4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/scooter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/scorpion.svg b/src/shared/assets/icons/emoji/scorpion.svg
new file mode 100644
index 0000000..582c722
--- /dev/null
+++ b/src/shared/assets/icons/emoji/scorpion.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/scorpius.svg b/src/shared/assets/icons/emoji/scorpius.svg
new file mode 100644
index 0000000..ec1b93a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/scorpius.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/scotland.svg b/src/shared/assets/icons/emoji/scotland.svg
new file mode 100644
index 0000000..bfb8b48
--- /dev/null
+++ b/src/shared/assets/icons/emoji/scotland.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/scream.svg b/src/shared/assets/icons/emoji/scream.svg
new file mode 100644
index 0000000..c70a81a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/scream.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/scream_cat.svg b/src/shared/assets/icons/emoji/scream_cat.svg
new file mode 100644
index 0000000..65ea8a5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/scream_cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/scroll.svg b/src/shared/assets/icons/emoji/scroll.svg
new file mode 100644
index 0000000..2a7fd37
--- /dev/null
+++ b/src/shared/assets/icons/emoji/scroll.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/seat.svg b/src/shared/assets/icons/emoji/seat.svg
new file mode 100644
index 0000000..bf27bb1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/seat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/second_place.svg b/src/shared/assets/icons/emoji/second_place.svg
new file mode 100644
index 0000000..685db6d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/second_place.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/secret.svg b/src/shared/assets/icons/emoji/secret.svg
new file mode 100644
index 0000000..d1a7933
--- /dev/null
+++ b/src/shared/assets/icons/emoji/secret.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/see_no_evil.svg b/src/shared/assets/icons/emoji/see_no_evil.svg
new file mode 100644
index 0000000..31e38a3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/see_no_evil.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/seedling.svg b/src/shared/assets/icons/emoji/seedling.svg
new file mode 100644
index 0000000..668d777
--- /dev/null
+++ b/src/shared/assets/icons/emoji/seedling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/selfie.svg b/src/shared/assets/icons/emoji/selfie.svg
new file mode 100644
index 0000000..47fa031
--- /dev/null
+++ b/src/shared/assets/icons/emoji/selfie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/service_dog.svg b/src/shared/assets/icons/emoji/service_dog.svg
new file mode 100644
index 0000000..0ba7fb3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/service_dog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/seven.svg b/src/shared/assets/icons/emoji/seven.svg
new file mode 100644
index 0000000..2da4206
--- /dev/null
+++ b/src/shared/assets/icons/emoji/seven.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shallow_pan_of_food.svg b/src/shared/assets/icons/emoji/shallow_pan_of_food.svg
new file mode 100644
index 0000000..878520c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shallow_pan_of_food.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shamrock.svg b/src/shared/assets/icons/emoji/shamrock.svg
new file mode 100644
index 0000000..72eaf47
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shamrock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shark.svg b/src/shared/assets/icons/emoji/shark.svg
new file mode 100644
index 0000000..f6381c5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shaved_ice.svg b/src/shared/assets/icons/emoji/shaved_ice.svg
new file mode 100644
index 0000000..232dd3c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shaved_ice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sheep.svg b/src/shared/assets/icons/emoji/sheep.svg
new file mode 100644
index 0000000..891e670
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sheep.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shell.svg b/src/shared/assets/icons/emoji/shell.svg
new file mode 100644
index 0000000..804ece8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shell.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shield.svg b/src/shared/assets/icons/emoji/shield.svg
new file mode 100644
index 0000000..97f6894
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shield.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shinto_shrine.svg b/src/shared/assets/icons/emoji/shinto_shrine.svg
new file mode 100644
index 0000000..395048e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shinto_shrine.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ship.svg b/src/shared/assets/icons/emoji/ship.svg
new file mode 100644
index 0000000..79077f0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ship.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shirt.svg b/src/shared/assets/icons/emoji/shirt.svg
new file mode 100644
index 0000000..1db4820
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shirt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shopping_bags.svg b/src/shared/assets/icons/emoji/shopping_bags.svg
new file mode 100644
index 0000000..e2ae916
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shopping_bags.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shopping_cart.svg b/src/shared/assets/icons/emoji/shopping_cart.svg
new file mode 100644
index 0000000..03608d5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shopping_cart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shorts.svg b/src/shared/assets/icons/emoji/shorts.svg
new file mode 100644
index 0000000..03e70ca
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shorts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shower.svg b/src/shared/assets/icons/emoji/shower.svg
new file mode 100644
index 0000000..004dadf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shower.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shrimp.svg b/src/shared/assets/icons/emoji/shrimp.svg
new file mode 100644
index 0000000..8279307
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shrimp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/shushing_face.svg b/src/shared/assets/icons/emoji/shushing_face.svg
new file mode 100644
index 0000000..a00edc9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/shushing_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/signal_strength.svg b/src/shared/assets/icons/emoji/signal_strength.svg
new file mode 100644
index 0000000..df646fd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/signal_strength.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/six.svg b/src/shared/assets/icons/emoji/six.svg
new file mode 100644
index 0000000..c28896e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/six.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/six_pointed_star.svg b/src/shared/assets/icons/emoji/six_pointed_star.svg
new file mode 100644
index 0000000..7efa372
--- /dev/null
+++ b/src/shared/assets/icons/emoji/six_pointed_star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/skateboard.svg b/src/shared/assets/icons/emoji/skateboard.svg
new file mode 100644
index 0000000..1ee4bfe
--- /dev/null
+++ b/src/shared/assets/icons/emoji/skateboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ski.svg b/src/shared/assets/icons/emoji/ski.svg
new file mode 100644
index 0000000..a117c93
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ski.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/skier.svg b/src/shared/assets/icons/emoji/skier.svg
new file mode 100644
index 0000000..ade6f21
--- /dev/null
+++ b/src/shared/assets/icons/emoji/skier.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/skull.svg b/src/shared/assets/icons/emoji/skull.svg
new file mode 100644
index 0000000..a8000b1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/skull.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/skull_crossbones.svg b/src/shared/assets/icons/emoji/skull_crossbones.svg
new file mode 100644
index 0000000..66f9862
--- /dev/null
+++ b/src/shared/assets/icons/emoji/skull_crossbones.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/skunk.svg b/src/shared/assets/icons/emoji/skunk.svg
new file mode 100644
index 0000000..47478ff
--- /dev/null
+++ b/src/shared/assets/icons/emoji/skunk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sled.svg b/src/shared/assets/icons/emoji/sled.svg
new file mode 100644
index 0000000..12d776d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sled.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sleeping.svg b/src/shared/assets/icons/emoji/sleeping.svg
new file mode 100644
index 0000000..643ae22
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sleeping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sleeping_accommodation.svg b/src/shared/assets/icons/emoji/sleeping_accommodation.svg
new file mode 100644
index 0000000..183ccf0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sleeping_accommodation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sleepy.svg b/src/shared/assets/icons/emoji/sleepy.svg
new file mode 100644
index 0000000..ede0d7a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sleepy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/slight_frown.svg b/src/shared/assets/icons/emoji/slight_frown.svg
new file mode 100644
index 0000000..cf3557b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/slight_frown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/slight_smile.svg b/src/shared/assets/icons/emoji/slight_smile.svg
new file mode 100644
index 0000000..ff9f989
--- /dev/null
+++ b/src/shared/assets/icons/emoji/slight_smile.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/slot_machine.svg b/src/shared/assets/icons/emoji/slot_machine.svg
new file mode 100644
index 0000000..789fd08
--- /dev/null
+++ b/src/shared/assets/icons/emoji/slot_machine.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sloth.svg b/src/shared/assets/icons/emoji/sloth.svg
new file mode 100644
index 0000000..7371a8e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sloth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/small_blue_diamond.svg b/src/shared/assets/icons/emoji/small_blue_diamond.svg
new file mode 100644
index 0000000..bb4865d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/small_blue_diamond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/small_orange_diamond.svg b/src/shared/assets/icons/emoji/small_orange_diamond.svg
new file mode 100644
index 0000000..435ad6a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/small_orange_diamond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/small_red_triangle.svg b/src/shared/assets/icons/emoji/small_red_triangle.svg
new file mode 100644
index 0000000..96d0ebb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/small_red_triangle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/small_red_triangle_down.svg b/src/shared/assets/icons/emoji/small_red_triangle_down.svg
new file mode 100644
index 0000000..f846cbf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/small_red_triangle_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/smile.svg b/src/shared/assets/icons/emoji/smile.svg
new file mode 100644
index 0000000..99ac39c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/smile.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/smile_cat.svg b/src/shared/assets/icons/emoji/smile_cat.svg
new file mode 100644
index 0000000..4e125ab
--- /dev/null
+++ b/src/shared/assets/icons/emoji/smile_cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/smiley.svg b/src/shared/assets/icons/emoji/smiley.svg
new file mode 100644
index 0000000..25d4b96
--- /dev/null
+++ b/src/shared/assets/icons/emoji/smiley.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/smiley_cat.svg b/src/shared/assets/icons/emoji/smiley_cat.svg
new file mode 100644
index 0000000..88057ce
--- /dev/null
+++ b/src/shared/assets/icons/emoji/smiley_cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/smiling_face_with_3_hearts.svg b/src/shared/assets/icons/emoji/smiling_face_with_3_hearts.svg
new file mode 100644
index 0000000..6b063df
--- /dev/null
+++ b/src/shared/assets/icons/emoji/smiling_face_with_3_hearts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/smiling_imp.svg b/src/shared/assets/icons/emoji/smiling_imp.svg
new file mode 100644
index 0000000..79c2480
--- /dev/null
+++ b/src/shared/assets/icons/emoji/smiling_imp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/smirk.svg b/src/shared/assets/icons/emoji/smirk.svg
new file mode 100644
index 0000000..ef4f386
--- /dev/null
+++ b/src/shared/assets/icons/emoji/smirk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/smirk_cat.svg b/src/shared/assets/icons/emoji/smirk_cat.svg
new file mode 100644
index 0000000..198ad47
--- /dev/null
+++ b/src/shared/assets/icons/emoji/smirk_cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/smoking.svg b/src/shared/assets/icons/emoji/smoking.svg
new file mode 100644
index 0000000..1c0dff2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/smoking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/snail.svg b/src/shared/assets/icons/emoji/snail.svg
new file mode 100644
index 0000000..2c63658
--- /dev/null
+++ b/src/shared/assets/icons/emoji/snail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/snake.svg b/src/shared/assets/icons/emoji/snake.svg
new file mode 100644
index 0000000..1753178
--- /dev/null
+++ b/src/shared/assets/icons/emoji/snake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sneezing_face.svg b/src/shared/assets/icons/emoji/sneezing_face.svg
new file mode 100644
index 0000000..dc86ab3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sneezing_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/snowboarder.svg b/src/shared/assets/icons/emoji/snowboarder.svg
new file mode 100644
index 0000000..bff2c08
--- /dev/null
+++ b/src/shared/assets/icons/emoji/snowboarder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/snowflake.svg b/src/shared/assets/icons/emoji/snowflake.svg
new file mode 100644
index 0000000..258c161
--- /dev/null
+++ b/src/shared/assets/icons/emoji/snowflake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/snowman.svg b/src/shared/assets/icons/emoji/snowman.svg
new file mode 100644
index 0000000..74caddf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/snowman.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/snowman2.svg b/src/shared/assets/icons/emoji/snowman2.svg
new file mode 100644
index 0000000..c02380e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/snowman2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/soap.svg b/src/shared/assets/icons/emoji/soap.svg
new file mode 100644
index 0000000..e5b1e02
--- /dev/null
+++ b/src/shared/assets/icons/emoji/soap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sob.svg b/src/shared/assets/icons/emoji/sob.svg
new file mode 100644
index 0000000..11d1159
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sob.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/soccer.svg b/src/shared/assets/icons/emoji/soccer.svg
new file mode 100644
index 0000000..f24749c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/soccer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/socks.svg b/src/shared/assets/icons/emoji/socks.svg
new file mode 100644
index 0000000..44fc310
--- /dev/null
+++ b/src/shared/assets/icons/emoji/socks.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/softball.svg b/src/shared/assets/icons/emoji/softball.svg
new file mode 100644
index 0000000..1c9270c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/softball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/soon.svg b/src/shared/assets/icons/emoji/soon.svg
new file mode 100644
index 0000000..6904281
--- /dev/null
+++ b/src/shared/assets/icons/emoji/soon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sos.svg b/src/shared/assets/icons/emoji/sos.svg
new file mode 100644
index 0000000..6fe35a1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sos.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sound.svg b/src/shared/assets/icons/emoji/sound.svg
new file mode 100644
index 0000000..9fb6c1c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sound.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/space_invader.svg b/src/shared/assets/icons/emoji/space_invader.svg
new file mode 100644
index 0000000..cda3444
--- /dev/null
+++ b/src/shared/assets/icons/emoji/space_invader.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/spades.svg b/src/shared/assets/icons/emoji/spades.svg
new file mode 100644
index 0000000..5f7b109
--- /dev/null
+++ b/src/shared/assets/icons/emoji/spades.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/spaghetti.svg b/src/shared/assets/icons/emoji/spaghetti.svg
new file mode 100644
index 0000000..3ae82eb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/spaghetti.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sparkle.svg b/src/shared/assets/icons/emoji/sparkle.svg
new file mode 100644
index 0000000..61e1997
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sparkle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sparkler.svg b/src/shared/assets/icons/emoji/sparkler.svg
new file mode 100644
index 0000000..68cfb64
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sparkler.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sparkles.svg b/src/shared/assets/icons/emoji/sparkles.svg
new file mode 100644
index 0000000..347ad12
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sparkles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sparkling_heart.svg b/src/shared/assets/icons/emoji/sparkling_heart.svg
new file mode 100644
index 0000000..aa3abbc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sparkling_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/speak_no_evil.svg b/src/shared/assets/icons/emoji/speak_no_evil.svg
new file mode 100644
index 0000000..1e4e313
--- /dev/null
+++ b/src/shared/assets/icons/emoji/speak_no_evil.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/speaker.svg b/src/shared/assets/icons/emoji/speaker.svg
new file mode 100644
index 0000000..11a7b0e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/speaker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/speaking_head.svg b/src/shared/assets/icons/emoji/speaking_head.svg
new file mode 100644
index 0000000..4e613c0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/speaking_head.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/speech_balloon.svg b/src/shared/assets/icons/emoji/speech_balloon.svg
new file mode 100644
index 0000000..11533c5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/speech_balloon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/speech_left.svg b/src/shared/assets/icons/emoji/speech_left.svg
new file mode 100644
index 0000000..d091897
--- /dev/null
+++ b/src/shared/assets/icons/emoji/speech_left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/speedboat.svg b/src/shared/assets/icons/emoji/speedboat.svg
new file mode 100644
index 0000000..7dfe5a6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/speedboat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/spider.svg b/src/shared/assets/icons/emoji/spider.svg
new file mode 100644
index 0000000..a156865
--- /dev/null
+++ b/src/shared/assets/icons/emoji/spider.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/spider_web.svg b/src/shared/assets/icons/emoji/spider_web.svg
new file mode 100644
index 0000000..92142fd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/spider_web.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sponge.svg b/src/shared/assets/icons/emoji/sponge.svg
new file mode 100644
index 0000000..1c95751
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sponge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/spoon.svg b/src/shared/assets/icons/emoji/spoon.svg
new file mode 100644
index 0000000..1f2d69f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/spoon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/squeeze_bottle.svg b/src/shared/assets/icons/emoji/squeeze_bottle.svg
new file mode 100644
index 0000000..2cb39a7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/squeeze_bottle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/squid.svg b/src/shared/assets/icons/emoji/squid.svg
new file mode 100644
index 0000000..e0bbf92
--- /dev/null
+++ b/src/shared/assets/icons/emoji/squid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/stadium.svg b/src/shared/assets/icons/emoji/stadium.svg
new file mode 100644
index 0000000..248c6d9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/stadium.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/star.svg b/src/shared/assets/icons/emoji/star.svg
new file mode 100644
index 0000000..760ad08
--- /dev/null
+++ b/src/shared/assets/icons/emoji/star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/star2.svg b/src/shared/assets/icons/emoji/star2.svg
new file mode 100644
index 0000000..a4695dd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/star2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/star_and_crescent.svg b/src/shared/assets/icons/emoji/star_and_crescent.svg
new file mode 100644
index 0000000..678a1e8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/star_and_crescent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/star_of_david.svg b/src/shared/assets/icons/emoji/star_of_david.svg
new file mode 100644
index 0000000..bdf63ac
--- /dev/null
+++ b/src/shared/assets/icons/emoji/star_of_david.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/star_struck.svg b/src/shared/assets/icons/emoji/star_struck.svg
new file mode 100644
index 0000000..260cd80
--- /dev/null
+++ b/src/shared/assets/icons/emoji/star_struck.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/stars.svg b/src/shared/assets/icons/emoji/stars.svg
new file mode 100644
index 0000000..295a5a1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/stars.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/station.svg b/src/shared/assets/icons/emoji/station.svg
new file mode 100644
index 0000000..cebf01d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/station.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/statue_of_liberty.svg b/src/shared/assets/icons/emoji/statue_of_liberty.svg
new file mode 100644
index 0000000..3191523
--- /dev/null
+++ b/src/shared/assets/icons/emoji/statue_of_liberty.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/steam_locomotive.svg b/src/shared/assets/icons/emoji/steam_locomotive.svg
new file mode 100644
index 0000000..c93874d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/steam_locomotive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/stethoscope.svg b/src/shared/assets/icons/emoji/stethoscope.svg
new file mode 100644
index 0000000..848c72e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/stethoscope.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/stew.svg b/src/shared/assets/icons/emoji/stew.svg
new file mode 100644
index 0000000..37f9be8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/stew.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/stop_button.svg b/src/shared/assets/icons/emoji/stop_button.svg
new file mode 100644
index 0000000..c38882a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/stop_button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/stopwatch.svg b/src/shared/assets/icons/emoji/stopwatch.svg
new file mode 100644
index 0000000..599d246
--- /dev/null
+++ b/src/shared/assets/icons/emoji/stopwatch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/straight_ruler.svg b/src/shared/assets/icons/emoji/straight_ruler.svg
new file mode 100644
index 0000000..37b035b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/straight_ruler.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/strawberry.svg b/src/shared/assets/icons/emoji/strawberry.svg
new file mode 100644
index 0000000..26a41ee
--- /dev/null
+++ b/src/shared/assets/icons/emoji/strawberry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/stuck_out_tongue.svg b/src/shared/assets/icons/emoji/stuck_out_tongue.svg
new file mode 100644
index 0000000..903422a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/stuck_out_tongue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/stuck_out_tongue_closed_eyes.svg b/src/shared/assets/icons/emoji/stuck_out_tongue_closed_eyes.svg
new file mode 100644
index 0000000..09dead6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/stuck_out_tongue_closed_eyes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/stuck_out_tongue_winking_eye.svg b/src/shared/assets/icons/emoji/stuck_out_tongue_winking_eye.svg
new file mode 100644
index 0000000..6f78739
--- /dev/null
+++ b/src/shared/assets/icons/emoji/stuck_out_tongue_winking_eye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/stuffed_flatbread.svg b/src/shared/assets/icons/emoji/stuffed_flatbread.svg
new file mode 100644
index 0000000..baa9a4b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/stuffed_flatbread.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sun_with_face.svg b/src/shared/assets/icons/emoji/sun_with_face.svg
new file mode 100644
index 0000000..2da9b19
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sun_with_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sunflower.svg b/src/shared/assets/icons/emoji/sunflower.svg
new file mode 100644
index 0000000..413e6fc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sunflower.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sunglasses.svg b/src/shared/assets/icons/emoji/sunglasses.svg
new file mode 100644
index 0000000..fff644a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sunglasses.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sunny.svg b/src/shared/assets/icons/emoji/sunny.svg
new file mode 100644
index 0000000..8602bae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sunny.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sunrise.svg b/src/shared/assets/icons/emoji/sunrise.svg
new file mode 100644
index 0000000..8e3f66d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sunrise.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sunrise_over_mountains.svg b/src/shared/assets/icons/emoji/sunrise_over_mountains.svg
new file mode 100644
index 0000000..0709f1c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sunrise_over_mountains.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/superhero.svg b/src/shared/assets/icons/emoji/superhero.svg
new file mode 100644
index 0000000..f012215
--- /dev/null
+++ b/src/shared/assets/icons/emoji/superhero.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/supervillain.svg b/src/shared/assets/icons/emoji/supervillain.svg
new file mode 100644
index 0000000..43922b0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/supervillain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sushi.svg b/src/shared/assets/icons/emoji/sushi.svg
new file mode 100644
index 0000000..eed2b88
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sushi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/suspension_railway.svg b/src/shared/assets/icons/emoji/suspension_railway.svg
new file mode 100644
index 0000000..72eac03
--- /dev/null
+++ b/src/shared/assets/icons/emoji/suspension_railway.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/swan.svg b/src/shared/assets/icons/emoji/swan.svg
new file mode 100644
index 0000000..9c38381
--- /dev/null
+++ b/src/shared/assets/icons/emoji/swan.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sweat.svg b/src/shared/assets/icons/emoji/sweat.svg
new file mode 100644
index 0000000..83c6580
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sweat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sweat_drops.svg b/src/shared/assets/icons/emoji/sweat_drops.svg
new file mode 100644
index 0000000..fd53cd8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sweat_drops.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sweat_smile.svg b/src/shared/assets/icons/emoji/sweat_smile.svg
new file mode 100644
index 0000000..de6eb5d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sweat_smile.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/sweet_potato.svg b/src/shared/assets/icons/emoji/sweet_potato.svg
new file mode 100644
index 0000000..c2894e3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/sweet_potato.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/symbols.svg b/src/shared/assets/icons/emoji/symbols.svg
new file mode 100644
index 0000000..71ac157
--- /dev/null
+++ b/src/shared/assets/icons/emoji/symbols.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/synagogue.svg b/src/shared/assets/icons/emoji/synagogue.svg
new file mode 100644
index 0000000..c82ae00
--- /dev/null
+++ b/src/shared/assets/icons/emoji/synagogue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/syringe.svg b/src/shared/assets/icons/emoji/syringe.svg
new file mode 100644
index 0000000..ef9c72c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/syringe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/t_rex.svg b/src/shared/assets/icons/emoji/t_rex.svg
new file mode 100644
index 0000000..64b68d7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/t_rex.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/taco.svg b/src/shared/assets/icons/emoji/taco.svg
new file mode 100644
index 0000000..5b08f1f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/taco.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tada.svg b/src/shared/assets/icons/emoji/tada.svg
new file mode 100644
index 0000000..a4b8305
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tada.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/takeout_box.svg b/src/shared/assets/icons/emoji/takeout_box.svg
new file mode 100644
index 0000000..6a05c9c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/takeout_box.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tanabata_tree.svg b/src/shared/assets/icons/emoji/tanabata_tree.svg
new file mode 100644
index 0000000..0636380
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tanabata_tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tangerine.svg b/src/shared/assets/icons/emoji/tangerine.svg
new file mode 100644
index 0000000..82c0c52
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tangerine.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/taurus.svg b/src/shared/assets/icons/emoji/taurus.svg
new file mode 100644
index 0000000..6e9918a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/taurus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/taxi.svg b/src/shared/assets/icons/emoji/taxi.svg
new file mode 100644
index 0000000..5446414
--- /dev/null
+++ b/src/shared/assets/icons/emoji/taxi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tea.svg b/src/shared/assets/icons/emoji/tea.svg
new file mode 100644
index 0000000..7726963
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tea.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/teddy_bear.svg b/src/shared/assets/icons/emoji/teddy_bear.svg
new file mode 100644
index 0000000..87af73b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/teddy_bear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/telephone.svg b/src/shared/assets/icons/emoji/telephone.svg
new file mode 100644
index 0000000..e65124f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/telephone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/telephone_receiver.svg b/src/shared/assets/icons/emoji/telephone_receiver.svg
new file mode 100644
index 0000000..cfaf7ca
--- /dev/null
+++ b/src/shared/assets/icons/emoji/telephone_receiver.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/telescope.svg b/src/shared/assets/icons/emoji/telescope.svg
new file mode 100644
index 0000000..113c033
--- /dev/null
+++ b/src/shared/assets/icons/emoji/telescope.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tennis.svg b/src/shared/assets/icons/emoji/tennis.svg
new file mode 100644
index 0000000..323e5c4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tennis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tent.svg b/src/shared/assets/icons/emoji/tent.svg
new file mode 100644
index 0000000..72c5cbd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/test_tube.svg b/src/shared/assets/icons/emoji/test_tube.svg
new file mode 100644
index 0000000..8116cfa
--- /dev/null
+++ b/src/shared/assets/icons/emoji/test_tube.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/thermometer.svg b/src/shared/assets/icons/emoji/thermometer.svg
new file mode 100644
index 0000000..95a7598
--- /dev/null
+++ b/src/shared/assets/icons/emoji/thermometer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/thermometer_face.svg b/src/shared/assets/icons/emoji/thermometer_face.svg
new file mode 100644
index 0000000..b6ac0a9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/thermometer_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/thinking.svg b/src/shared/assets/icons/emoji/thinking.svg
new file mode 100644
index 0000000..4e8c4cc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/thinking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/third_place.svg b/src/shared/assets/icons/emoji/third_place.svg
new file mode 100644
index 0000000..6bb5f77
--- /dev/null
+++ b/src/shared/assets/icons/emoji/third_place.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/thought_balloon.svg b/src/shared/assets/icons/emoji/thought_balloon.svg
new file mode 100644
index 0000000..f3d835c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/thought_balloon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/thread.svg b/src/shared/assets/icons/emoji/thread.svg
new file mode 100644
index 0000000..3210fbe
--- /dev/null
+++ b/src/shared/assets/icons/emoji/thread.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/three.svg b/src/shared/assets/icons/emoji/three.svg
new file mode 100644
index 0000000..95db6d2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/three.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/thumbsdown.svg b/src/shared/assets/icons/emoji/thumbsdown.svg
new file mode 100644
index 0000000..1569ad0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/thumbsdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/thumbsup.svg b/src/shared/assets/icons/emoji/thumbsup.svg
new file mode 100644
index 0000000..595672d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/thumbsup.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/thunder_cloud_rain.svg b/src/shared/assets/icons/emoji/thunder_cloud_rain.svg
new file mode 100644
index 0000000..878ba81
--- /dev/null
+++ b/src/shared/assets/icons/emoji/thunder_cloud_rain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/ticket.svg b/src/shared/assets/icons/emoji/ticket.svg
new file mode 100644
index 0000000..cd23401
--- /dev/null
+++ b/src/shared/assets/icons/emoji/ticket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tickets.svg b/src/shared/assets/icons/emoji/tickets.svg
new file mode 100644
index 0000000..984f270
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tickets.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tiger.svg b/src/shared/assets/icons/emoji/tiger.svg
new file mode 100644
index 0000000..5ecd980
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tiger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tiger2.svg b/src/shared/assets/icons/emoji/tiger2.svg
new file mode 100644
index 0000000..c74ecf6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tiger2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/timer.svg b/src/shared/assets/icons/emoji/timer.svg
new file mode 100644
index 0000000..7cb6e02
--- /dev/null
+++ b/src/shared/assets/icons/emoji/timer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tired_face.svg b/src/shared/assets/icons/emoji/tired_face.svg
new file mode 100644
index 0000000..4253ada
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tired_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/toilet.svg b/src/shared/assets/icons/emoji/toilet.svg
new file mode 100644
index 0000000..2463448
--- /dev/null
+++ b/src/shared/assets/icons/emoji/toilet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tokyo_tower.svg b/src/shared/assets/icons/emoji/tokyo_tower.svg
new file mode 100644
index 0000000..92fd6ae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tokyo_tower.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tomato.svg b/src/shared/assets/icons/emoji/tomato.svg
new file mode 100644
index 0000000..411c2a5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tomato.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tongue.svg b/src/shared/assets/icons/emoji/tongue.svg
new file mode 100644
index 0000000..64386b9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tongue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/toolbox.svg b/src/shared/assets/icons/emoji/toolbox.svg
new file mode 100644
index 0000000..ae06531
--- /dev/null
+++ b/src/shared/assets/icons/emoji/toolbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tools.svg b/src/shared/assets/icons/emoji/tools.svg
new file mode 100644
index 0000000..085f902
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tools.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tooth.svg b/src/shared/assets/icons/emoji/tooth.svg
new file mode 100644
index 0000000..49cc5f9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tooth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/top.svg b/src/shared/assets/icons/emoji/top.svg
new file mode 100644
index 0000000..54ab898
--- /dev/null
+++ b/src/shared/assets/icons/emoji/top.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tophat.svg b/src/shared/assets/icons/emoji/tophat.svg
new file mode 100644
index 0000000..1017cef
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tophat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/track_next.svg b/src/shared/assets/icons/emoji/track_next.svg
new file mode 100644
index 0000000..6e66128
--- /dev/null
+++ b/src/shared/assets/icons/emoji/track_next.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/track_previous.svg b/src/shared/assets/icons/emoji/track_previous.svg
new file mode 100644
index 0000000..889b162
--- /dev/null
+++ b/src/shared/assets/icons/emoji/track_previous.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/trackball.svg b/src/shared/assets/icons/emoji/trackball.svg
new file mode 100644
index 0000000..caea2fd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/trackball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tractor.svg b/src/shared/assets/icons/emoji/tractor.svg
new file mode 100644
index 0000000..014ca11
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tractor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/traffic_light.svg b/src/shared/assets/icons/emoji/traffic_light.svg
new file mode 100644
index 0000000..6cb3827
--- /dev/null
+++ b/src/shared/assets/icons/emoji/traffic_light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/train.svg b/src/shared/assets/icons/emoji/train.svg
new file mode 100644
index 0000000..da204b8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/train.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/train2.svg b/src/shared/assets/icons/emoji/train2.svg
new file mode 100644
index 0000000..3f5f5b8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/train2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tram.svg b/src/shared/assets/icons/emoji/tram.svg
new file mode 100644
index 0000000..b93eab0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tram.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/triangular_flag_on_post.svg b/src/shared/assets/icons/emoji/triangular_flag_on_post.svg
new file mode 100644
index 0000000..a9338f1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/triangular_flag_on_post.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/triangular_ruler.svg b/src/shared/assets/icons/emoji/triangular_ruler.svg
new file mode 100644
index 0000000..b365150
--- /dev/null
+++ b/src/shared/assets/icons/emoji/triangular_ruler.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/trident.svg b/src/shared/assets/icons/emoji/trident.svg
new file mode 100644
index 0000000..20cc78d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/trident.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/triumph.svg b/src/shared/assets/icons/emoji/triumph.svg
new file mode 100644
index 0000000..c211eec
--- /dev/null
+++ b/src/shared/assets/icons/emoji/triumph.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/trolleybus.svg b/src/shared/assets/icons/emoji/trolleybus.svg
new file mode 100644
index 0000000..e3dc44d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/trolleybus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/trophy.svg b/src/shared/assets/icons/emoji/trophy.svg
new file mode 100644
index 0000000..00457c3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/trophy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tropical_drink.svg b/src/shared/assets/icons/emoji/tropical_drink.svg
new file mode 100644
index 0000000..1c4db46
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tropical_drink.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tropical_fish.svg b/src/shared/assets/icons/emoji/tropical_fish.svg
new file mode 100644
index 0000000..ccc11c4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tropical_fish.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/truck.svg b/src/shared/assets/icons/emoji/truck.svg
new file mode 100644
index 0000000..7441d1b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/truck.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/trumpet.svg b/src/shared/assets/icons/emoji/trumpet.svg
new file mode 100644
index 0000000..454ab78
--- /dev/null
+++ b/src/shared/assets/icons/emoji/trumpet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tulip.svg b/src/shared/assets/icons/emoji/tulip.svg
new file mode 100644
index 0000000..86a1a36
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tulip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tumbler_glass.svg b/src/shared/assets/icons/emoji/tumbler_glass.svg
new file mode 100644
index 0000000..27750ea
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tumbler_glass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/turkey.svg b/src/shared/assets/icons/emoji/turkey.svg
new file mode 100644
index 0000000..e9de7de
--- /dev/null
+++ b/src/shared/assets/icons/emoji/turkey.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/turtle.svg b/src/shared/assets/icons/emoji/turtle.svg
new file mode 100644
index 0000000..fe4b659
--- /dev/null
+++ b/src/shared/assets/icons/emoji/turtle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/tv.svg b/src/shared/assets/icons/emoji/tv.svg
new file mode 100644
index 0000000..5f864de
--- /dev/null
+++ b/src/shared/assets/icons/emoji/tv.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/twisted_rightwards_arrows.svg b/src/shared/assets/icons/emoji/twisted_rightwards_arrows.svg
new file mode 100644
index 0000000..43f78bc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/twisted_rightwards_arrows.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/two.svg b/src/shared/assets/icons/emoji/two.svg
new file mode 100644
index 0000000..8d81b8c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/two.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/two_hearts.svg b/src/shared/assets/icons/emoji/two_hearts.svg
new file mode 100644
index 0000000..b4b3216
--- /dev/null
+++ b/src/shared/assets/icons/emoji/two_hearts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/two_men_holding_hands.svg b/src/shared/assets/icons/emoji/two_men_holding_hands.svg
new file mode 100644
index 0000000..87280c1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/two_men_holding_hands.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/two_women_holding_hands.svg b/src/shared/assets/icons/emoji/two_women_holding_hands.svg
new file mode 100644
index 0000000..91a55c3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/two_women_holding_hands.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u5272.svg b/src/shared/assets/icons/emoji/u5272.svg
new file mode 100644
index 0000000..889c027
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u5272.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u5408.svg b/src/shared/assets/icons/emoji/u5408.svg
new file mode 100644
index 0000000..b90b9c4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u5408.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u55b6.svg b/src/shared/assets/icons/emoji/u55b6.svg
new file mode 100644
index 0000000..87a2ceb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u55b6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u6307.svg b/src/shared/assets/icons/emoji/u6307.svg
new file mode 100644
index 0000000..112269d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u6307.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u6708.svg b/src/shared/assets/icons/emoji/u6708.svg
new file mode 100644
index 0000000..459d948
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u6708.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u6709.svg b/src/shared/assets/icons/emoji/u6709.svg
new file mode 100644
index 0000000..93c5998
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u6709.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u6e80.svg b/src/shared/assets/icons/emoji/u6e80.svg
new file mode 100644
index 0000000..86f24ca
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u6e80.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u7121.svg b/src/shared/assets/icons/emoji/u7121.svg
new file mode 100644
index 0000000..9b0253a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u7121.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u7533.svg b/src/shared/assets/icons/emoji/u7533.svg
new file mode 100644
index 0000000..af984cb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u7533.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u7981.svg b/src/shared/assets/icons/emoji/u7981.svg
new file mode 100644
index 0000000..4efe9bb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u7981.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/u7a7a.svg b/src/shared/assets/icons/emoji/u7a7a.svg
new file mode 100644
index 0000000..2e2072c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/u7a7a.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/umbrella.svg b/src/shared/assets/icons/emoji/umbrella.svg
new file mode 100644
index 0000000..6240aa6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/umbrella.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/umbrella2.svg b/src/shared/assets/icons/emoji/umbrella2.svg
new file mode 100644
index 0000000..7c63330
--- /dev/null
+++ b/src/shared/assets/icons/emoji/umbrella2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/unamused.svg b/src/shared/assets/icons/emoji/unamused.svg
new file mode 100644
index 0000000..197089f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/unamused.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/underage.svg b/src/shared/assets/icons/emoji/underage.svg
new file mode 100644
index 0000000..8f877f8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/underage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/unicorn.svg b/src/shared/assets/icons/emoji/unicorn.svg
new file mode 100644
index 0000000..19d9ff1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/unicorn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/united_nations.svg b/src/shared/assets/icons/emoji/united_nations.svg
new file mode 100644
index 0000000..a035a76
--- /dev/null
+++ b/src/shared/assets/icons/emoji/united_nations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/unlock.svg b/src/shared/assets/icons/emoji/unlock.svg
new file mode 100644
index 0000000..cd82ec8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/unlock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/up.svg b/src/shared/assets/icons/emoji/up.svg
new file mode 100644
index 0000000..19ab184
--- /dev/null
+++ b/src/shared/assets/icons/emoji/up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/upside_down.svg b/src/shared/assets/icons/emoji/upside_down.svg
new file mode 100644
index 0000000..ce06237
--- /dev/null
+++ b/src/shared/assets/icons/emoji/upside_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/urn.svg b/src/shared/assets/icons/emoji/urn.svg
new file mode 100644
index 0000000..830c81a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/urn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/v.svg b/src/shared/assets/icons/emoji/v.svg
new file mode 100644
index 0000000..730545f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/v.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/vampire.svg b/src/shared/assets/icons/emoji/vampire.svg
new file mode 100644
index 0000000..642dc3a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/vampire.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/vertical_traffic_light.svg b/src/shared/assets/icons/emoji/vertical_traffic_light.svg
new file mode 100644
index 0000000..252e85c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/vertical_traffic_light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/vhs.svg b/src/shared/assets/icons/emoji/vhs.svg
new file mode 100644
index 0000000..31024ba
--- /dev/null
+++ b/src/shared/assets/icons/emoji/vhs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/vibration_mode.svg b/src/shared/assets/icons/emoji/vibration_mode.svg
new file mode 100644
index 0000000..287d5a9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/vibration_mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/video_camera.svg b/src/shared/assets/icons/emoji/video_camera.svg
new file mode 100644
index 0000000..f1abb59
--- /dev/null
+++ b/src/shared/assets/icons/emoji/video_camera.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/video_game.svg b/src/shared/assets/icons/emoji/video_game.svg
new file mode 100644
index 0000000..4ec08ae
--- /dev/null
+++ b/src/shared/assets/icons/emoji/video_game.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/violin.svg b/src/shared/assets/icons/emoji/violin.svg
new file mode 100644
index 0000000..efb7d5d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/violin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/virgo.svg b/src/shared/assets/icons/emoji/virgo.svg
new file mode 100644
index 0000000..98ad1a8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/virgo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/volcano.svg b/src/shared/assets/icons/emoji/volcano.svg
new file mode 100644
index 0000000..88d989d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/volcano.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/volleyball.svg b/src/shared/assets/icons/emoji/volleyball.svg
new file mode 100644
index 0000000..b23cfc3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/volleyball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/vs.svg b/src/shared/assets/icons/emoji/vs.svg
new file mode 100644
index 0000000..2d36646
--- /dev/null
+++ b/src/shared/assets/icons/emoji/vs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/vulcan.svg b/src/shared/assets/icons/emoji/vulcan.svg
new file mode 100644
index 0000000..4b834f8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/vulcan.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/waffle.svg b/src/shared/assets/icons/emoji/waffle.svg
new file mode 100644
index 0000000..cc92a9d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/waffle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wales.svg b/src/shared/assets/icons/emoji/wales.svg
new file mode 100644
index 0000000..a832676
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wales.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/waning_crescent_moon.svg b/src/shared/assets/icons/emoji/waning_crescent_moon.svg
new file mode 100644
index 0000000..bad95d5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/waning_crescent_moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/waning_gibbous_moon.svg b/src/shared/assets/icons/emoji/waning_gibbous_moon.svg
new file mode 100644
index 0000000..9cbc981
--- /dev/null
+++ b/src/shared/assets/icons/emoji/waning_gibbous_moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/warning.svg b/src/shared/assets/icons/emoji/warning.svg
new file mode 100644
index 0000000..b9ee297
--- /dev/null
+++ b/src/shared/assets/icons/emoji/warning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wastebasket.svg b/src/shared/assets/icons/emoji/wastebasket.svg
new file mode 100644
index 0000000..2669507
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wastebasket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/watch.svg b/src/shared/assets/icons/emoji/watch.svg
new file mode 100644
index 0000000..53e6f6e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/watch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/water_buffalo.svg b/src/shared/assets/icons/emoji/water_buffalo.svg
new file mode 100644
index 0000000..33d0009
--- /dev/null
+++ b/src/shared/assets/icons/emoji/water_buffalo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/watermelon.svg b/src/shared/assets/icons/emoji/watermelon.svg
new file mode 100644
index 0000000..0f5ec06
--- /dev/null
+++ b/src/shared/assets/icons/emoji/watermelon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wave.svg b/src/shared/assets/icons/emoji/wave.svg
new file mode 100644
index 0000000..8942c68
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wave.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wavy_dash.svg b/src/shared/assets/icons/emoji/wavy_dash.svg
new file mode 100644
index 0000000..8ea1141
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wavy_dash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/waxing_crescent_moon.svg b/src/shared/assets/icons/emoji/waxing_crescent_moon.svg
new file mode 100644
index 0000000..d3bb1a7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/waxing_crescent_moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/waxing_gibbous_moon.svg b/src/shared/assets/icons/emoji/waxing_gibbous_moon.svg
new file mode 100644
index 0000000..90488ed
--- /dev/null
+++ b/src/shared/assets/icons/emoji/waxing_gibbous_moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wc.svg b/src/shared/assets/icons/emoji/wc.svg
new file mode 100644
index 0000000..aad724c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/weary.svg b/src/shared/assets/icons/emoji/weary.svg
new file mode 100644
index 0000000..d367d48
--- /dev/null
+++ b/src/shared/assets/icons/emoji/weary.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wedding.svg b/src/shared/assets/icons/emoji/wedding.svg
new file mode 100644
index 0000000..974ddac
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wedding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/whale.svg b/src/shared/assets/icons/emoji/whale.svg
new file mode 100644
index 0000000..f00ea10
--- /dev/null
+++ b/src/shared/assets/icons/emoji/whale.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/whale2.svg b/src/shared/assets/icons/emoji/whale2.svg
new file mode 100644
index 0000000..8bf0a53
--- /dev/null
+++ b/src/shared/assets/icons/emoji/whale2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wheel_of_dharma.svg b/src/shared/assets/icons/emoji/wheel_of_dharma.svg
new file mode 100644
index 0000000..a00bf1d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wheel_of_dharma.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wheelchair.svg b/src/shared/assets/icons/emoji/wheelchair.svg
new file mode 100644
index 0000000..b1d1c42
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wheelchair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_check_mark.svg b/src/shared/assets/icons/emoji/white_check_mark.svg
new file mode 100644
index 0000000..9817a09
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_check_mark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_circle.svg b/src/shared/assets/icons/emoji/white_circle.svg
new file mode 100644
index 0000000..60b9bbc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_flower.svg b/src/shared/assets/icons/emoji/white_flower.svg
new file mode 100644
index 0000000..7f8b528
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_flower.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_heart.svg b/src/shared/assets/icons/emoji/white_heart.svg
new file mode 100644
index 0000000..7deb0cd
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_large_square.svg b/src/shared/assets/icons/emoji/white_large_square.svg
new file mode 100644
index 0000000..a40e12e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_large_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_medium_small_square.svg b/src/shared/assets/icons/emoji/white_medium_small_square.svg
new file mode 100644
index 0000000..6f73777
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_medium_small_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_medium_square.svg b/src/shared/assets/icons/emoji/white_medium_square.svg
new file mode 100644
index 0000000..eb40d14
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_medium_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_small_square.svg b/src/shared/assets/icons/emoji/white_small_square.svg
new file mode 100644
index 0000000..6d1f796
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_small_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_square_button.svg b/src/shared/assets/icons/emoji/white_square_button.svg
new file mode 100644
index 0000000..13f35b7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_square_button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_sun_cloud.svg b/src/shared/assets/icons/emoji/white_sun_cloud.svg
new file mode 100644
index 0000000..1efae10
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_sun_cloud.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_sun_rain_cloud.svg b/src/shared/assets/icons/emoji/white_sun_rain_cloud.svg
new file mode 100644
index 0000000..3a65ae7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_sun_rain_cloud.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/white_sun_small_cloud.svg b/src/shared/assets/icons/emoji/white_sun_small_cloud.svg
new file mode 100644
index 0000000..8ba8c52
--- /dev/null
+++ b/src/shared/assets/icons/emoji/white_sun_small_cloud.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wilted_rose.svg b/src/shared/assets/icons/emoji/wilted_rose.svg
new file mode 100644
index 0000000..dedff20
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wilted_rose.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wind_blowing_face.svg b/src/shared/assets/icons/emoji/wind_blowing_face.svg
new file mode 100644
index 0000000..7d55457
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wind_blowing_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wind_chime.svg b/src/shared/assets/icons/emoji/wind_chime.svg
new file mode 100644
index 0000000..9aebc79
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wind_chime.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wine_glass.svg b/src/shared/assets/icons/emoji/wine_glass.svg
new file mode 100644
index 0000000..b792531
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wine_glass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wink.svg b/src/shared/assets/icons/emoji/wink.svg
new file mode 100644
index 0000000..1b7bba0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wink.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wolf.svg b/src/shared/assets/icons/emoji/wolf.svg
new file mode 100644
index 0000000..af40205
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wolf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman.svg b/src/shared/assets/icons/emoji/woman.svg
new file mode 100644
index 0000000..4178567
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_artist.svg b/src/shared/assets/icons/emoji/woman_artist.svg
new file mode 100644
index 0000000..6d4807e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_artist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_astronaut.svg b/src/shared/assets/icons/emoji/woman_astronaut.svg
new file mode 100644
index 0000000..c4fdde4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_astronaut.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_bald.svg b/src/shared/assets/icons/emoji/woman_bald.svg
new file mode 100644
index 0000000..3fd1004
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_bald.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_biking.svg b/src/shared/assets/icons/emoji/woman_biking.svg
new file mode 100644
index 0000000..4ecaf72
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_biking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_bouncing_ball.svg b/src/shared/assets/icons/emoji/woman_bouncing_ball.svg
new file mode 100644
index 0000000..f25f03d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_bouncing_ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_bowing.svg b/src/shared/assets/icons/emoji/woman_bowing.svg
new file mode 100644
index 0000000..0545aa2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_bowing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_cartwheeling.svg b/src/shared/assets/icons/emoji/woman_cartwheeling.svg
new file mode 100644
index 0000000..9cec3f9
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_cartwheeling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_climbing.svg b/src/shared/assets/icons/emoji/woman_climbing.svg
new file mode 100644
index 0000000..c65c14a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_climbing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_construction_worker.svg b/src/shared/assets/icons/emoji/woman_construction_worker.svg
new file mode 100644
index 0000000..ecfd1b8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_construction_worker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_cook.svg b/src/shared/assets/icons/emoji/woman_cook.svg
new file mode 100644
index 0000000..962decc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_cook.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_curly_haired.svg b/src/shared/assets/icons/emoji/woman_curly_haired.svg
new file mode 100644
index 0000000..62cc26b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_curly_haired.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_detective.svg b/src/shared/assets/icons/emoji/woman_detective.svg
new file mode 100644
index 0000000..1f92d39
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_detective.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_elf.svg b/src/shared/assets/icons/emoji/woman_elf.svg
new file mode 100644
index 0000000..f452ca7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_elf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_facepalming.svg b/src/shared/assets/icons/emoji/woman_facepalming.svg
new file mode 100644
index 0000000..a31d72b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_facepalming.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_factory_worker.svg b/src/shared/assets/icons/emoji/woman_factory_worker.svg
new file mode 100644
index 0000000..064bfd4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_factory_worker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_fairy.svg b/src/shared/assets/icons/emoji/woman_fairy.svg
new file mode 100644
index 0000000..7a60a49
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_fairy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_farmer.svg b/src/shared/assets/icons/emoji/woman_farmer.svg
new file mode 100644
index 0000000..c8974b5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_farmer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_firefighter.svg b/src/shared/assets/icons/emoji/woman_firefighter.svg
new file mode 100644
index 0000000..cbde12e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_firefighter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_frowning.svg b/src/shared/assets/icons/emoji/woman_frowning.svg
new file mode 100644
index 0000000..e14fb57
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_frowning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_genie.svg b/src/shared/assets/icons/emoji/woman_genie.svg
new file mode 100644
index 0000000..9893e0a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_genie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_gesturing_no.svg b/src/shared/assets/icons/emoji/woman_gesturing_no.svg
new file mode 100644
index 0000000..2e47b67
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_gesturing_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_gesturing_ok.svg b/src/shared/assets/icons/emoji/woman_gesturing_ok.svg
new file mode 100644
index 0000000..ccdb92a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_gesturing_ok.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_getting_face_massage.svg b/src/shared/assets/icons/emoji/woman_getting_face_massage.svg
new file mode 100644
index 0000000..de2053b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_getting_face_massage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_getting_haircut.svg b/src/shared/assets/icons/emoji/woman_getting_haircut.svg
new file mode 100644
index 0000000..8bfab80
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_getting_haircut.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_golfing.svg b/src/shared/assets/icons/emoji/woman_golfing.svg
new file mode 100644
index 0000000..859d12f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_golfing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_guard.svg b/src/shared/assets/icons/emoji/woman_guard.svg
new file mode 100644
index 0000000..e8a3388
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_guard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_health_worker.svg b/src/shared/assets/icons/emoji/woman_health_worker.svg
new file mode 100644
index 0000000..efe2909
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_health_worker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_in_lotus_position.svg b/src/shared/assets/icons/emoji/woman_in_lotus_position.svg
new file mode 100644
index 0000000..8fcb70f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_in_lotus_position.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_in_manual_wheelchair.svg b/src/shared/assets/icons/emoji/woman_in_manual_wheelchair.svg
new file mode 100644
index 0000000..1d6b02c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_in_manual_wheelchair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_in_motorized_wheelchair.svg b/src/shared/assets/icons/emoji/woman_in_motorized_wheelchair.svg
new file mode 100644
index 0000000..6706ec8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_in_motorized_wheelchair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_in_steamy_room.svg b/src/shared/assets/icons/emoji/woman_in_steamy_room.svg
new file mode 100644
index 0000000..f1d0343
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_in_steamy_room.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_judge.svg b/src/shared/assets/icons/emoji/woman_judge.svg
new file mode 100644
index 0000000..e8b489a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_judge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_juggling.svg b/src/shared/assets/icons/emoji/woman_juggling.svg
new file mode 100644
index 0000000..0e3e5e4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_juggling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_kneeling.svg b/src/shared/assets/icons/emoji/woman_kneeling.svg
new file mode 100644
index 0000000..89c9ff4
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_kneeling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_lifting_weights.svg b/src/shared/assets/icons/emoji/woman_lifting_weights.svg
new file mode 100644
index 0000000..1e2ac7f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_lifting_weights.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_mage.svg b/src/shared/assets/icons/emoji/woman_mage.svg
new file mode 100644
index 0000000..d5b31e5
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_mage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_mechanic.svg b/src/shared/assets/icons/emoji/woman_mechanic.svg
new file mode 100644
index 0000000..24b1609
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_mechanic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_mountain_biking.svg b/src/shared/assets/icons/emoji/woman_mountain_biking.svg
new file mode 100644
index 0000000..aaf71dc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_mountain_biking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_office_worker.svg b/src/shared/assets/icons/emoji/woman_office_worker.svg
new file mode 100644
index 0000000..9f41d66
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_office_worker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_pilot.svg b/src/shared/assets/icons/emoji/woman_pilot.svg
new file mode 100644
index 0000000..953b06f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_pilot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_playing_handball.svg b/src/shared/assets/icons/emoji/woman_playing_handball.svg
new file mode 100644
index 0000000..28e86b3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_playing_handball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_playing_water_polo.svg b/src/shared/assets/icons/emoji/woman_playing_water_polo.svg
new file mode 100644
index 0000000..1cca2e7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_playing_water_polo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_police_officer.svg b/src/shared/assets/icons/emoji/woman_police_officer.svg
new file mode 100644
index 0000000..6b0fac2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_police_officer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_pouting.svg b/src/shared/assets/icons/emoji/woman_pouting.svg
new file mode 100644
index 0000000..0bd74db
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_pouting.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_raising_hand.svg b/src/shared/assets/icons/emoji/woman_raising_hand.svg
new file mode 100644
index 0000000..a5ccaa1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_raising_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_red_haired.svg b/src/shared/assets/icons/emoji/woman_red_haired.svg
new file mode 100644
index 0000000..68367e8
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_red_haired.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_rowing_boat.svg b/src/shared/assets/icons/emoji/woman_rowing_boat.svg
new file mode 100644
index 0000000..8e0c5ad
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_rowing_boat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_running.svg b/src/shared/assets/icons/emoji/woman_running.svg
new file mode 100644
index 0000000..9acdb7a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_running.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_scientist.svg b/src/shared/assets/icons/emoji/woman_scientist.svg
new file mode 100644
index 0000000..9597ebc
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_scientist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_shrugging.svg b/src/shared/assets/icons/emoji/woman_shrugging.svg
new file mode 100644
index 0000000..f78db07
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_shrugging.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_singer.svg b/src/shared/assets/icons/emoji/woman_singer.svg
new file mode 100644
index 0000000..8aa5e4c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_singer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_standing.svg b/src/shared/assets/icons/emoji/woman_standing.svg
new file mode 100644
index 0000000..1b8bfc3
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_standing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_student.svg b/src/shared/assets/icons/emoji/woman_student.svg
new file mode 100644
index 0000000..47ad3e7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_student.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_superhero.svg b/src/shared/assets/icons/emoji/woman_superhero.svg
new file mode 100644
index 0000000..120097e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_superhero.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_supervillain.svg b/src/shared/assets/icons/emoji/woman_supervillain.svg
new file mode 100644
index 0000000..7d6953e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_supervillain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_surfing.svg b/src/shared/assets/icons/emoji/woman_surfing.svg
new file mode 100644
index 0000000..c33ecc7
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_surfing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_swimming.svg b/src/shared/assets/icons/emoji/woman_swimming.svg
new file mode 100644
index 0000000..dfc2cb6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_swimming.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_teacher.svg b/src/shared/assets/icons/emoji/woman_teacher.svg
new file mode 100644
index 0000000..9a3e544
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_teacher.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_technologist.svg b/src/shared/assets/icons/emoji/woman_technologist.svg
new file mode 100644
index 0000000..c69729f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_technologist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_tipping_hand.svg b/src/shared/assets/icons/emoji/woman_tipping_hand.svg
new file mode 100644
index 0000000..7a4864f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_tipping_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_vampire.svg b/src/shared/assets/icons/emoji/woman_vampire.svg
new file mode 100644
index 0000000..53d6dde
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_vampire.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_walking.svg b/src/shared/assets/icons/emoji/woman_walking.svg
new file mode 100644
index 0000000..8e187bf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_walking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_wearing_turban.svg b/src/shared/assets/icons/emoji/woman_wearing_turban.svg
new file mode 100644
index 0000000..9fe3052
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_wearing_turban.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_white_haired.svg b/src/shared/assets/icons/emoji/woman_white_haired.svg
new file mode 100644
index 0000000..1ce720e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_white_haired.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_with_headscarf.svg b/src/shared/assets/icons/emoji/woman_with_headscarf.svg
new file mode 100644
index 0000000..a650fee
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_with_headscarf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_with_probing_cane.svg b/src/shared/assets/icons/emoji/woman_with_probing_cane.svg
new file mode 100644
index 0000000..fe55587
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_with_probing_cane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woman_zombie.svg b/src/shared/assets/icons/emoji/woman_zombie.svg
new file mode 100644
index 0000000..cac9ccf
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woman_zombie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/womans_clothes.svg b/src/shared/assets/icons/emoji/womans_clothes.svg
new file mode 100644
index 0000000..9d6306c
--- /dev/null
+++ b/src/shared/assets/icons/emoji/womans_clothes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/womans_flat_shoe.svg b/src/shared/assets/icons/emoji/womans_flat_shoe.svg
new file mode 100644
index 0000000..2206307
--- /dev/null
+++ b/src/shared/assets/icons/emoji/womans_flat_shoe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/womans_hat.svg b/src/shared/assets/icons/emoji/womans_hat.svg
new file mode 100644
index 0000000..4b64744
--- /dev/null
+++ b/src/shared/assets/icons/emoji/womans_hat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/women_with_bunny_ears_partying.svg b/src/shared/assets/icons/emoji/women_with_bunny_ears_partying.svg
new file mode 100644
index 0000000..7c7fe7d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/women_with_bunny_ears_partying.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/women_wrestling.svg b/src/shared/assets/icons/emoji/women_wrestling.svg
new file mode 100644
index 0000000..9abd833
--- /dev/null
+++ b/src/shared/assets/icons/emoji/women_wrestling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/womens.svg b/src/shared/assets/icons/emoji/womens.svg
new file mode 100644
index 0000000..d73ed94
--- /dev/null
+++ b/src/shared/assets/icons/emoji/womens.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/woozy_face.svg b/src/shared/assets/icons/emoji/woozy_face.svg
new file mode 100644
index 0000000..87bb859
--- /dev/null
+++ b/src/shared/assets/icons/emoji/woozy_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/worried.svg b/src/shared/assets/icons/emoji/worried.svg
new file mode 100644
index 0000000..c5cec95
--- /dev/null
+++ b/src/shared/assets/icons/emoji/worried.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/wrench.svg b/src/shared/assets/icons/emoji/wrench.svg
new file mode 100644
index 0000000..73a06d0
--- /dev/null
+++ b/src/shared/assets/icons/emoji/wrench.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/writing_hand.svg b/src/shared/assets/icons/emoji/writing_hand.svg
new file mode 100644
index 0000000..f138584
--- /dev/null
+++ b/src/shared/assets/icons/emoji/writing_hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/x.svg b/src/shared/assets/icons/emoji/x.svg
new file mode 100644
index 0000000..4d76e24
--- /dev/null
+++ b/src/shared/assets/icons/emoji/x.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/yarn.svg b/src/shared/assets/icons/emoji/yarn.svg
new file mode 100644
index 0000000..f402fd2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/yarn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/yawning_face.svg b/src/shared/assets/icons/emoji/yawning_face.svg
new file mode 100644
index 0000000..26444c6
--- /dev/null
+++ b/src/shared/assets/icons/emoji/yawning_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/yellow_circle.svg b/src/shared/assets/icons/emoji/yellow_circle.svg
new file mode 100644
index 0000000..5c05d43
--- /dev/null
+++ b/src/shared/assets/icons/emoji/yellow_circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/yellow_heart.svg b/src/shared/assets/icons/emoji/yellow_heart.svg
new file mode 100644
index 0000000..e57e244
--- /dev/null
+++ b/src/shared/assets/icons/emoji/yellow_heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/yellow_square.svg b/src/shared/assets/icons/emoji/yellow_square.svg
new file mode 100644
index 0000000..64795b1
--- /dev/null
+++ b/src/shared/assets/icons/emoji/yellow_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/yen.svg b/src/shared/assets/icons/emoji/yen.svg
new file mode 100644
index 0000000..5db237d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/yen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/yin_yang.svg b/src/shared/assets/icons/emoji/yin_yang.svg
new file mode 100644
index 0000000..e0aff80
--- /dev/null
+++ b/src/shared/assets/icons/emoji/yin_yang.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/yo_yo.svg b/src/shared/assets/icons/emoji/yo_yo.svg
new file mode 100644
index 0000000..fc9af9b
--- /dev/null
+++ b/src/shared/assets/icons/emoji/yo_yo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/yum.svg b/src/shared/assets/icons/emoji/yum.svg
new file mode 100644
index 0000000..2c962bb
--- /dev/null
+++ b/src/shared/assets/icons/emoji/yum.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/zany_face.svg b/src/shared/assets/icons/emoji/zany_face.svg
new file mode 100644
index 0000000..baf58f2
--- /dev/null
+++ b/src/shared/assets/icons/emoji/zany_face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/zap.svg b/src/shared/assets/icons/emoji/zap.svg
new file mode 100644
index 0000000..9d9ae7d
--- /dev/null
+++ b/src/shared/assets/icons/emoji/zap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/zebra.svg b/src/shared/assets/icons/emoji/zebra.svg
new file mode 100644
index 0000000..2cb4b9e
--- /dev/null
+++ b/src/shared/assets/icons/emoji/zebra.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/zero.svg b/src/shared/assets/icons/emoji/zero.svg
new file mode 100644
index 0000000..8794b3a
--- /dev/null
+++ b/src/shared/assets/icons/emoji/zero.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/zipper_mouth.svg b/src/shared/assets/icons/emoji/zipper_mouth.svg
new file mode 100644
index 0000000..873621f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/zipper_mouth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/zombie.svg b/src/shared/assets/icons/emoji/zombie.svg
new file mode 100644
index 0000000..596a02f
--- /dev/null
+++ b/src/shared/assets/icons/emoji/zombie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/emoji/zzz.svg b/src/shared/assets/icons/emoji/zzz.svg
new file mode 100644
index 0000000..b713e97
--- /dev/null
+++ b/src/shared/assets/icons/emoji/zzz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/feature/chat.svg b/src/shared/assets/icons/feature/chat.svg
new file mode 100644
index 0000000..0a75d6e
--- /dev/null
+++ b/src/shared/assets/icons/feature/chat.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/feature/upload-icon.svg b/src/shared/assets/icons/feature/upload-icon.svg
new file mode 100644
index 0000000..b70d4c8
--- /dev/null
+++ b/src/shared/assets/icons/feature/upload-icon.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/index.ts b/src/shared/assets/icons/index.ts
new file mode 100644
index 0000000..4af6f71
--- /dev/null
+++ b/src/shared/assets/icons/index.ts
@@ -0,0 +1 @@
+export default import.meta.glob('./**/*.svg', { query: '?raw', import: 'default' })
diff --git a/src/shared/assets/icons/logos/patchcord/combination.svg b/src/shared/assets/icons/logos/patchcord/combination.svg
new file mode 100644
index 0000000..a13a29e
--- /dev/null
+++ b/src/shared/assets/icons/logos/patchcord/combination.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/shared/assets/icons/logos/patchcord/symbol.svg b/src/shared/assets/icons/logos/patchcord/symbol.svg
new file mode 100644
index 0000000..999429b
--- /dev/null
+++ b/src/shared/assets/icons/logos/patchcord/symbol.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/logos/patchcord/text.svg b/src/shared/assets/icons/logos/patchcord/text.svg
new file mode 100644
index 0000000..d75267e
--- /dev/null
+++ b/src/shared/assets/icons/logos/patchcord/text.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/shared/assets/icons/logos/statuspage.svg b/src/shared/assets/icons/logos/statuspage.svg
new file mode 100644
index 0000000..e37bb82
--- /dev/null
+++ b/src/shared/assets/icons/logos/statuspage.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/logos/telegram.svg b/src/shared/assets/icons/logos/telegram.svg
new file mode 100644
index 0000000..f9d30d0
--- /dev/null
+++ b/src/shared/assets/icons/logos/telegram.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/bell.svg b/src/shared/assets/icons/misc/bell.svg
new file mode 100644
index 0000000..9c64600
--- /dev/null
+++ b/src/shared/assets/icons/misc/bell.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/call-end.svg b/src/shared/assets/icons/misc/call-end.svg
new file mode 100644
index 0000000..f0d74d0
--- /dev/null
+++ b/src/shared/assets/icons/misc/call-end.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/shared/assets/icons/misc/chat-bubbles.svg b/src/shared/assets/icons/misc/chat-bubbles.svg
new file mode 100644
index 0000000..597e128
--- /dev/null
+++ b/src/shared/assets/icons/misc/chat-bubbles.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/check-circle.svg b/src/shared/assets/icons/misc/check-circle.svg
new file mode 100644
index 0000000..4e9ada9
--- /dev/null
+++ b/src/shared/assets/icons/misc/check-circle.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/check.svg b/src/shared/assets/icons/misc/check.svg
new file mode 100644
index 0000000..63e45e7
--- /dev/null
+++ b/src/shared/assets/icons/misc/check.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/shared/assets/icons/misc/chevron-down.svg b/src/shared/assets/icons/misc/chevron-down.svg
new file mode 100644
index 0000000..434214d
--- /dev/null
+++ b/src/shared/assets/icons/misc/chevron-down.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/shared/assets/icons/misc/chevron-right.svg b/src/shared/assets/icons/misc/chevron-right.svg
new file mode 100644
index 0000000..f5bfe19
--- /dev/null
+++ b/src/shared/assets/icons/misc/chevron-right.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/chevron-up.svg b/src/shared/assets/icons/misc/chevron-up.svg
new file mode 100644
index 0000000..2acf35b
--- /dev/null
+++ b/src/shared/assets/icons/misc/chevron-up.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/shared/assets/icons/misc/compass-circle.svg b/src/shared/assets/icons/misc/compass-circle.svg
new file mode 100644
index 0000000..abee3cf
--- /dev/null
+++ b/src/shared/assets/icons/misc/compass-circle.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/cross.svg b/src/shared/assets/icons/misc/cross.svg
new file mode 100644
index 0000000..282e913
--- /dev/null
+++ b/src/shared/assets/icons/misc/cross.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/dot.svg b/src/shared/assets/icons/misc/dot.svg
new file mode 100644
index 0000000..751b413
--- /dev/null
+++ b/src/shared/assets/icons/misc/dot.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/dots-vertical.svg b/src/shared/assets/icons/misc/dots-vertical.svg
new file mode 100644
index 0000000..bd6c973
--- /dev/null
+++ b/src/shared/assets/icons/misc/dots-vertical.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/shared/assets/icons/misc/drawer.svg b/src/shared/assets/icons/misc/drawer.svg
new file mode 100644
index 0000000..78d10df
--- /dev/null
+++ b/src/shared/assets/icons/misc/drawer.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/emoji.svg b/src/shared/assets/icons/misc/emoji.svg
new file mode 100644
index 0000000..fd0bbc7
--- /dev/null
+++ b/src/shared/assets/icons/misc/emoji.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/shared/assets/icons/misc/gear.svg b/src/shared/assets/icons/misc/gear.svg
new file mode 100644
index 0000000..340304c
--- /dev/null
+++ b/src/shared/assets/icons/misc/gear.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/assets/icons/misc/gif.svg b/src/shared/assets/icons/misc/gif.svg
new file mode 100644
index 0000000..d81c0f6
--- /dev/null
+++ b/src/shared/assets/icons/misc/gif.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/shared/assets/icons/misc/greeting.svg b/src/shared/assets/icons/misc/greeting.svg
new file mode 100644
index 0000000..71f8620
--- /dev/null
+++ b/src/shared/assets/icons/misc/greeting.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/hashtag.svg b/src/shared/assets/icons/misc/hashtag.svg
new file mode 100644
index 0000000..06d1d2b
--- /dev/null
+++ b/src/shared/assets/icons/misc/hashtag.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/headset-off.svg b/src/shared/assets/icons/misc/headset-off.svg
new file mode 100644
index 0000000..b081880
--- /dev/null
+++ b/src/shared/assets/icons/misc/headset-off.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/assets/icons/misc/headset.svg b/src/shared/assets/icons/misc/headset.svg
new file mode 100644
index 0000000..56282c8
--- /dev/null
+++ b/src/shared/assets/icons/misc/headset.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/assets/icons/misc/info-circle.svg b/src/shared/assets/icons/misc/info-circle.svg
new file mode 100644
index 0000000..4f3b447
--- /dev/null
+++ b/src/shared/assets/icons/misc/info-circle.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/magnifier.svg b/src/shared/assets/icons/misc/magnifier.svg
new file mode 100644
index 0000000..ffc8466
--- /dev/null
+++ b/src/shared/assets/icons/misc/magnifier.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/shared/assets/icons/misc/message.svg b/src/shared/assets/icons/misc/message.svg
new file mode 100644
index 0000000..74c1db1
--- /dev/null
+++ b/src/shared/assets/icons/misc/message.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/shared/assets/icons/misc/mic-off.svg b/src/shared/assets/icons/misc/mic-off.svg
new file mode 100644
index 0000000..7ee7dbf
--- /dev/null
+++ b/src/shared/assets/icons/misc/mic-off.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/assets/icons/misc/mic.svg b/src/shared/assets/icons/misc/mic.svg
new file mode 100644
index 0000000..075fc54
--- /dev/null
+++ b/src/shared/assets/icons/misc/mic.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/assets/icons/misc/pin.svg b/src/shared/assets/icons/misc/pin.svg
new file mode 100644
index 0000000..a948aad
--- /dev/null
+++ b/src/shared/assets/icons/misc/pin.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/plus-circle.svg b/src/shared/assets/icons/misc/plus-circle.svg
new file mode 100644
index 0000000..15e3288
--- /dev/null
+++ b/src/shared/assets/icons/misc/plus-circle.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/plus-large.svg b/src/shared/assets/icons/misc/plus-large.svg
new file mode 100644
index 0000000..110c623
--- /dev/null
+++ b/src/shared/assets/icons/misc/plus-large.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/plus.svg b/src/shared/assets/icons/misc/plus.svg
new file mode 100644
index 0000000..6ba6f22
--- /dev/null
+++ b/src/shared/assets/icons/misc/plus.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/question-circle.svg b/src/shared/assets/icons/misc/question-circle.svg
new file mode 100644
index 0000000..e1fcc7a
--- /dev/null
+++ b/src/shared/assets/icons/misc/question-circle.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/speaker.svg b/src/shared/assets/icons/misc/speaker.svg
new file mode 100644
index 0000000..d98b20c
--- /dev/null
+++ b/src/shared/assets/icons/misc/speaker.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/sticker.svg b/src/shared/assets/icons/misc/sticker.svg
new file mode 100644
index 0000000..b356f10
--- /dev/null
+++ b/src/shared/assets/icons/misc/sticker.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/shared/assets/icons/misc/user-add.svg b/src/shared/assets/icons/misc/user-add.svg
new file mode 100644
index 0000000..980400d
--- /dev/null
+++ b/src/shared/assets/icons/misc/user-add.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/users-add.svg b/src/shared/assets/icons/misc/users-add.svg
new file mode 100644
index 0000000..7f82bed
--- /dev/null
+++ b/src/shared/assets/icons/misc/users-add.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/users.svg b/src/shared/assets/icons/misc/users.svg
new file mode 100644
index 0000000..2bea07d
--- /dev/null
+++ b/src/shared/assets/icons/misc/users.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/misc/video-off.svg b/src/shared/assets/icons/misc/video-off.svg
new file mode 100644
index 0000000..1b4a05c
--- /dev/null
+++ b/src/shared/assets/icons/misc/video-off.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/assets/icons/misc/video.svg b/src/shared/assets/icons/misc/video.svg
new file mode 100644
index 0000000..c404624
--- /dev/null
+++ b/src/shared/assets/icons/misc/video.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/shared/assets/icons/pixel/book.svg b/src/shared/assets/icons/pixel/book.svg
new file mode 100644
index 0000000..00ae81f
--- /dev/null
+++ b/src/shared/assets/icons/pixel/book.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/brush.svg b/src/shared/assets/icons/pixel/brush.svg
new file mode 100644
index 0000000..2173e78
--- /dev/null
+++ b/src/shared/assets/icons/pixel/brush.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/couch.svg b/src/shared/assets/icons/pixel/couch.svg
new file mode 100644
index 0000000..0e57b23
--- /dev/null
+++ b/src/shared/assets/icons/pixel/couch.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/download.svg b/src/shared/assets/icons/pixel/download.svg
new file mode 100644
index 0000000..e2424b3
--- /dev/null
+++ b/src/shared/assets/icons/pixel/download.svg
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/gamepad.svg b/src/shared/assets/icons/pixel/gamepad.svg
new file mode 100644
index 0000000..028437d
--- /dev/null
+++ b/src/shared/assets/icons/pixel/gamepad.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/globe.svg b/src/shared/assets/icons/pixel/globe.svg
new file mode 100644
index 0000000..bc3fa22
--- /dev/null
+++ b/src/shared/assets/icons/pixel/globe.svg
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/heart.svg b/src/shared/assets/icons/pixel/heart.svg
new file mode 100644
index 0000000..27e6bc8
--- /dev/null
+++ b/src/shared/assets/icons/pixel/heart.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/leaf.svg b/src/shared/assets/icons/pixel/leaf.svg
new file mode 100644
index 0000000..2ff6294
--- /dev/null
+++ b/src/shared/assets/icons/pixel/leaf.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/mailbox.svg b/src/shared/assets/icons/pixel/mailbox.svg
new file mode 100644
index 0000000..8d34ba8
--- /dev/null
+++ b/src/shared/assets/icons/pixel/mailbox.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/palette.svg b/src/shared/assets/icons/pixel/palette.svg
new file mode 100644
index 0000000..bacab89
--- /dev/null
+++ b/src/shared/assets/icons/pixel/palette.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/paper-plane.svg b/src/shared/assets/icons/pixel/paper-plane.svg
new file mode 100644
index 0000000..3cf1b6c
--- /dev/null
+++ b/src/shared/assets/icons/pixel/paper-plane.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/peach.svg b/src/shared/assets/icons/pixel/peach.svg
new file mode 100644
index 0000000..0a45d48
--- /dev/null
+++ b/src/shared/assets/icons/pixel/peach.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/icons/pixel/pencil.svg b/src/shared/assets/icons/pixel/pencil.svg
new file mode 100644
index 0000000..b33009d
--- /dev/null
+++ b/src/shared/assets/icons/pixel/pencil.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/assets/images/auth/background.svg b/src/shared/assets/images/auth/background.svg
new file mode 100644
index 0000000..ef28c34
--- /dev/null
+++ b/src/shared/assets/images/auth/background.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/shared/assets/images/patchy_waving.svg b/src/shared/assets/images/patchy_waving.svg
new file mode 100644
index 0000000..7ccc5cf
--- /dev/null
+++ b/src/shared/assets/images/patchy_waving.svg
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/assets/images/user/default-avatar.png b/src/shared/assets/images/user/default-avatar.png
new file mode 100644
index 0000000..2b8f252
Binary files /dev/null and b/src/shared/assets/images/user/default-avatar.png differ
diff --git a/src/shared/assets/sounds/bop_message1.mp3 b/src/shared/assets/sounds/bop_message1.mp3
new file mode 100644
index 0000000..a98f1c7
Binary files /dev/null and b/src/shared/assets/sounds/bop_message1.mp3 differ
diff --git a/src/shared/assets/sounds/call_calling.mp3 b/src/shared/assets/sounds/call_calling.mp3
new file mode 100644
index 0000000..5a00cd0
Binary files /dev/null and b/src/shared/assets/sounds/call_calling.mp3 differ
diff --git a/src/shared/assets/sounds/call_ringing.mp3 b/src/shared/assets/sounds/call_ringing.mp3
new file mode 100644
index 0000000..6c576c2
Binary files /dev/null and b/src/shared/assets/sounds/call_ringing.mp3 differ
diff --git a/src/shared/assets/sounds/camera_off.mp3 b/src/shared/assets/sounds/camera_off.mp3
new file mode 100644
index 0000000..f6731fb
Binary files /dev/null and b/src/shared/assets/sounds/camera_off.mp3 differ
diff --git a/src/shared/assets/sounds/camera_on.mp3 b/src/shared/assets/sounds/camera_on.mp3
new file mode 100644
index 0000000..65ad834
Binary files /dev/null and b/src/shared/assets/sounds/camera_on.mp3 differ
diff --git a/src/shared/assets/sounds/deafen.mp3 b/src/shared/assets/sounds/deafen.mp3
new file mode 100644
index 0000000..8168123
Binary files /dev/null and b/src/shared/assets/sounds/deafen.mp3 differ
diff --git a/src/shared/assets/sounds/disconnect.mp3 b/src/shared/assets/sounds/disconnect.mp3
new file mode 100644
index 0000000..c58e9ed
Binary files /dev/null and b/src/shared/assets/sounds/disconnect.mp3 differ
diff --git a/src/shared/assets/sounds/index.ts b/src/shared/assets/sounds/index.ts
new file mode 100644
index 0000000..d4fcd5d
--- /dev/null
+++ b/src/shared/assets/sounds/index.ts
@@ -0,0 +1,15 @@
+const sounds = import.meta.glob('./**/*.{mp3,wav,ogg}', { eager: true, import: 'default' })
+
+export const SOUND_MAP: Record = Object.entries(sounds).reduce(
+ (acc, [path, url]) => {
+ const fileName = path.split('/').pop()?.split('.')[0]
+
+ if (fileName && typeof url === 'string') {
+ acc[fileName] = url
+ }
+ return acc
+ },
+ {} as Record,
+)
+
+export type SoundName = keyof typeof SOUND_MAP
diff --git a/src/shared/assets/sounds/mention1.mp3 b/src/shared/assets/sounds/mention1.mp3
new file mode 100644
index 0000000..ac36dad
Binary files /dev/null and b/src/shared/assets/sounds/mention1.mp3 differ
diff --git a/src/shared/assets/sounds/mention2.mp3 b/src/shared/assets/sounds/mention2.mp3
new file mode 100644
index 0000000..fe406e2
Binary files /dev/null and b/src/shared/assets/sounds/mention2.mp3 differ
diff --git a/src/shared/assets/sounds/mention3.mp3 b/src/shared/assets/sounds/mention3.mp3
new file mode 100644
index 0000000..07703fb
Binary files /dev/null and b/src/shared/assets/sounds/mention3.mp3 differ
diff --git a/src/shared/assets/sounds/message1.mp3 b/src/shared/assets/sounds/message1.mp3
new file mode 100644
index 0000000..30fb531
Binary files /dev/null and b/src/shared/assets/sounds/message1.mp3 differ
diff --git a/src/shared/assets/sounds/message2.mp3 b/src/shared/assets/sounds/message2.mp3
new file mode 100644
index 0000000..c8f52cf
Binary files /dev/null and b/src/shared/assets/sounds/message2.mp3 differ
diff --git a/src/shared/assets/sounds/message3.mp3 b/src/shared/assets/sounds/message3.mp3
new file mode 100644
index 0000000..cd2cbf0
Binary files /dev/null and b/src/shared/assets/sounds/message3.mp3 differ
diff --git a/src/shared/assets/sounds/mute.mp3 b/src/shared/assets/sounds/mute.mp3
new file mode 100644
index 0000000..b87de43
Binary files /dev/null and b/src/shared/assets/sounds/mute.mp3 differ
diff --git a/src/shared/assets/sounds/ptt_start.mp3 b/src/shared/assets/sounds/ptt_start.mp3
new file mode 100644
index 0000000..38c8ec7
Binary files /dev/null and b/src/shared/assets/sounds/ptt_start.mp3 differ
diff --git a/src/shared/assets/sounds/ptt_stop.mp3 b/src/shared/assets/sounds/ptt_stop.mp3
new file mode 100644
index 0000000..d1706a8
Binary files /dev/null and b/src/shared/assets/sounds/ptt_stop.mp3 differ
diff --git a/src/shared/assets/sounds/reconnect.mp3 b/src/shared/assets/sounds/reconnect.mp3
new file mode 100644
index 0000000..38e8566
Binary files /dev/null and b/src/shared/assets/sounds/reconnect.mp3 differ
diff --git a/src/shared/assets/sounds/stream_ended.mp3 b/src/shared/assets/sounds/stream_ended.mp3
new file mode 100644
index 0000000..b1d009c
Binary files /dev/null and b/src/shared/assets/sounds/stream_ended.mp3 differ
diff --git a/src/shared/assets/sounds/stream_started.mp3 b/src/shared/assets/sounds/stream_started.mp3
new file mode 100644
index 0000000..444fce8
Binary files /dev/null and b/src/shared/assets/sounds/stream_started.mp3 differ
diff --git a/src/shared/assets/sounds/stream_user_joined.mp3 b/src/shared/assets/sounds/stream_user_joined.mp3
new file mode 100644
index 0000000..fd51c45
Binary files /dev/null and b/src/shared/assets/sounds/stream_user_joined.mp3 differ
diff --git a/src/shared/assets/sounds/stream_user_left.mp3 b/src/shared/assets/sounds/stream_user_left.mp3
new file mode 100644
index 0000000..2ef04db
Binary files /dev/null and b/src/shared/assets/sounds/stream_user_left.mp3 differ
diff --git a/src/shared/assets/sounds/undeafen.mp3 b/src/shared/assets/sounds/undeafen.mp3
new file mode 100644
index 0000000..797c56e
Binary files /dev/null and b/src/shared/assets/sounds/undeafen.mp3 differ
diff --git a/src/shared/assets/sounds/unmute.mp3 b/src/shared/assets/sounds/unmute.mp3
new file mode 100644
index 0000000..fd78422
Binary files /dev/null and b/src/shared/assets/sounds/unmute.mp3 differ
diff --git a/src/shared/assets/sounds/user_join.mp3 b/src/shared/assets/sounds/user_join.mp3
new file mode 100644
index 0000000..3e030fa
Binary files /dev/null and b/src/shared/assets/sounds/user_join.mp3 differ
diff --git a/src/shared/assets/sounds/user_leave.mp3 b/src/shared/assets/sounds/user_leave.mp3
new file mode 100644
index 0000000..1ec4a80
Binary files /dev/null and b/src/shared/assets/sounds/user_leave.mp3 differ
diff --git a/src/shared/assets/sounds/user_moved.mp3 b/src/shared/assets/sounds/user_moved.mp3
new file mode 100644
index 0000000..1dfb081
Binary files /dev/null and b/src/shared/assets/sounds/user_moved.mp3 differ
diff --git a/src/shared/assets/sprites/custom-emojis-grayscale.png b/src/shared/assets/sprites/custom-emojis-grayscale.png
new file mode 100644
index 0000000..7e304af
Binary files /dev/null and b/src/shared/assets/sprites/custom-emojis-grayscale.png differ
diff --git a/src/shared/assets/sprites/custom-emojis.png b/src/shared/assets/sprites/custom-emojis.png
new file mode 100644
index 0000000..fd8472a
Binary files /dev/null and b/src/shared/assets/sprites/custom-emojis.png differ
diff --git a/src/shared/assets/sprites/emojis.png b/src/shared/assets/sprites/emojis.png
new file mode 100644
index 0000000..c87ad8d
Binary files /dev/null and b/src/shared/assets/sprites/emojis.png differ
diff --git a/src/shared/assets/videos/patchcord-spinner.webm b/src/shared/assets/videos/patchcord-spinner.webm
new file mode 100644
index 0000000..b61a844
Binary files /dev/null and b/src/shared/assets/videos/patchcord-spinner.webm differ
diff --git a/src/shared/composables/index.ts b/src/shared/composables/index.ts
new file mode 100644
index 0000000..41c008d
--- /dev/null
+++ b/src/shared/composables/index.ts
@@ -0,0 +1 @@
+export { useSound } from './useSound'
diff --git a/src/shared/composables/useMediaDevices.ts b/src/shared/composables/useMediaDevices.ts
new file mode 100644
index 0000000..e8e033f
--- /dev/null
+++ b/src/shared/composables/useMediaDevices.ts
@@ -0,0 +1,62 @@
+import { ref, onMounted, onUnmounted } from 'vue'
+
+export const useMediaDevices = () => {
+ const audioInputs = ref([])
+ const audioOutputs = ref([])
+ const hasPermissions = ref(false)
+
+ const requestAudioPermissions = async () => {
+ try {
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
+ hasPermissions.value = true
+ stream.getTracks().forEach((track) => track.stop())
+ await updateDeviceList()
+ } catch (error) {
+ console.error('Ошибка доступа к микрофону:', error)
+ hasPermissions.value = false
+ throw error
+ }
+ }
+
+ const updateDeviceList = async () => {
+ try {
+ const devices = await navigator.mediaDevices.enumerateDevices()
+ audioInputs.value = devices.filter((device) => device.kind === 'audioinput')
+ audioOutputs.value = devices.filter((device) => device.kind === 'audiooutput')
+ } catch (error) {
+ console.error('Ошибка при получении списка устройств:', error)
+ }
+ }
+
+ const getAudioStream = async (deviceId?: string): Promise => {
+ const constraints: MediaStreamConstraints = {
+ audio: deviceId ? { deviceId: { ideal: deviceId } } : true,
+ }
+ return await navigator.mediaDevices.getUserMedia(constraints)
+ }
+
+ const handleDeviceChange = () => {
+ updateDeviceList()
+ }
+
+ onMounted(() => {
+ if (navigator.mediaDevices) {
+ navigator.mediaDevices.addEventListener('devicechange', handleDeviceChange)
+ }
+ })
+
+ onUnmounted(() => {
+ if (navigator.mediaDevices) {
+ navigator.mediaDevices.removeEventListener('devicechange', handleDeviceChange)
+ }
+ })
+
+ return {
+ audioInputs,
+ audioOutputs,
+ hasPermissions,
+ requestAudioPermissions,
+ updateDeviceList,
+ getAudioStream,
+ }
+}
diff --git a/src/shared/composables/useSound.ts b/src/shared/composables/useSound.ts
new file mode 100644
index 0000000..39415fe
--- /dev/null
+++ b/src/shared/composables/useSound.ts
@@ -0,0 +1,26 @@
+import { SOUND_MAP, type SoundName } from '@/shared/assets/sounds'
+
+export const useSound = () => {
+ const play = (name: SoundName, options?: { volume?: number; loop?: boolean }) => {
+ const url = SOUND_MAP[name]
+
+ if (!url) {
+ console.error(`Sound "${String(name)}" not found in registry.`)
+ return
+ }
+
+ const audio = new Audio(url)
+ audio.volume = options?.volume ?? 0.5
+ audio.loop = options?.loop ?? false
+
+ audio.play().catch((err) => {
+ if (err.name !== 'NotAllowedError') {
+ console.warn('Playback error:', err)
+ }
+ })
+
+ return audio
+ }
+
+ return { play, availableSounds: Object.keys(SOUND_MAP) }
+}
diff --git a/src/shared/config/api.config.ts b/src/shared/config/api.config.ts
new file mode 100644
index 0000000..6202b29
--- /dev/null
+++ b/src/shared/config/api.config.ts
@@ -0,0 +1,11 @@
+export interface IApiConfig {
+ baseUrl: string
+ timeout: number
+}
+
+const config: IApiConfig = {
+ baseUrl: import.meta.env.VITE_API_URL || 'http://localhost:3000',
+ timeout: 5000,
+}
+
+export default config
diff --git a/src/shared/config/app.config.ts b/src/shared/config/app.config.ts
new file mode 100644
index 0000000..25b8c8d
--- /dev/null
+++ b/src/shared/config/app.config.ts
@@ -0,0 +1,9 @@
+export interface IAppConfig {
+ env: string
+}
+
+const config: IAppConfig = {
+ env: import.meta.env.MODE || 'development',
+}
+
+export default config
diff --git a/src/shared/config/index.ts b/src/shared/config/index.ts
new file mode 100644
index 0000000..189f872
--- /dev/null
+++ b/src/shared/config/index.ts
@@ -0,0 +1,6 @@
+import appConfig from './app.config'
+import apiConfig from './api.config'
+import mediaConfig from './media.config'
+export * from './sprites.config'
+
+export { appConfig, apiConfig, mediaConfig }
diff --git a/src/shared/config/media.config.ts b/src/shared/config/media.config.ts
new file mode 100644
index 0000000..45d7641
--- /dev/null
+++ b/src/shared/config/media.config.ts
@@ -0,0 +1,9 @@
+export interface MediaConfig {
+ mediaUrl: string
+}
+
+const config: MediaConfig = {
+ mediaUrl: import.meta.env.VITE_MEDIA_URL || 'http://localhost:9001',
+}
+
+export default config
diff --git a/src/shared/config/sprites.config.ts b/src/shared/config/sprites.config.ts
new file mode 100644
index 0000000..99467e6
--- /dev/null
+++ b/src/shared/config/sprites.config.ts
@@ -0,0 +1,1949 @@
+import emojiUrl from '@/shared/assets/sprites/emojis.png?url'
+import customEmojiUrl from '@/shared/assets/sprites/custom-emojis.png?url'
+import customEmojiGrayScaleUrl from '@/shared/assets/sprites/custom-emojis-grayscale.png?url'
+
+interface SpriteSheet {
+ url: string
+ sheetSize: { width: number; height: number }
+ spriteSize: number
+ items: Record
+}
+
+export const SpriteConfig: Record = {
+ emoji: {
+ url: emojiUrl,
+ sheetSize: { width: 1680, height: 1560 },
+ spriteSize: 40,
+ items: {
+ '100': [-320, -1040],
+ '1234': [-80, -1120],
+ grinning: [0, 0],
+ smiley: [-40, 0],
+ smile: [-80, 0],
+ grin: [-120, 0],
+ laughing: [-160, 0],
+ face_holding_back_tears: [-200, 0],
+ sweat_smile: [-240, 0],
+ joy: [-280, 0],
+ rofl: [-320, 0],
+ smiling_face_with_tear: [-360, 0],
+ relaxed: [-400, 0],
+ blush: [-440, 0],
+ innocent: [-480, 0],
+ slight_smile: [-520, 0],
+ upside_down: [-560, 0],
+ wink: [-600, 0],
+ relieved: [-640, 0],
+ heart_eyes: [-680, 0],
+ smiling_face_with_3_hearts: [-720, 0],
+ kissing_heart: [-760, 0],
+ kissing: [-800, 0],
+ kissing_smiling_eyes: [-840, 0],
+ kissing_closed_eyes: [-880, 0],
+ yum: [-920, 0],
+ stuck_out_tongue: [-960, 0],
+ stuck_out_tongue_closed_eyes: [-1000, 0],
+ stuck_out_tongue_winking_eye: [-1040, 0],
+ zany_face: [-1080, 0],
+ face_with_raised_eyebrow: [-1120, 0],
+ face_with_monocle: [-1160, 0],
+ nerd: [-1200, 0],
+ sunglasses: [-1240, 0],
+ disguised_face: [-1280, 0],
+ star_struck: [-1320, 0],
+ partying_face: [-1360, 0],
+ smirk: [-1400, 0],
+ unamused: [-1440, 0],
+ disappointed: [-1480, 0],
+ pensive: [-1520, 0],
+ worried: [-1560, 0],
+ confused: [-1600, 0],
+ slight_frown: [-1640, 0],
+ frowning2: [0, -40],
+ persevere: [-40, -40],
+ confounded: [-80, -40],
+ tired_face: [-120, -40],
+ weary: [-160, -40],
+ pleading_face: [-200, -40],
+ cry: [-240, -40],
+ sob: [-280, -40],
+ triumph: [-320, -40],
+ angry: [-360, -40],
+ rage: [-400, -40],
+ face_with_symbols_over_mouth: [-440, -40],
+ grimacing: [-1560, -40],
+ rolling_eyes: [-1600, -40],
+ hushed: [-1640, -40],
+ frowning: [0, -80],
+ anguished: [-40, -80],
+ open_mouth: [-80, -80],
+ astonished: [-120, -80],
+ yawning_face: [-160, -80],
+ sleeping: [-200, -80],
+ drooling_face: [-240, -80],
+ sleepy: [-280, -80],
+ face_exhaling: [-320, -80],
+ dizzy_face: [-360, -80],
+ face_with_spiral_eyes: [-400, -80],
+ zipper_mouth: [-440, -80],
+ woozy_face: [-480, -80],
+ nauseated_face: [-520, -80],
+ face_vomiting: [-560, -80],
+ sneezing_face: [-600, -80],
+ mask: [-640, -80],
+ thermometer_face: [-680, -80],
+ head_bandage: [-720, -80],
+ money_mouth: [-760, -80],
+ cowboy: [-800, -80],
+ smiling_imp: [-840, -80],
+ imp: [-880, -80],
+ japanese_ogre: [-920, -80],
+ japanese_goblin: [-960, -80],
+ clown: [-1000, -80],
+ poop: [-1040, -80],
+ ghost: [-1080, -80],
+ skull: [-1120, -80],
+ skull_crossbones: [-1160, -80],
+ alien: [-1200, -80],
+ space_invader: [-1240, -80],
+ robot: [-1280, -80],
+ jack_o_lantern: [-1320, -80],
+ smiley_cat: [-1360, -80],
+ smile_cat: [-1400, -80],
+ joy_cat: [-1440, -80],
+ heart_eyes_cat: [-1480, -80],
+ smirk_cat: [-1520, -80],
+ kissing_cat: [-1560, -80],
+ scream_cat: [-1600, -80],
+ crying_cat_face: [-1640, -80],
+ pouting_cat: [0, -120],
+ handshake: [-40, -120],
+ heart_hands: [0, 0],
+ palms_up_together: [-40, 0],
+ open_hands: [-80, 0],
+ raised_hands: [-120, 0],
+ clap: [-160, 0],
+ thumbsup: [-200, 0],
+ thumbsdown: [-240, 0],
+ punch: [-280, 0],
+ fist: [-320, 0],
+ left_facing_fist: [-360, 0],
+ right_facing_fist: [0, -40],
+ leftwards_pushing_hand: [-40, -40],
+ rightwards_pushing_hand: [-80, -40],
+ fingers_crossed: [-120, -40],
+ v: [-160, -40],
+ hand_with_index_finger_and_thumb_crossed: [-200, -40],
+ love_you_gesture: [-240, -40],
+ metal: [-280, -40],
+ ok_hand: [-320, -40],
+ pinched_fingers: [-360, -40],
+ pinching_hand: [0, -80],
+ palm_down_hand: [-40, -80],
+ palm_up_hand: [-80, -80],
+ point_left: [-120, -80],
+ point_right: [-160, -80],
+ point_up_2: [-200, -80],
+ point_down: [-240, -80],
+ point_up: [-280, -80],
+ raised_hand: [-320, -80],
+ raised_back_of_hand: [-360, -80],
+ hand_splayed: [0, -120],
+ vulcan: [-40, -120],
+ wave: [-80, -120],
+ call_me: [-120, -120],
+ leftwards_hand: [-160, -120],
+ rightwards_hand: [-200, -120],
+ muscle: [-240, -120],
+ mechanical_arm: [-80, -120],
+ middle_finger: [-280, -120],
+ writing_hand: [-320, -120],
+ pray: [-360, -120],
+ index_pointing_at_the_viewer: [0, -160],
+ foot: [-40, -160],
+ exploding_head: [-480, -40],
+ flushed: [-520, -40],
+ hot_face: [-560, -40],
+ cold_face: [-600, -40],
+ face_in_clouds: [-640, -40],
+ scream: [-680, -40],
+ fearful: [-720, -40],
+ cold_sweat: [-760, -40],
+ disappointed_relieved: [-800, -40],
+ sweat: [-840, -40],
+ hugging: [-880, -40],
+ thinking: [-920, -40],
+ face_with_peeking_eye: [-960, -40],
+ face_with_hand_over_mouth: [-1000, -40],
+ face_with_open_eyes_and_hand_over_mouth: [-1040, -40],
+ saluting_face: [-1080, -40],
+ shushing_face: [-1120, -40],
+ melting_face: [-1160, -40],
+ lying_face: [-1200, -40],
+ no_mouth: [-1240, -40],
+ dotted_line_face: [-1280, -40],
+ neutral_face: [-1320, -40],
+ face_with_diagonal_mouth: [-1360, -40],
+ expressionless: [-1400, -40],
+ shaking_face: [-1440, -40],
+ head_shaking_horizontally: [-1480, -40],
+ head_shaking_vertically: [-1520, -40],
+ leg: [-80, -160],
+ mechanical_leg: [-120, -120],
+ lipstick: [-160, -120],
+ kiss: [-200, -120],
+ lips: [-240, -120],
+ biting_lip: [-280, -120],
+ tooth: [-320, -120],
+ tongue: [-360, -120],
+ ear: [-120, -160],
+ ear_with_hearing_aid: [-160, -160],
+ nose: [-200, -160],
+ footprints: [-400, -120],
+ eye: [-440, -120],
+ eyes: [-480, -120],
+ anatomical_heart: [-520, -120],
+ lungs: [-560, -120],
+ brain: [-600, -120],
+ speaking_head: [-640, -120],
+ bust_in_silhouette: [-680, -120],
+ busts_in_silhouette: [-720, -120],
+ people_hugging: [-760, -120],
+ baby: [-240, -160],
+ child: [-280, -160],
+ girl: [-320, -160],
+ boy: [-360, -160],
+ adult: [0, -200],
+ woman: [-40, -200],
+ man: [-80, -200],
+ person_curly_hair: [-120, -200],
+ woman_curly_haired: [-160, -200],
+ man_curly_haired: [-200, -200],
+ person_red_hair: [-240, -200],
+ woman_red_haired: [-280, -200],
+ man_red_haired: [-320, -200],
+ blond_haired_person: [-360, -200],
+ blond_haired_woman: [0, -240],
+ blond_haired_man: [-40, -240],
+ person_white_hair: [-80, -240],
+ woman_white_haired: [-120, -240],
+ man_white_haired: [-160, -240],
+ person_bald: [-200, -240],
+ woman_bald: [-240, -240],
+ man_bald: [-280, -240],
+ bearded_person: [-320, -240],
+ woman_beard: [-360, -240],
+ man_beard: [0, -280],
+ older_adult: [-40, -280],
+ older_woman: [-80, -280],
+ older_man: [-120, -280],
+ man_with_chinese_cap: [-160, -280],
+ person_wearing_turban: [-200, -280],
+ woman_wearing_turban: [-240, -280],
+ man_wearing_turban: [-280, -280],
+ woman_with_headscarf: [-320, -280],
+ police_officer: [-360, -280],
+ woman_police_officer: [0, -320],
+ man_police_officer: [-40, -320],
+ construction_worker: [-80, -320],
+ woman_construction_worker: [-120, -320],
+ man_construction_worker: [-160, -320],
+ guard: [-200, -320],
+ woman_guard: [-240, -320],
+ man_guard: [-280, -320],
+ detective: [-320, -320],
+ woman_detective: [-360, -320],
+ man_detective: [0, -360],
+ health_worker: [-40, -360],
+ woman_health_worker: [-80, -360],
+ man_health_worker: [-120, -360],
+ farmer: [-160, -360],
+ woman_farmer: [-200, -360],
+ man_farmer: [-240, -360],
+ artist: [-160, -480],
+ woman_artist: [-200, -480],
+ man_artist: [-240, -480],
+ firefighter: [-280, -480],
+ woman_firefighter: [-320, -480],
+ man_firefighter: [-360, -480],
+ pilot: [0, -520],
+ woman_pilot: [-40, -520],
+ man_pilot: [-80, -520],
+ astronaut: [-120, -520],
+ woman_astronaut: [-160, -520],
+ man_astronaut: [-200, -520],
+ judge: [-240, -520],
+ woman_judge: [-280, -520],
+ man_judge: [-320, -520],
+ person_with_veil: [-360, -520],
+ woman_with_veil: [0, -560],
+ man_with_veil: [-40, -560],
+ person_in_tuxedo: [-80, -560],
+ woman_in_tuxedo: [-120, -560],
+ man_in_tuxedo: [-160, -560],
+ person_with_crown: [-200, -560],
+ princess: [-240, -560],
+ prince: [-280, -560],
+ superhero: [-320, -560],
+ woman_superhero: [-360, -560],
+ man_superhero: [0, -600],
+ supervillain: [-40, -600],
+ woman_supervillain: [-80, -600],
+ man_supervillain: [-120, -600],
+ ninja: [-160, -600],
+ mx_claus: [-200, -600],
+ mrs_claus: [-240, -600],
+ santa: [-280, -600],
+ mage: [-320, -600],
+ woman_mage: [-360, -600],
+ man_mage: [0, -640],
+ elf: [-40, -640],
+ woman_elf: [-80, -640],
+ man_elf: [-120, -640],
+ troll: [-800, -120],
+ vampire: [-160, -640],
+ woman_vampire: [-200, -640],
+ man_vampire: [-240, -640],
+ zombie: [-840, -120],
+ woman_zombie: [-880, -120],
+ man_zombie: [-920, -120],
+ genie: [-960, -120],
+ woman_genie: [-1000, -120],
+ man_genie: [-1040, -120],
+ merperson: [-280, -640],
+ mermaid: [-320, -640],
+ merman: [-360, -640],
+ fairy: [0, -680],
+ woman_fairy: [-40, -680],
+ man_fairy: [-80, -680],
+ angel: [-120, -680],
+ pregnant_person: [-160, -680],
+ pregnant_woman: [-200, -680],
+ pregnant_man: [-240, -680],
+ breast_feeding: [-280, -680],
+ person_feeding_baby: [-320, -680],
+ woman_feeding_baby: [-360, -680],
+ man_gesturing_no: [-360, -720],
+ person_gesturing_ok: [0, -760],
+ woman_gesturing_ok: [-40, -760],
+ man_gesturing_ok: [-80, -760],
+ person_raising_hand: [-120, -760],
+ woman_raising_hand: [-160, -760],
+ man_raising_hand: [-200, -760],
+ deaf_person: [-240, -760],
+ deaf_woman: [-280, -760],
+ deaf_man: [-320, -760],
+ person_facepalming: [-360, -760],
+ woman_facepalming: [0, -800],
+ man_facepalming: [-40, -800],
+ person_shrugging: [-80, -800],
+ woman_shrugging: [-120, -800],
+ man_shrugging: [-160, -800],
+ person_pouting: [-200, -800],
+ woman_pouting: [-240, -800],
+ man_pouting: [-280, -800],
+ person_frowning: [-320, -800],
+ woman_frowning: [-360, -800],
+ man_frowning: [0, -840],
+ person_getting_haircut: [-40, -840],
+ woman_getting_haircut: [-80, -840],
+ man_getting_haircut: [-120, -840],
+ person_getting_massage: [-160, -840],
+ woman_getting_face_massage: [-200, -840],
+ man_getting_face_massage: [-240, -840],
+ person_in_steamy_room: [-280, -840],
+ woman_in_steamy_room: [-320, -840],
+ man_in_steamy_room: [-360, -840],
+ nail_care: [0, -880],
+ selfie: [-40, -880],
+ dancer: [-80, -880],
+ man_dancing: [-120, -880],
+ people_with_bunny_ears_partying: [-1080, -120],
+ women_with_bunny_ears_partying: [-1120, -120],
+ men_with_bunny_ears_partying: [-1160, -120],
+ levitate: [-160, -880],
+ person_in_manual_wheelchair: [-200, -880],
+ woman_in_manual_wheelchair: [-240, -880],
+ man_in_manual_wheelchair: [-280, -880],
+ person_in_manual_wheelchair_facing_right: [-320, -880],
+ man_in_manual_wheelchair_facing_right: [-360, -880],
+ woman_in_manual_wheelchair_facing_right: [0, -920],
+ person_in_motorized_wheelchair: [-40, -920],
+ woman_in_motorized_wheelchair: [-80, -920],
+ man_in_motorized_wheelchair: [-120, -920],
+ person_in_motorized_wheelchair_facing_right: [-160, -920],
+ man_in_motorized_wheelchair_facing_right: [-200, -920],
+ woman_in_motorized_wheelchair_facing_right: [-240, -920],
+ person_walking: [-280, -920],
+ woman_walking: [-320, -920],
+ man_walking: [-360, -920],
+ person_walking_facing_right: [0, -960],
+ woman_walking_facing_right: [-40, -960],
+ man_walking_facing_right: [-80, -960],
+ person_with_probing_cane: [-120, -960],
+ woman_with_probing_cane: [-160, -960],
+ man_with_probing_cane: [-200, -960],
+ person_with_white_cane_facing_right: [-240, -960],
+ man_with_white_cane_facing_right: [-280, -960],
+ woman_with_white_cane_facing_right: [-320, -960],
+ person_kneeling: [-360, -960],
+ woman_kneeling: [0, -1000],
+ man_kneeling: [-40, -1000],
+ person_kneeling_facing_right: [-80, -1000],
+ woman_kneeling_facing_right: [-120, -1000],
+ man_kneeling_facing_right: [-160, -1000],
+ person_running: [-200, -1000],
+ woman_running: [-240, -1000],
+ man_running: [-280, -1000],
+ person_running_facing_right: [-320, -1000],
+ woman_running_facing_right: [-360, -1000],
+ man_running_facing_right: [0, -1040],
+ person_standing: [-40, -1040],
+ woman_standing: [-80, -1040],
+ man_standing: [-120, -1040],
+ people_holding_hands: [-1200, -120],
+ couple: [-1240, -120],
+ two_women_holding_hands: [-1280, -120],
+ two_men_holding_hands: [-1320, -120],
+ couple_with_heart: [-1360, -120],
+ couple_with_heart_woman_man: [-1400, -120],
+ couple_ww: [-1440, -120],
+ couple_mm: [-1480, -120],
+ couplekiss: [-1520, -120],
+ kiss_woman_man: [-1560, -120],
+ kiss_ww: [-1600, -120],
+ kiss_mm: [-1640, -120],
+ family_adult_adult_child_child: [0, -160],
+ family_adult_adult_child: [-40, -160],
+ family_adult_child_child: [-80, -160],
+ family_adult_child: [-120, -160],
+ family: [-160, -160],
+ family_man_woman_boy: [-200, -160],
+ family_mwg: [-240, -160],
+ family_mwgb: [-280, -160],
+ family_mwbb: [-320, -160],
+ family_mwgg: [-360, -160],
+ family_wwb: [-400, -160],
+ family_wwg: [-440, -160],
+ family_wwgb: [-480, -160],
+ family_wwbb: [-520, -160],
+ family_wwgg: [-560, -160],
+ family_mmb: [-600, -160],
+ family_mmg: [-640, -160],
+ family_mmgb: [-680, -160],
+ family_mmbb: [-720, -160],
+ family_mmgg: [-760, -160],
+ family_woman_boy: [-800, -160],
+ family_woman_girl: [-840, -160],
+ family_woman_girl_boy: [-880, -160],
+ family_woman_boy_boy: [-920, -160],
+ family_woman_girl_girl: [-960, -160],
+ family_man_boy: [-1000, -160],
+ family_man_girl: [-1040, -160],
+ family_man_girl_boy: [-1080, -160],
+ family_man_boy_boy: [-1120, -160],
+ family_man_girl_girl: [-1160, -160],
+ knot: [-1200, -160],
+ yarn: [-1240, -160],
+ thread: [-1280, -160],
+ sewing_needle: [-1320, -160],
+ coat: [-1360, -160],
+ lab_coat: [-1400, -160],
+ safety_vest: [-1440, -160],
+ womans_clothes: [-1480, -160],
+ shirt: [-1520, -160],
+ jeans: [-1560, -160],
+ briefs: [-1600, -160],
+ shorts: [-1640, -160],
+ necktie: [0, -200],
+ dress: [-40, -200],
+ bikini: [-80, -200],
+ one_piece_swimsuit: [-120, -200],
+ kimono: [-160, -200],
+ sari: [-200, -200],
+ thong_sandal: [-240, -200],
+ womans_flat_shoe: [-280, -200],
+ high_heel: [-320, -200],
+ sandal: [-360, -200],
+ boot: [-400, -200],
+ mans_shoe: [-440, -200],
+ athletic_shoe: [-480, -200],
+ hiking_boot: [-520, -200],
+ socks: [-560, -200],
+ gloves: [-600, -200],
+ scarf: [-640, -200],
+ tophat: [-680, -200],
+ billed_cap: [-720, -200],
+ womans_hat: [-760, -200],
+ mortar_board: [-800, -200],
+ helmet_with_cross: [-840, -200],
+ military_helmet: [-880, -200],
+ crown: [-920, -200],
+ ring: [-960, -200],
+ pouch: [-1000, -200],
+ purse: [-1040, -200],
+ handbag: [-1080, -200],
+ briefcase: [-1120, -200],
+ school_satchel: [-1160, -200],
+ luggage: [-1200, -200],
+ eyeglasses: [-1240, -200],
+ dark_sunglasses: [-1280, -200],
+ goggles: [-1320, -200],
+ closed_umbrella: [-1360, -200],
+ dog: [-1400, -200],
+ cat: [-1440, -200],
+ mouse: [-1480, -200],
+ hamster: [-1520, -200],
+ rabbit: [-1560, -200],
+ fox: [-1600, -200],
+ bear: [-1640, -200],
+ panda_face: [0, -240],
+ polar_bear: [-40, -240],
+ koala: [-80, -240],
+ tiger: [-120, -240],
+ lion_face: [-160, -240],
+ cow: [-200, -240],
+ pig: [-240, -240],
+ pig_nose: [-280, -240],
+ frog: [-320, -240],
+ monkey_face: [-360, -240],
+ see_no_evil: [-400, -240],
+ hear_no_evil: [-440, -240],
+ speak_no_evil: [-480, -240],
+ monkey: [-520, -240],
+ chicken: [-560, -240],
+ penguin: [-600, -240],
+ bird: [-640, -240],
+ baby_chick: [-680, -240],
+ hatching_chick: [-720, -240],
+ hatched_chick: [-760, -240],
+ goose: [-800, -240],
+ duck: [-840, -240],
+ black_bird: [-880, -240],
+ eagle: [-920, -240],
+ owl: [-960, -240],
+ bat: [-1000, -240],
+ wolf: [-1040, -240],
+ boar: [-1080, -240],
+ horse: [-1120, -240],
+ unicorn: [-1160, -240],
+ moose: [-1200, -240],
+ bee: [-1240, -240],
+ worm: [-1280, -240],
+ bug: [-1320, -240],
+ butterfly: [-1360, -240],
+ snail: [-1400, -240],
+ lady_beetle: [-1440, -240],
+ ant: [-1480, -240],
+ fly: [-1520, -240],
+ beetle: [-1560, -240],
+ cockroach: [-1600, -240],
+ mosquito: [-1640, -240],
+ cricket: [0, -280],
+ spider: [-40, -280],
+ spider_web: [-80, -280],
+ scorpion: [-120, -280],
+ turtle: [-160, -280],
+ rhino: [-1280, -280],
+ dromedary_camel: [-1320, -280],
+ camel: [-1360, -280],
+ giraffe: [-1400, -280],
+ kangaroo: [-1440, -280],
+ bison: [-1480, -280],
+ water_buffalo: [-1520, -280],
+ ox: [-1560, -280],
+ cow2: [-1600, -280],
+ donkey: [-1640, -280],
+ racehorse: [0, -320],
+ pig2: [-40, -320],
+ ram: [-80, -320],
+ sheep: [-120, -320],
+ llama: [-160, -320],
+ goat: [-200, -320],
+ deer: [-240, -320],
+ dog2: [-280, -320],
+ poodle: [-320, -320],
+ guide_dog: [-360, -320],
+ service_dog: [-400, -320],
+ cat2: [-440, -320],
+ black_cat: [-480, -320],
+ feather: [-520, -320],
+ wing: [-560, -320],
+ rooster: [-600, -320],
+ turkey: [-640, -320],
+ dodo: [-680, -320],
+ peacock: [-720, -320],
+ parrot: [-760, -320],
+ swan: [-800, -320],
+ flamingo: [-840, -320],
+ dove: [-880, -320],
+ rabbit2: [-920, -320],
+ raccoon: [-960, -320],
+ skunk: [-1000, -320],
+ badger: [-1040, -320],
+ beaver: [-1080, -320],
+ otter: [-1120, -320],
+ sloth: [-1160, -320],
+ mouse2: [-1200, -320],
+ rat: [-1240, -320],
+ chipmunk: [-1280, -320],
+ hedgehog: [-1320, -320],
+ feet: [-1360, -320],
+ dragon: [-1400, -320],
+ dragon_face: [-1440, -320],
+ phoenix: [-1480, -320],
+ cactus: [-1520, -320],
+ christmas_tree: [-1560, -320],
+ evergreen_tree: [-1600, -320],
+ deciduous_tree: [-1640, -320],
+ palm_tree: [0, -360],
+ wood: [-40, -360],
+ seedling: [-80, -360],
+ herb: [-120, -360],
+ shamrock: [-160, -360],
+ four_leaf_clover: [-200, -360],
+ bamboo: [-240, -360],
+ potted_plant: [-280, -360],
+ tanabata_tree: [-320, -360],
+ leaves: [-360, -360],
+ fallen_leaf: [-400, -360],
+ maple_leaf: [-440, -360],
+ nest_with_eggs: [-480, -360],
+ empty_nest: [-520, -360],
+ mushroom: [-560, -360],
+ brown_mushroom: [-600, -360],
+ shell: [-640, -360],
+ coral: [-680, -360],
+ rock: [-720, -360],
+ ear_of_rice: [-760, -360],
+ bouquet: [-800, -360],
+ tulip: [-840, -360],
+ rose: [-880, -360],
+ wilted_rose: [-920, -360],
+ hyacinth: [-960, -360],
+ lotus: [-1000, -360],
+ hibiscus: [-1040, -360],
+ cherry_blossom: [-1080, -360],
+ blossom: [-1120, -360],
+ sunflower: [-1160, -360],
+ sun_with_face: [-1200, -360],
+ full_moon_with_face: [-1240, -360],
+ first_quarter_moon_with_face: [-1280, -360],
+ last_quarter_moon_with_face: [-1320, -360],
+ new_moon_with_face: [-1360, -360],
+ full_moon: [-1400, -360],
+ waning_gibbous_moon: [-1440, -360],
+ last_quarter_moon: [-1480, -360],
+ waning_crescent_moon: [-1520, -360],
+ new_moon: [-1560, -360],
+ waxing_crescent_moon: [-1600, -360],
+ first_quarter_moon: [-1640, -360],
+ waxing_gibbous_moon: [0, -400],
+ crescent_moon: [-40, -400],
+ earth_americas: [-80, -400],
+ earth_africa: [-120, -400],
+ earth_asia: [-160, -400],
+ ringed_planet: [-200, -400],
+ dizzy: [-240, -400],
+ star: [-280, -400],
+ star2: [-320, -400],
+ sparkles: [-360, -400],
+ zap: [-400, -400],
+ comet: [-440, -400],
+ boom: [-480, -400],
+ fire: [-520, -400],
+ cloud_tornado: [-560, -400],
+ rainbow: [-600, -400],
+ sunny: [-640, -400],
+ white_sun_small_cloud: [-680, -400],
+ partly_sunny: [-720, -400],
+ white_sun_cloud: [-760, -400],
+ cloud: [-800, -400],
+ white_sun_rain_cloud: [-840, -400],
+ cloud_rain: [-880, -400],
+ thunder_cloud_rain: [-920, -400],
+ cloud_lightning: [-960, -400],
+ cloud_snow: [-1000, -400],
+ snowflake: [-1040, -400],
+ snowman2: [-1080, -400],
+ snowman: [-1120, -400],
+ wind_blowing_face: [-1160, -400],
+ dash: [-1200, -400],
+ droplet: [-1240, -400],
+ sweat_drops: [-1280, -400],
+ bubbles: [-1320, -400],
+ umbrella: [-1360, -400],
+ umbrella2: [-1400, -400],
+ ocean: [-1440, -400],
+ fog: [-1480, -400],
+ green_apple: [-1520, -400],
+ apple: [-1560, -400],
+ pear: [-1600, -400],
+ tangerine: [-1640, -400],
+ lemon: [0, -440],
+ lime: [-40, -440],
+ banana: [-80, -440],
+ watermelon: [-120, -440],
+ grapes: [-160, -440],
+ strawberry: [-200, -440],
+ blueberries: [-240, -440],
+ melon: [-280, -440],
+ cherries: [-320, -440],
+ peach: [-360, -440],
+ mango: [-400, -440],
+ pineapple: [-440, -440],
+ coconut: [-480, -440],
+ kiwi: [-520, -440],
+ tomato: [-560, -440],
+ eggplant: [-600, -440],
+ avocado: [-640, -440],
+ pea_pod: [-680, -440],
+ broccoli: [-720, -440],
+ leafy_green: [-760, -440],
+ cucumber: [-800, -440],
+ hot_pepper: [-840, -440],
+ bell_pepper: [-880, -440],
+ corn: [-920, -440],
+ carrot: [-960, -440],
+ olive: [-1000, -440],
+ garlic: [-1040, -440],
+ onion: [-1080, -440],
+ potato: [-1120, -440],
+ sweet_potato: [-1160, -440],
+ ginger_root: [-1200, -440],
+ croissant: [-1240, -440],
+ bagel: [-1280, -440],
+ bread: [-1320, -440],
+ french_bread: [-1360, -440],
+ pretzel: [-1400, -440],
+ cheese: [-1440, -440],
+ egg: [-1480, -440],
+ cooking: [-1520, -440],
+ butter: [-1560, -440],
+ pancakes: [-1600, -440],
+ waffle: [-1640, -440],
+ bacon: [0, -480],
+ cut_of_meat: [-40, -480],
+ poultry_leg: [-80, -480],
+ meat_on_bone: [-120, -480],
+ bone: [-160, -480],
+ hotdog: [-200, -480],
+ hamburger: [-240, -480],
+ fries: [-280, -480],
+ pizza: [-320, -480],
+ flatbread: [-360, -480],
+ sandwich: [-400, -480],
+ stuffed_flatbread: [-440, -480],
+ falafel: [-480, -480],
+ taco: [-520, -480],
+ burrito: [-560, -480],
+ tamale: [-600, -480],
+ salad: [-640, -480],
+ shallow_pan_of_food: [-680, -480],
+ fondue: [-720, -480],
+ canned_food: [-760, -480],
+ jar: [-800, -480],
+ spaghetti: [-840, -480],
+ ramen: [-880, -480],
+ stew: [-920, -480],
+ curry: [-960, -480],
+ sushi: [-1000, -480],
+ bento: [-1040, -480],
+ dumpling: [-1080, -480],
+ oyster: [-1120, -480],
+ fried_shrimp: [-1160, -480],
+ rice_ball: [-1200, -480],
+ rice: [-1240, -480],
+ rice_cracker: [-1280, -480],
+ fish_cake: [-1320, -480],
+ fortune_cookie: [-1360, -480],
+ moon_cake: [-1400, -480],
+ oden: [-1440, -480],
+ dango: [-1480, -480],
+ shaved_ice: [-1520, -480],
+ ice_cream: [-1560, -480],
+ icecream: [-1600, -480],
+ pie: [-1640, -480],
+ cupcake: [0, -520],
+ cake: [-40, -520],
+ birthday: [-80, -520],
+ custard: [-120, -520],
+ lollipop: [-160, -520],
+ candy: [-200, -520],
+ chocolate_bar: [-240, -520],
+ popcorn: [-280, -520],
+ doughnut: [-320, -520],
+ cookie: [-360, -520],
+ chestnut: [-400, -520],
+ peanuts: [-440, -520],
+ beans: [-480, -520],
+ honey_pot: [-520, -520],
+ milk: [-560, -520],
+ pouring_liquid: [-600, -520],
+ baby_bottle: [-640, -520],
+ teapot: [-680, -520],
+ coffee: [-720, -520],
+ tea: [-760, -520],
+ mate: [-800, -520],
+ beverage_box: [-840, -520],
+ cup_with_straw: [-880, -520],
+ bubble_tea: [-920, -520],
+ sake: [-960, -520],
+ beer: [-1000, -520],
+ beers: [-1040, -520],
+ champagne_glass: [-1080, -520],
+ wine_glass: [-1120, -520],
+ tumbler_glass: [-1160, -520],
+ cocktail: [-1200, -520],
+ tropical_drink: [-1240, -520],
+ champagne: [-1280, -520],
+ ice_cube: [-1320, -520],
+ spoon: [-1360, -520],
+ fork_and_knife: [-1400, -520],
+ fork_knife_plate: [-1440, -520],
+ bowl_with_spoon: [-1480, -520],
+ takeout_box: [-1520, -520],
+ chopsticks: [-1560, -520],
+ salt: [-1600, -520],
+ soccer: [-1640, -520],
+ basketball: [0, -560],
+ football: [-40, -560],
+ baseball: [-80, -560],
+ softball: [-120, -560],
+ tennis: [-160, -560],
+ volleyball: [-200, -560],
+ rugby_football: [-240, -560],
+ flying_disc: [-280, -560],
+ '8ball': [-320, -560],
+ yo_yo: [-360, -560],
+ ping_pong: [-400, -560],
+ badminton: [-440, -560],
+ hockey: [-480, -560],
+ field_hockey: [-520, -560],
+ lacrosse: [-560, -560],
+ cricket_game: [-600, -560],
+ boomerang: [-640, -560],
+ goal: [-680, -560],
+ golf: [-720, -560],
+ kite: [-760, -560],
+ playground_slide: [-800, -560],
+ bow_and_arrow: [-840, -560],
+ fishing_pole_and_fish: [-880, -560],
+ diving_mask: [-920, -560],
+ boxing_glove: [-960, -560],
+ martial_arts_uniform: [-1000, -560],
+ running_shirt_with_sash: [-1040, -560],
+ skateboard: [-1080, -560],
+ roller_skate: [-1120, -560],
+ sled: [-1160, -560],
+ ice_skate: [-1200, -560],
+ curling_stone: [-1240, -560],
+ ski: [-1280, -560],
+ skier: [-1320, -560],
+ snowboarder: [-160, -1040],
+ parachute: [-1360, -560],
+ person_lifting_weights: [-200, -1040],
+ woman_lifting_weights: [-240, -1040],
+ man_lifting_weights: [-280, -1040],
+ people_wrestling: [-1400, -560],
+ women_wrestling: [-1440, -560],
+ men_wrestling: [-1480, -560],
+ person_doing_cartwheel: [-320, -1040],
+ woman_cartwheeling: [-360, -1040],
+ man_cartwheeling: [0, -1080],
+ person_bouncing_ball: [-40, -1080],
+ woman_bouncing_ball: [-80, -1080],
+ man_bouncing_ball: [-120, -1080],
+ person_fencing: [-1520, -560],
+ person_playing_handball: [-160, -1080],
+ woman_playing_handball: [-200, -1080],
+ man_playing_handball: [-240, -1080],
+ person_golfing: [-280, -1080],
+ woman_golfing: [-320, -1080],
+ man_golfing: [-360, -1080],
+ horse_racing: [0, -1120],
+ person_in_lotus_position: [-40, -1120],
+ woman_in_lotus_position: [-80, -1120],
+ man_in_lotus_position: [-120, -1120],
+ person_surfing: [-160, -1120],
+ woman_surfing: [-200, -1120],
+ man_surfing: [-240, -1120],
+ person_swimming: [-280, -1120],
+ woman_swimming: [-320, -1120],
+ man_swimming: [-360, -1120],
+ person_playing_water_polo: [0, -1160],
+ woman_playing_water_polo: [-40, -1160],
+ man_playing_water_polo: [-80, -1160],
+ person_rowing_boat: [-120, -1160],
+ woman_rowing_boat: [-160, -1160],
+ man_rowing_boat: [-200, -1160],
+ person_climbing: [-240, -1160],
+ woman_climbing: [-280, -1160],
+ man_climbing: [-320, -1160],
+ person_mountain_biking: [-360, -1160],
+ woman_mountain_biking: [0, -1200],
+ man_mountain_biking: [-40, -1200],
+ person_biking: [-80, -1200],
+ woman_biking: [-120, -1200],
+ man_biking: [-160, -1200],
+ trophy: [-1560, -560],
+ first_place: [-1600, -560],
+ second_place: [-1640, -560],
+ third_place: [0, -600],
+ medal: [-40, -600],
+ military_medal: [-80, -600],
+ rosette: [-120, -600],
+ reminder_ribbon: [-160, -600],
+ ticket: [-200, -600],
+ tickets: [-240, -600],
+ circus_tent: [-280, -600],
+ person_juggling: [-200, -1200],
+ woman_juggling: [-240, -1200],
+ man_juggling: [-280, -1200],
+ performing_arts: [-320, -600],
+ ballet_shoes: [-360, -600],
+ art: [-400, -600],
+ clapper: [-440, -600],
+ microphone: [-480, -600],
+ headphones: [-520, -600],
+ musical_score: [-560, -600],
+ musical_keyboard: [-600, -600],
+ maracas: [-640, -600],
+ drum: [-680, -600],
+ long_drum: [-720, -600],
+ saxophone: [-760, -600],
+ trumpet: [-800, -600],
+ accordion: [-840, -600],
+ guitar: [-880, -600],
+ banjo: [-920, -600],
+ violin: [-960, -600],
+ flute: [-1000, -600],
+ game_die: [-1040, -600],
+ chess_pawn: [-1080, -600],
+ dart: [-1120, -600],
+ bowling: [-1160, -600],
+ video_game: [-1200, -600],
+ slot_machine: [-1240, -600],
+ jigsaw: [-1280, -600],
+ red_car: [-1320, -600],
+ taxi: [-1360, -600],
+ blue_car: [-1400, -600],
+ pickup_truck: [-1440, -600],
+ minibus: [-1480, -600],
+ bus: [-1520, -600],
+ trolleybus: [-1560, -600],
+ race_car: [-1600, -600],
+ police_car: [-1640, -600],
+ ambulance: [0, -640],
+ fire_engine: [-40, -640],
+ truck: [-80, -640],
+ articulated_lorry: [-120, -640],
+ tractor: [-160, -640],
+ probing_cane: [-200, -640],
+ manual_wheelchair: [-240, -640],
+ motorized_wheelchair: [-280, -640],
+ crutch: [-320, -640],
+ scooter: [-360, -640],
+ bike: [-400, -640],
+ motor_scooter: [-440, -640],
+ motorcycle: [-480, -640],
+ auto_rickshaw: [-520, -640],
+ wheel: [-560, -640],
+ rotating_light: [-600, -640],
+ oncoming_police_car: [-640, -640],
+ oncoming_bus: [-680, -640],
+ oncoming_automobile: [-720, -640],
+ oncoming_taxi: [-760, -640],
+ aerial_tramway: [-800, -640],
+ mountain_cableway: [-840, -640],
+ suspension_railway: [-880, -640],
+ railway_car: [-920, -640],
+ train: [-960, -640],
+ mountain_railway: [-1000, -640],
+ monorail: [-1040, -640],
+ bullettrain_side: [-1080, -640],
+ bullettrain_front: [-1120, -640],
+ light_rail: [-1160, -640],
+ steam_locomotive: [-1200, -640],
+ train2: [-1240, -640],
+ metro: [-1280, -640],
+ tram: [-1320, -640],
+ station: [-1360, -640],
+ airplane: [-1400, -640],
+ airplane_departure: [-1440, -640],
+ airplane_arriving: [-1480, -640],
+ airplane_small: [-1520, -640],
+ seat: [-1560, -640],
+ satellite_orbital: [-1600, -640],
+ rocket: [-1640, -640],
+ flying_saucer: [0, -680],
+ helicopter: [-40, -680],
+ canoe: [-80, -680],
+ sailboat: [-120, -680],
+ speedboat: [-160, -680],
+ motorboat: [-200, -680],
+ cruise_ship: [-240, -680],
+ ferry: [-280, -680],
+ ship: [-320, -680],
+ ring_buoy: [-360, -680],
+ anchor: [-400, -680],
+ hook: [-440, -680],
+ fuelpump: [-480, -680],
+ construction: [-520, -680],
+ vertical_traffic_light: [-560, -680],
+ traffic_light: [-600, -680],
+ busstop: [-640, -680],
+ map: [-680, -680],
+ moyai: [-720, -680],
+ statue_of_liberty: [-760, -680],
+ tokyo_tower: [-800, -680],
+ european_castle: [-840, -680],
+ japanese_castle: [-880, -680],
+ stadium: [-920, -680],
+ ferris_wheel: [-960, -680],
+ roller_coaster: [-1000, -680],
+ carousel_horse: [-1040, -680],
+ fountain: [-1080, -680],
+ beach_umbrella: [-1120, -680],
+ beach: [-1160, -680],
+ island: [-1200, -680],
+ desert: [-1240, -680],
+ volcano: [-1280, -680],
+ mountain: [-1320, -680],
+ mountain_snow: [-1360, -680],
+ mount_fuji: [-1400, -680],
+ camping: [-1440, -680],
+ tent: [-1480, -680],
+ house: [-1520, -680],
+ house_with_garden: [-1560, -680],
+ homes: [-1600, -680],
+ house_abandoned: [-1640, -680],
+ hut: [0, -720],
+ construction_site: [-40, -720],
+ factory: [-80, -720],
+ office: [-120, -720],
+ department_store: [-160, -720],
+ post_office: [-200, -720],
+ european_post_office: [-240, -720],
+ hospital: [-280, -720],
+ bank: [-320, -720],
+ hotel: [-360, -720],
+ convenience_store: [-400, -720],
+ school: [-440, -720],
+ love_hotel: [-480, -720],
+ wedding: [-520, -720],
+ classical_building: [-560, -720],
+ church: [-600, -720],
+ mosque: [-640, -720],
+ synagogue: [-680, -720],
+ hindu_temple: [-720, -720],
+ kaaba: [-760, -720],
+ shinto_shrine: [-800, -720],
+ railway_track: [-840, -720],
+ motorway: [-880, -720],
+ japan: [-920, -720],
+ rice_scene: [-960, -720],
+ park: [-1000, -720],
+ sunrise: [-1040, -720],
+ sunrise_over_mountains: [-1080, -720],
+ stars: [-1120, -720],
+ sparkler: [-1160, -720],
+ fireworks: [-1200, -720],
+ city_sunset: [-1240, -720],
+ city_dusk: [-1280, -720],
+ cityscape: [-1320, -720],
+ night_with_stars: [-1360, -720],
+ milky_way: [-1400, -720],
+ bridge_at_night: [-1440, -720],
+ foggy: [-1480, -720],
+ watch: [-1520, -720],
+ mobile_phone: [-1560, -720],
+ calling: [-1600, -720],
+ computer: [-1640, -720],
+ keyboard: [0, -760],
+ desktop: [-40, -760],
+ printer: [-80, -760],
+ mouse_three_button: [-120, -760],
+ trackball: [-160, -760],
+ joystick: [-200, -760],
+ compression: [-240, -760],
+ minidisc: [-280, -760],
+ floppy_disk: [-320, -760],
+ cd: [-360, -760],
+ dvd: [-400, -760],
+ vhs: [-440, -760],
+ camera: [-480, -760],
+ camera_with_flash: [-520, -760],
+ video_camera: [-560, -760],
+ movie_camera: [-600, -760],
+ projector: [-640, -760],
+ film_frames: [-680, -760],
+ telephone_receiver: [-720, -760],
+ telephone: [-760, -760],
+ pager: [-800, -760],
+ fax: [-840, -760],
+ tv: [-880, -760],
+ radio: [-920, -760],
+ microphone2: [-960, -760],
+ level_slider: [-1000, -760],
+ control_knobs: [-1040, -760],
+ compass: [-1080, -760],
+ stopwatch: [-1120, -760],
+ timer: [-1160, -760],
+ alarm_clock: [-1200, -760],
+ clock: [-1240, -760],
+ hourglass: [-1280, -760],
+ hourglass_flowing_sand: [-1320, -760],
+ satellite: [-1360, -760],
+ battery: [-1400, -760],
+ low_battery: [-1440, -760],
+ electric_plug: [-1480, -760],
+ bulb: [-1520, -760],
+ flashlight: [-1560, -760],
+ candle: [-1600, -760],
+ diya_lamp: [-1640, -760],
+ fire_extinguisher: [0, -800],
+ oil: [-40, -800],
+ money_with_wings: [-80, -800],
+ dollar: [-120, -800],
+ yen: [-160, -800],
+ euro: [-200, -800],
+ pound: [-240, -800],
+ coin: [-280, -800],
+ moneybag: [-320, -800],
+ credit_card: [-360, -800],
+ identification_card: [-400, -800],
+ gem: [-440, -800],
+ scales: [-480, -800],
+ ladder: [-520, -800],
+ toolbox: [-560, -800],
+ screwdriver: [-600, -800],
+ wrench: [-640, -800],
+ hammer: [-680, -800],
+ hammer_pick: [-720, -800],
+ tools: [-760, -800],
+ pick: [-800, -800],
+ carpentry_saw: [-840, -800],
+ nut_and_bolt: [-880, -800],
+ gear: [-920, -800],
+ mouse_trap: [-960, -800],
+ bricks: [-1000, -800],
+ chains: [-1040, -800],
+ link: [-1080, -800],
+ broken_chain: [-1120, -800],
+ magnet: [-1160, -800],
+ gun: [-1200, -800],
+ bomb: [-1240, -800],
+ firecracker: [-1280, -800],
+ axe: [-1320, -800],
+ knife: [-1360, -800],
+ dagger: [-1400, -800],
+ crossed_swords: [-1440, -800],
+ shield: [-1480, -800],
+ smoking: [-1520, -800],
+ coffin: [-1560, -800],
+ headstone: [-1600, -800],
+ urn: [-1640, -800],
+ amphora: [0, -840],
+ crystal_ball: [-40, -840],
+ prayer_beads: [-80, -840],
+ nazar_amulet: [-120, -840],
+ hamsa: [-160, -840],
+ barber: [-200, -840],
+ alembic: [-240, -840],
+ telescope: [-280, -840],
+ microscope: [-320, -840],
+ hole: [-360, -840],
+ x_ray: [-400, -840],
+ adhesive_bandage: [-440, -840],
+ stethoscope: [-480, -840],
+ pill: [-520, -840],
+ syringe: [-560, -840],
+ drop_of_blood: [-600, -840],
+ dna: [-640, -840],
+ microbe: [-680, -840],
+ petri_dish: [-720, -840],
+ test_tube: [-760, -840],
+ thermometer: [-800, -840],
+ broom: [-840, -840],
+ plunger: [-880, -840],
+ basket: [-920, -840],
+ roll_of_paper: [-960, -840],
+ toilet: [-1000, -840],
+ potable_water: [-1040, -840],
+ shower: [-1080, -840],
+ bathtub: [-1120, -840],
+ bath: [-320, -1200],
+ soap: [-1160, -840],
+ toothbrush: [-1200, -840],
+ razor: [-1240, -840],
+ hair_pick: [-1280, -840],
+ sponge: [-1320, -840],
+ bucket: [-1360, -840],
+ squeeze_bottle: [-1400, -840],
+ bellhop: [-1440, -840],
+ key: [-1480, -840],
+ key2: [-1520, -840],
+ door: [-1560, -840],
+ chair: [-1600, -840],
+ couch: [-1640, -840],
+ bed: [0, -880],
+ sleeping_accommodation: [-360, -1200],
+ teddy_bear: [-40, -880],
+ nesting_dolls: [-80, -880],
+ frame_photo: [-120, -880],
+ mirror: [-160, -880],
+ window: [-200, -880],
+ shopping_bags: [-240, -880],
+ shopping_cart: [-280, -880],
+ gift: [-320, -880],
+ balloon: [-360, -880],
+ flags: [-400, -880],
+ ribbon: [-440, -880],
+ magic_wand: [-480, -880],
+ piñata: [-520, -880],
+ confetti_ball: [-560, -880],
+ tada: [-600, -880],
+ dolls: [-640, -880],
+ folding_hand_fan: [-680, -880],
+ izakaya_lantern: [-720, -880],
+ wind_chime: [-760, -880],
+ mirror_ball: [-800, -880],
+ red_envelope: [-840, -880],
+ envelope: [-880, -880],
+ envelope_with_arrow: [-920, -880],
+ incoming_envelope: [-960, -880],
+ e_mail: [-1000, -880],
+ love_letter: [-1040, -880],
+ inbox_tray: [-1080, -880],
+ outbox_tray: [-1120, -880],
+ package: [-1160, -880],
+ label: [-1200, -880],
+ placard: [-1240, -880],
+ mailbox_closed: [-1280, -880],
+ mailbox: [-1320, -880],
+ mailbox_with_mail: [-1360, -880],
+ mailbox_with_no_mail: [-1400, -880],
+ postbox: [-1440, -880],
+ postal_horn: [-1480, -880],
+ scroll: [-1520, -880],
+ page_with_curl: [-1560, -880],
+ page_facing_up: [-1600, -880],
+ bookmark_tabs: [-1640, -880],
+ receipt: [0, -920],
+ bar_chart: [-40, -920],
+ chart_with_upwards_trend: [-80, -920],
+ chart_with_downwards_trend: [-120, -920],
+ notepad_spiral: [-160, -920],
+ calendar_spiral: [-200, -920],
+ calendar: [-240, -920],
+ date: [-280, -920],
+ wastebasket: [-320, -920],
+ card_index: [-360, -920],
+ card_box: [-400, -920],
+ ballot_box: [-440, -920],
+ file_cabinet: [-480, -920],
+ clipboard: [-520, -920],
+ file_folder: [-560, -920],
+ open_file_folder: [-600, -920],
+ dividers: [-640, -920],
+ newspaper2: [-680, -920],
+ newspaper: [-720, -920],
+ notebook: [-760, -920],
+ notebook_with_decorative_cover: [-800, -920],
+ ledger: [-840, -920],
+ closed_book: [-880, -920],
+ green_book: [-920, -920],
+ blue_book: [-960, -920],
+ orange_book: [-1000, -920],
+ books: [-1040, -920],
+ book: [-1080, -920],
+ bookmark: [-1120, -920],
+ safety_pin: [-1160, -920],
+ paperclip: [-1200, -920],
+ paperclips: [-1240, -920],
+ triangular_ruler: [-1280, -920],
+ straight_ruler: [-1320, -920],
+ abacus: [-1360, -920],
+ pushpin: [-1400, -920],
+ round_pushpin: [-1440, -920],
+ scissors: [-1480, -920],
+ pen_ballpoint: [-1520, -920],
+ pen_fountain: [-1560, -920],
+ black_nib: [-1600, -920],
+ paintbrush: [-1640, -920],
+ crayon: [0, -960],
+ pencil: [-40, -960],
+ pencil2: [-80, -960],
+ mag: [-120, -960],
+ mag_right: [-160, -960],
+ lock_with_ink_pen: [-200, -960],
+ closed_lock_with_key: [-240, -960],
+ lock: [-280, -960],
+ unlock: [-320, -960],
+ pink_heart: [-360, -960],
+ heart: [-400, -960],
+ orange_heart: [-440, -960],
+ yellow_heart: [-480, -960],
+ green_heart: [-520, -960],
+ light_blue_heart: [-560, -960],
+ blue_heart: [-600, -960],
+ purple_heart: [-640, -960],
+ black_heart: [-680, -960],
+ grey_heart: [-720, -960],
+ white_heart: [-760, -960],
+ brown_heart: [-800, -960],
+ broken_heart: [-840, -960],
+ heart_exclamation: [-880, -960],
+ two_hearts: [-920, -960],
+ revolving_hearts: [-960, -960],
+ heartbeat: [-1000, -960],
+ heartpulse: [-1040, -960],
+ sparkling_heart: [-1080, -960],
+ cupid: [-1120, -960],
+ gift_heart: [-1160, -960],
+ mending_heart: [-1200, -960],
+ heart_on_fire: [-1240, -960],
+ heart_decoration: [-1280, -960],
+ peace: [-1320, -960],
+ cross: [-1360, -960],
+ star_and_crescent: [-1400, -960],
+ om_symbol: [-1440, -960],
+ wheel_of_dharma: [-1480, -960],
+ khanda: [-1520, -960],
+ star_of_david: [-1560, -960],
+ six_pointed_star: [-1600, -960],
+ menorah: [-1640, -960],
+ yin_yang: [0, -1000],
+ orthodox_cross: [-40, -1000],
+ place_of_worship: [-80, -1000],
+ ophiuchus: [-120, -1000],
+ aries: [-160, -1000],
+ taurus: [-200, -1000],
+ gemini: [-240, -1000],
+ cancer: [-280, -1000],
+ leo: [-320, -1000],
+ virgo: [-360, -1000],
+ libra: [-400, -1000],
+ scorpius: [-440, -1000],
+ sagittarius: [-480, -1000],
+ capricorn: [-520, -1000],
+ aquarius: [-560, -1000],
+ pisces: [-600, -1000],
+ id: [-640, -1000],
+ atom: [-680, -1000],
+ accept: [-720, -1000],
+ radioactive: [-760, -1000],
+ biohazard: [-800, -1000],
+ mobile_phone_off: [-840, -1000],
+ vibration_mode: [-880, -1000],
+ u6709: [-920, -1000],
+ u7121: [-960, -1000],
+ u7533: [-1000, -1000],
+ u55b6: [-1040, -1000],
+ u6708: [-1080, -1000],
+ eight_pointed_black_star: [-1120, -1000],
+ vs: [-1160, -1000],
+ white_flower: [-1200, -1000],
+ ideograph_advantage: [-1240, -1000],
+ secret: [-1280, -1000],
+ congratulations: [-1320, -1000],
+ u5408: [-1360, -1000],
+ u6e80: [-1400, -1000],
+ u5272: [-1440, -1000],
+ u7981: [-1480, -1000],
+ a: [-1520, -1000],
+ b: [-1560, -1000],
+ ab: [-1600, -1000],
+ cl: [-1640, -1000],
+ o2: [0, -1040],
+ sos: [-40, -1040],
+ x: [-80, -1040],
+ o: [-120, -1040],
+ octagonal_sign: [-160, -1040],
+ no_entry: [-200, -1040],
+ name_badge: [-240, -1040],
+ no_entry_sign: [-280, -1040],
+ anger: [-360, -1040],
+ hotsprings: [-400, -1040],
+ no_pedestrians: [-440, -1040],
+ do_not_litter: [-480, -1040],
+ no_bicycles: [-520, -1040],
+ non_potable_water: [-560, -1040],
+ underage: [-600, -1040],
+ no_mobile_phones: [-640, -1040],
+ no_smoking: [-680, -1040],
+ exclamation: [-720, -1040],
+ grey_exclamation: [-760, -1040],
+ question: [-800, -1040],
+ grey_question: [-840, -1040],
+ bangbang: [-880, -1040],
+ interrobang: [-920, -1040],
+ low_brightness: [-960, -1040],
+ high_brightness: [-1000, -1040],
+ part_alternation_mark: [-1040, -1040],
+ warning: [-1080, -1040],
+ children_crossing: [-1120, -1040],
+ trident: [-1160, -1040],
+ fleur_de_lis: [-1200, -1040],
+ beginner: [-1240, -1040],
+ recycle: [-1280, -1040],
+ white_check_mark: [-1320, -1040],
+ u6307: [-1360, -1040],
+ chart: [-1400, -1040],
+ sparkle: [-1440, -1040],
+ eight_spoked_asterisk: [-1480, -1040],
+ negative_squared_cross_mark: [-1520, -1040],
+ globe_with_meridians: [-1560, -1040],
+ diamond_shape_with_a_dot_inside: [-1600, -1040],
+ m: [-1640, -1040],
+ cyclone: [0, -1080],
+ zzz: [-40, -1080],
+ atm: [-80, -1080],
+ wc: [-120, -1080],
+ wheelchair: [-160, -1080],
+ parking: [-200, -1080],
+ elevator: [-240, -1080],
+ u7a7a: [-280, -1080],
+ sa: [-320, -1080],
+ passport_control: [-360, -1080],
+ customs: [-400, -1080],
+ baggage_claim: [-440, -1080],
+ left_luggage: [-480, -1080],
+ wireless: [-520, -1080],
+ mens: [-560, -1080],
+ womens: [-600, -1080],
+ baby_symbol: [-640, -1080],
+ restroom: [-680, -1080],
+ put_litter_in_its_place: [-720, -1080],
+ cinema: [-760, -1080],
+ signal_strength: [-800, -1080],
+ koko: [-840, -1080],
+ symbols: [-880, -1080],
+ information_source: [-920, -1080],
+ abc: [-960, -1080],
+ abcd: [-1000, -1080],
+ capital_abcd: [-1040, -1080],
+ ng: [-1080, -1080],
+ ok: [-1120, -1080],
+ up: [-1160, -1080],
+ cool: [-1200, -1080],
+ new: [-1240, -1080],
+ free: [-1280, -1080],
+ zero: [-1320, -1080],
+ one: [-1360, -1080],
+ two: [-1400, -1080],
+ three: [-1440, -1080],
+ four: [-1480, -1080],
+ five: [-1520, -1080],
+ six: [-1560, -1080],
+ seven: [-1600, -1080],
+ eight: [-1640, -1080],
+ nine: [0, -1120],
+ keycap_ten: [-40, -1120],
+ hash: [-120, -1120],
+ asterisk: [-160, -1120],
+ eject: [-200, -1120],
+ arrow_forward: [-240, -1120],
+ pause_button: [-280, -1120],
+ play_pause: [-320, -1120],
+ stop_button: [-360, -1120],
+ record_button: [-400, -1120],
+ track_next: [-440, -1120],
+ track_previous: [-480, -1120],
+ fast_forward: [-520, -1120],
+ rewind: [-560, -1120],
+ arrow_double_up: [-600, -1120],
+ arrow_double_down: [-640, -1120],
+ arrow_backward: [-680, -1120],
+ arrow_up_small: [-720, -1120],
+ arrow_down_small: [-760, -1120],
+ arrow_right: [-800, -1120],
+ arrow_left: [-840, -1120],
+ arrow_up: [-880, -1120],
+ arrow_down: [-920, -1120],
+ arrow_upper_right: [-960, -1120],
+ arrow_lower_right: [-1000, -1120],
+ arrow_lower_left: [-1040, -1120],
+ arrow_upper_left: [-1080, -1120],
+ arrow_up_down: [-1120, -1120],
+ left_right_arrow: [-1160, -1120],
+ arrow_right_hook: [-1200, -1120],
+ leftwards_arrow_with_hook: [-1240, -1120],
+ arrow_heading_up: [-1280, -1120],
+ arrow_heading_down: [-1320, -1120],
+ twisted_rightwards_arrows: [-1360, -1120],
+ repeat: [-1400, -1120],
+ repeat_one: [-1440, -1120],
+ arrows_counterclockwise: [-1480, -1120],
+ arrows_clockwise: [-1520, -1120],
+ musical_note: [-1560, -1120],
+ notes: [-1600, -1120],
+ heavy_plus_sign: [-1640, -1120],
+ heavy_minus_sign: [0, -1160],
+ heavy_division_sign: [-40, -1160],
+ heavy_multiplication_x: [-80, -1160],
+ heavy_equals_sign: [-120, -1160],
+ infinity: [-160, -1160],
+ heavy_dollar_sign: [-200, -1160],
+ currency_exchange: [-240, -1160],
+ tm: [-280, -1160],
+ copyright: [-320, -1160],
+ registered: [-360, -1160],
+ wavy_dash: [-400, -1160],
+ curly_loop: [-440, -1160],
+ loop: [-480, -1160],
+ end: [-520, -1160],
+ back: [-560, -1160],
+ on: [-600, -1160],
+ top: [-640, -1160],
+ soon: [-680, -1160],
+ heavy_check_mark: [-720, -1160],
+ ballot_box_with_check: [-760, -1160],
+ radio_button: [-800, -1160],
+ white_circle: [-840, -1160],
+ black_circle: [-880, -1160],
+ red_circle: [-920, -1160],
+ blue_circle: [-960, -1160],
+ brown_circle: [-1000, -1160],
+ purple_circle: [-1040, -1160],
+ green_circle: [-1080, -1160],
+ yellow_circle: [-1120, -1160],
+ orange_circle: [-1160, -1160],
+ small_red_triangle: [-1200, -1160],
+ small_red_triangle_down: [-1240, -1160],
+ small_orange_diamond: [-1280, -1160],
+ small_blue_diamond: [-1320, -1160],
+ large_orange_diamond: [-1360, -1160],
+ large_blue_diamond: [-1400, -1160],
+ white_square_button: [-1440, -1160],
+ black_square_button: [-1480, -1160],
+ black_small_square: [-1520, -1160],
+ white_small_square: [-1560, -1160],
+ black_medium_small_square: [-1600, -1160],
+ white_medium_small_square: [-1640, -1160],
+ black_medium_square: [0, -1200],
+ white_medium_square: [-40, -1200],
+ black_large_square: [-80, -1200],
+ white_large_square: [-120, -1200],
+ orange_square: [-160, -1200],
+ blue_square: [-200, -1200],
+ red_square: [-240, -1200],
+ brown_square: [-280, -1200],
+ purple_square: [-320, -1200],
+ green_square: [-360, -1200],
+ yellow_square: [-400, -1200],
+ speaker: [-440, -1200],
+ mute: [-480, -1200],
+ sound: [-520, -1200],
+ loud_sound: [-560, -1200],
+ bell: [-600, -1200],
+ no_bell: [-640, -1200],
+ mega: [-680, -1200],
+ loudspeaker: [-720, -1200],
+ speech_left: [-760, -1200],
+ eye_in_speech_bubble: [-800, -1200],
+ speech_balloon: [-840, -1200],
+ thought_balloon: [-880, -1200],
+ anger_right: [-920, -1200],
+ spades: [-960, -1200],
+ clubs: [-1000, -1200],
+ hearts: [-1040, -1200],
+ diamonds: [-1080, -1200],
+ black_joker: [-1120, -1200],
+ flower_playing_cards: [-1160, -1200],
+ mahjong: [-1200, -1200],
+ clock1: [-1240, -1200],
+ clock2: [-1280, -1200],
+ clock3: [-1320, -1200],
+ clock4: [-1360, -1200],
+ clock5: [-1400, -1200],
+ clock6: [-1440, -1200],
+ clock7: [-1480, -1200],
+ clock8: [-1520, -1200],
+ clock9: [-1560, -1200],
+ clock10: [-1600, -1200],
+ clock11: [-1640, -1200],
+ clock12: [0, -1240],
+ clock130: [-40, -1240],
+ clock230: [-80, -1240],
+ clock330: [-120, -1240],
+ clock430: [-160, -1240],
+ clock530: [-200, -1240],
+ clock630: [-240, -1240],
+ clock730: [-280, -1240],
+ clock830: [-320, -1240],
+ clock930: [-360, -1240],
+ clock1030: [-400, -1240],
+ clock1130: [-440, -1240],
+ clock1230: [-480, -1240],
+ female_sign: [-520, -1240],
+ male_sign: [-560, -1240],
+ transgender_symbol: [-600, -1240],
+ medical_symbol: [-640, -1240],
+ regional_indicator_z: [-680, -1240],
+ regional_indicator_y: [-720, -1240],
+ regional_indicator_x: [-760, -1240],
+ regional_indicator_w: [-800, -1240],
+ regional_indicator_v: [-840, -1240],
+ regional_indicator_u: [-880, -1240],
+ regional_indicator_t: [-920, -1240],
+ regional_indicator_s: [-960, -1240],
+ regional_indicator_r: [-1000, -1240],
+ regional_indicator_q: [-1040, -1240],
+ regional_indicator_p: [-1080, -1240],
+ regional_indicator_o: [-1120, -1240],
+ regional_indicator_n: [-1160, -1240],
+ regional_indicator_m: [-1200, -1240],
+ regional_indicator_l: [-1240, -1240],
+ regional_indicator_k: [-1280, -1240],
+ regional_indicator_j: [-1320, -1240],
+ regional_indicator_i: [-1360, -1240],
+ regional_indicator_h: [-1400, -1240],
+ regional_indicator_g: [-1440, -1240],
+ regional_indicator_f: [-1480, -1240],
+ regional_indicator_e: [-1520, -1240],
+ regional_indicator_d: [-1560, -1240],
+ regional_indicator_c: [-1600, -1240],
+ regional_indicator_b: [-1640, -1240],
+ regional_indicator_a: [0, -1280],
+ flag_white: [-40, -1280],
+ flag_black: [-80, -1280],
+ pirate_flag: [-120, -1280],
+ checkered_flag: [-160, -1280],
+ triangular_flag_on_post: [-200, -1280],
+ rainbow_flag: [-240, -1280],
+ transgender_flag: [-280, -1280],
+ united_nations: [-320, -1280],
+ flag_af: [-360, -1280],
+ flag_ax: [-400, -1280],
+ flag_al: [-440, -1280],
+ flag_dz: [-480, -1280],
+ flag_as: [-520, -1280],
+ flag_ad: [-560, -1280],
+ flag_ao: [-600, -1280],
+ flag_ai: [-640, -1280],
+ flag_aq: [-680, -1280],
+ flag_ag: [-720, -1280],
+ flag_ar: [-760, -1280],
+ flag_am: [-800, -1280],
+ flag_aw: [-840, -1280],
+ flag_au: [-880, -1280],
+ flag_at: [-920, -1280],
+ flag_az: [-960, -1280],
+ flag_bs: [-1000, -1280],
+ flag_bh: [-1040, -1280],
+ flag_bd: [-1080, -1280],
+ flag_bb: [-1120, -1280],
+ flag_by: [-1160, -1280],
+ flag_be: [-1200, -1280],
+ flag_bz: [-1240, -1280],
+ flag_bj: [-1280, -1280],
+ flag_bm: [-1320, -1280],
+ flag_bt: [-1360, -1280],
+ flag_bo: [-1400, -1280],
+ flag_ba: [-1440, -1280],
+ flag_bw: [-1480, -1280],
+ flag_br: [-1520, -1280],
+ flag_io: [-1560, -1280],
+ flag_vg: [-1600, -1280],
+ flag_bn: [-1640, -1280],
+ flag_bg: [0, -1320],
+ flag_bf: [-40, -1320],
+ flag_bi: [-80, -1320],
+ flag_kh: [-120, -1320],
+ flag_cm: [-160, -1320],
+ flag_ca: [-200, -1320],
+ flag_ic: [-240, -1320],
+ flag_cv: [-280, -1320],
+ flag_bq: [-320, -1320],
+ flag_ky: [-360, -1320],
+ flag_cf: [-400, -1320],
+ flag_td: [-440, -1320],
+ flag_cl: [-480, -1320],
+ flag_cn: [-520, -1320],
+ flag_cx: [-560, -1320],
+ flag_cc: [-600, -1320],
+ flag_co: [-640, -1320],
+ flag_km: [-680, -1320],
+ flag_cg: [-720, -1320],
+ flag_cd: [-760, -1320],
+ flag_ck: [-800, -1320],
+ flag_cr: [-840, -1320],
+ flag_ci: [-880, -1320],
+ flag_hr: [-920, -1320],
+ flag_cu: [-960, -1320],
+ flag_cw: [-1000, -1320],
+ flag_cy: [-1040, -1320],
+ flag_cz: [-1080, -1320],
+ flag_dk: [-1120, -1320],
+ flag_dj: [-1160, -1320],
+ flag_dm: [-1200, -1320],
+ flag_do: [-1240, -1320],
+ flag_ec: [-1280, -1320],
+ flag_eg: [-1320, -1320],
+ flag_sv: [-1360, -1320],
+ flag_gq: [-1400, -1320],
+ flag_er: [-1440, -1320],
+ flag_ee: [-1480, -1320],
+ flag_et: [-1520, -1320],
+ flag_eu: [-1560, -1320],
+ flag_fk: [-1600, -1320],
+ flag_fo: [-1640, -1320],
+ flag_fj: [0, -1360],
+ flag_fi: [-40, -1360],
+ flag_fr: [-80, -1360],
+ flag_gf: [-120, -1360],
+ flag_pf: [-160, -1360],
+ flag_tf: [-200, -1360],
+ flag_ga: [-240, -1360],
+ flag_gm: [-280, -1360],
+ flag_ge: [-320, -1360],
+ flag_de: [-360, -1360],
+ flag_gh: [-400, -1360],
+ flag_gi: [-440, -1360],
+ flag_gr: [-480, -1360],
+ flag_gl: [-520, -1360],
+ flag_gd: [-560, -1360],
+ flag_gp: [-600, -1360],
+ flag_gu: [-640, -1360],
+ flag_gt: [-680, -1360],
+ flag_gg: [-720, -1360],
+ flag_gn: [-760, -1360],
+ flag_gw: [-800, -1360],
+ flag_gy: [-840, -1360],
+ flag_ht: [-880, -1360],
+ flag_hn: [-920, -1360],
+ flag_hk: [-960, -1360],
+ flag_hu: [-1000, -1360],
+ flag_is: [-1040, -1360],
+ flag_in: [-1080, -1360],
+ flag_id: [-1120, -1360],
+ flag_ir: [-1160, -1360],
+ flag_iq: [-1200, -1360],
+ flag_ie: [-1240, -1360],
+ flag_im: [-1280, -1360],
+ flag_il: [-1320, -1360],
+ flag_it: [-1360, -1360],
+ flag_jm: [-1400, -1360],
+ flag_jp: [-1440, -1360],
+ crossed_flags: [-1480, -1360],
+ flag_je: [-1520, -1360],
+ flag_jo: [-1560, -1360],
+ flag_kz: [-1600, -1360],
+ flag_ke: [-1640, -1360],
+ flag_ki: [0, -1400],
+ flag_xk: [-40, -1400],
+ flag_kw: [-80, -1400],
+ flag_kg: [-120, -1400],
+ flag_la: [-160, -1400],
+ flag_lv: [-200, -1400],
+ flag_lb: [-240, -1400],
+ flag_ls: [-280, -1400],
+ flag_lr: [-320, -1400],
+ flag_ly: [-360, -1400],
+ flag_li: [-400, -1400],
+ flag_lt: [-440, -1400],
+ flag_lu: [-480, -1400],
+ flag_mo: [-520, -1400],
+ flag_mk: [-560, -1400],
+ flag_mg: [-600, -1400],
+ flag_mw: [-640, -1400],
+ flag_my: [-680, -1400],
+ flag_mv: [-720, -1400],
+ flag_ml: [-760, -1400],
+ flag_mt: [-800, -1400],
+ flag_mh: [-840, -1400],
+ flag_mq: [-880, -1400],
+ flag_mr: [-920, -1400],
+ flag_mu: [-960, -1400],
+ flag_yt: [-1000, -1400],
+ flag_mx: [-1040, -1400],
+ flag_fm: [-1080, -1400],
+ flag_md: [-1120, -1400],
+ flag_mc: [-1160, -1400],
+ flag_mn: [-1200, -1400],
+ flag_me: [-1240, -1400],
+ flag_ms: [-1280, -1400],
+ flag_ma: [-1320, -1400],
+ flag_mz: [-1360, -1400],
+ flag_mm: [-1400, -1400],
+ flag_na: [-1440, -1400],
+ flag_nr: [-1480, -1400],
+ flag_np: [-1520, -1400],
+ flag_nl: [-1560, -1400],
+ flag_nc: [-1600, -1400],
+ flag_nz: [-1640, -1400],
+ flag_ni: [0, -1440],
+ flag_ne: [-40, -1440],
+ flag_ng: [-80, -1440],
+ flag_nu: [-120, -1440],
+ flag_nf: [-160, -1440],
+ flag_kp: [-200, -1440],
+ flag_mp: [-240, -1440],
+ flag_no: [-280, -1440],
+ flag_om: [-320, -1440],
+ flag_pk: [-360, -1440],
+ flag_pw: [-400, -1440],
+ flag_ps: [-440, -1440],
+ flag_pa: [-480, -1440],
+ flag_pg: [-520, -1440],
+ flag_py: [-560, -1440],
+ flag_pe: [-600, -1440],
+ flag_ph: [-640, -1440],
+ flag_pn: [-680, -1440],
+ flag_pl: [-720, -1440],
+ flag_pt: [-760, -1440],
+ flag_pr: [-800, -1440],
+ flag_qa: [-840, -1440],
+ flag_re: [-880, -1440],
+ flag_ro: [-920, -1440],
+ flag_ru: [-960, -1440],
+ flag_rw: [-1000, -1440],
+ flag_ws: [-1040, -1440],
+ flag_sm: [-1080, -1440],
+ flag_st: [-1120, -1440],
+ flag_sa: [-1160, -1440],
+ flag_sn: [-1200, -1440],
+ flag_rs: [-1240, -1440],
+ flag_sc: [-1280, -1440],
+ flag_sl: [-1320, -1440],
+ flag_sg: [-1360, -1440],
+ flag_sx: [-1400, -1440],
+ flag_sk: [-1440, -1440],
+ flag_si: [-1480, -1440],
+ flag_gs: [-1520, -1440],
+ flag_sb: [-1560, -1440],
+ flag_so: [-1600, -1440],
+ flag_za: [-1640, -1440],
+ flag_kr: [0, -1480],
+ flag_ss: [-40, -1480],
+ flag_es: [-80, -1480],
+ flag_lk: [-120, -1480],
+ flag_bl: [-160, -1480],
+ flag_sh: [-200, -1480],
+ flag_kn: [-240, -1480],
+ flag_lc: [-280, -1480],
+ flag_pm: [-320, -1480],
+ flag_vc: [-360, -1480],
+ flag_sd: [-400, -1480],
+ flag_sr: [-440, -1480],
+ flag_sz: [-480, -1480],
+ flag_se: [-520, -1480],
+ flag_ch: [-560, -1480],
+ flag_sy: [-600, -1480],
+ flag_tw: [-640, -1480],
+ flag_tj: [-680, -1480],
+ flag_tz: [-720, -1480],
+ flag_th: [-760, -1480],
+ flag_tl: [-800, -1480],
+ flag_tg: [-840, -1480],
+ flag_tk: [-880, -1480],
+ flag_to: [-920, -1480],
+ flag_tt: [-960, -1480],
+ flag_tn: [-1000, -1480],
+ flag_tr: [-1040, -1480],
+ flag_tm: [-1080, -1480],
+ flag_tc: [-1120, -1480],
+ flag_vi: [-1160, -1480],
+ flag_tv: [-1200, -1480],
+ flag_ug: [-1240, -1480],
+ flag_ua: [-1280, -1480],
+ flag_ae: [-1320, -1480],
+ flag_gb: [-1360, -1480],
+ england: [-1400, -1480],
+ scotland: [-1440, -1480],
+ wales: [-1480, -1480],
+ flag_us: [-1520, -1480],
+ flag_uy: [-1560, -1480],
+ flag_uz: [-1600, -1480],
+ flag_vu: [-1640, -1480],
+ flag_va: [0, -1520],
+ flag_ve: [-40, -1520],
+ flag_vn: [-80, -1520],
+ flag_wf: [-120, -1520],
+ flag_eh: [-160, -1520],
+ flag_ye: [-200, -1520],
+ flag_zm: [-240, -1520],
+ flag_zw: [-280, -1520],
+ flag_ac: [-320, -1520],
+ flag_bv: [-360, -1520],
+ flag_cp: [-400, -1520],
+ flag_ea: [-440, -1520],
+ flag_dg: [-480, -1520],
+ flag_hm: [-520, -1520],
+ flag_mf: [-560, -1520],
+ flag_sj: [-600, -1520],
+ flag_ta: [-640, -1520],
+ flag_um: [-680, -1520],
+ },
+ },
+ 'custom-emoji': {
+ url: customEmojiUrl,
+ sheetSize: { width: 360, height: 72 },
+ spriteSize: 18,
+ items: {
+ smiling_imp: [0, 0],
+ cold_face: [-18, 0],
+ cry: [-36, 0],
+ kissing_heart: [-54, 0],
+ face_vomiting: [-72, 0],
+ face_with_diagonal_mouth: [-90, 0],
+ mask: [-108, 0],
+ face_with_monocle: [-126, 0],
+ open_mouth: [-144, 0],
+ stuck_out_tongue: [-162, 0],
+ smiley: [-180, 0],
+ kissing: [-198, 0],
+ kissing_smiling_eyes: [-216, 0],
+ money_mouth_face: [-234, 0],
+ face_exhaling: [-252, 0],
+ sleeping: [-270, 0],
+ disappointed: [-288, 0],
+ wink: [-306, 0],
+ crazy_face: [-324, 0],
+ anguished: [-342, 0],
+
+ astonished: [0, -18],
+ confounded: [-18, -18],
+ unamused: [-36, -18],
+ cowboy: [-54, -18],
+ // TODO Дописать остальные эмодзи
+ },
+ },
+ 'custom-emoji-grayscale': {
+ url: customEmojiGrayScaleUrl,
+ sheetSize: { width: 360, height: 72 },
+ spriteSize: 18,
+ items: {
+ smiling_imp: [0, 0],
+ cold_face: [-18, 0],
+ cry: [-36, 0],
+ kissing_heart: [-54, 0],
+ face_vomiting: [-72, 0],
+ face_with_diagonal_mouth: [-90, 0],
+ mask: [-108, 0],
+ face_with_monocle: [-126, 0],
+ open_mouth: [-144, 0],
+ stuck_out_tongue: [-162, 0],
+ smiley: [-180, 0],
+ kissing: [-198, 0],
+ kissing_smiling_eyes: [-216, 0],
+ money_mouth_face: [-234, 0],
+ face_exhaling: [-252, 0],
+ sleeping: [-270, 0],
+ disappointed: [-288, 0],
+ wink: [-306, 0],
+ crazy_face: [-324, 0],
+ anguished: [-342, 0],
+
+ astonished: [0, -18],
+ confounded: [-18, -18],
+ unamused: [-36, -18],
+ cowboy: [-54, -18],
+ // TODO Дописать остальные эмодзи
+ },
+ },
+}
+
+export type SpriteType = keyof typeof SpriteConfig
diff --git a/src/shared/directives/v-on-click-outside.ts b/src/shared/directives/v-on-click-outside.ts
new file mode 100644
index 0000000..0ddc5cd
--- /dev/null
+++ b/src/shared/directives/v-on-click-outside.ts
@@ -0,0 +1,31 @@
+import type { DirectiveBinding, ObjectDirective } from 'vue'
+
+type ClickOutsideHandler = (event: MouseEvent, element: HTMLElement) => void
+
+interface ClickOutsideElement extends HTMLElement {
+ _clickOutsideEvent: (event: MouseEvent) => void
+}
+
+export const vOnClickOutside: ObjectDirective = {
+ beforeMount(element: ClickOutsideElement, binding: DirectiveBinding): void {
+ element._clickOutsideEvent = (event: MouseEvent): void => {
+ const excludeComponent = binding.arg ? document.getElementById(binding.arg) : null
+ const target = event.target as Node
+
+ const isInsideElement = element === target || element.contains(target)
+ const isInsideExcluded =
+ excludeComponent != null &&
+ (excludeComponent === target || excludeComponent.contains(target))
+
+ if (!isInsideElement && !isInsideExcluded) {
+ binding.value(event, element)
+ }
+ }
+
+ document.addEventListener('click', element._clickOutsideEvent)
+ },
+
+ unmounted(element: ClickOutsideElement): void {
+ document.removeEventListener('click', element._clickOutsideEvent)
+ },
+}
diff --git a/src/shared/directives/v-tooltip.ts b/src/shared/directives/v-tooltip.ts
new file mode 100644
index 0000000..42f49b2
--- /dev/null
+++ b/src/shared/directives/v-tooltip.ts
@@ -0,0 +1,272 @@
+import { type Directive, type DirectiveBinding, h, render, type VNode } from 'vue'
+import {
+ computePosition,
+ autoUpdate,
+ flip,
+ shift,
+ offset,
+ arrow,
+ type Placement,
+ type Middleware,
+} from '@floating-ui/dom'
+import TooltipComponent from '@/shared/ui/PTooltip'
+
+export interface TooltipOptions {
+ content: string
+ placement?: Placement
+ trigger?: 'hover' | 'click' | 'manual'
+ maxWidth?: string | number
+ delay?: number
+ appendTo?: 'body' | 'parent' | string | HTMLElement
+}
+
+interface TooltipElement extends HTMLElement {
+ _tooltipCleanup?: () => void
+ _tooltipContainer?: HTMLElement
+ _tooltipVNode?: VNode
+ _tooltipShow?: () => void
+ _tooltipHide?: () => void
+ _tooltipToggle?: () => void
+}
+
+export const vTooltip: Directive = {
+ mounted(el, binding) {
+ initTooltip(el, binding)
+ },
+
+ updated(el, binding) {
+ const oldVal: TooltipOptions = binding.oldValue || ({} as TooltipOptions)
+ const newVal = binding.value || {}
+
+ if (oldVal.content !== newVal.content || oldVal.maxWidth !== newVal.maxWidth) {
+ updateTooltipProps(el, binding)
+ }
+ },
+
+ beforeUnmount(el) {
+ destroyTooltip(el)
+ },
+}
+
+function initTooltip(el: TooltipElement, binding: DirectiveBinding) {
+ const options = normalizeOptions(binding.value)
+
+ const container = document.createElement('div')
+
+ Object.assign(container.style, {
+ position: 'absolute',
+ visibility: 'visible',
+ inset: '0px auto auto 0px',
+ margin: '0',
+ [`z-index`]: 9999,
+ [`pointer-events`]: 'none',
+ [`max-width`]: `calc(100vw - 10px)`,
+ })
+
+ el._tooltipContainer = container
+
+ const vnode = h(TooltipComponent, {
+ text: options.content,
+ visible: false,
+ maxWidth: options.maxWidth,
+ actualPlacement: options.placement,
+ })
+
+ render(vnode, container)
+ el._tooltipVNode = vnode
+
+ let hoverTimeout: ReturnType
+
+ const show = () => {
+ if (el._tooltipCleanup) return // Уже показан
+
+ hoverTimeout = setTimeout(() => {
+ // Определяем куда маунтить
+ const targetContainer = resolveAppendTarget(options.appendTo, el)
+
+ if (!container.isConnected) {
+ targetContainer.appendChild(container)
+ }
+
+ const component = vnode.component
+ const tooltipEl = component?.exposed?.tooltipRef.value as HTMLElement
+ const arrowEl = component?.exposed?.arrowRef.value as HTMLElement
+
+ // Активируем анимацию появления
+ if (component) {
+ component.props.visible = true
+ component.update()
+ }
+
+ if (tooltipEl && arrowEl) {
+ // Запускаем Floating UI
+ el._tooltipCleanup = autoUpdate(el, tooltipEl, () => {
+ updatePosition(el, container, arrowEl, binding.value.placement || 'top')
+ })
+ }
+ }, options.delay)
+ }
+
+ // --- HIDE ---
+ const hide = () => {
+ clearTimeout(hoverTimeout)
+
+ const component = vnode.component
+ if (component) {
+ component.props.visible = false
+ component.update()
+ }
+
+ if (el._tooltipCleanup) {
+ el._tooltipCleanup()
+ el._tooltipCleanup = undefined
+ }
+
+ // Ждем окончания анимации
+ setTimeout(() => {
+ if (container.isConnected) {
+ // Проверка на "передумывание" (юзер быстро увел и вернул мышь)
+ const isVisible = component?.props.visible
+ if (!isVisible) {
+ container.remove()
+ }
+ }
+ }, 200)
+ }
+
+ const toggle = () => {
+ if (el._tooltipCleanup) hide()
+ else show()
+ }
+
+ // Сохраняем методы для ручного вызова или очистки
+ el._tooltipShow = show
+ el._tooltipHide = hide
+ el._tooltipToggle = toggle
+
+ // --- BIND EVENTS ---
+ const trigger = options.trigger
+ if (trigger === 'hover') {
+ el.addEventListener('mouseenter', show)
+ el.addEventListener('mouseleave', hide)
+ el.addEventListener('focus', show)
+ el.addEventListener('blur', hide)
+ } else if (trigger === 'click') {
+ el.addEventListener('click', toggle)
+ }
+}
+
+// Логика выбора родителя для appendChild
+function resolveAppendTarget(appendTo: TooltipOptions['appendTo'], el: HTMLElement): HTMLElement {
+ if (!appendTo || appendTo === 'body') return document.body
+
+ if (appendTo === 'parent') {
+ return el.parentElement || document.body
+ }
+
+ if (typeof appendTo === 'string') {
+ const found = document.querySelector(appendTo)
+ return (found as HTMLElement) || document.body
+ }
+
+ if (appendTo instanceof HTMLElement) {
+ return appendTo
+ }
+
+ return document.body
+}
+
+function updatePosition(
+ reference: HTMLElement,
+ floating: HTMLElement,
+ arrowEl: HTMLElement,
+ placement: Placement,
+) {
+ const middleware: Middleware[] = [
+ offset(8),
+ flip(),
+ shift({ padding: 5 }),
+ arrow({ element: arrowEl }),
+ ]
+
+ computePosition(reference, floating, {
+ placement,
+ middleware,
+ }).then(({ x, y, placement: finalPlacement, middlewareData }) => {
+ Object.assign(floating.style, {
+ transform: `translate(${x}px, ${y}px)`,
+ })
+
+ // Обновляем data-side для CSS стрелки
+ floating.setAttribute('data-side', finalPlacement)
+
+ // Позиционируем стрелку
+ if (middlewareData.arrow) {
+ const { x: arrowX, y: arrowY } = middlewareData.arrow
+
+ const placementParts = finalPlacement?.split('-')
+ if (!placementParts[0]) return
+
+ const staticSide = {
+ top: 'bottom',
+ right: 'left',
+ bottom: 'top',
+ left: 'right',
+ }[placementParts[0]] as string
+
+ Object.assign(arrowEl.style, {
+ left: arrowX != null ? `${arrowX}px` : '',
+ top: arrowY != null ? `${arrowY}px` : '',
+ right: '',
+ bottom: '',
+ [staticSide]: '-4px', // Сдвиг стрелки наружу
+ })
+ }
+ })
+}
+
+function updateTooltipProps(el: TooltipElement, binding: DirectiveBinding) {
+ if (el._tooltipVNode && el._tooltipVNode.component) {
+ const options = normalizeOptions(binding.value)
+ const props = el._tooltipVNode.component.props
+ props.text = options.content
+ props.maxWidth = options.maxWidth
+ el._tooltipVNode.component.update()
+ }
+}
+
+function destroyTooltip(el: TooltipElement) {
+ if (el._tooltipCleanup) el._tooltipCleanup()
+
+ if (el._tooltipShow) {
+ el.removeEventListener('mouseenter', el._tooltipShow)
+ el.removeEventListener('mouseleave', el._tooltipHide!)
+ el.removeEventListener('focus', el._tooltipShow)
+ el.removeEventListener('blur', el._tooltipHide!)
+ el.removeEventListener('click', el._tooltipToggle!)
+ }
+
+ if (el._tooltipContainer) {
+ render(null, el._tooltipContainer)
+ el._tooltipContainer.remove()
+ }
+
+ delete el._tooltipVNode
+ delete el._tooltipContainer
+}
+
+function normalizeOptions(value: TooltipOptions): Required<
+ Omit
+> & {
+ placement: Placement
+ appendTo: TooltipOptions['appendTo']
+} {
+ return {
+ content: value.content || '',
+ placement: value.placement || 'top',
+ trigger: value.trigger || 'hover',
+ maxWidth: value.maxWidth || 'auto',
+ delay: value.delay || 200,
+ appendTo: value.appendTo || 'body',
+ }
+}
diff --git a/src/shared/ui/PAnchor/PAnchor.vue b/src/shared/ui/PAnchor/PAnchor.vue
new file mode 100644
index 0000000..e49aea9
--- /dev/null
+++ b/src/shared/ui/PAnchor/PAnchor.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PAnchor/__stories__/PAnchor.stories.ts b/src/shared/ui/PAnchor/__stories__/PAnchor.stories.ts
new file mode 100644
index 0000000..c2ecf34
--- /dev/null
+++ b/src/shared/ui/PAnchor/__stories__/PAnchor.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PAnchor from '../PAnchor.vue'
+
+export default {
+ title: 'Components/Inputs/PAnchor',
+ component: PAnchor,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PAnchor },
+ template: `
+ Anchor `,
+ }),
+}
diff --git a/src/shared/ui/PAnchor/__tests__/PAnchor.test.ts b/src/shared/ui/PAnchor/__tests__/PAnchor.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PAnchor/index.ts b/src/shared/ui/PAnchor/index.ts
new file mode 100644
index 0000000..f65fde5
--- /dev/null
+++ b/src/shared/ui/PAnchor/index.ts
@@ -0,0 +1,3 @@
+import PAnchor from './PAnchor.vue'
+
+export default PAnchor
diff --git a/src/shared/ui/PAvatar/PAvatar.vue b/src/shared/ui/PAvatar/PAvatar.vue
new file mode 100644
index 0000000..b4abdfb
--- /dev/null
+++ b/src/shared/ui/PAvatar/PAvatar.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PAvatar/__stories__/PAvatar.stories.ts b/src/shared/ui/PAvatar/__stories__/PAvatar.stories.ts
new file mode 100644
index 0000000..8264e12
--- /dev/null
+++ b/src/shared/ui/PAvatar/__stories__/PAvatar.stories.ts
@@ -0,0 +1,44 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PAvatar from '../PAvatar.vue'
+import PIcon from '../../PIcon/PIcon.vue'
+import SvgDefs from '@/app/ui/SvgDefs'
+
+export default {
+ title: 'Components/Data Display/PAvatar',
+ component: PAvatar,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PAvatar, SvgDefs, PIcon },
+ template: `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ }),
+}
diff --git a/src/shared/ui/PAvatar/__tests__/PAvatar.test.ts b/src/shared/ui/PAvatar/__tests__/PAvatar.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PAvatar/index.ts b/src/shared/ui/PAvatar/index.ts
new file mode 100644
index 0000000..6028a8a
--- /dev/null
+++ b/src/shared/ui/PAvatar/index.ts
@@ -0,0 +1,3 @@
+import PAvatar from './PAvatar.vue'
+
+export default PAvatar
diff --git a/src/shared/ui/PButton/PButton.vue b/src/shared/ui/PButton/PButton.vue
new file mode 100644
index 0000000..25c81a0
--- /dev/null
+++ b/src/shared/ui/PButton/PButton.vue
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PButton/__stories__/PButton.stories.ts b/src/shared/ui/PButton/__stories__/PButton.stories.ts
new file mode 100644
index 0000000..ef2b10e
--- /dev/null
+++ b/src/shared/ui/PButton/__stories__/PButton.stories.ts
@@ -0,0 +1,178 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+import { action } from 'storybook/actions'
+
+import PButton from '../PButton.vue'
+
+export default {
+ title: 'Components/Inputs/PButton',
+ component: PButton,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Views: Story = {
+ args: {
+ onClick: action('onClick'),
+ },
+ render: () => ({
+ components: { PButton },
+ template: `
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ `,
+ }),
+}
+
+export const Loading: Story = {
+ argTypes: {
+ loading: {
+ control: { type: 'boolean' },
+ },
+ },
+ args: {
+ loading: true,
+ },
+ render: (args) => ({
+ components: { PButton },
+ setup() {
+ return { args }
+ },
+ template: `
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ Button
+
+
+ `,
+ }),
+}
+
+export const Sizes: Story = {
+ args: {
+ onClick: action('onClick'),
+ },
+ render: () => ({
+ components: { PButton },
+ template: `
+
+ Button
+
+
+
+ Button
+
+ `,
+ }),
+}
diff --git a/src/shared/ui/PButton/__tests__/PButton.test.ts b/src/shared/ui/PButton/__tests__/PButton.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PButton/index.ts b/src/shared/ui/PButton/index.ts
new file mode 100644
index 0000000..dc70440
--- /dev/null
+++ b/src/shared/ui/PButton/index.ts
@@ -0,0 +1,3 @@
+import PButton from './PButton.vue'
+
+export default PButton
diff --git a/src/shared/ui/PCheckbox/PCheckbox.vue b/src/shared/ui/PCheckbox/PCheckbox.vue
new file mode 100644
index 0000000..1d5db5a
--- /dev/null
+++ b/src/shared/ui/PCheckbox/PCheckbox.vue
@@ -0,0 +1,79 @@
+
+
+
+
+ {{ props.label }}
+
+
+
+
+
+
diff --git a/src/shared/ui/PCheckbox/__stories__/PCheckbox.stories.ts b/src/shared/ui/PCheckbox/__stories__/PCheckbox.stories.ts
new file mode 100644
index 0000000..f45ba9a
--- /dev/null
+++ b/src/shared/ui/PCheckbox/__stories__/PCheckbox.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PCheckbox from '../PCheckbox.vue'
+
+export default {
+ title: 'Components/Inputs/PCheckbox',
+ component: PCheckbox,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PCheckbox },
+ template:
+ ' ',
+ }),
+}
diff --git a/src/shared/ui/PCheckbox/__tests__/PCheckbox.test.ts b/src/shared/ui/PCheckbox/__tests__/PCheckbox.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PCheckbox/index.ts b/src/shared/ui/PCheckbox/index.ts
new file mode 100644
index 0000000..d75cfe9
--- /dev/null
+++ b/src/shared/ui/PCheckbox/index.ts
@@ -0,0 +1,3 @@
+import PCheckbox from './PCheckbox.vue'
+
+export default PCheckbox
diff --git a/src/shared/ui/PCloseButton/PCloseButton.vue b/src/shared/ui/PCloseButton/PCloseButton.vue
new file mode 100644
index 0000000..0caf21e
--- /dev/null
+++ b/src/shared/ui/PCloseButton/PCloseButton.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PCloseButton/__stories__/PCloseButton.stories.ts b/src/shared/ui/PCloseButton/__stories__/PCloseButton.stories.ts
new file mode 100644
index 0000000..e3b1251
--- /dev/null
+++ b/src/shared/ui/PCloseButton/__stories__/PCloseButton.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PCloseButton from '../PCloseButton.vue'
+
+export default {
+ title: 'Components/Inputs/PCloseButton',
+ component: PCloseButton,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PCloseButton },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PCloseButton/__tests__/PCloseButton.test.ts b/src/shared/ui/PCloseButton/__tests__/PCloseButton.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PCloseButton/index.ts b/src/shared/ui/PCloseButton/index.ts
new file mode 100644
index 0000000..78327de
--- /dev/null
+++ b/src/shared/ui/PCloseButton/index.ts
@@ -0,0 +1,3 @@
+import PCloseButton from './PCloseButton.vue'
+
+export default PCloseButton
diff --git a/src/shared/ui/PFieldHint/PFieldHint.vue b/src/shared/ui/PFieldHint/PFieldHint.vue
new file mode 100644
index 0000000..e2353db
--- /dev/null
+++ b/src/shared/ui/PFieldHint/PFieldHint.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PFieldHint/__stories__/PFieldHint.stories.ts b/src/shared/ui/PFieldHint/__stories__/PFieldHint.stories.ts
new file mode 100644
index 0000000..4ff0f3a
--- /dev/null
+++ b/src/shared/ui/PFieldHint/__stories__/PFieldHint.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PFieldHint from '../PFieldHint.vue'
+
+export default {
+ title: 'Components/Data Display/PFieldHint',
+ component: PFieldHint,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PFieldHint },
+ template: `
+ Field hint `,
+ }),
+}
diff --git a/src/shared/ui/PFieldHint/__tests__/PFieldHint.test.ts b/src/shared/ui/PFieldHint/__tests__/PFieldHint.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PFieldHint/index.ts b/src/shared/ui/PFieldHint/index.ts
new file mode 100644
index 0000000..8ca9b4c
--- /dev/null
+++ b/src/shared/ui/PFieldHint/index.ts
@@ -0,0 +1,3 @@
+import PFieldHint from './PFieldHint.vue'
+
+export default PFieldHint
diff --git a/src/shared/ui/PIcon/PIcon.vue b/src/shared/ui/PIcon/PIcon.vue
new file mode 100644
index 0000000..7697c65
--- /dev/null
+++ b/src/shared/ui/PIcon/PIcon.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PIcon/__stories__/PIcon.stories.ts b/src/shared/ui/PIcon/__stories__/PIcon.stories.ts
new file mode 100644
index 0000000..050a9d8
--- /dev/null
+++ b/src/shared/ui/PIcon/__stories__/PIcon.stories.ts
@@ -0,0 +1,40 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PIcon from '../PIcon.vue'
+
+export default {
+ title: 'Components/Data Display/PIcon',
+ component: PIcon,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Sizes: Story = {
+ args: {},
+ render: () => ({
+ components: { PIcon },
+ template: `
+
+
+
+
+
+ `,
+ }),
+}
diff --git a/src/shared/ui/PIcon/__tests__/PIcon.test.ts b/src/shared/ui/PIcon/__tests__/PIcon.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PIcon/index.ts b/src/shared/ui/PIcon/index.ts
new file mode 100644
index 0000000..5ef6bb2
--- /dev/null
+++ b/src/shared/ui/PIcon/index.ts
@@ -0,0 +1,3 @@
+import PIcon from './PIcon.vue'
+
+export default PIcon
diff --git a/src/shared/ui/PInput/PInput.vue b/src/shared/ui/PInput/PInput.vue
new file mode 100644
index 0000000..b1e0d70
--- /dev/null
+++ b/src/shared/ui/PInput/PInput.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PInput/__stories__/PInput.stories.ts b/src/shared/ui/PInput/__stories__/PInput.stories.ts
new file mode 100644
index 0000000..aa2e7bb
--- /dev/null
+++ b/src/shared/ui/PInput/__stories__/PInput.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PInput from '../PInput.vue'
+
+export default {
+ title: 'Components/Inputs/PInput',
+ component: PInput,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PInput },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PInput/__tests__/PInput.test.ts b/src/shared/ui/PInput/__tests__/PInput.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PInput/index.ts b/src/shared/ui/PInput/index.ts
new file mode 100644
index 0000000..9567a16
--- /dev/null
+++ b/src/shared/ui/PInput/index.ts
@@ -0,0 +1,3 @@
+import PInput from './PInput.vue'
+
+export default PInput
diff --git a/src/shared/ui/PLabel/PLabel.vue b/src/shared/ui/PLabel/PLabel.vue
new file mode 100644
index 0000000..cbe7d1a
--- /dev/null
+++ b/src/shared/ui/PLabel/PLabel.vue
@@ -0,0 +1,53 @@
+
+
+
+ {{ props.text }}*
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PLabel/__stories__/PLabel.stories.ts b/src/shared/ui/PLabel/__stories__/PLabel.stories.ts
new file mode 100644
index 0000000..947604d
--- /dev/null
+++ b/src/shared/ui/PLabel/__stories__/PLabel.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PLabel from '../PLabel.vue'
+
+export default {
+ title: 'Components/Data Display/PLabel',
+ component: PLabel,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PLabel },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PLabel/__tests__/PLabel.test.ts b/src/shared/ui/PLabel/__tests__/PLabel.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PLabel/index.ts b/src/shared/ui/PLabel/index.ts
new file mode 100644
index 0000000..992bdc1
--- /dev/null
+++ b/src/shared/ui/PLabel/index.ts
@@ -0,0 +1,3 @@
+import PLabel from './PLabel.vue'
+
+export default PLabel
diff --git a/src/shared/ui/PLayerModal/PLayerModal.vue b/src/shared/ui/PLayerModal/PLayerModal.vue
new file mode 100644
index 0000000..e36afd5
--- /dev/null
+++ b/src/shared/ui/PLayerModal/PLayerModal.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/ui/PLayerModal/__stories__/PLayerModal.stories.ts b/src/shared/ui/PLayerModal/__stories__/PLayerModal.stories.ts
new file mode 100644
index 0000000..b1c6ea4
--- /dev/null
+++ b/src/shared/ui/PLayerModal/__stories__/PLayerModal.stories.ts
@@ -0,0 +1 @@
+export default {}
diff --git a/src/shared/ui/PLayerModal/__tests__/PLayerModal.test.ts b/src/shared/ui/PLayerModal/__tests__/PLayerModal.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PLayerModal/index.ts b/src/shared/ui/PLayerModal/index.ts
new file mode 100644
index 0000000..98e6142
--- /dev/null
+++ b/src/shared/ui/PLayerModal/index.ts
@@ -0,0 +1,3 @@
+import PLayerModal from './PLayerModal.vue'
+
+export default PLayerModal
diff --git a/src/shared/ui/PModal/PModal.vue b/src/shared/ui/PModal/PModal.vue
new file mode 100644
index 0000000..f647092
--- /dev/null
+++ b/src/shared/ui/PModal/PModal.vue
@@ -0,0 +1,271 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PModal/__stories__/PModal.stories.ts b/src/shared/ui/PModal/__stories__/PModal.stories.ts
new file mode 100644
index 0000000..188c2dd
--- /dev/null
+++ b/src/shared/ui/PModal/__stories__/PModal.stories.ts
@@ -0,0 +1,54 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PModal from '../PModal.vue'
+
+export default {
+ title: 'Components/Data Display/PModal',
+ component: PModal,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PModal },
+ template: `
+
+
+
+ Custom body
+
+
+ `,
+ }),
+}
+
+export const WithSlots: Story = {
+ args: {},
+ render: () => ({
+ components: { PModal },
+ template: `
+
+
+ Header
+ custom-text
+
+
+
+ custom-body-text
+ custom-body-text
+
+
+
+ custom-footer-text
+ custom-footer-text
+
+ `,
+ }),
+}
diff --git a/src/shared/ui/PModal/__tests__/PModal.test.ts b/src/shared/ui/PModal/__tests__/PModal.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PModal/index.ts b/src/shared/ui/PModal/index.ts
new file mode 100644
index 0000000..06afb63
--- /dev/null
+++ b/src/shared/ui/PModal/index.ts
@@ -0,0 +1,3 @@
+import PModal from './PModal.vue'
+
+export default PModal
diff --git a/src/shared/ui/PPopover/PPopover.vue b/src/shared/ui/PPopover/PPopover.vue
new file mode 100644
index 0000000..0349fcb
--- /dev/null
+++ b/src/shared/ui/PPopover/PPopover.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/ui/PPopover/__stories__/PPopover.stories.ts b/src/shared/ui/PPopover/__stories__/PPopover.stories.ts
new file mode 100644
index 0000000..eff6850
--- /dev/null
+++ b/src/shared/ui/PPopover/__stories__/PPopover.stories.ts
@@ -0,0 +1,22 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PPopover from '../PPopover.vue'
+
+export default {
+ title: 'Components/Data Display/PPopover',
+ component: PPopover,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PPopover },
+ template: `
+
+ test
+ `,
+ }),
+}
diff --git a/src/shared/ui/PPopover/__tests__/PPopover.test.ts b/src/shared/ui/PPopover/__tests__/PPopover.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PPopover/index.ts b/src/shared/ui/PPopover/index.ts
new file mode 100644
index 0000000..9d503c2
--- /dev/null
+++ b/src/shared/ui/PPopover/index.ts
@@ -0,0 +1,3 @@
+import PPopover from './PPopover.vue'
+
+export default PPopover
diff --git a/src/shared/ui/PRadio/PRadio.vue b/src/shared/ui/PRadio/PRadio.vue
new file mode 100644
index 0000000..87f5fa7
--- /dev/null
+++ b/src/shared/ui/PRadio/PRadio.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ props.label }}
+
+
+
+
+ {{ props.description }}
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PRadio/__stories__/PRadio.stories.ts b/src/shared/ui/PRadio/__stories__/PRadio.stories.ts
new file mode 100644
index 0000000..52cae50
--- /dev/null
+++ b/src/shared/ui/PRadio/__stories__/PRadio.stories.ts
@@ -0,0 +1,25 @@
+import { ref } from 'vue'
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PRadio from '../PRadio.vue'
+
+export default {
+ title: 'Components/Inputs/PRadio',
+ component: PRadio,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ render: (args) => ({
+ components: { PRadio },
+ setup() {
+ const model = ref(false)
+ const value = 'option1'
+ return { args, value, model }
+ },
+ template: `
+ Radio `,
+ }),
+}
diff --git a/src/shared/ui/PRadio/__tests__/PRadio.test.ts b/src/shared/ui/PRadio/__tests__/PRadio.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PRadio/index.ts b/src/shared/ui/PRadio/index.ts
new file mode 100644
index 0000000..a46326e
--- /dev/null
+++ b/src/shared/ui/PRadio/index.ts
@@ -0,0 +1,3 @@
+import PRadio from './PRadio.vue'
+
+export default PRadio
diff --git a/src/shared/ui/PRadioGroup/PRadioGroup.vue b/src/shared/ui/PRadioGroup/PRadioGroup.vue
new file mode 100644
index 0000000..57de613
--- /dev/null
+++ b/src/shared/ui/PRadioGroup/PRadioGroup.vue
@@ -0,0 +1,92 @@
+
+
+
+ {{ props.label }}
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PRadioGroup/__stories__/PRadioGroup.stories.ts b/src/shared/ui/PRadioGroup/__stories__/PRadioGroup.stories.ts
new file mode 100644
index 0000000..9eea0a9
--- /dev/null
+++ b/src/shared/ui/PRadioGroup/__stories__/PRadioGroup.stories.ts
@@ -0,0 +1,44 @@
+import { ref } from 'vue'
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PRadioGroup from '../PRadioGroup.vue'
+
+export default {
+ title: 'Components/Inputs/PRadioGroup',
+ component: PRadioGroup,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ render: (args) => ({
+ components: { PRadioGroup },
+ setup() {
+ const model = ref(false)
+ const options = [
+ {
+ label: 'Option 1',
+ value: 'option1',
+ description: 'Description for option 1',
+ icon: 'misc.hashtag',
+ },
+ {
+ label: 'Option 2',
+ value: 'option2',
+ description: 'Description for option 2',
+ icon: 'misc.speaker',
+ },
+ {
+ label: 'Option 3',
+ value: 'option3',
+ description: 'Description for option 3',
+ icon: 'misc.chat-bubbles',
+ },
+ ]
+ return { args, options, model }
+ },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PRadioGroup/__tests__/PRadioGroup.test.ts b/src/shared/ui/PRadioGroup/__tests__/PRadioGroup.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PRadioGroup/index.ts b/src/shared/ui/PRadioGroup/index.ts
new file mode 100644
index 0000000..0eea0de
--- /dev/null
+++ b/src/shared/ui/PRadioGroup/index.ts
@@ -0,0 +1,4 @@
+import PRadioGroup, { type RadioOption } from './PRadioGroup.vue'
+
+export default PRadioGroup
+export type { RadioOption }
diff --git a/src/shared/ui/PScrim/PScrim.vue b/src/shared/ui/PScrim/PScrim.vue
new file mode 100644
index 0000000..d026720
--- /dev/null
+++ b/src/shared/ui/PScrim/PScrim.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PScrim/__stories__/PScrim.stories.ts b/src/shared/ui/PScrim/__stories__/PScrim.stories.ts
new file mode 100644
index 0000000..4f20b44
--- /dev/null
+++ b/src/shared/ui/PScrim/__stories__/PScrim.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PScrim from '../PScrim.vue'
+
+export default {
+ title: 'Components/Data Display/PScrim',
+ component: PScrim,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PScrim },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PScrim/__tests__/PScrim.test.ts b/src/shared/ui/PScrim/__tests__/PScrim.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PScrim/index.ts b/src/shared/ui/PScrim/index.ts
new file mode 100644
index 0000000..83c5802
--- /dev/null
+++ b/src/shared/ui/PScrim/index.ts
@@ -0,0 +1,3 @@
+import PScrim from './PScrim.vue'
+
+export default PScrim
diff --git a/src/shared/ui/PSectionDivider/PSectionDivider.vue b/src/shared/ui/PSectionDivider/PSectionDivider.vue
new file mode 100644
index 0000000..cb784fd
--- /dev/null
+++ b/src/shared/ui/PSectionDivider/PSectionDivider.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/src/shared/ui/PSectionDivider/__stories__/PSectionDivider.stories.ts b/src/shared/ui/PSectionDivider/__stories__/PSectionDivider.stories.ts
new file mode 100644
index 0000000..35543cf
--- /dev/null
+++ b/src/shared/ui/PSectionDivider/__stories__/PSectionDivider.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PSectionDivider from '../PSectionDivider.vue'
+
+export default {
+ title: 'Components/Data Display/PSectionDivider',
+ component: PSectionDivider,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PSectionDivider },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PSectionDivider/__tests__/PSectionDivider.test.ts b/src/shared/ui/PSectionDivider/__tests__/PSectionDivider.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PSectionDivider/index.ts b/src/shared/ui/PSectionDivider/index.ts
new file mode 100644
index 0000000..25efaf4
--- /dev/null
+++ b/src/shared/ui/PSectionDivider/index.ts
@@ -0,0 +1,3 @@
+import PSectionDivider from './PSectionDivider.vue'
+
+export default PSectionDivider
diff --git a/src/shared/ui/PSelect/PSelect.vue b/src/shared/ui/PSelect/PSelect.vue
new file mode 100644
index 0000000..43ad6f0
--- /dev/null
+++ b/src/shared/ui/PSelect/PSelect.vue
@@ -0,0 +1,201 @@
+
+
+
{{ label }}
+
{{ displayValue }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PSelect/PSelectList.vue b/src/shared/ui/PSelect/PSelectList.vue
new file mode 100644
index 0000000..3ffb1f2
--- /dev/null
+++ b/src/shared/ui/PSelect/PSelectList.vue
@@ -0,0 +1,143 @@
+
+
+
+
+ {{ getText(item) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PSelect/__stories__/PSelect.stories.ts b/src/shared/ui/PSelect/__stories__/PSelect.stories.ts
new file mode 100644
index 0000000..2207499
--- /dev/null
+++ b/src/shared/ui/PSelect/__stories__/PSelect.stories.ts
@@ -0,0 +1,26 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PSelect from '../PSelect.vue'
+
+export default {
+ title: 'Components/Inputs/PSelect',
+ component: PSelect,
+ args: {
+ items: [
+ { value: '1', title: 'Option 1' },
+ { value: '2', title: 'Option 2' },
+ { value: '3', title: 'Option 3' },
+ ],
+ },
+ render: (args) => ({
+ components: { PSelect },
+ setup() {
+ return { args }
+ },
+ template: ` `,
+ }),
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {}
diff --git a/src/shared/ui/PSelect/__tests__/PSelect.test.ts b/src/shared/ui/PSelect/__tests__/PSelect.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PSelect/index.ts b/src/shared/ui/PSelect/index.ts
new file mode 100644
index 0000000..99ae79e
--- /dev/null
+++ b/src/shared/ui/PSelect/index.ts
@@ -0,0 +1,3 @@
+import PSelect from './PSelect.vue'
+
+export default PSelect
diff --git a/src/shared/ui/PServerIcon/PServerIcon.vue b/src/shared/ui/PServerIcon/PServerIcon.vue
new file mode 100644
index 0000000..21ce261
--- /dev/null
+++ b/src/shared/ui/PServerIcon/PServerIcon.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+ {{ acronym }}
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PServerIcon/__stories__/PServerIcon.stories.ts b/src/shared/ui/PServerIcon/__stories__/PServerIcon.stories.ts
new file mode 100644
index 0000000..b93bac9
--- /dev/null
+++ b/src/shared/ui/PServerIcon/__stories__/PServerIcon.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PServerIcon from '../PServerIcon.vue'
+
+export default {
+ title: 'Components/Data Display/PInput',
+ component: PServerIcon,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PServerIcon },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PServerIcon/__tests__/PServerIcon.test.ts b/src/shared/ui/PServerIcon/__tests__/PServerIcon.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PServerIcon/index.ts b/src/shared/ui/PServerIcon/index.ts
new file mode 100644
index 0000000..ad60de5
--- /dev/null
+++ b/src/shared/ui/PServerIcon/index.ts
@@ -0,0 +1,3 @@
+import PServerIcon from './PServerIcon.vue'
+
+export default PServerIcon
diff --git a/src/shared/ui/PSkeleton/PSkeleton.vue b/src/shared/ui/PSkeleton/PSkeleton.vue
new file mode 100644
index 0000000..3cf4a94
--- /dev/null
+++ b/src/shared/ui/PSkeleton/PSkeleton.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PSkeleton/__stories__/PSkeleton.stories.ts b/src/shared/ui/PSkeleton/__stories__/PSkeleton.stories.ts
new file mode 100644
index 0000000..a151a16
--- /dev/null
+++ b/src/shared/ui/PSkeleton/__stories__/PSkeleton.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PSkeleton from '../PSkeleton.vue'
+
+export default {
+ title: 'Components/Data Display/PSkeleton',
+ component: PSkeleton,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PSkeleton },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PSkeleton/__tests__/PSkeleton.test.ts b/src/shared/ui/PSkeleton/__tests__/PSkeleton.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PSkeleton/index.ts b/src/shared/ui/PSkeleton/index.ts
new file mode 100644
index 0000000..69393b2
--- /dev/null
+++ b/src/shared/ui/PSkeleton/index.ts
@@ -0,0 +1,3 @@
+import PSkeleton from './PSkeleton.vue'
+
+export default PSkeleton
diff --git a/src/shared/ui/PSlider/PSlider.vue b/src/shared/ui/PSlider/PSlider.vue
new file mode 100644
index 0000000..9e8ce3b
--- /dev/null
+++ b/src/shared/ui/PSlider/PSlider.vue
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/ui/PSlider/__stories__/PSlider.stories.ts b/src/shared/ui/PSlider/__stories__/PSlider.stories.ts
new file mode 100644
index 0000000..a9c0269
--- /dev/null
+++ b/src/shared/ui/PSlider/__stories__/PSlider.stories.ts
@@ -0,0 +1,25 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PSlider from '../PSlider.vue'
+import { ref } from 'vue'
+
+export default {
+ title: 'Components/Inputs/PSlider',
+ component: PSlider,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ render: (args) => ({
+ components: { PSlider },
+ setup() {
+ const value = ref(0)
+ return { args, value }
+ },
+ template: `
+
+ `,
+ }),
+}
diff --git a/src/shared/ui/PSlider/__tests__/PSlider.test.ts b/src/shared/ui/PSlider/__tests__/PSlider.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PSpriteImage/PSpriteImage.vue b/src/shared/ui/PSpriteImage/PSpriteImage.vue
new file mode 100644
index 0000000..24edb2c
--- /dev/null
+++ b/src/shared/ui/PSpriteImage/PSpriteImage.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/ui/PSpriteImage/__stories__/PSpriteImage.stories.ts b/src/shared/ui/PSpriteImage/__stories__/PSpriteImage.stories.ts
new file mode 100644
index 0000000..e7da4bc
--- /dev/null
+++ b/src/shared/ui/PSpriteImage/__stories__/PSpriteImage.stories.ts
@@ -0,0 +1,24 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PSpriteImage from '../PSpriteImage.vue'
+
+export default {
+ title: 'Components/Data Display/PSpriteImage',
+ component: PSpriteImage,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PSpriteImage },
+ template: `
+
+
+
+
+ `,
+ }),
+}
diff --git a/src/shared/ui/PSpriteImage/__tests__/PSpriteImage.test.ts b/src/shared/ui/PSpriteImage/__tests__/PSpriteImage.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PSpriteImage/index.ts b/src/shared/ui/PSpriteImage/index.ts
new file mode 100644
index 0000000..0a58874
--- /dev/null
+++ b/src/shared/ui/PSpriteImage/index.ts
@@ -0,0 +1,3 @@
+import PSpriteImage from './PSpriteImage.vue'
+
+export default PSpriteImage
diff --git a/src/shared/ui/PStatusMessage/PStatusMessage.vue b/src/shared/ui/PStatusMessage/PStatusMessage.vue
new file mode 100644
index 0000000..d2f6253
--- /dev/null
+++ b/src/shared/ui/PStatusMessage/PStatusMessage.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+ {{ props.text }}
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PStatusMessage/__stories__/PStatusMessage.stories.ts b/src/shared/ui/PStatusMessage/__stories__/PStatusMessage.stories.ts
new file mode 100644
index 0000000..a82466f
--- /dev/null
+++ b/src/shared/ui/PStatusMessage/__stories__/PStatusMessage.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PStatusMessage from '../PStatusMessage.vue'
+
+export default {
+ title: 'Components/Data Display/PStatusMessage',
+ component: PStatusMessage,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PStatusMessage },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PStatusMessage/__tests__/PStatusMessage.test.ts b/src/shared/ui/PStatusMessage/__tests__/PStatusMessage.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PStatusMessage/index.ts b/src/shared/ui/PStatusMessage/index.ts
new file mode 100644
index 0000000..9f6c9e8
--- /dev/null
+++ b/src/shared/ui/PStatusMessage/index.ts
@@ -0,0 +1,3 @@
+import PStatusMessage from './PStatusMessage.vue'
+
+export default PStatusMessage
diff --git a/src/shared/ui/PSwitch/PSwitch.vue b/src/shared/ui/PSwitch/PSwitch.vue
new file mode 100644
index 0000000..3733bac
--- /dev/null
+++ b/src/shared/ui/PSwitch/PSwitch.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PSwitch/__stories__/PSwitch.stories.ts b/src/shared/ui/PSwitch/__stories__/PSwitch.stories.ts
new file mode 100644
index 0000000..a191483
--- /dev/null
+++ b/src/shared/ui/PSwitch/__stories__/PSwitch.stories.ts
@@ -0,0 +1,24 @@
+import { ref } from 'vue'
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PSwitch from '../PSwitch.vue'
+
+export default {
+ title: 'Components/Inputs/PSwitch',
+ component: PSwitch,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ render: (args) => ({
+ components: { PSwitch },
+ setup() {
+ const model = ref(false)
+ return { args, model }
+ },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PSwitch/__tests__/PSwitch.test.ts b/src/shared/ui/PSwitch/__tests__/PSwitch.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PSwitch/index.ts b/src/shared/ui/PSwitch/index.ts
new file mode 100644
index 0000000..98267d3
--- /dev/null
+++ b/src/shared/ui/PSwitch/index.ts
@@ -0,0 +1,3 @@
+import PSwitch from './PSwitch.vue'
+
+export default PSwitch
diff --git a/src/shared/ui/PTabBar/PTabBar.vue b/src/shared/ui/PTabBar/PTabBar.vue
new file mode 100644
index 0000000..28e1191
--- /dev/null
+++ b/src/shared/ui/PTabBar/PTabBar.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/ui/PTabBar/__stories__/PTabBar.stories.ts b/src/shared/ui/PTabBar/__stories__/PTabBar.stories.ts
new file mode 100644
index 0000000..a21d2e0
--- /dev/null
+++ b/src/shared/ui/PTabBar/__stories__/PTabBar.stories.ts
@@ -0,0 +1,24 @@
+import { ref } from 'vue'
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PTabBar from '../PTabBar.vue'
+
+export default {
+ title: 'Components/Inputs/PTabBar',
+ component: PTabBar,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ render: (args) => ({
+ components: { PTabBar },
+ setup() {
+ const model = ref(false)
+ return { args, model }
+ },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PTabBar/__tests__/PTabBar.test.ts b/src/shared/ui/PTabBar/__tests__/PTabBar.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PTabBar/index.ts b/src/shared/ui/PTabBar/index.ts
new file mode 100644
index 0000000..2fdf8ec
--- /dev/null
+++ b/src/shared/ui/PTabBar/index.ts
@@ -0,0 +1,3 @@
+import PTabBar from './PTabBar.vue'
+
+export default PTabBar
diff --git a/src/shared/ui/PTextArea/PTextarea.vue b/src/shared/ui/PTextArea/PTextarea.vue
new file mode 100644
index 0000000..a45480c
--- /dev/null
+++ b/src/shared/ui/PTextArea/PTextarea.vue
@@ -0,0 +1,222 @@
+
+
+
+
+ {{ props.placeholder }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/shared/ui/PTextArea/__stories__/PTextarea.stories.ts b/src/shared/ui/PTextArea/__stories__/PTextarea.stories.ts
new file mode 100644
index 0000000..7beae75
--- /dev/null
+++ b/src/shared/ui/PTextArea/__stories__/PTextarea.stories.ts
@@ -0,0 +1,25 @@
+import { ref } from 'vue'
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PTextarea from '../PTextarea.vue'
+
+export default {
+ title: 'Components/Inputs/PTextarea',
+ component: PTextarea,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ render: (args) => ({
+ components: { PTextarea },
+ setup() {
+ const model = ref('')
+ return { args, model }
+ },
+ template: `
+
+ `,
+ }),
+}
diff --git a/src/shared/ui/PTextArea/__tests__/PTextarea.test.ts b/src/shared/ui/PTextArea/__tests__/PTextarea.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PTextArea/index.ts b/src/shared/ui/PTextArea/index.ts
new file mode 100644
index 0000000..5e4f7a2
--- /dev/null
+++ b/src/shared/ui/PTextArea/index.ts
@@ -0,0 +1,3 @@
+import PTextArea from './PTextarea.vue'
+
+export default PTextArea
diff --git a/src/shared/ui/PTextField/PTextField.vue b/src/shared/ui/PTextField/PTextField.vue
new file mode 100644
index 0000000..baddc58
--- /dev/null
+++ b/src/shared/ui/PTextField/PTextField.vue
@@ -0,0 +1,164 @@
+/* stylelint-disable no-descending-specificity */ /* stylelint-disable selector-class-pattern */
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PTextField/__stories__/PTextField.stories.ts b/src/shared/ui/PTextField/__stories__/PTextField.stories.ts
new file mode 100644
index 0000000..e9bbf9b
--- /dev/null
+++ b/src/shared/ui/PTextField/__stories__/PTextField.stories.ts
@@ -0,0 +1,21 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PTextField from '../PTextField.vue'
+
+export default {
+ title: 'Components/Inputs/PTextField',
+ component: PTextField,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PTextField },
+ template: `
+
+ `,
+ }),
+}
diff --git a/src/shared/ui/PTextField/__tests__/PTextField.test.ts b/src/shared/ui/PTextField/__tests__/PTextField.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PTextField/index.ts b/src/shared/ui/PTextField/index.ts
new file mode 100644
index 0000000..14cb31f
--- /dev/null
+++ b/src/shared/ui/PTextField/index.ts
@@ -0,0 +1,3 @@
+import PTextField from './PTextField.vue'
+
+export default PTextField
diff --git a/src/shared/ui/PToggle/PToggle.vue b/src/shared/ui/PToggle/PToggle.vue
new file mode 100644
index 0000000..6b1fc2f
--- /dev/null
+++ b/src/shared/ui/PToggle/PToggle.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PToggle/__stories__/PToggle.stories.ts b/src/shared/ui/PToggle/__stories__/PToggle.stories.ts
new file mode 100644
index 0000000..a56c1f5
--- /dev/null
+++ b/src/shared/ui/PToggle/__stories__/PToggle.stories.ts
@@ -0,0 +1,24 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PToggle from '../PToggle.vue'
+import PIcon from '../../PIcon/PIcon.vue'
+
+export default {
+ title: 'Components/Inputs/PToggle',
+ component: PToggle,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PToggle, PIcon },
+ template: `
+
+
+
+ `,
+ }),
+}
diff --git a/src/shared/ui/PToggle/__tests__/PToggle.test.ts b/src/shared/ui/PToggle/__tests__/PToggle.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PToggle/index.ts b/src/shared/ui/PToggle/index.ts
new file mode 100644
index 0000000..6971f7d
--- /dev/null
+++ b/src/shared/ui/PToggle/index.ts
@@ -0,0 +1,3 @@
+import PToggle from './PToggle.vue'
+
+export default PToggle
diff --git a/src/shared/ui/PTooltip/PTooltip.vue b/src/shared/ui/PTooltip/PTooltip.vue
new file mode 100644
index 0000000..5a89c90
--- /dev/null
+++ b/src/shared/ui/PTooltip/PTooltip.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PTooltip/__stories__/PTooltip.stories.ts b/src/shared/ui/PTooltip/__stories__/PTooltip.stories.ts
new file mode 100644
index 0000000..6bdcbec
--- /dev/null
+++ b/src/shared/ui/PTooltip/__stories__/PTooltip.stories.ts
@@ -0,0 +1,21 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PTooltip from '../PTooltip.vue'
+
+export default {
+ title: 'Components/Data Display/PTooltip',
+ component: PTooltip,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PTooltip },
+ template: `
+
+ `,
+ }),
+}
diff --git a/src/shared/ui/PTooltip/__tests__/PTooltip.test.ts b/src/shared/ui/PTooltip/__tests__/PTooltip.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PTooltip/index.ts b/src/shared/ui/PTooltip/index.ts
new file mode 100644
index 0000000..a6aed2d
--- /dev/null
+++ b/src/shared/ui/PTooltip/index.ts
@@ -0,0 +1,3 @@
+import PTooltip from './PTooltip.vue'
+
+export default PTooltip
diff --git a/src/shared/ui/PUploadIcon/PUploadIcon.vue b/src/shared/ui/PUploadIcon/PUploadIcon.vue
new file mode 100644
index 0000000..55fcdaf
--- /dev/null
+++ b/src/shared/ui/PUploadIcon/PUploadIcon.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shared/ui/PUploadIcon/__stories__/PUploadIcon.stories.ts b/src/shared/ui/PUploadIcon/__stories__/PUploadIcon.stories.ts
new file mode 100644
index 0000000..1ad432e
--- /dev/null
+++ b/src/shared/ui/PUploadIcon/__stories__/PUploadIcon.stories.ts
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PUploadIcon from '../PUploadIcon.vue'
+
+export default {
+ title: 'Components/Inputs/PUploadIcon',
+ component: PUploadIcon,
+ parameters: {},
+} as Meta
+
+type Story = StoryObj
+
+export const Default: Story = {
+ args: {},
+ render: () => ({
+ components: { PUploadIcon },
+ template: `
+ `,
+ }),
+}
diff --git a/src/shared/ui/PUploadIcon/__tests__/PUploadIcon.test.ts b/src/shared/ui/PUploadIcon/__tests__/PUploadIcon.test.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/shared/ui/PUploadIcon/index.ts b/src/shared/ui/PUploadIcon/index.ts
new file mode 100644
index 0000000..3275540
--- /dev/null
+++ b/src/shared/ui/PUploadIcon/index.ts
@@ -0,0 +1,3 @@
+import PUploadIcon from './PUploadIcon.vue'
+
+export default PUploadIcon
diff --git a/src/shared/ui/index.ts b/src/shared/ui/index.ts
new file mode 100644
index 0000000..c6a3191
--- /dev/null
+++ b/src/shared/ui/index.ts
@@ -0,0 +1,26 @@
+export { default as PAnchor } from './PAnchor'
+export { default as PButton } from './PButton'
+export { default as PCheckbox } from './PCheckbox'
+export { default as PIcon } from './PIcon'
+export { default as PInput } from './PInput'
+export { default as PLabel } from './PLabel'
+export { default as PSelect } from './PSelect'
+export { default as PTextField } from './PTextField'
+export { default as PAvatar } from './PAvatar'
+export { default as PToggle } from './PToggle'
+export { default as PFieldHint } from './PFieldHint'
+export { default as PStatusMessage } from './PStatusMessage'
+export { default as PModal } from './PModal'
+export { default as PScrim } from './PScrim'
+export { default as PCloseButton } from './PCloseButton'
+export { default as PUploadIcon } from './PUploadIcon'
+export { default as PSkeleton } from './PSkeleton'
+export { default as PTooltip } from './PTooltip'
+export { default as PRadio } from './PRadio'
+export { default as PRadioGroup, type RadioOption } from './PRadioGroup'
+export { default as PTextarea } from './PTextArea'
+export { default as PServerIcon } from './PServerIcon'
+export { default as PSpriteImage } from './PSpriteImage'
+export { default as PTabBar } from './PTabBar'
+export { default as PPopover } from './PPopover'
+export { default as PSectionDivider } from './PSectionDivider'
diff --git a/src/shared/utils/index.ts b/src/shared/utils/index.ts
new file mode 100644
index 0000000..dc6034c
--- /dev/null
+++ b/src/shared/utils/index.ts
@@ -0,0 +1 @@
+export * from './storage.utils'
diff --git a/src/shared/utils/storage.utils.ts b/src/shared/utils/storage.utils.ts
new file mode 100644
index 0000000..58eb8ab
--- /dev/null
+++ b/src/shared/utils/storage.utils.ts
@@ -0,0 +1,16 @@
+import { mediaConfig } from '@/shared/config'
+
+export const StoragePaths = {
+ userAvatar: (userId: string, hash: string) => `${mediaConfig.mediaUrl}/avatars/${userId}/${hash}`,
+
+ serverIcon: (serverId: string, hash: string) =>
+ `${mediaConfig.mediaUrl}/icons/${serverId}/${hash}`,
+
+ channelIcon: (channelId: string, hash: string) =>
+ `${mediaConfig.mediaUrl}/channels/${channelId}/icons/${hash}`,
+
+ defaultUserAvatar: (userId: string) => `${mediaConfig.mediaUrl}/embed/avatars/${userId}.png`,
+
+ attachment: (channelId: string, attachmentId: string, filename: string) =>
+ `${mediaConfig.mediaUrl}/attachments/${channelId}/${attachmentId}/${filename}`,
+}
diff --git a/src/stores/counter.ts b/src/stores/counter.ts
deleted file mode 100644
index b6757ba..0000000
--- a/src/stores/counter.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { ref, computed } from 'vue'
-import { defineStore } from 'pinia'
-
-export const useCounterStore = defineStore('counter', () => {
- const count = ref(0)
- const doubleCount = computed(() => count.value * 2)
- function increment() {
- count.value++
- }
-
- return { count, doubleCount, increment }
-})
diff --git a/src/widgets/app-sidebar/AppSidebar.vue b/src/widgets/app-sidebar/AppSidebar.vue
new file mode 100644
index 0000000..db23cc0
--- /dev/null
+++ b/src/widgets/app-sidebar/AppSidebar.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
diff --git a/src/widgets/app-sidebar/index.ts b/src/widgets/app-sidebar/index.ts
new file mode 100644
index 0000000..c189e36
--- /dev/null
+++ b/src/widgets/app-sidebar/index.ts
@@ -0,0 +1,3 @@
+import AppSidebar from './AppSidebar.vue'
+
+export default AppSidebar
diff --git a/src/widgets/app-topbar/AppTopbar.vue b/src/widgets/app-topbar/AppTopbar.vue
new file mode 100644
index 0000000..da7b666
--- /dev/null
+++ b/src/widgets/app-topbar/AppTopbar.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
{{ activeServer?.name || route.meta.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/widgets/app-topbar/index.ts b/src/widgets/app-topbar/index.ts
new file mode 100644
index 0000000..18921ec
--- /dev/null
+++ b/src/widgets/app-topbar/index.ts
@@ -0,0 +1,3 @@
+import AppTopbar from './AppTopbar.vue'
+
+export default AppTopbar
diff --git a/src/widgets/auth-box/AuthBox.vue b/src/widgets/auth-box/AuthBox.vue
new file mode 100644
index 0000000..ded7b75
--- /dev/null
+++ b/src/widgets/auth-box/AuthBox.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
diff --git a/src/widgets/auth-box/index.ts b/src/widgets/auth-box/index.ts
new file mode 100644
index 0000000..3d7faaf
--- /dev/null
+++ b/src/widgets/auth-box/index.ts
@@ -0,0 +1,3 @@
+import AuthBox from './AuthBox.vue'
+
+export default AuthBox
diff --git a/src/widgets/auth-layout/AuthLayout.vue b/src/widgets/auth-layout/AuthLayout.vue
new file mode 100644
index 0000000..891dc05
--- /dev/null
+++ b/src/widgets/auth-layout/AuthLayout.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/widgets/auth-layout/index.ts b/src/widgets/auth-layout/index.ts
new file mode 100644
index 0000000..a6faeb7
--- /dev/null
+++ b/src/widgets/auth-layout/index.ts
@@ -0,0 +1,3 @@
+import AuthLayout from './AuthLayout.vue'
+
+export default AuthLayout
diff --git a/src/widgets/call-connect/index.ts b/src/widgets/call-connect/index.ts
new file mode 100644
index 0000000..2119534
--- /dev/null
+++ b/src/widgets/call-connect/index.ts
@@ -0,0 +1,3 @@
+import CallConnect from './ui/CallConnect.vue'
+
+export default CallConnect
diff --git a/src/widgets/call-connect/ui/CallConnect.vue b/src/widgets/call-connect/ui/CallConnect.vue
new file mode 100644
index 0000000..0407d8c
--- /dev/null
+++ b/src/widgets/call-connect/ui/CallConnect.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+ {{ channel?.name }}
+
+
+
+
+ Сейчас в голосовом чате никого нет
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/call-controls/index.ts b/src/widgets/call-controls/index.ts
new file mode 100644
index 0000000..9d72108
--- /dev/null
+++ b/src/widgets/call-controls/index.ts
@@ -0,0 +1,3 @@
+import CallControls from './ui/CallControls.vue'
+
+export default CallControls
diff --git a/src/widgets/call-controls/ui/CallControls.vue b/src/widgets/call-controls/ui/CallControls.vue
new file mode 100644
index 0000000..2667164
--- /dev/null
+++ b/src/widgets/call-controls/ui/CallControls.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/channel-call/index.ts b/src/widgets/channel-call/index.ts
new file mode 100644
index 0000000..019a1db
--- /dev/null
+++ b/src/widgets/channel-call/index.ts
@@ -0,0 +1,3 @@
+import ChannelCall from './ui/ChannelCall.vue'
+
+export default ChannelCall
diff --git a/src/widgets/channel-call/ui/ChannelCall.vue b/src/widgets/channel-call/ui/ChannelCall.vue
new file mode 100644
index 0000000..4b78ad0
--- /dev/null
+++ b/src/widgets/channel-call/ui/ChannelCall.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/channel-chat/index.ts b/src/widgets/channel-chat/index.ts
new file mode 100644
index 0000000..e36aefd
--- /dev/null
+++ b/src/widgets/channel-chat/index.ts
@@ -0,0 +1,3 @@
+import ChannelChat from './ui/ChannelChat.vue'
+
+export default ChannelChat
diff --git a/src/widgets/channel-chat/ui/ChannelChat.vue b/src/widgets/channel-chat/ui/ChannelChat.vue
new file mode 100644
index 0000000..8284ac0
--- /dev/null
+++ b/src/widgets/channel-chat/ui/ChannelChat.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/channel-list/ChannelList.vue b/src/widgets/channel-list/ChannelList.vue
new file mode 100644
index 0000000..cd1bd98
--- /dev/null
+++ b/src/widgets/channel-list/ChannelList.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/widgets/channel-list/ListGroup.vue b/src/widgets/channel-list/ListGroup.vue
new file mode 100644
index 0000000..1874e8f
--- /dev/null
+++ b/src/widgets/channel-list/ListGroup.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
diff --git a/src/widgets/channel-list/index.ts b/src/widgets/channel-list/index.ts
new file mode 100644
index 0000000..c5a1676
--- /dev/null
+++ b/src/widgets/channel-list/index.ts
@@ -0,0 +1,3 @@
+import ChannelList from './ChannelList.vue'
+
+export default ChannelList
diff --git a/src/widgets/chat-header/ChatHeader.vue b/src/widgets/chat-header/ChatHeader.vue
new file mode 100644
index 0000000..d86050f
--- /dev/null
+++ b/src/widgets/chat-header/ChatHeader.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
diff --git a/src/widgets/chat-header/index.ts b/src/widgets/chat-header/index.ts
new file mode 100644
index 0000000..f06ffb8
--- /dev/null
+++ b/src/widgets/chat-header/index.ts
@@ -0,0 +1,3 @@
+import ChatHeader from './ChatHeader.vue'
+
+export default ChatHeader
diff --git a/src/widgets/connection-status/ConnectionStatus.vue b/src/widgets/connection-status/ConnectionStatus.vue
new file mode 100644
index 0000000..ccce76c
--- /dev/null
+++ b/src/widgets/connection-status/ConnectionStatus.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/connection-status/index.ts b/src/widgets/connection-status/index.ts
new file mode 100644
index 0000000..2a741df
--- /dev/null
+++ b/src/widgets/connection-status/index.ts
@@ -0,0 +1,3 @@
+import ConnectionStatus from './ConnectionStatus.vue'
+
+export default ConnectionStatus
diff --git a/src/widgets/create-channel-modal/CreateChannelModal.vue b/src/widgets/create-channel-modal/CreateChannelModal.vue
new file mode 100644
index 0000000..00dc31c
--- /dev/null
+++ b/src/widgets/create-channel-modal/CreateChannelModal.vue
@@ -0,0 +1,77 @@
+
+
+
+ Создать канал
+
+ в Текстовые каналы
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/create-channel-modal/index.ts b/src/widgets/create-channel-modal/index.ts
new file mode 100644
index 0000000..2ecbed5
--- /dev/null
+++ b/src/widgets/create-channel-modal/index.ts
@@ -0,0 +1,3 @@
+import CreateChannelModal from './CreateChannelModal.vue'
+
+export default CreateChannelModal
diff --git a/src/widgets/create-server-modal/CreateServerModal.vue b/src/widgets/create-server-modal/CreateServerModal.vue
new file mode 100644
index 0000000..9567f06
--- /dev/null
+++ b/src/widgets/create-server-modal/CreateServerModal.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/create-server-modal/index.ts b/src/widgets/create-server-modal/index.ts
new file mode 100644
index 0000000..aa5d093
--- /dev/null
+++ b/src/widgets/create-server-modal/index.ts
@@ -0,0 +1,3 @@
+import CreateServerModal from './CreateServerModal.vue'
+
+export default CreateServerModal
diff --git a/src/widgets/index.ts b/src/widgets/index.ts
new file mode 100644
index 0000000..c521769
--- /dev/null
+++ b/src/widgets/index.ts
@@ -0,0 +1,7 @@
+import AppTopbar from './app-topbar'
+import AuthBox from './auth-box'
+import AuthLayout from './auth-layout'
+import MainLayout from './main-layout'
+import AppSidebar from './app-sidebar'
+
+export { AppTopbar, AuthBox, AuthLayout, MainLayout, AppSidebar }
diff --git a/src/widgets/main-layout/MainLayout.vue b/src/widgets/main-layout/MainLayout.vue
new file mode 100644
index 0000000..3cf7e35
--- /dev/null
+++ b/src/widgets/main-layout/MainLayout.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
diff --git a/src/widgets/main-layout/index.ts b/src/widgets/main-layout/index.ts
new file mode 100644
index 0000000..7070edb
--- /dev/null
+++ b/src/widgets/main-layout/index.ts
@@ -0,0 +1,3 @@
+import MainLayout from './MainLayout.vue'
+
+export default MainLayout
diff --git a/src/widgets/message-feed/MessageFeed.vue b/src/widgets/message-feed/MessageFeed.vue
new file mode 100644
index 0000000..6edfca6
--- /dev/null
+++ b/src/widgets/message-feed/MessageFeed.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
diff --git a/src/widgets/message-feed/index.ts b/src/widgets/message-feed/index.ts
new file mode 100644
index 0000000..fe95bf3
--- /dev/null
+++ b/src/widgets/message-feed/index.ts
@@ -0,0 +1,3 @@
+import MessageFeed from './MessageFeed.vue'
+
+export default MessageFeed
diff --git a/src/widgets/no-channel/NoChannel.vue b/src/widgets/no-channel/NoChannel.vue
new file mode 100644
index 0000000..1d0f547
--- /dev/null
+++ b/src/widgets/no-channel/NoChannel.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
Нет текстовых каналов
+
+
+ Вы оказались в странном месте. У вас нет доступа к текстовым каналам, или на этом сервере
+ их нет.
+
+
+
+
+
+
+
+
+
diff --git a/src/widgets/no-channel/index.ts b/src/widgets/no-channel/index.ts
new file mode 100644
index 0000000..8a71865
--- /dev/null
+++ b/src/widgets/no-channel/index.ts
@@ -0,0 +1,3 @@
+import NoChannel from './NoChannel.vue'
+
+export default NoChannel
diff --git a/src/widgets/people-column/index.ts b/src/widgets/people-column/index.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/widgets/people-column/ui/PeopleColumn.vue b/src/widgets/people-column/ui/PeopleColumn.vue
new file mode 100644
index 0000000..13671e0
--- /dev/null
+++ b/src/widgets/people-column/ui/PeopleColumn.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+ Отправлено (1)
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/people-list/index.ts b/src/widgets/people-list/index.ts
new file mode 100644
index 0000000..13901f4
--- /dev/null
+++ b/src/widgets/people-list/index.ts
@@ -0,0 +1,3 @@
+import PeopleList from './ui/PeopleList.vue'
+
+export default PeopleList
diff --git a/src/widgets/people-list/ui/ActionButton.vue b/src/widgets/people-list/ui/ActionButton.vue
new file mode 100644
index 0000000..076fd34
--- /dev/null
+++ b/src/widgets/people-list/ui/ActionButton.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/people-list/ui/PeopleList.vue b/src/widgets/people-list/ui/PeopleList.vue
new file mode 100644
index 0000000..39134b5
--- /dev/null
+++ b/src/widgets/people-list/ui/PeopleList.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/people-list/ui/PeopleListItem.vue b/src/widgets/people-list/ui/PeopleListItem.vue
new file mode 100644
index 0000000..48fc282
--- /dev/null
+++ b/src/widgets/people-list/ui/PeopleListItem.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/widgets/server-list/ListItem.vue b/src/widgets/server-list/ListItem.vue
new file mode 100644
index 0000000..4ed714a
--- /dev/null
+++ b/src/widgets/server-list/ListItem.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ initials }}
+
+
+
+
+
+
+
+
diff --git a/src/widgets/server-list/ServerList.vue b/src/widgets/server-list/ServerList.vue
new file mode 100644
index 0000000..8c0984f
--- /dev/null
+++ b/src/widgets/server-list/ServerList.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/widgets/server-list/index.ts b/src/widgets/server-list/index.ts
new file mode 100644
index 0000000..ed7e242
--- /dev/null
+++ b/src/widgets/server-list/index.ts
@@ -0,0 +1,3 @@
+import ServerList from './ServerList.vue'
+
+export default ServerList
diff --git a/src/widgets/user-area/UserArea.vue b/src/widgets/user-area/UserArea.vue
new file mode 100644
index 0000000..8a228ac
--- /dev/null
+++ b/src/widgets/user-area/UserArea.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
{{ currentUser?.global_name }}
+
+
+
В сети
+
+
{{ currentUser?.username }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/widgets/user-area/index.ts b/src/widgets/user-area/index.ts
new file mode 100644
index 0000000..417a7c6
--- /dev/null
+++ b/src/widgets/user-area/index.ts
@@ -0,0 +1,3 @@
+import UserArea from './UserArea.vue'
+
+export default UserArea
diff --git a/src/widgets/user-info/index.ts b/src/widgets/user-info/index.ts
new file mode 100644
index 0000000..f2ab0f3
--- /dev/null
+++ b/src/widgets/user-info/index.ts
@@ -0,0 +1,3 @@
+import UserInfo from './ui/UserInfo.vue'
+
+export default UserInfo
diff --git a/src/widgets/user-info/ui/UserInfo.vue b/src/widgets/user-info/ui/UserInfo.vue
new file mode 100644
index 0000000..8d2fa8e
--- /dev/null
+++ b/src/widgets/user-info/ui/UserInfo.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+ dreamer#0001
+
+
+
+ Не в сети
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vite.config.ts b/vite.config.ts
index 4217010..dff096d 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -4,15 +4,14 @@ import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
+const isStorybookProcess = process.env.npm_lifecycle_event === 'storybook'
+
// https://vite.dev/config/
export default defineConfig({
- plugins: [
- vue(),
- vueDevTools(),
- ],
+ plugins: [vue(), !isStorybookProcess && vueDevTools()],
resolve: {
alias: {
- '@': fileURLToPath(new URL('./src', import.meta.url))
+ '@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
})