diff --git a/.dockerignore b/.dockerignore
index 2f7896d1d1..37e0f2c427 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1 +1,3 @@
target/
+web/node_modules
+web/dist
diff --git a/.gitignore b/.gitignore
index 85f307e893..534e979f9e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,10 @@
target/
defguard.db*
.volumes
+node_modules
+.DS_Store
+dist
+dist-ssr
+*.local
+build
+ladle-build
diff --git a/Dockerfile b/Dockerfile
index e36f0c683c..8f1176b4d2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -30,6 +30,17 @@ COPY migrations migrations
ENV SQLX_OFFLINE true
RUN cargo install --locked --path . --root /build
+FROM node:19-alpine3.15 as web
+
+WORKDIR /app
+COPY web/package.json .
+COPY web/pnpm-lock.yaml .
+COPY web/.npmrc .
+RUN npm i -g pnpm
+RUN pnpm install --ignore-scripts
+COPY web/ .
+RUN pnpm build
+
# run
FROM debian:bullseye-slim as runtime
RUN apt-get update -y && \
@@ -37,4 +48,5 @@ RUN apt-get update -y && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=builder /build/bin/defguard .
+COPY --from=web /app/dist ./web
ENTRYPOINT ["./defguard"]
diff --git a/k8s/base/config.env b/k8s/base/config.env
deleted file mode 100644
index 9f5bdf9897..0000000000
--- a/k8s/base/config.env
+++ /dev/null
@@ -1,5 +0,0 @@
-DEFGUARD_DB_HOST=db
-DEFGUARD_DB_USER=defguard
-DEFGUARD_DB_NAME=defguard
-DEFGUARD_LDAP_URL=ldap://oldap:389
-DEFGUARD_WG_SERVICE_URL=http://wireguard:50051
diff --git a/k8s/base/core-deployment.yaml b/k8s/base/core-deployment.yaml
deleted file mode 100644
index a58f3fb461..0000000000
--- a/k8s/base/core-deployment.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: core
- labels:
- app: orion
- service: core
-spec:
- strategy:
- type: Recreate
- replicas: 1
- selector:
- matchLabels:
- app: orion
- service: core
- template:
- metadata:
- labels:
- app: orion
- service: core
- spec:
- containers:
- - name: core
- image: registry.teonite.net/defguard/core:latest
- imagePullPolicy: Always
- envFrom:
- - configMapRef:
- name: web
- - secretRef:
- name: web
- - secretRef:
- name: db-password
- ports:
- - name: http
- containerPort: 8000
- - name: grpc
- containerPort: 50055
- securityContext:
- runAsUser: 1000
- runAsGroup: 1000
- fsGroup: 1000
diff --git a/k8s/base/core-ingress.yaml b/k8s/base/core-ingress.yaml
deleted file mode 100644
index 1008ef8e98..0000000000
--- a/k8s/base/core-ingress.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
- annotations:
- ingress.kubernetes.io/protocol: h2c
- name: orion-grpc-ingress
-spec:
- rules:
- - host: defguard-grpc.tnt
- http:
- paths:
- - path: /
- pathType: ImplementationSpecific
- backend:
- service:
- name: core-grpc
- port:
- name: grpc
diff --git a/k8s/base/core-service-grpc.yaml b/k8s/base/core-service-grpc.yaml
deleted file mode 100644
index ce6834c83b..0000000000
--- a/k8s/base/core-service-grpc.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- annotations:
- traefik.ingress.kubernetes.io/service.serversscheme: h2c
- name: core-grpc
- labels:
- app: orion
- service: core
-spec:
- ports:
- - name: grpc
- port: 50055
- targetPort: "grpc"
- protocol: TCP
- selector:
- app: orion
- service: core
diff --git a/k8s/base/core-service.yaml b/k8s/base/core-service.yaml
deleted file mode 100644
index c1ac85b658..0000000000
--- a/k8s/base/core-service.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: core
- labels:
- app: orion
- service: core
-spec:
- ports:
- - name: http
- port: 8000
- targetPort: "http"
- protocol: TCP
- selector:
- app: orion
- service: core
diff --git a/k8s/base/db-deployment.yaml b/k8s/base/db-deployment.yaml
deleted file mode 100644
index bb0b8145de..0000000000
--- a/k8s/base/db-deployment.yaml
+++ /dev/null
@@ -1,51 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- labels:
- app: orion
- service: db
- name: db
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: orion
- service: db
- strategy:
- type: Recreate
- template:
- metadata:
- labels:
- app: orion
- service: db
- spec:
- containers:
- - name: db
- image: postgres:14-alpine
- ports:
- - containerPort: 5432
- env:
- - name: POSTGRES_DB
- valueFrom:
- configMapKeyRef:
- name: web
- key: DEFGUARD_DB_NAME
- - name: POSTGRES_USER
- valueFrom:
- configMapKeyRef:
- name: web
- key: DEFGUARD_DB_USER
- - name: POSTGRES_PASSWORD
- valueFrom:
- secretKeyRef:
- name: db-password
- key: DEFGUARD_DB_PASSWORD
- volumeMounts:
- - mountPath: /var/lib/postgresql/data
- name: db-claim
- subPath: postgres
- restartPolicy: Always
- volumes:
- - name: db-claim
- persistentVolumeClaim:
- claimName: db-claim
diff --git a/k8s/base/db-persistentvolumeclaim.yaml b/k8s/base/db-persistentvolumeclaim.yaml
deleted file mode 100644
index 54b1d250e1..0000000000
--- a/k8s/base/db-persistentvolumeclaim.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: db-claim
-spec:
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 1Gi
diff --git a/k8s/base/db-service.yaml b/k8s/base/db-service.yaml
deleted file mode 100644
index 14c039e871..0000000000
--- a/k8s/base/db-service.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- labels:
- app: orion
- service: db
- name: db
-spec:
- ports:
- - name: "db"
- port: 5432
- targetPort: 5432
- selector:
- app: orion
- service: db
diff --git a/k8s/base/kustomization.yaml b/k8s/base/kustomization.yaml
deleted file mode 100644
index 0e0cd6a556..0000000000
--- a/k8s/base/kustomization.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-resources:
- - core-service.yaml
- - core-deployment.yaml
- - core-ingress.yaml
- - db-deployment.yaml
- - db-service.yaml
- - db-persistentvolumeclaim.yaml
-configMapGenerator:
- - name: web
- envs:
- - config.env
diff --git a/k8s/overlays/dev/kustomization.yaml b/k8s/overlays/dev/kustomization.yaml
deleted file mode 100644
index bd106ab9a1..0000000000
--- a/k8s/overlays/dev/kustomization.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-resources:
- - ../../base/
- - ldap-service.yaml
- - ldap-deployment.yaml
- - ldap-storage.yaml
diff --git a/k8s/overlays/dev/ldap-deployment.yaml b/k8s/overlays/dev/ldap-deployment.yaml
deleted file mode 100644
index 630ca28e87..0000000000
--- a/k8s/overlays/dev/ldap-deployment.yaml
+++ /dev/null
@@ -1,42 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: oldap
- labels:
- app: orion
- service: oldap
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: orion
- service: oldap
- strategy:
- type: Recreate
- template:
- metadata:
- labels:
- app: orion
- service: oldap
- spec:
- containers:
- - name: oldap
- image: registry.teonite.net/defguard/ldap:latest
- imagePullPolicy: Always
- ports:
- - name: ldap
- containerPort: 389
- envFrom:
- - secretRef:
- name: ldap
- volumeMounts:
- - mountPath: /var/lib/ldap
- name: ldap-storage
- subPath: ldap
- - mountPath: /etc/ldap/slapd.d
- subPath: slapd.d
- name: ldap-storage
- volumes:
- - name: ldap-storage
- persistentVolumeClaim:
- claimName: ldap-storage
diff --git a/k8s/overlays/dev/ldap-service.yaml b/k8s/overlays/dev/ldap-service.yaml
deleted file mode 100644
index a543d94085..0000000000
--- a/k8s/overlays/dev/ldap-service.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: oldap
- labels:
- app: orion
- service: oldap
-spec:
- ports:
- - name: ldap
- port: 389
- targetPort: "ldap"
- protocol: TCP
- selector:
- app: orion
- service: oldap
diff --git a/k8s/overlays/dev/ldap-storage.yaml b/k8s/overlays/dev/ldap-storage.yaml
deleted file mode 100644
index 618137a05a..0000000000
--- a/k8s/overlays/dev/ldap-storage.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: ldap-storage
-spec:
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 1Gi
diff --git a/k8s/overlays/prod/config.env b/k8s/overlays/prod/config.env
deleted file mode 100644
index 6be5128b3f..0000000000
--- a/k8s/overlays/prod/config.env
+++ /dev/null
@@ -1,4 +0,0 @@
-DEFGUARD_LDAP_USER_SEARCH_BASE=ou=workers,dc=teonite,dc=com
-DEFGUARD_LDAP_GROUP_SEARCH_BASE=ou=groups,dc=teonite,dc=com
-DEFGUARD_LDAP_ADMIN_GROUP=cn=admin,ou=groups,dc=teonite,dc=com
-DEFGUARD_LDAP_URL=ldap://hq.teonite.net:389
diff --git a/k8s/overlays/prod/ingress-patch.json b/k8s/overlays/prod/ingress-patch.json
deleted file mode 100644
index 6a4823e3cf..0000000000
--- a/k8s/overlays/prod/ingress-patch.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- {
- "op": "replace",
- "path": "/spec/rules/0/host",
- "value": "defguard-grpc.teonite.net"
- }
-]
diff --git a/k8s/overlays/prod/kustomization.yaml b/k8s/overlays/prod/kustomization.yaml
deleted file mode 100644
index 73a8c68d22..0000000000
--- a/k8s/overlays/prod/kustomization.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-resources:
- - ../../base/
-patches:
- - target:
- kind: Ingress
- name: orion-grpc-ingress
- path: ingress-patch.json
-configMapGenerator:
- - name: web
- behavior: merge
- envs:
- - config.env
diff --git a/src/lib.rs b/src/lib.rs
index 640b159f65..5cf694236f 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -45,7 +45,7 @@ use handlers::{
add_webhook, change_enabled, change_webhook, delete_webhook, get_webhook, list_webhooks,
},
};
-use rocket::{config::Config, error::Error as RocketError, Build, Ignite, Rocket};
+use rocket::{config::Config, error::Error as RocketError, Build, Ignite, Rocket, fs::FileServer};
use std::{
net::{IpAddr, Ipv4Addr},
sync::{Arc, Mutex},
@@ -86,6 +86,8 @@ pub async fn build_webapp(
};
let license_decoded = License::decode(&config.license);
let webapp = rocket::custom(cfg)
+ .mount("/", FileServer::from("./web"));
+ let webapp = webapp
.mount(
"/api/v1",
routes![
diff --git a/web/.commitlintrc.json b/web/.commitlintrc.json
new file mode 100644
index 0000000000..6c46f0718e
--- /dev/null
+++ b/web/.commitlintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": ["@commitlint/config-conventional"]
+}
\ No newline at end of file
diff --git a/web/.eslintignore b/web/.eslintignore
new file mode 100644
index 0000000000..0cebac47b6
--- /dev/null
+++ b/web/.eslintignore
@@ -0,0 +1,7 @@
+/dist
+*.scss
+*.css
+/.next
+/node_modules
+/build
+*.js
\ No newline at end of file
diff --git a/web/.eslintrc b/web/.eslintrc
new file mode 100644
index 0000000000..8d249e1f93
--- /dev/null
+++ b/web/.eslintrc
@@ -0,0 +1,48 @@
+{
+ "parser": "@typescript-eslint/parser",
+ "parserOptions": {
+ "ecmaVersion": 2022,
+ "sourceType": "module"
+ },
+ "plugins": [
+ "@typescript-eslint",
+ "react-hooks",
+ "simple-import-sort"
+ ],
+ "extends": [
+ "plugin:react/recommended",
+ "plugin:@typescript-eslint/recommended",
+ "prettier",
+ "plugin:prettier/recommended"
+ ],
+ "rules": {
+ "react-hooks/rules-of-hooks": "error",
+ "react-hooks/exhaustive-deps": "warn",
+ "react/prop-types": "off",
+ "react/display-name": "off",
+ "semi": [
+ "error",
+ "always",
+ {
+ "omitLastInOneLineBlock": false
+ }
+ ],
+ "prettier/prettier": [
+ "error",
+ {
+ "semi": true
+ }
+ ],
+ "simple-import-sort/imports": "error",
+ "react/react-in-jsx-scope": "off",
+ "@typescript-eslint/no-unused-vars": "error",
+ "@typescript-eslint/no-explicit-any": "error",
+ "@typescript-eslint/no-non-null-assertion": "error"
+ },
+ "settings": {
+ "react": {
+ "pragma": "React",
+ "version": "detect"
+ }
+ }
+}
diff --git a/web/.husky/commit-msg b/web/.husky/commit-msg
new file mode 100755
index 0000000000..97681ced71
--- /dev/null
+++ b/web/.husky/commit-msg
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+pnpm exec commitlint --edit ${1}
diff --git a/web/.husky/pre-commit b/web/.husky/pre-commit
new file mode 100755
index 0000000000..66ae513af6
--- /dev/null
+++ b/web/.husky/pre-commit
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+pnpm fix-lint
diff --git a/web/.ladle/components.tsx b/web/.ladle/components.tsx
new file mode 100644
index 0000000000..5a5ccf2532
--- /dev/null
+++ b/web/.ladle/components.tsx
@@ -0,0 +1,8 @@
+import '../src/shared/scss/ladleStyles.scss';
+import './fonts.css';
+
+import type { GlobalProvider } from '@ladle/react';
+
+export const Provider: GlobalProvider = ({ children }) => {
+ return <>{children}>;
+};
diff --git a/web/.ladle/config.mjs b/web/.ladle/config.mjs
new file mode 100644
index 0000000000..d5fb6ac959
--- /dev/null
+++ b/web/.ladle/config.mjs
@@ -0,0 +1,5 @@
+export default {
+ port: 61000,
+ outDir: 'ladle-build',
+ stories: ['src/shared/components/**/*.stories.tsx'],
+};
diff --git a/web/.ladle/fonts.css b/web/.ladle/fonts.css
new file mode 100644
index 0000000000..391b33aed8
--- /dev/null
+++ b/web/.ladle/fonts.css
@@ -0,0 +1 @@
+@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;1,100;1,300;1,400;1,500;1,700&display=swap');
\ No newline at end of file
diff --git a/web/.npmrc b/web/.npmrc
new file mode 100644
index 0000000000..fa4e095233
--- /dev/null
+++ b/web/.npmrc
@@ -0,0 +1 @@
+strict-peer-dependencies=false
\ No newline at end of file
diff --git a/web/.nvmrc b/web/.nvmrc
new file mode 100644
index 0000000000..9d87b3b2f2
--- /dev/null
+++ b/web/.nvmrc
@@ -0,0 +1 @@
+v19
\ No newline at end of file
diff --git a/web/.prettierrc b/web/.prettierrc
new file mode 100644
index 0000000000..8fb91d3d99
--- /dev/null
+++ b/web/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "tabWidth": 2,
+ "singleQuote": true,
+ "useTabs": false
+}
diff --git a/web/.stylelintrc.json b/web/.stylelintrc.json
new file mode 100644
index 0000000000..6f1e0e00ef
--- /dev/null
+++ b/web/.stylelintrc.json
@@ -0,0 +1,12 @@
+{
+ "extends": [
+ "stylelint-config-standard-scss",
+ "stylelint-config-prettier-scss"
+ ],
+ "rules": {
+ "no-descending-specificity": null,
+ "font-family-no-missing-generic-family-keyword": null,
+ "selector-class-pattern": null
+ },
+ "defaultSeverity": "warning"
+}
diff --git a/web/.versionrc b/web/.versionrc
new file mode 100644
index 0000000000..d723ecc3f2
--- /dev/null
+++ b/web/.versionrc
@@ -0,0 +1,8 @@
+{
+ "bumpFiles": [
+ {
+ "filename": "./package.json",
+ "type": "json"
+ }
+ ]
+}
diff --git a/web/Dockerfile b/web/Dockerfile
new file mode 100644
index 0000000000..c5d43bc1b1
--- /dev/null
+++ b/web/Dockerfile
@@ -0,0 +1,14 @@
+FROM node:19-alpine3.15 as build
+
+WORKDIR /app
+COPY package.json .
+COPY pnpm-lock.yaml .
+COPY .npmrc .
+RUN npm i -g pnpm
+RUN pnpm install --ignore-scripts
+COPY . .
+RUN pnpm build
+
+FROM nginx:1.21.5
+COPY --from=build /app/dist /web
+COPY nginx.conf /etc/nginx/nginx.conf
diff --git a/web/Dockerfile.docs b/web/Dockerfile.docs
new file mode 100644
index 0000000000..a0e336d9e5
--- /dev/null
+++ b/web/Dockerfile.docs
@@ -0,0 +1,16 @@
+FROM node:19-alpine3.15 as build
+
+WORKDIR /app
+COPY package.json .
+COPY pnpm-lock.yaml .
+COPY .npmrc .
+RUN npm i -g pnpm
+RUN pnpm install --ignore-scripts
+COPY . .
+RUN mkdir -p /app/docs/
+COPY README.md /app/docs/README.md
+RUN pnpm build-doc-ci
+
+FROM nginx:1.21.5
+COPY --from=build /app/docs /web
+COPY nginx.conf /etc/nginx/nginx.conf
diff --git a/web/Dockerfile.ladle b/web/Dockerfile.ladle
new file mode 100644
index 0000000000..ecb897da9d
--- /dev/null
+++ b/web/Dockerfile.ladle
@@ -0,0 +1,14 @@
+FROM node:19-alpine3.15 as build
+
+WORKDIR /app
+COPY package.json .
+COPY pnpm-lock.yaml .
+COPY .npmrc .
+RUN npm i -g pnpm
+RUN pnpm install --ignore-scripts
+COPY . .
+RUN pnpm ladle build
+
+FROM nginx:1.21.5
+COPY --from=build /app/ladle-build /web
+COPY nginx.conf /etc/nginx/nginx.conf
diff --git a/web/README.md b/web/README.md
new file mode 100644
index 0000000000..23869cc3d5
--- /dev/null
+++ b/web/README.md
@@ -0,0 +1,73 @@
+# Defguard frontend
+
+React.js based, web user interface for Defguard project.
+
+## Run development server
+
+Install dependencies
+
+```bash
+ pnpm install
+```
+
+Start the dev server
+
+```bash
+ pnpm run dev
+```
+
+You can configure API proxy by changing `target` key value under `/api` path within `vite.config.ts` file.
+
+## Build docker image
+
+```bash
+docker build .
+```
+
+## Linting
+
+For linting this project uses [prettier](https://www.npmjs.com/package/prettier), [eslint](https://www.npmjs.com/package/eslint) and [stylelint](https://stylelint.io/)
+
+#### Available commands
+
+Check linting in all supported files ( both prettier and eslint )
+
+```bash
+pnpm run lint
+```
+
+Fix all autofixable problems with eslint
+
+```bash
+pnpm run eslint-fix
+```
+
+Fix all autofixable probles with prettier
+
+```bash
+pnpm run prettier-fix
+```
+
+Fix all autofixable problems with pretter and eslint
+
+```bash
+pnpm fix-lint
+```
+
+#### Adding new SVG components
+
+Move .svg files into `src/shared/images/svg` then use command:
+
+```bash
+pnpm parse-svgs
+```
+
+This will generate new components within `src/shared/components/svg`, they can be used as a regular components. Also this command doesn't replace or modify already existing files.
+
+## Conventional Commits
+
+Using [commitlint](https://commitlint.js.org/#/) with this [config](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional).
+
+## Versioning
+
+Using [standard-version](https://github.com/conventional-changelog/standard-version)
\ No newline at end of file
diff --git a/web/docker-compose.yml b/web/docker-compose.yml
new file mode 100644
index 0000000000..6a755f4322
--- /dev/null
+++ b/web/docker-compose.yml
@@ -0,0 +1,20 @@
+version: '3.8'
+services:
+ web:
+ build:
+ context: ./
+ dockerfile: Dockerfile
+ ports:
+ - "4200:80"
+ ladle:
+ build:
+ context: ./
+ dockerfile: Dockerfile.ladle
+ ports:
+ - "4201:80"
+ docs:
+ build:
+ context: ./
+ dockerfile: Dockerfile.docs
+ ports:
+ - "4202:80"
diff --git a/web/index.html b/web/index.html
new file mode 100644
index 0000000000..8b814bddf7
--- /dev/null
+++ b/web/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ DefGuard
+
+
+
+
+
+
diff --git a/web/nginx.conf b/web/nginx.conf
new file mode 100644
index 0000000000..e35d24a1e0
--- /dev/null
+++ b/web/nginx.conf
@@ -0,0 +1,39 @@
+http {
+ server {
+ listen 80;
+ server_name prl;
+ root /web/;
+ access_log /var/log/nginx/prl.access.log;
+ error_log /var/log/nginx/prl.error.log;
+
+ ignore_invalid_headers off;
+ large_client_header_buffers 4 16k;
+
+ gzip on;
+ gzip_disable "msie6";
+
+ gzip_vary on;
+ gzip_proxied any;
+ gzip_buffers 16 8k;
+ gzip_http_version 1.1;
+ gzip_types application/atom+xml application/javascript application/json application/rss+xml
+ application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml
+ application/xml font/opentype image/svg+xml image/x-icon text/css text/plain text/x-component;
+
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_pass_request_headers on;
+
+ location / {
+ include /etc/nginx/mime.types;
+ try_files $uri $uri/ /index.html =404;
+ }
+ }
+}
+
+events {
+ worker_connections 1024; ## Default: 1024
+}
+
diff --git a/web/package.json b/web/package.json
new file mode 100644
index 0000000000..f79ad5dbbc
--- /dev/null
+++ b/web/package.json
@@ -0,0 +1,131 @@
+{
+ "name": "web",
+ "version": "0.2",
+ "private": true,
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "serve": "vite preview",
+ "lint": "tsc && eslint ./*.ts ./src/**/*.ts ./src/**/*.tsx && prettier --check ./src/**/*.ts ./src/**/*.tsx",
+ "eslint-fix": "eslint --fix ./src/**/*.ts ./src/**/*.tsx",
+ "lint-ci": "tsc && eslint --quiet ./src/**/*.ts ./src/**/*.tsx",
+ "prettier-fix": "prettier -w ./src/**/*.scss ./src/**/*.ts ./src/**/*.tsx",
+ "parse-svgs": "svgr --ignore-existing --svgo-config ./svgo.config.js --prettier-config ./.prettierrc --jsx-runtime classic --out-dir ./src/shared/components/svg/ --typescript ./src/shared/images/svg/",
+ "fix-lint": "eslint --fix ./*.ts ./src/**/*.ts ./src/**/*.tsx && prettier -w ./src/**/*.ts ./src/**/*.tsx && stylelint --fix --quiet ./src/**/*.scss ",
+ "build-doc-ci": "typedoc --readme ./docs/README.md --out ./docs --entryPointStrategy expand --tsconfig ./tsconfig.json ./src/shared/components/layout ./src/shared/components/modals ./src/shared/components/Router ./src/shared/components/Toasts",
+ "prepare": "husky install",
+ "release": "standard-version",
+ "release:minor": "standard-version --release-as minor",
+ "release:patch": "standard-version --release-as patch",
+ "release:major": "standard-version --release-as major"
+ },
+ "browserslist": {
+ "production": [
+ ">0.2%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
+ },
+ "dependencies": {
+ "@commitlint/config-conventional": "^17.1.0",
+ "@ethersproject/providers": "^5.7.2",
+ "@floating-ui/react-dom-interactions": "^0.10.2",
+ "@hookform/resolvers": "^2.9.10",
+ "@ladle/react": "^2.4.5",
+ "@popperjs/core": "^2.11.6",
+ "@tanstack/query-core": "^4.12.0",
+ "@tanstack/react-query": "^4.12.0",
+ "@tippyjs/react": "^4.2.6",
+ "@types/react-virtualized-auto-sizer": "^1.0.1",
+ "@types/react-window": "^1.8.5",
+ "@vitejs/plugin-legacy": "^2.2.0",
+ "@vitejs/plugin-react": "^2.1.0",
+ "@walletconnect/encoding": "^1.0.1",
+ "axios": "^1.1.3",
+ "byte-size": "^8.1.0",
+ "classnames": "^2.3.2",
+ "clipboardy": "^3.0.0",
+ "dayjs": "^1.11.6",
+ "ethers": "^5.7.2",
+ "events": "^3.3.0",
+ "file-saver": "^2.0.5",
+ "framer-motion": "^7.6.1",
+ "hex-rgb": "^5.0.0",
+ "i18next": "21.9.2",
+ "lodash-es": "^4.17.21",
+ "radash": "^8.0.3",
+ "react": "^18.2.0",
+ "react-click-away-listener": "^2.2.2",
+ "react-dom": "^18.2.0",
+ "react-hook-form": "^7.38.0",
+ "react-i18next": "11.18.6",
+ "react-idle-timer": "^5.4.2",
+ "react-is": "^18.2.0",
+ "react-popper": "^2.3.0",
+ "react-router": "^6.4.2",
+ "react-router-dom": "^6.4.2",
+ "react-select": "^5.5.4",
+ "react-table": "^7.8.0",
+ "react-toastify": "^9.0.8",
+ "react-virtualized-auto-sizer": "^1.0.7",
+ "react-window": "^1.8.7",
+ "recharts": "^2.1.15",
+ "rollup": "^3.2.3",
+ "rxjs": "^7.5.7",
+ "terser": "^5.15.1",
+ "tippy.js": "^6.3.7",
+ "use-breakpoint": "^3.0.3",
+ "wagmi": "^0.7.5",
+ "yup": "^0.32.11",
+ "zustand": "^4.1.2"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.19.6",
+ "@commitlint/cli": "^17.1.2",
+ "@commitlint/prompt-cli": "^17.1.2",
+ "@esbuild-plugins/node-globals-polyfill": "^0.1.1",
+ "@esbuild-plugins/node-modules-polyfill": "^0.1.4",
+ "@hookform/devtools": "^4.2.2",
+ "@svgr/cli": "^6.5.0",
+ "@types/byte-size": "^8.1.0",
+ "@types/file-saver": "^2.0.5",
+ "@types/lodash-es": "^4.17.6",
+ "@types/react": "^18.0.21",
+ "@types/react-dom": "^18.0.6",
+ "@types/react-router-dom": "^5.3.3",
+ "@types/react-table": "^7.7.12",
+ "@typescript-eslint/eslint-plugin": "^5.40.1",
+ "@typescript-eslint/parser": "^5.40.1",
+ "autoprefixer": "^10.4.12",
+ "esbuild": "^0.15.12",
+ "eslint": "^8.25.0",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-jsx-a11y": "^6.6.1",
+ "eslint-plugin-prettier": "^4.2.1",
+ "eslint-plugin-react": "^7.31.8",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-simple-import-sort": "^8.0.0",
+ "husky": "^8.0.1",
+ "postcss": "^8.4.18",
+ "prettier": "^2.7.1",
+ "prop-types": "^15.8.1",
+ "rollup-plugin-polyfill-node": "^0.10.2",
+ "sass": "^1.55.0",
+ "standard-version": "^9.5.0",
+ "stylelint": "^14.14.0",
+ "stylelint-config-prettier-scss": "^0.0.1",
+ "stylelint-config-standard-scss": "^5.0.0",
+ "stylelint-scss": "^4.3.0",
+ "typedoc": "^0.23.17",
+ "typescript": "~4.8.4",
+ "vite": "^3.1.8",
+ "vite-plugin-eslint": "^1.8.1",
+ "vite-plugin-package-version": "^1.0.2"
+ }
+}
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
new file mode 100644
index 0000000000..5402450eca
--- /dev/null
+++ b/web/pnpm-lock.yaml
@@ -0,0 +1,9637 @@
+lockfileVersion: 5.4
+
+specifiers:
+ '@babel/core': ^7.19.6
+ '@commitlint/cli': ^17.1.2
+ '@commitlint/config-conventional': ^17.1.0
+ '@commitlint/prompt-cli': ^17.1.2
+ '@esbuild-plugins/node-globals-polyfill': ^0.1.1
+ '@esbuild-plugins/node-modules-polyfill': ^0.1.4
+ '@ethersproject/providers': ^5.7.2
+ '@floating-ui/react-dom-interactions': ^0.10.2
+ '@hookform/devtools': ^4.2.2
+ '@hookform/resolvers': ^2.9.10
+ '@ladle/react': ^2.4.5
+ '@popperjs/core': ^2.11.6
+ '@svgr/cli': ^6.5.0
+ '@tanstack/query-core': ^4.12.0
+ '@tanstack/react-query': ^4.12.0
+ '@tippyjs/react': ^4.2.6
+ '@types/byte-size': ^8.1.0
+ '@types/file-saver': ^2.0.5
+ '@types/lodash-es': ^4.17.6
+ '@types/react': ^18.0.21
+ '@types/react-dom': ^18.0.6
+ '@types/react-router-dom': ^5.3.3
+ '@types/react-table': ^7.7.12
+ '@types/react-virtualized-auto-sizer': ^1.0.1
+ '@types/react-window': ^1.8.5
+ '@typescript-eslint/eslint-plugin': ^5.40.1
+ '@typescript-eslint/parser': ^5.40.1
+ '@vitejs/plugin-legacy': ^2.2.0
+ '@vitejs/plugin-react': ^2.1.0
+ '@walletconnect/encoding': ^1.0.1
+ autoprefixer: ^10.4.12
+ axios: ^1.1.3
+ byte-size: ^8.1.0
+ classnames: ^2.3.2
+ clipboardy: ^3.0.0
+ dayjs: ^1.11.6
+ esbuild: ^0.15.12
+ eslint: ^8.25.0
+ eslint-config-prettier: ^8.5.0
+ eslint-plugin-import: ^2.26.0
+ eslint-plugin-jsx-a11y: ^6.6.1
+ eslint-plugin-prettier: ^4.2.1
+ eslint-plugin-react: ^7.31.8
+ eslint-plugin-react-hooks: ^4.6.0
+ eslint-plugin-simple-import-sort: ^8.0.0
+ ethers: ^5.7.2
+ events: ^3.3.0
+ file-saver: ^2.0.5
+ framer-motion: ^7.6.1
+ hex-rgb: ^5.0.0
+ husky: ^8.0.1
+ i18next: 21.9.2
+ lodash-es: ^4.17.21
+ postcss: ^8.4.18
+ prettier: ^2.7.1
+ prop-types: ^15.8.1
+ radash: ^8.0.3
+ react: ^18.2.0
+ react-click-away-listener: ^2.2.2
+ react-dom: ^18.2.0
+ react-hook-form: ^7.38.0
+ react-i18next: 11.18.6
+ react-idle-timer: ^5.4.2
+ react-is: ^18.2.0
+ react-popper: ^2.3.0
+ react-router: ^6.4.2
+ react-router-dom: ^6.4.2
+ react-select: ^5.5.4
+ react-table: ^7.8.0
+ react-toastify: ^9.0.8
+ react-virtualized-auto-sizer: ^1.0.7
+ react-window: ^1.8.7
+ recharts: ^2.1.15
+ rollup: ^3.2.3
+ rollup-plugin-polyfill-node: ^0.10.2
+ rxjs: ^7.5.7
+ sass: ^1.55.0
+ standard-version: ^9.5.0
+ stylelint: ^14.14.0
+ stylelint-config-prettier-scss: ^0.0.1
+ stylelint-config-standard-scss: ^5.0.0
+ stylelint-scss: ^4.3.0
+ terser: ^5.15.1
+ tippy.js: ^6.3.7
+ typedoc: ^0.23.17
+ typescript: ~4.8.4
+ use-breakpoint: ^3.0.3
+ vite: ^3.1.8
+ vite-plugin-eslint: ^1.8.1
+ vite-plugin-package-version: ^1.0.2
+ wagmi: ^0.7.5
+ yup: ^0.32.11
+ zustand: ^4.1.2
+
+dependencies:
+ '@commitlint/config-conventional': 17.1.0
+ '@ethersproject/providers': 5.7.2
+ '@floating-ui/react-dom-interactions': 0.10.2_rj7ozvcq3uehdlnj3cbwzbi5ce
+ '@hookform/resolvers': 2.9.10_react-hook-form@7.38.0
+ '@ladle/react': 2.4.5_es6txauzvmnbenyrpsbzmz52bu
+ '@popperjs/core': 2.11.6
+ '@tanstack/query-core': 4.12.0
+ '@tanstack/react-query': 4.12.0_biqbaboplfbrettd7655fr4n2y
+ '@tippyjs/react': 4.2.6_biqbaboplfbrettd7655fr4n2y
+ '@types/react-virtualized-auto-sizer': 1.0.1
+ '@types/react-window': 1.8.5
+ '@vitejs/plugin-legacy': 2.2.0_terser@5.15.1+vite@3.1.8
+ '@vitejs/plugin-react': 2.1.0_vite@3.1.8
+ '@walletconnect/encoding': 1.0.1
+ axios: 1.1.3
+ byte-size: 8.1.0
+ classnames: 2.3.2
+ clipboardy: 3.0.0
+ dayjs: 1.11.6
+ ethers: 5.7.2
+ events: 3.3.0
+ file-saver: 2.0.5
+ framer-motion: 7.6.1_biqbaboplfbrettd7655fr4n2y
+ hex-rgb: 5.0.0
+ i18next: 21.9.2
+ lodash-es: 4.17.21
+ radash: 8.0.3
+ react: 18.2.0
+ react-click-away-listener: 2.2.2_biqbaboplfbrettd7655fr4n2y
+ react-dom: 18.2.0_react@18.2.0
+ react-hook-form: 7.38.0_react@18.2.0
+ react-i18next: 11.18.6_ulhmqqxshznzmtuvahdi5nasbq
+ react-idle-timer: 5.4.2_biqbaboplfbrettd7655fr4n2y
+ react-is: 18.2.0
+ react-popper: 2.3.0_r6q5zrenym2zg7je7hgi674bti
+ react-router: 6.4.2_react@18.2.0
+ react-router-dom: 6.4.2_biqbaboplfbrettd7655fr4n2y
+ react-select: 5.5.4_4vbxmiqiebt2rvx7s6k23gxsii
+ react-table: 7.8.0_react@18.2.0
+ react-toastify: 9.0.8_biqbaboplfbrettd7655fr4n2y
+ react-virtualized-auto-sizer: 1.0.7_biqbaboplfbrettd7655fr4n2y
+ react-window: 1.8.7_biqbaboplfbrettd7655fr4n2y
+ recharts: 2.1.15_v2m5e27vhdewzwhryxwfaorcca
+ rollup: 3.2.3
+ rxjs: 7.5.7
+ terser: 5.15.1
+ tippy.js: 6.3.7
+ use-breakpoint: 3.0.3_biqbaboplfbrettd7655fr4n2y
+ wagmi: 0.7.5_sybqfdu2w44r4mtbf6khtzswhu
+ yup: 0.32.11
+ zustand: 4.1.2_react@18.2.0
+
+devDependencies:
+ '@babel/core': 7.19.6
+ '@commitlint/cli': 17.1.2
+ '@commitlint/prompt-cli': 17.1.2
+ '@esbuild-plugins/node-globals-polyfill': 0.1.1_esbuild@0.15.12
+ '@esbuild-plugins/node-modules-polyfill': 0.1.4_esbuild@0.15.12
+ '@hookform/devtools': 4.2.2_4vbxmiqiebt2rvx7s6k23gxsii
+ '@svgr/cli': 6.5.0
+ '@types/byte-size': 8.1.0
+ '@types/file-saver': 2.0.5
+ '@types/lodash-es': 4.17.6
+ '@types/react': 18.0.21
+ '@types/react-dom': 18.0.6
+ '@types/react-router-dom': 5.3.3
+ '@types/react-table': 7.7.12
+ '@typescript-eslint/eslint-plugin': 5.40.1_ukgdydjtebaxmxfqp5v5ulh64y
+ '@typescript-eslint/parser': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q
+ autoprefixer: 10.4.12_postcss@8.4.18
+ esbuild: 0.15.12
+ eslint: 8.25.0
+ eslint-config-prettier: 8.5.0_eslint@8.25.0
+ eslint-plugin-import: 2.26.0_vcunoyu347gmi72pwsm7mdvjca
+ eslint-plugin-jsx-a11y: 6.6.1_eslint@8.25.0
+ eslint-plugin-prettier: 4.2.1_hvbqyfstm4urdpm6ffpwfka4e4
+ eslint-plugin-react: 7.31.8_eslint@8.25.0
+ eslint-plugin-react-hooks: 4.6.0_eslint@8.25.0
+ eslint-plugin-simple-import-sort: 8.0.0_eslint@8.25.0
+ husky: 8.0.1
+ postcss: 8.4.18
+ prettier: 2.7.1
+ prop-types: 15.8.1
+ rollup-plugin-polyfill-node: 0.10.2_rollup@3.2.3
+ sass: 1.55.0
+ standard-version: 9.5.0
+ stylelint: 14.14.0
+ stylelint-config-prettier-scss: 0.0.1_stylelint@14.14.0
+ stylelint-config-standard-scss: 5.0.0_mnalcscwzozovshmobozjae4pq
+ stylelint-scss: 4.3.0_stylelint@14.14.0
+ typedoc: 0.23.17_typescript@4.8.4
+ typescript: 4.8.4
+ vite: 3.1.8_sass@1.55.0+terser@5.15.1
+ vite-plugin-eslint: 1.8.1_eslint@8.25.0+vite@3.1.8
+ vite-plugin-package-version: 1.0.2_vite@3.1.8
+
+packages:
+
+ /@ampproject/remapping/2.2.0:
+ resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.1.1
+ '@jridgewell/trace-mapping': 0.3.15
+
+ /@babel/code-frame/7.18.6:
+ resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/highlight': 7.18.6
+
+ /@babel/compat-data/7.19.3:
+ resolution: {integrity: sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/core/7.19.6:
+ resolution: {integrity: sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@ampproject/remapping': 2.2.0
+ '@babel/code-frame': 7.18.6
+ '@babel/generator': 7.19.6
+ '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6
+ '@babel/helper-module-transforms': 7.19.6
+ '@babel/helpers': 7.19.4
+ '@babel/parser': 7.19.6
+ '@babel/template': 7.18.10
+ '@babel/traverse': 7.19.6
+ '@babel/types': 7.19.4
+ convert-source-map: 1.8.0
+ debug: 4.3.4
+ gensync: 1.0.0-beta.2
+ json5: 2.2.1
+ semver: 6.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ /@babel/generator/7.19.6:
+ resolution: {integrity: sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.19.4
+ '@jridgewell/gen-mapping': 0.3.2
+ jsesc: 2.5.2
+
+ /@babel/helper-annotate-as-pure/7.18.6:
+ resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.19.4
+ dev: false
+
+ /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9:
+ resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-explode-assignable-expression': 7.18.6
+ '@babel/types': 7.19.4
+ dev: false
+
+ /@babel/helper-compilation-targets/7.19.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/compat-data': 7.19.3
+ '@babel/core': 7.19.6
+ '@babel/helper-validator-option': 7.18.6
+ browserslist: 4.21.4
+ semver: 6.3.0
+
+ /@babel/helper-create-class-features-plugin/7.18.13_@babel+core@7.19.6:
+ resolution: {integrity: sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-annotate-as-pure': 7.18.6
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-function-name': 7.19.0
+ '@babel/helper-member-expression-to-functions': 7.18.9
+ '@babel/helper-optimise-call-expression': 7.18.6
+ '@babel/helper-replace-supers': 7.18.9
+ '@babel/helper-split-export-declaration': 7.18.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/helper-create-regexp-features-plugin/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-annotate-as-pure': 7.18.6
+ regexpu-core: 5.1.0
+ dev: false
+
+ /@babel/helper-define-polyfill-provider/0.3.2_@babel+core@7.19.6:
+ resolution: {integrity: sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==}
+ peerDependencies:
+ '@babel/core': ^7.4.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ debug: 4.3.4
+ lodash.debounce: 4.0.8
+ resolve: 1.22.1
+ semver: 6.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/helper-environment-visitor/7.18.9:
+ resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-explode-assignable-expression/7.18.6:
+ resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.19.4
+ dev: false
+
+ /@babel/helper-function-name/7.19.0:
+ resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.18.10
+ '@babel/types': 7.19.4
+
+ /@babel/helper-hoist-variables/7.18.6:
+ resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.19.4
+
+ /@babel/helper-member-expression-to-functions/7.18.9:
+ resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.19.4
+ dev: false
+
+ /@babel/helper-module-imports/7.18.6:
+ resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.19.4
+
+ /@babel/helper-module-transforms/7.19.6:
+ resolution: {integrity: sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-module-imports': 7.18.6
+ '@babel/helper-simple-access': 7.19.4
+ '@babel/helper-split-export-declaration': 7.18.6
+ '@babel/helper-validator-identifier': 7.19.1
+ '@babel/template': 7.18.10
+ '@babel/traverse': 7.19.6
+ '@babel/types': 7.19.4
+ transitivePeerDependencies:
+ - supports-color
+
+ /@babel/helper-optimise-call-expression/7.18.6:
+ resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.19.4
+ dev: false
+
+ /@babel/helper-plugin-utils/7.18.9:
+ resolution: {integrity: sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-annotate-as-pure': 7.18.6
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-wrap-function': 7.18.11
+ '@babel/types': 7.19.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/helper-replace-supers/7.18.9:
+ resolution: {integrity: sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-member-expression-to-functions': 7.18.9
+ '@babel/helper-optimise-call-expression': 7.18.6
+ '@babel/traverse': 7.19.6
+ '@babel/types': 7.19.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/helper-simple-access/7.19.4:
+ resolution: {integrity: sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.19.4
+
+ /@babel/helper-skip-transparent-expression-wrappers/7.18.9:
+ resolution: {integrity: sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.19.4
+ dev: false
+
+ /@babel/helper-split-export-declaration/7.18.6:
+ resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.19.4
+
+ /@babel/helper-string-parser/7.19.4:
+ resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-identifier/7.19.1:
+ resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-option/7.18.6:
+ resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-wrap-function/7.18.11:
+ resolution: {integrity: sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-function-name': 7.19.0
+ '@babel/template': 7.18.10
+ '@babel/traverse': 7.19.6
+ '@babel/types': 7.19.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/helpers/7.19.4:
+ resolution: {integrity: sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.18.10
+ '@babel/traverse': 7.19.6
+ '@babel/types': 7.19.4
+ transitivePeerDependencies:
+ - supports-color
+
+ /@babel/highlight/7.18.6:
+ resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.19.1
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+
+ /@babel/parser/7.19.6:
+ resolution: {integrity: sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.19.4
+
+ /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-skip-transparent-expression-wrappers': 7.18.9
+ '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-proposal-async-generator-functions/7.18.10_@babel+core@7.19.6:
+ resolution: {integrity: sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.19.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-create-class-features-plugin': 7.18.13_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-create-class-features-plugin': 7.18.13_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.19.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-proposal-object-rest-spread/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/compat-data': 7.19.3
+ '@babel/core': 7.19.6
+ '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.19.6
+ '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-skip-transparent-expression-wrappers': 7.18.9
+ '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-create-class-features-plugin': 7.18.13_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-annotate-as-pure': 7.18.6
+ '@babel/helper-create-class-features-plugin': 7.18.13_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.19.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-create-regexp-features-plugin': 7.18.6_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.19.6:
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.19.6:
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.19.6:
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-import-assertions/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+
+ /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.19.6:
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.19.6:
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.19.6:
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.19.6:
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-module-imports': 7.18.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.19.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-block-scoping/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-classes/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-annotate-as-pure': 7.18.6
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-function-name': 7.19.0
+ '@babel/helper-optimise-call-expression': 7.18.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-replace-supers': 7.18.9
+ '@babel/helper-split-export-declaration': 7.18.6
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-destructuring/7.18.13_@babel+core@7.19.6:
+ resolution: {integrity: sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-create-regexp-features-plugin': 7.18.6_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.19.6:
+ resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6
+ '@babel/helper-function-name': 7.19.0
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-literals/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-modules-amd/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-module-transforms': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ babel-plugin-dynamic-import-node: 2.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-module-transforms': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-simple-access': 7.19.4
+ babel-plugin-dynamic-import-node: 2.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-transform-modules-systemjs/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-hoist-variables': 7.18.6
+ '@babel/helper-module-transforms': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-validator-identifier': 7.19.1
+ babel-plugin-dynamic-import-node: 2.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-module-transforms': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-transform-named-capturing-groups-regex/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-create-regexp-features-plugin': 7.18.6_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-replace-supers': 7.18.9
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-transform-parameters/7.18.8_@babel+core@7.19.6:
+ resolution: {integrity: sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/plugin-transform-react-jsx': 7.18.10_@babel+core@7.19.6
+ dev: false
+
+ /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-react-jsx-source/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-react-jsx/7.18.10_@babel+core@7.19.6:
+ resolution: {integrity: sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-annotate-as-pure': 7.18.6
+ '@babel/helper-module-imports': 7.18.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.6
+ '@babel/types': 7.19.4
+ dev: false
+
+ /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-annotate-as-pure': 7.18.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ regenerator-transform: 0.15.0
+ dev: false
+
+ /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-runtime/7.18.10_@babel+core@7.19.6:
+ resolution: {integrity: sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-module-imports': 7.18.6
+ '@babel/helper-plugin-utils': 7.18.9
+ babel-plugin-polyfill-corejs2: 0.3.2_@babel+core@7.19.6
+ babel-plugin-polyfill-corejs3: 0.5.3_@babel+core@7.19.6
+ babel-plugin-polyfill-regenerator: 0.4.0_@babel+core@7.19.6
+ semver: 6.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-spread/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-skip-transparent-expression-wrappers': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.19.6:
+ resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-typescript/7.18.12_@babel+core@7.19.6:
+ resolution: {integrity: sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-create-class-features-plugin': 7.18.13_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.19.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.19.6:
+ resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-create-regexp-features-plugin': 7.18.6_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ dev: false
+
+ /@babel/preset-env/7.18.10_@babel+core@7.19.6:
+ resolution: {integrity: sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/compat-data': 7.19.3
+ '@babel/core': 7.19.6
+ '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-validator-option': 7.18.6
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-proposal-async-generator-functions': 7.18.10_@babel+core@7.19.6
+ '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.19.6
+ '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.19.6
+ '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.19.6
+ '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.19.6
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.19.6
+ '@babel/plugin-syntax-import-assertions': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.19.6
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.19.6
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.19.6
+ '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.19.6
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.19.6
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.19.6
+ '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.19.6
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.19.6
+ '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.19.6
+ '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-transform-classes': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.19.6
+ '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.19.6
+ '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-modules-amd': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-modules-systemjs': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.19.6
+ '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-spread': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.19.6
+ '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.19.6
+ '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.19.6
+ '@babel/preset-modules': 0.1.5_@babel+core@7.19.6
+ '@babel/types': 7.19.4
+ babel-plugin-polyfill-corejs2: 0.3.2_@babel+core@7.19.6
+ babel-plugin-polyfill-corejs3: 0.5.3_@babel+core@7.19.6
+ babel-plugin-polyfill-regenerator: 0.4.0_@babel+core@7.19.6
+ core-js-compat: 3.25.0
+ semver: 6.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/preset-modules/0.1.5_@babel+core@7.19.6:
+ resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.19.6
+ '@babel/types': 7.19.4
+ esutils: 2.0.3
+ dev: false
+
+ /@babel/preset-react/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-validator-option': 7.18.6
+ '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-react-jsx': 7.18.10_@babel+core@7.19.6
+ '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-react-pure-annotations': 7.18.6_@babel+core@7.19.6
+ dev: false
+
+ /@babel/preset-typescript/7.18.6_@babel+core@7.19.6:
+ resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-plugin-utils': 7.18.9
+ '@babel/helper-validator-option': 7.18.6
+ '@babel/plugin-transform-typescript': 7.18.12_@babel+core@7.19.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/runtime-corejs3/7.18.9:
+ resolution: {integrity: sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ core-js-pure: 3.25.0
+ regenerator-runtime: 0.13.9
+ dev: true
+
+ /@babel/runtime/7.18.9:
+ resolution: {integrity: sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.13.9
+
+ /@babel/standalone/7.19.2:
+ resolution: {integrity: sha512-p+U+TYGevnPUemfHeQVFwABp9kWe5+h20MKxCzvyeAD1SIm7tlvo6lGRFz1WakAxmVZvLz7WDuWjwdC8FZKp+A==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/template/7.18.10:
+ resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.18.6
+ '@babel/parser': 7.19.6
+ '@babel/types': 7.19.4
+
+ /@babel/traverse/7.19.6:
+ resolution: {integrity: sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.18.6
+ '@babel/generator': 7.19.6
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-function-name': 7.19.0
+ '@babel/helper-hoist-variables': 7.18.6
+ '@babel/helper-split-export-declaration': 7.18.6
+ '@babel/parser': 7.19.6
+ '@babel/types': 7.19.4
+ debug: 4.3.4
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ /@babel/types/7.19.4:
+ resolution: {integrity: sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.19.4
+ '@babel/helper-validator-identifier': 7.19.1
+ to-fast-properties: 2.0.0
+
+ /@coinbase/wallet-sdk/3.5.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-kaGMk9KyiSLPm1+BvCQSc99ku9gn0j+M1+2Beii+4gx/lRVhutlzmn6l+5zTB/n3xri25iTr+SxjMZLlMfW8Hg==}
+ engines: {node: '>= 10.0.0'}
+ dependencies:
+ '@metamask/safe-event-emitter': 2.0.0
+ '@solana/web3.js': 1.52.0
+ bind-decorator: 1.0.11
+ bn.js: 5.2.1
+ buffer: 6.0.3
+ clsx: 1.2.1
+ eth-block-tracker: 4.4.3_@babel+core@7.19.6
+ eth-json-rpc-filters: 4.2.2
+ eth-rpc-errors: 4.0.2
+ json-rpc-engine: 6.1.0
+ keccak: 3.0.2
+ preact: 10.10.6
+ qs: 6.11.0
+ rxjs: 6.6.7
+ sha.js: 2.4.11
+ stream-browserify: 3.0.0
+ util: 0.12.4
+ transitivePeerDependencies:
+ - '@babel/core'
+ - bufferutil
+ - encoding
+ - react-native
+ - supports-color
+ - utf-8-validate
+ dev: false
+
+ /@commitlint/cli/17.1.2:
+ resolution: {integrity: sha512-h/4Hlka3bvCLbnxf0Er2ri5A44VMlbMSkdTRp8Adv2tRiklSTRIoPGs7OEXDv3EoDs2AAzILiPookgM4Gi7LOw==}
+ engines: {node: '>=v14'}
+ hasBin: true
+ dependencies:
+ '@commitlint/format': 17.0.0
+ '@commitlint/lint': 17.1.0
+ '@commitlint/load': 17.1.2
+ '@commitlint/read': 17.1.0
+ '@commitlint/types': 17.0.0
+ execa: 5.1.1
+ lodash: 4.17.21
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ yargs: 17.6.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ dev: true
+
+ /@commitlint/config-conventional/17.1.0:
+ resolution: {integrity: sha512-WU2p0c9/jLi8k2q2YrDV96Y8XVswQOceIQ/wyJvQxawJSCasLdRB3kUIYdNjOCJsxkpoUlV/b90ZPxp1MYZDiA==}
+ engines: {node: '>=v14'}
+ dependencies:
+ conventional-changelog-conventionalcommits: 5.0.0
+ dev: false
+
+ /@commitlint/config-validator/17.1.0:
+ resolution: {integrity: sha512-Q1rRRSU09ngrTgeTXHq6ePJs2KrI+axPTgkNYDWSJIuS1Op4w3J30vUfSXjwn5YEJHklK3fSqWNHmBhmTR7Vdg==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/types': 17.0.0
+ ajv: 8.11.0
+ dev: true
+
+ /@commitlint/ensure/17.0.0:
+ resolution: {integrity: sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/types': 17.0.0
+ lodash: 4.17.21
+ dev: true
+
+ /@commitlint/execute-rule/17.0.0:
+ resolution: {integrity: sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==}
+ engines: {node: '>=v14'}
+ dev: true
+
+ /@commitlint/format/17.0.0:
+ resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/types': 17.0.0
+ chalk: 4.1.2
+ dev: true
+
+ /@commitlint/is-ignored/17.1.0:
+ resolution: {integrity: sha512-JITWKDMHhIh8IpdIbcbuH9rEQJty1ZWelgjleTFrVRAcEwN/sPzk1aVUXRIZNXMJWbZj8vtXRJnFihrml8uECQ==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/types': 17.0.0
+ semver: 7.3.7
+ dev: true
+
+ /@commitlint/lint/17.1.0:
+ resolution: {integrity: sha512-ltpqM2ogt/+SDhUaScFo0MdscncEF96lvQTPMM/VTTWlw7sTGLLWkOOppsee2MN/uLNNWjQ7kqkd4h6JqoM9AQ==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/is-ignored': 17.1.0
+ '@commitlint/parse': 17.0.0
+ '@commitlint/rules': 17.0.0
+ '@commitlint/types': 17.0.0
+ dev: true
+
+ /@commitlint/load/17.1.2:
+ resolution: {integrity: sha512-sk2p/jFYAWLChIfOIp/MGSIn/WzZ0vkc3afw+l4X8hGEYkvDe4gQUUAVxjl/6xMRn0HgnSLMZ04xXh5pkTsmgg==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/config-validator': 17.1.0
+ '@commitlint/execute-rule': 17.0.0
+ '@commitlint/resolve-extends': 17.1.0
+ '@commitlint/types': 17.0.0
+ '@types/node': 14.18.32
+ chalk: 4.1.2
+ cosmiconfig: 7.0.1
+ cosmiconfig-typescript-loader: 4.1.1_vfayau7oz5qy4giwqlppd3j3ti
+ lodash: 4.17.21
+ resolve-from: 5.0.0
+ ts-node: 10.9.1_jcmx33t3olsvcxopqdljsohpme
+ typescript: 4.8.4
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ dev: true
+
+ /@commitlint/message/17.0.0:
+ resolution: {integrity: sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==}
+ engines: {node: '>=v14'}
+ dev: true
+
+ /@commitlint/parse/17.0.0:
+ resolution: {integrity: sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/types': 17.0.0
+ conventional-changelog-angular: 5.0.13
+ conventional-commits-parser: 3.2.4
+ dev: true
+
+ /@commitlint/prompt-cli/17.1.2:
+ resolution: {integrity: sha512-VqfPBfOXrV5hXmYt1gRi/fwd+wPHN9QesCjOC0CC0uGWy5etggK2sb7HzjbfrOOIuFa2gk7v5mX/F/38RlRvVg==}
+ engines: {node: '>=v14'}
+ hasBin: true
+ dependencies:
+ '@commitlint/prompt': 17.1.2
+ execa: 5.1.1
+ inquirer: 6.5.2
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ dev: true
+
+ /@commitlint/prompt/17.1.2:
+ resolution: {integrity: sha512-KubucHY9EnHnao7zgdXsOpckLZA5PgXvaR/eI6IQY2xzuG6RPlVqIffSPpiDjX09SopoYRWbztvkg+Z2m0ib9g==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/ensure': 17.0.0
+ '@commitlint/load': 17.1.2
+ '@commitlint/types': 17.0.0
+ chalk: 4.1.2
+ inquirer: 6.5.2
+ lodash: 4.17.21
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ dev: true
+
+ /@commitlint/read/17.1.0:
+ resolution: {integrity: sha512-73BoFNBA/3Ozo2JQvGsE0J8SdrJAWGfZQRSHqvKaqgmY042Su4gXQLqvAzgr55S9DI1l9TiU/5WDuh8IE86d/g==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/top-level': 17.0.0
+ '@commitlint/types': 17.0.0
+ fs-extra: 10.1.0
+ git-raw-commits: 2.0.11
+ minimist: 1.2.6
+ dev: true
+
+ /@commitlint/resolve-extends/17.1.0:
+ resolution: {integrity: sha512-jqKm00LJ59T0O8O4bH4oMa4XyJVEOK4GzH8Qye9XKji+Q1FxhZznxMV/bDLyYkzbTodBt9sL0WLql8wMtRTbqQ==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/config-validator': 17.1.0
+ '@commitlint/types': 17.0.0
+ import-fresh: 3.3.0
+ lodash: 4.17.21
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ dev: true
+
+ /@commitlint/rules/17.0.0:
+ resolution: {integrity: sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==}
+ engines: {node: '>=v14'}
+ dependencies:
+ '@commitlint/ensure': 17.0.0
+ '@commitlint/message': 17.0.0
+ '@commitlint/to-lines': 17.0.0
+ '@commitlint/types': 17.0.0
+ execa: 5.1.1
+ dev: true
+
+ /@commitlint/to-lines/17.0.0:
+ resolution: {integrity: sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==}
+ engines: {node: '>=v14'}
+ dev: true
+
+ /@commitlint/top-level/17.0.0:
+ resolution: {integrity: sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==}
+ engines: {node: '>=v14'}
+ dependencies:
+ find-up: 5.0.0
+ dev: true
+
+ /@commitlint/types/17.0.0:
+ resolution: {integrity: sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==}
+ engines: {node: '>=v14'}
+ dependencies:
+ chalk: 4.1.2
+ dev: true
+
+ /@cspotcode/source-map-support/0.8.1:
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+ dev: true
+
+ /@csstools/selector-specificity/2.0.2_dvkg4kkb622mvceygg47xxdz3a:
+ resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+ postcss-selector-parser: ^6.0.10
+ dependencies:
+ postcss: 8.4.18
+ postcss-selector-parser: 6.0.10
+ dev: true
+
+ /@cush/relative/1.0.0:
+ resolution: {integrity: sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==}
+ dev: false
+
+ /@emotion/babel-plugin/11.10.2_@babel+core@7.19.6:
+ resolution: {integrity: sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-module-imports': 7.18.6
+ '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.6
+ '@babel/runtime': 7.18.9
+ '@emotion/hash': 0.9.0
+ '@emotion/memoize': 0.8.0
+ '@emotion/serialize': 1.1.0
+ babel-plugin-macros: 3.1.0
+ convert-source-map: 1.8.0
+ escape-string-regexp: 4.0.0
+ find-root: 1.1.0
+ source-map: 0.5.7
+ stylis: 4.0.13
+
+ /@emotion/cache/11.10.3:
+ resolution: {integrity: sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==}
+ dependencies:
+ '@emotion/memoize': 0.8.0
+ '@emotion/sheet': 1.2.0
+ '@emotion/utils': 1.2.0
+ '@emotion/weak-memoize': 0.3.0
+ stylis: 4.0.13
+
+ /@emotion/hash/0.9.0:
+ resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==}
+
+ /@emotion/is-prop-valid/0.8.8:
+ resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==}
+ requiresBuild: true
+ dependencies:
+ '@emotion/memoize': 0.7.4
+ dev: false
+ optional: true
+
+ /@emotion/is-prop-valid/1.2.0:
+ resolution: {integrity: sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==}
+ dependencies:
+ '@emotion/memoize': 0.8.0
+ dev: true
+
+ /@emotion/memoize/0.7.4:
+ resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==}
+ dev: false
+ optional: true
+
+ /@emotion/memoize/0.8.0:
+ resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==}
+
+ /@emotion/react/11.10.0_d3zi5agmim5yvele7myolzagti:
+ resolution: {integrity: sha512-K6z9zlHxxBXwN8TcpwBKcEsBsOw4JWCCmR+BeeOWgqp8GIU1yA2Odd41bwdAAr0ssbQrbJbVnndvv7oiv1bZeQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/runtime': 7.18.9
+ '@emotion/babel-plugin': 11.10.2_@babel+core@7.19.6
+ '@emotion/cache': 11.10.3
+ '@emotion/serialize': 1.1.0
+ '@emotion/utils': 1.2.0
+ '@emotion/weak-memoize': 0.3.0
+ '@types/react': 18.0.21
+ hoist-non-react-statics: 3.3.2
+ react: 18.2.0
+
+ /@emotion/serialize/1.1.0:
+ resolution: {integrity: sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==}
+ dependencies:
+ '@emotion/hash': 0.9.0
+ '@emotion/memoize': 0.8.0
+ '@emotion/unitless': 0.8.0
+ '@emotion/utils': 1.2.0
+ csstype: 3.1.0
+
+ /@emotion/sheet/1.2.0:
+ resolution: {integrity: sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==}
+
+ /@emotion/styled/11.10.0_prszh4cvnvgbp4kcnafll37p34:
+ resolution: {integrity: sha512-V9oaEH6V4KePeQpgUE83i8ht+4Ri3E8Djp/ZPJ4DQlqWhSKITvgzlR3/YQE2hdfP4Jw3qVRkANJz01LLqK9/TA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ '@emotion/react': ^11.0.0-rc.0
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/runtime': 7.18.9
+ '@emotion/babel-plugin': 11.10.2_@babel+core@7.19.6
+ '@emotion/is-prop-valid': 1.2.0
+ '@emotion/react': 11.10.0_d3zi5agmim5yvele7myolzagti
+ '@emotion/serialize': 1.1.0
+ '@emotion/utils': 1.2.0
+ '@types/react': 18.0.21
+ react: 18.2.0
+ dev: true
+
+ /@emotion/unitless/0.8.0:
+ resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==}
+
+ /@emotion/utils/1.2.0:
+ resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==}
+
+ /@emotion/weak-memoize/0.3.0:
+ resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==}
+
+ /@esbuild-plugins/node-globals-polyfill/0.1.1_esbuild@0.15.12:
+ resolution: {integrity: sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==}
+ peerDependencies:
+ esbuild: '*'
+ dependencies:
+ esbuild: 0.15.12
+ dev: true
+
+ /@esbuild-plugins/node-modules-polyfill/0.1.4_esbuild@0.15.12:
+ resolution: {integrity: sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==}
+ peerDependencies:
+ esbuild: '*'
+ dependencies:
+ esbuild: 0.15.12
+ escape-string-regexp: 4.0.0
+ rollup-plugin-node-polyfills: 0.2.1
+ dev: true
+
+ /@esbuild/android-arm/0.15.12:
+ resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ optional: true
+
+ /@esbuild/linux-loong64/0.15.12:
+ resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ optional: true
+
+ /@eslint/eslintrc/1.3.3:
+ resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.4
+ espree: 9.4.0
+ globals: 13.17.0
+ ignore: 5.2.0
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@ethersproject/abi/5.7.0:
+ resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==}
+ dependencies:
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ dev: false
+
+ /@ethersproject/abstract-provider/5.7.0:
+ resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==}
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/web': 5.7.1
+ dev: false
+
+ /@ethersproject/abstract-signer/5.7.0:
+ resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==}
+ dependencies:
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ dev: false
+
+ /@ethersproject/address/5.7.0:
+ resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==}
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ dev: false
+
+ /@ethersproject/base64/5.7.0:
+ resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ dev: false
+
+ /@ethersproject/basex/5.7.0:
+ resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ dev: false
+
+ /@ethersproject/bignumber/5.7.0:
+ resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ bn.js: 5.2.1
+ dev: false
+
+ /@ethersproject/bytes/5.7.0:
+ resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==}
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+ dev: false
+
+ /@ethersproject/constants/5.7.0:
+ resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==}
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ dev: false
+
+ /@ethersproject/contracts/5.7.0:
+ resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==}
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ dev: false
+
+ /@ethersproject/hash/5.7.0:
+ resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==}
+ dependencies:
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ dev: false
+
+ /@ethersproject/hdnode/5.7.0:
+ resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==}
+ dependencies:
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/basex': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/pbkdf2': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/wordlists': 5.7.0
+ dev: false
+
+ /@ethersproject/json-wallets/5.7.0:
+ resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==}
+ dependencies:
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/hdnode': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/pbkdf2': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ aes-js: 3.0.0
+ scrypt-js: 3.0.1
+ dev: false
+
+ /@ethersproject/keccak256/5.7.0:
+ resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ js-sha3: 0.8.0
+ dev: false
+
+ /@ethersproject/logger/5.7.0:
+ resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==}
+ dev: false
+
+ /@ethersproject/networks/5.7.1:
+ resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==}
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+ dev: false
+
+ /@ethersproject/pbkdf2/5.7.0:
+ resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ dev: false
+
+ /@ethersproject/properties/5.7.0:
+ resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==}
+ dependencies:
+ '@ethersproject/logger': 5.7.0
+ dev: false
+
+ /@ethersproject/providers/5.7.2:
+ resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==}
+ dependencies:
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/basex': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/web': 5.7.1
+ bech32: 1.1.4
+ ws: 7.4.6
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: false
+
+ /@ethersproject/random/5.7.0:
+ resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ dev: false
+
+ /@ethersproject/rlp/5.7.0:
+ resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ dev: false
+
+ /@ethersproject/sha2/5.7.0:
+ resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ hash.js: 1.1.7
+ dev: false
+
+ /@ethersproject/signing-key/5.7.0:
+ resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ bn.js: 5.2.1
+ elliptic: 6.5.4
+ hash.js: 1.1.7
+ dev: false
+
+ /@ethersproject/solidity/5.7.0:
+ resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==}
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ dev: false
+
+ /@ethersproject/strings/5.7.0:
+ resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ dev: false
+
+ /@ethersproject/transactions/5.7.0:
+ resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==}
+ dependencies:
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+ dev: false
+
+ /@ethersproject/units/5.7.0:
+ resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==}
+ dependencies:
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ dev: false
+
+ /@ethersproject/wallet/5.7.0:
+ resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==}
+ dependencies:
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/hdnode': 5.7.0
+ '@ethersproject/json-wallets': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/wordlists': 5.7.0
+ dev: false
+
+ /@ethersproject/web/5.7.1:
+ resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==}
+ dependencies:
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ dev: false
+
+ /@ethersproject/wordlists/5.7.0:
+ resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==}
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ dev: false
+
+ /@floating-ui/core/1.0.1:
+ resolution: {integrity: sha512-bO37brCPfteXQfFY0DyNDGB3+IMe4j150KFQcgJ5aBP295p9nBGeHEs/p0czrRbtlHq4Px/yoPXO/+dOCcF4uA==}
+ dev: false
+
+ /@floating-ui/dom/1.0.2:
+ resolution: {integrity: sha512-5X9WSvZ8/fjy3gDu8yx9HAA4KG1lazUN2P4/VnaXLxTO9Dz53HI1oYoh1OlhqFNlHgGDiwFX5WhFCc2ljbW3yA==}
+ dependencies:
+ '@floating-ui/core': 1.0.1
+ dev: false
+
+ /@floating-ui/react-dom-interactions/0.10.2_rj7ozvcq3uehdlnj3cbwzbi5ce:
+ resolution: {integrity: sha512-KhF+UN+MVqUx1bG1fe0aAiBl1hbz07Uin6UW70mxwUDhaGpitM16CYvGri1EqGY4hnWK8TQknDSP8iQFOxjhsg==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+ dependencies:
+ '@floating-ui/react-dom': 1.0.0_biqbaboplfbrettd7655fr4n2y
+ aria-hidden: 1.2.1_iapumuv4e6jcjznwuxpf4tt22e
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ transitivePeerDependencies:
+ - '@types/react'
+ dev: false
+
+ /@floating-ui/react-dom/1.0.0_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-uiOalFKPG937UCLm42RxjESTWUVpbbatvlphQAU6bsv+ence6IoVG8JOUZcy8eW81NkU+Idiwvx10WFLmR4MIg==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+ dependencies:
+ '@floating-ui/dom': 1.0.2
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /@hookform/devtools/4.2.2_4vbxmiqiebt2rvx7s6k23gxsii:
+ resolution: {integrity: sha512-0Sfweb4jkoGDivO+UF8QH1tf4pQQ0Ll00MjxMFWL+rORy2Xrf5m0QlxRESJnCd72VYRCZA5TO+2G9h7uPlMLzQ==}
+ peerDependencies:
+ react: '>=17.0.2'
+ react-dom: '>=17.0.2'
+ dependencies:
+ '@emotion/react': 11.10.0_d3zi5agmim5yvele7myolzagti
+ '@emotion/styled': 11.10.0_prszh4cvnvgbp4kcnafll37p34
+ '@types/lodash': 4.14.184
+ little-state-machine: 4.4.1_react@18.2.0
+ lodash: 4.17.21
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-simple-animate: 3.5.1_react-dom@18.2.0
+ use-deep-compare-effect: 1.8.1_react@18.2.0
+ uuid: 8.3.2
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@types/react'
+ dev: true
+
+ /@hookform/resolvers/2.9.10_react-hook-form@7.38.0:
+ resolution: {integrity: sha512-JIL1DgJIlH9yuxcNGtyhsWX/PgNltz+5Gr6+8SX9fhXc/hPbEIk6wPI82nhgvp3uUb6ZfAM5mqg/x7KR7NAb+A==}
+ peerDependencies:
+ react-hook-form: ^7.0.0
+ dependencies:
+ react-hook-form: 7.38.0_react@18.2.0
+ dev: false
+
+ /@humanwhocodes/config-array/0.10.7:
+ resolution: {integrity: sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==}
+ engines: {node: '>=10.10.0'}
+ dependencies:
+ '@humanwhocodes/object-schema': 1.2.1
+ debug: 4.3.4
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@humanwhocodes/module-importer/1.0.1:
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+ dev: true
+
+ /@humanwhocodes/object-schema/1.2.1:
+ resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
+ dev: true
+
+ /@hutson/parse-repository-url/3.0.2:
+ resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@jridgewell/gen-mapping/0.1.1:
+ resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.1.2
+ '@jridgewell/sourcemap-codec': 1.4.14
+
+ /@jridgewell/gen-mapping/0.3.2:
+ resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.1.2
+ '@jridgewell/sourcemap-codec': 1.4.14
+ '@jridgewell/trace-mapping': 0.3.15
+
+ /@jridgewell/resolve-uri/3.1.0:
+ resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
+ engines: {node: '>=6.0.0'}
+
+ /@jridgewell/set-array/1.1.2:
+ resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+ engines: {node: '>=6.0.0'}
+
+ /@jridgewell/source-map/0.3.2:
+ resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.2
+ '@jridgewell/trace-mapping': 0.3.15
+
+ /@jridgewell/sourcemap-codec/1.4.14:
+ resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
+
+ /@jridgewell/trace-mapping/0.3.15:
+ resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.0
+ '@jridgewell/sourcemap-codec': 1.4.14
+
+ /@jridgewell/trace-mapping/0.3.9:
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.0
+ '@jridgewell/sourcemap-codec': 1.4.14
+ dev: true
+
+ /@json-rpc-tools/provider/1.7.6:
+ resolution: {integrity: sha512-z7D3xvJ33UfCGv77n40lbzOYjZKVM3k2+5cV7xS8G6SCvKTzMkhkUYuD/qzQUNT4cG/lv0e9mRToweEEVLVVmA==}
+ dependencies:
+ '@json-rpc-tools/utils': 1.7.6
+ axios: 0.21.4
+ safe-json-utils: 1.1.1
+ ws: 7.5.9
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - utf-8-validate
+ dev: false
+
+ /@json-rpc-tools/types/1.7.6:
+ resolution: {integrity: sha512-nDSqmyRNEqEK9TZHtM15uNnDljczhCUdBmRhpNZ95bIPKEDQ+nTDmGMFd2lLin3upc5h2VVVd9tkTDdbXUhDIQ==}
+ dependencies:
+ keyvaluestorage-interface: 1.0.0
+ dev: false
+
+ /@json-rpc-tools/utils/1.7.6:
+ resolution: {integrity: sha512-HjA8x/U/Q78HRRe19yh8HVKoZ+Iaoo3YZjakJYxR+rw52NHo6jM+VE9b8+7ygkCFXl/EHID5wh/MkXaE/jGyYw==}
+ dependencies:
+ '@json-rpc-tools/types': 1.7.6
+ '@pedrouid/environment': 1.0.1
+ dev: false
+
+ /@ladle/react-context/1.0.1_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-xVQ8siyOEQG6e4Knibes1uA3PTyXnqiMmfSmd5pIbkzeDty8NCBtYHhTXSlfmcDNEsw/G8OzNWo4VbyQAVDl2A==}
+ peerDependencies:
+ react: '>=16.14.0'
+ react-dom: '>=16.14.0'
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /@ladle/react/2.4.5_es6txauzvmnbenyrpsbzmz52bu:
+ resolution: {integrity: sha512-Aso5YYCm1EwJ7GxP0vaEYrBSnGLMkPHy3YK7k4la/zlWxqxMb7sQhbjXu8Q1wJtj9Qby58MryknpbznbG75Fng==}
+ engines: {node: '>=16.0.0'}
+ hasBin: true
+ peerDependencies:
+ react: '>=16.14.0'
+ react-dom: '>=16.14.0'
+ dependencies:
+ '@babel/code-frame': 7.18.6
+ '@babel/core': 7.19.6
+ '@babel/generator': 7.19.6
+ '@babel/parser': 7.19.6
+ '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.19.6
+ '@babel/preset-env': 7.18.10_@babel+core@7.19.6
+ '@babel/preset-react': 7.18.6_@babel+core@7.19.6
+ '@babel/preset-typescript': 7.18.6_@babel+core@7.19.6
+ '@babel/runtime': 7.18.9
+ '@babel/template': 7.18.10
+ '@babel/traverse': 7.19.6
+ '@babel/types': 7.19.4
+ '@ladle/react-context': 1.0.1_biqbaboplfbrettd7655fr4n2y
+ '@vitejs/plugin-react': 2.1.0_vite@3.1.8
+ axe-core: 4.4.3
+ boxen: 7.0.0
+ chokidar: 3.5.3
+ classnames: 2.3.2
+ commander: 9.4.0
+ cross-spawn: 7.0.3
+ debug: 4.3.4
+ default-browser: 3.1.0
+ express: 4.18.1
+ get-port: 6.1.2
+ globby: 13.1.2
+ history: 5.3.0
+ lodash.merge: 4.6.2
+ open: 8.4.0
+ prism-react-renderer: 1.3.5_react@18.2.0
+ prop-types: 15.8.1
+ query-string: 7.1.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-frame-component: 5.2.3_v2m5e27vhdewzwhryxwfaorcca
+ react-inspector: 6.0.1_react@18.2.0
+ vite: 3.1.8_sass@1.55.0+terser@5.15.1
+ vite-tsconfig-paths: 3.5.0_vite@3.1.8
+ transitivePeerDependencies:
+ - less
+ - sass
+ - stylus
+ - supports-color
+ - terser
+ dev: false
+
+ /@metamask/safe-event-emitter/2.0.0:
+ resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==}
+ dev: false
+
+ /@motionone/animation/10.14.0:
+ resolution: {integrity: sha512-h+1sdyBP8vbxEBW5gPFDnj+m2DCqdlAuf2g6Iafb1lcMnqjsRXWlPw1AXgvUMXmreyhqmPbJqoNfIKdytampRQ==}
+ dependencies:
+ '@motionone/easing': 10.14.0
+ '@motionone/types': 10.14.0
+ '@motionone/utils': 10.14.0
+ tslib: 2.4.0
+ dev: false
+
+ /@motionone/dom/10.13.1:
+ resolution: {integrity: sha512-zjfX+AGMIt/fIqd/SL1Lj93S6AiJsEA3oc5M9VkUr+Gz+juRmYN1vfvZd6MvEkSqEjwPQgcjN7rGZHrDB9APfQ==}
+ dependencies:
+ '@motionone/animation': 10.14.0
+ '@motionone/generators': 10.14.0
+ '@motionone/types': 10.14.0
+ '@motionone/utils': 10.14.0
+ hey-listen: 1.0.8
+ tslib: 2.4.0
+ dev: false
+
+ /@motionone/easing/10.14.0:
+ resolution: {integrity: sha512-2vUBdH9uWTlRbuErhcsMmt1jvMTTqvGmn9fHq8FleFDXBlHFs5jZzHJT9iw+4kR1h6a4SZQuCf72b9ji92qNYA==}
+ dependencies:
+ '@motionone/utils': 10.14.0
+ tslib: 2.4.0
+ dev: false
+
+ /@motionone/generators/10.14.0:
+ resolution: {integrity: sha512-6kRHezoFfIjFN7pPpaxmkdZXD36tQNcyJe3nwVqwJ+ZfC0e3rFmszR8kp9DEVFs9QL/akWjuGPSLBI1tvz+Vjg==}
+ dependencies:
+ '@motionone/types': 10.14.0
+ '@motionone/utils': 10.14.0
+ tslib: 2.4.0
+ dev: false
+
+ /@motionone/types/10.14.0:
+ resolution: {integrity: sha512-3bNWyYBHtVd27KncnJLhksMFQ5o2MSdk1cA/IZqsHtA9DnRM1SYgN01CTcJ8Iw8pCXF5Ocp34tyAjY7WRpOJJQ==}
+ dev: false
+
+ /@motionone/utils/10.14.0:
+ resolution: {integrity: sha512-sLWBLPzRqkxmOTRzSaD3LFQXCPHvDzyHJ1a3VP9PRzBxyVd2pv51/gMOsdAcxQ9n+MIeGJnxzXBYplUHKj4jkw==}
+ dependencies:
+ '@motionone/types': 10.14.0
+ hey-listen: 1.0.8
+ tslib: 2.4.0
+ dev: false
+
+ /@nodelib/fs.scandir/2.1.5:
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ /@nodelib/fs.stat/2.0.5:
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ /@nodelib/fs.walk/1.2.8:
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.13.0
+
+ /@pedrouid/environment/1.0.1:
+ resolution: {integrity: sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug==}
+ dev: false
+
+ /@popperjs/core/2.11.6:
+ resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==}
+ dev: false
+
+ /@remix-run/router/1.0.2:
+ resolution: {integrity: sha512-GRSOFhJzjGN+d4sKHTMSvNeUPoZiDHWmRnXfzaxrqe7dE/Nzlc8BiMSJdLDESZlndM7jIUrZ/F4yWqVYlI0rwQ==}
+ engines: {node: '>=14'}
+ dev: false
+
+ /@rollup/plugin-inject/4.0.4_rollup@3.2.3:
+ resolution: {integrity: sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==}
+ peerDependencies:
+ rollup: ^1.20.0 || ^2.0.0
+ dependencies:
+ '@rollup/pluginutils': 3.1.0_rollup@3.2.3
+ estree-walker: 2.0.2
+ magic-string: 0.25.9
+ rollup: 3.2.3
+ dev: true
+
+ /@rollup/pluginutils/3.1.0_rollup@3.2.3:
+ resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
+ engines: {node: '>= 8.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0
+ dependencies:
+ '@types/estree': 0.0.39
+ estree-walker: 1.0.1
+ picomatch: 2.3.1
+ rollup: 3.2.3
+ dev: true
+
+ /@rollup/pluginutils/4.2.1:
+ resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
+ engines: {node: '>= 8.0.0'}
+ dependencies:
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /@solana/buffer-layout/4.0.0:
+ resolution: {integrity: sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==}
+ engines: {node: '>=5.10'}
+ dependencies:
+ buffer: 6.0.3
+ dev: false
+
+ /@solana/web3.js/1.52.0:
+ resolution: {integrity: sha512-oG1+BX4nVYZ0OBzmk6DRrY8oBYMsbXVQEf9N9JOfKm+wXSmjxVEEo8v3IPV8mKwR0JvUWuE8lOn3IUDiMlRLgg==}
+ engines: {node: '>=12.20.0'}
+ dependencies:
+ '@babel/runtime': 7.18.9
+ '@ethersproject/sha2': 5.7.0
+ '@solana/buffer-layout': 4.0.0
+ bigint-buffer: 1.1.5
+ bn.js: 5.2.1
+ borsh: 0.7.0
+ bs58: 4.0.1
+ buffer: 6.0.1
+ fast-stable-stringify: 1.0.0
+ jayson: 3.7.0
+ js-sha3: 0.8.0
+ node-fetch: 2.6.7
+ react-native-url-polyfill: 1.3.0
+ rpc-websockets: 7.5.0
+ secp256k1: 4.0.3
+ superstruct: 0.14.2
+ tweetnacl: 1.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - react-native
+ - utf-8-validate
+ dev: false
+
+ /@svgr/babel-plugin-add-jsx-attribute/6.5.0_@babel+core@7.19.6:
+ resolution: {integrity: sha512-Cp1JR1IPrQNvPRbkfcPmax52iunBC+eQDyBce8feOIIbVH6ZpVhErYoJtPWRBj2rKi4Wi9HvCm1+L1UD6QlBmg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ dev: true
+
+ /@svgr/babel-plugin-remove-jsx-attribute/6.5.0_@babel+core@7.19.6:
+ resolution: {integrity: sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ dev: true
+
+ /@svgr/babel-plugin-remove-jsx-empty-expression/6.5.0_@babel+core@7.19.6:
+ resolution: {integrity: sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ dev: true
+
+ /@svgr/babel-plugin-replace-jsx-attribute-value/6.5.0_@babel+core@7.19.6:
+ resolution: {integrity: sha512-XWm64/rSPUCQ+MFyA9lhMO+w8bOZvkTvovRIU1lpIy63ysPaVAFtxjQiZj+S7QaLaLGUXkSkf8WZsaN+QPo/gA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ dev: true
+
+ /@svgr/babel-plugin-svg-dynamic-title/6.5.0_@babel+core@7.19.6:
+ resolution: {integrity: sha512-JIF2D2ltiWFGlTw2fJ9jJg1fNT9rWjOD2Cf0/xzeW6Z2LIRQTHcRHxpZq359+SRWtEPsCXEWV2Xmd+DMBj6dBw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ dev: true
+
+ /@svgr/babel-plugin-svg-em-dimensions/6.5.0_@babel+core@7.19.6:
+ resolution: {integrity: sha512-uuo0FfLP4Nu2zncOcoUFDzZdXWma2bxkTGk0etRThs4/PghvPIGaW8cPhCg6yJ8zpaauWcKV0wZtzKlJRCtVzg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ dev: true
+
+ /@svgr/babel-plugin-transform-react-native-svg/6.5.0_@babel+core@7.19.6:
+ resolution: {integrity: sha512-VMRWyOmrV+DaEFPgP3hZMsFgs2g87ojs3txw0Rx8iz6Nf/E3UoHUwTqpkSCWd3Hsnc9gMOY9+wl6+/Ycleh1sw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ dev: true
+
+ /@svgr/babel-plugin-transform-svg-component/6.5.0_@babel+core@7.19.6:
+ resolution: {integrity: sha512-b67Ul3SelaqvGEEG/1B3VJ03KUtGFgRQjRLCCjdttMQLcYa9l/izQFEclNFx53pNqhijUMNKHPhGMY/CWGVKig==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ dev: true
+
+ /@svgr/babel-preset/6.5.0_@babel+core@7.19.6:
+ resolution: {integrity: sha512-UWM98PKVuMqw2UZo8YO3erI6nF1n7/XBYTXBqR0QhZP7HTjYK6QxFNvPfIshddy1hBdzhVpkf148Vg8xiVOtyg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@svgr/babel-plugin-add-jsx-attribute': 6.5.0_@babel+core@7.19.6
+ '@svgr/babel-plugin-remove-jsx-attribute': 6.5.0_@babel+core@7.19.6
+ '@svgr/babel-plugin-remove-jsx-empty-expression': 6.5.0_@babel+core@7.19.6
+ '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.0_@babel+core@7.19.6
+ '@svgr/babel-plugin-svg-dynamic-title': 6.5.0_@babel+core@7.19.6
+ '@svgr/babel-plugin-svg-em-dimensions': 6.5.0_@babel+core@7.19.6
+ '@svgr/babel-plugin-transform-react-native-svg': 6.5.0_@babel+core@7.19.6
+ '@svgr/babel-plugin-transform-svg-component': 6.5.0_@babel+core@7.19.6
+ dev: true
+
+ /@svgr/cli/6.5.0:
+ resolution: {integrity: sha512-mMG6DdMQDzw5Q7nPBHKiWyANnGgLH2rnal6Z4mtMPVJYPHANbDCZrwgtPtZVfXPdcQ+sIDswMKAO7pTjkRmuaw==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ '@svgr/core': 6.5.0
+ '@svgr/plugin-jsx': 6.5.0_@svgr+core@6.5.0
+ '@svgr/plugin-prettier': 6.5.0_@svgr+core@6.5.0
+ '@svgr/plugin-svgo': 6.5.0_@svgr+core@6.5.0
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ commander: 9.4.0
+ dashify: 2.0.0
+ glob: 8.0.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@svgr/core/6.5.0:
+ resolution: {integrity: sha512-jIbu36GMjfK8HCCQitkfVVeQ2vSXGfq0ef0GO9HUxZGjal6Kvpkk4PwpkFP+OyCzF+skQFT9aWrUqekT3pKF8w==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@babel/core': 7.19.6
+ '@svgr/babel-preset': 6.5.0_@babel+core@7.19.6
+ '@svgr/plugin-jsx': 6.5.0_@svgr+core@6.5.0
+ camelcase: 6.3.0
+ cosmiconfig: 7.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@svgr/hast-util-to-babel-ast/6.5.0:
+ resolution: {integrity: sha512-PPy94U/EiPQ2dY0b4jEqj4QOdDRq6DG7aTHjpGaL8HlKSHkpU1DpjfywCXTJqtOdCo2FywjWvg0U2FhqMeUJaA==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@babel/types': 7.19.4
+ entities: 4.3.1
+ dev: true
+
+ /@svgr/plugin-jsx/6.5.0_@svgr+core@6.5.0:
+ resolution: {integrity: sha512-1CHMqOBKoNk/ZPU+iGXKcQPC6q9zaD7UOI99J+BaGY5bdCztcf5bZyi0QZSDRJtCQpdofeVv7XfBYov2mtl0Pw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@svgr/core': ^6.0.0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@svgr/babel-preset': 6.5.0_@babel+core@7.19.6
+ '@svgr/core': 6.5.0
+ '@svgr/hast-util-to-babel-ast': 6.5.0
+ svg-parser: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@svgr/plugin-prettier/6.5.0_@svgr+core@6.5.0:
+ resolution: {integrity: sha512-Dhw16y3lE6h/y5Qsvx006RKYx0oxKbLmQMn6Mq0oXWEzx2brxXhjWAoLdRO+rgcSJUPp4vJonpEvlEm+zJsEKg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@svgr/core': ^6.0.0
+ dependencies:
+ '@svgr/core': 6.5.0
+ deepmerge: 4.2.2
+ prettier: 2.7.1
+ dev: true
+
+ /@svgr/plugin-svgo/6.5.0_@svgr+core@6.5.0:
+ resolution: {integrity: sha512-8Zv1Yyv6I7HlIqrqGFM0sDKQrhjbfNZJawR8UjIaVWSb0tKZP1Ra6ymhqIFu6FT6kDRD0Ct5NlQZ10VUujSspw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@svgr/core': ^6.0.0
+ dependencies:
+ '@svgr/core': 6.5.0
+ cosmiconfig: 7.0.1
+ deepmerge: 4.2.2
+ svgo: 2.8.0
+ dev: true
+
+ /@tanstack/query-core/4.12.0:
+ resolution: {integrity: sha512-KEiFPNLMFByhNL2s6RBFL6Z5cNdwwQzFpW/II3GY+rEuQ343ZEoVyQ48zlUXXkEkbamQFIFg2onM8Pxf0Yo01A==}
+ dev: false
+
+ /@tanstack/query-persist-client-core/4.12.0_h3xf36g7wqpz562xenkni7jjke:
+ resolution: {integrity: sha512-tCfCb3ok1IdtvryXQ2HR90HDXG2iz4ycyZO2TdHGrIwa10ML8yxfLNxrKFhTd0tRksgrSBZkWXR5y17NFIKD+Q==}
+ peerDependencies:
+ '@tanstack/query-core': 4.12.0
+ dependencies:
+ '@tanstack/query-core': 4.12.0
+ dev: false
+
+ /@tanstack/query-sync-storage-persister/4.12.0_h3xf36g7wqpz562xenkni7jjke:
+ resolution: {integrity: sha512-u55bQRQGPXBHi3Zwe2L/P3Ph4L+Cca045jIp2Rt+kwRRSrlH0Ll9VQ4SZRCCFVjooKuNVEMkr661JC99C5kslg==}
+ dependencies:
+ '@tanstack/query-persist-client-core': 4.12.0_h3xf36g7wqpz562xenkni7jjke
+ transitivePeerDependencies:
+ - '@tanstack/query-core'
+ dev: false
+
+ /@tanstack/react-query-persist-client/4.12.0_y5afqvawh53tb7bsdy3jr7gcn4:
+ resolution: {integrity: sha512-ftm12tW7wngpBb0krt4Mf5SnodwG1b7IQIfp7nDYSCTE3NwoEuOu5a9iHSb77y7CYCzNMmP7Qu6W/NOIvM5SQA==}
+ peerDependencies:
+ '@tanstack/react-query': 4.12.0
+ dependencies:
+ '@tanstack/query-persist-client-core': 4.12.0_h3xf36g7wqpz562xenkni7jjke
+ '@tanstack/react-query': 4.12.0_biqbaboplfbrettd7655fr4n2y
+ transitivePeerDependencies:
+ - '@tanstack/query-core'
+ dev: false
+
+ /@tanstack/react-query/4.12.0_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-prchV1q+CJ0ZVo8Rts2cOF3azDfQizZZySmH6XXsXRcPTbir0sgb9fp0vY/5l5ZkSYjTvWt/OL8WQhAhYMSvrA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-native: '*'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+ react-native:
+ optional: true
+ dependencies:
+ '@tanstack/query-core': 4.12.0
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ use-sync-external-store: 1.2.0_react@18.2.0
+ dev: false
+
+ /@tippyjs/react/4.2.6_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==}
+ peerDependencies:
+ react: '>=16.8'
+ react-dom: '>=16.8'
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ tippy.js: 6.3.7
+ dev: false
+
+ /@trysound/sax/0.2.0:
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /@tsconfig/node10/1.0.9:
+ resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
+ dev: true
+
+ /@tsconfig/node12/1.0.11:
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+ dev: true
+
+ /@tsconfig/node14/1.0.3:
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+ dev: true
+
+ /@tsconfig/node16/1.0.3:
+ resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==}
+ dev: true
+
+ /@types/bn.js/4.11.6:
+ resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==}
+ dependencies:
+ '@types/node': 18.7.13
+ dev: false
+
+ /@types/byte-size/8.1.0:
+ resolution: {integrity: sha512-LCIlZh8vyx+I2fgRycE1D34c33QDppYY6quBYYoaOpQ1nGhJ/avSP2VlrAefVotjJxgSk6WkKo0rTcCJwGG7vA==}
+ dev: true
+
+ /@types/connect/3.4.35:
+ resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
+ dependencies:
+ '@types/node': 18.7.13
+ dev: false
+
+ /@types/d3-color/2.0.3:
+ resolution: {integrity: sha512-+0EtEjBfKEDtH9Rk3u3kLOUXM5F+iZK+WvASPb0MhIZl8J8NUvGeZRwKCXl+P3HkYx5TdU4YtcibpqHkSR9n7w==}
+ dev: false
+
+ /@types/d3-interpolate/2.0.2:
+ resolution: {integrity: sha512-lElyqlUfIPyWG/cD475vl6msPL4aMU7eJvx1//Q177L8mdXoVPFl1djIESF2FKnc0NyaHvQlJpWwKJYwAhUoCw==}
+ dependencies:
+ '@types/d3-color': 2.0.3
+ dev: false
+
+ /@types/d3-path/2.0.2:
+ resolution: {integrity: sha512-3YHpvDw9LzONaJzejXLOwZ3LqwwkoXb9LI2YN7Hbd6pkGo5nIlJ09ul4bQhBN4hQZJKmUpX8HkVqbzgUKY48cg==}
+ dev: false
+
+ /@types/d3-scale/3.3.2:
+ resolution: {integrity: sha512-gGqr7x1ost9px3FvIfUMi5XA/F/yAf4UkUDtdQhpH92XCT0Oa7zkkRzY61gPVJq+DxpHn/btouw5ohWkbBsCzQ==}
+ dependencies:
+ '@types/d3-time': 2.1.1
+ dev: false
+
+ /@types/d3-shape/2.1.3:
+ resolution: {integrity: sha512-HAhCel3wP93kh4/rq+7atLdybcESZ5bRHDEZUojClyZWsRuEMo3A52NGYJSh48SxfxEU6RZIVbZL2YFZ2OAlzQ==}
+ dependencies:
+ '@types/d3-path': 2.0.2
+ dev: false
+
+ /@types/d3-time/2.1.1:
+ resolution: {integrity: sha512-9MVYlmIgmRR31C5b4FVSWtuMmBHh2mOWQYfl7XAYOa8dsnb7iEmUmRSWSFgXFtkjxO65d7hTUHQC+RhR/9IWFg==}
+ dev: false
+
+ /@types/eslint/8.4.6:
+ resolution: {integrity: sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==}
+ dependencies:
+ '@types/estree': 1.0.0
+ '@types/json-schema': 7.0.11
+ dev: true
+
+ /@types/estree/0.0.39:
+ resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
+ dev: true
+
+ /@types/estree/1.0.0:
+ resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
+ dev: true
+
+ /@types/file-saver/2.0.5:
+ resolution: {integrity: sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==}
+ dev: true
+
+ /@types/history/4.7.11:
+ resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==}
+ dev: true
+
+ /@types/json-schema/7.0.11:
+ resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
+ dev: true
+
+ /@types/json5/0.0.29:
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ dev: true
+
+ /@types/lodash-es/4.17.6:
+ resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==}
+ dependencies:
+ '@types/lodash': 4.14.184
+ dev: true
+
+ /@types/lodash/4.14.184:
+ resolution: {integrity: sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==}
+
+ /@types/minimist/1.2.2:
+ resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
+ dev: true
+
+ /@types/node/12.20.55:
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+ dev: false
+
+ /@types/node/14.18.32:
+ resolution: {integrity: sha512-Y6S38pFr04yb13qqHf8uk1nHE3lXgQ30WZbv1mLliV9pt0NjvqdWttLcrOYLnXbOafknVYRHZGoMSpR9UwfYow==}
+ dev: true
+
+ /@types/node/18.7.13:
+ resolution: {integrity: sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==}
+ dev: false
+
+ /@types/normalize-package-data/2.4.1:
+ resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
+ dev: true
+
+ /@types/parse-json/4.0.0:
+ resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
+
+ /@types/pbkdf2/3.1.0:
+ resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==}
+ dependencies:
+ '@types/node': 18.7.13
+ dev: false
+
+ /@types/prop-types/15.7.5:
+ resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
+
+ /@types/react-dom/18.0.6:
+ resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==}
+ dependencies:
+ '@types/react': 18.0.21
+ dev: true
+
+ /@types/react-router-dom/5.3.3:
+ resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==}
+ dependencies:
+ '@types/history': 4.7.11
+ '@types/react': 18.0.21
+ '@types/react-router': 5.1.18
+ dev: true
+
+ /@types/react-router/5.1.18:
+ resolution: {integrity: sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g==}
+ dependencies:
+ '@types/history': 4.7.11
+ '@types/react': 18.0.21
+ dev: true
+
+ /@types/react-table/7.7.12:
+ resolution: {integrity: sha512-bRUent+NR/WwtDGwI/BqhZ8XnHghwHw0HUKeohzB5xN3K2qKWYE5w19e7GCuOkL1CXD9Gi1HFy7TIm2AvgWUHg==}
+ dependencies:
+ '@types/react': 18.0.21
+ dev: true
+
+ /@types/react-transition-group/4.4.5:
+ resolution: {integrity: sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==}
+ dependencies:
+ '@types/react': 18.0.21
+ dev: false
+
+ /@types/react-virtualized-auto-sizer/1.0.1:
+ resolution: {integrity: sha512-GH8sAnBEM5GV9LTeiz56r4ZhMOUSrP43tAQNSRVxNexDjcNKLCEtnxusAItg1owFUFE6k0NslV26gqVClVvong==}
+ dependencies:
+ '@types/react': 18.0.21
+ dev: false
+
+ /@types/react-window/1.8.5:
+ resolution: {integrity: sha512-V9q3CvhC9Jk9bWBOysPGaWy/Z0lxYcTXLtLipkt2cnRj1JOSFNF7wqGpkScSXMgBwC+fnVRg/7shwgddBG5ICw==}
+ dependencies:
+ '@types/react': 18.0.21
+ dev: false
+
+ /@types/react/18.0.21:
+ resolution: {integrity: sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==}
+ dependencies:
+ '@types/prop-types': 15.7.5
+ '@types/scheduler': 0.16.2
+ csstype: 3.1.0
+
+ /@types/scheduler/0.16.2:
+ resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
+
+ /@types/secp256k1/4.0.3:
+ resolution: {integrity: sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==}
+ dependencies:
+ '@types/node': 18.7.13
+ dev: false
+
+ /@types/semver/7.3.12:
+ resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==}
+ dev: true
+
+ /@types/ws/7.4.7:
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
+ dependencies:
+ '@types/node': 18.7.13
+ dev: false
+
+ /@typescript-eslint/eslint-plugin/5.40.1_ukgdydjtebaxmxfqp5v5ulh64y:
+ resolution: {integrity: sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^5.0.0
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q
+ '@typescript-eslint/scope-manager': 5.40.1
+ '@typescript-eslint/type-utils': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q
+ '@typescript-eslint/utils': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q
+ debug: 4.3.4
+ eslint: 8.25.0
+ ignore: 5.2.0
+ regexpp: 3.2.0
+ semver: 7.3.7
+ tsutils: 3.21.0_typescript@4.8.4
+ typescript: 4.8.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/parser/5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q:
+ resolution: {integrity: sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/scope-manager': 5.40.1
+ '@typescript-eslint/types': 5.40.1
+ '@typescript-eslint/typescript-estree': 5.40.1_typescript@4.8.4
+ debug: 4.3.4
+ eslint: 8.25.0
+ typescript: 4.8.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/scope-manager/5.40.1:
+ resolution: {integrity: sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ '@typescript-eslint/types': 5.40.1
+ '@typescript-eslint/visitor-keys': 5.40.1
+ dev: true
+
+ /@typescript-eslint/type-utils/5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q:
+ resolution: {integrity: sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '*'
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/typescript-estree': 5.40.1_typescript@4.8.4
+ '@typescript-eslint/utils': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q
+ debug: 4.3.4
+ eslint: 8.25.0
+ tsutils: 3.21.0_typescript@4.8.4
+ typescript: 4.8.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/types/5.40.1:
+ resolution: {integrity: sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /@typescript-eslint/typescript-estree/5.40.1_typescript@4.8.4:
+ resolution: {integrity: sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/types': 5.40.1
+ '@typescript-eslint/visitor-keys': 5.40.1
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.3.7
+ tsutils: 3.21.0_typescript@4.8.4
+ typescript: 4.8.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/utils/5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q:
+ resolution: {integrity: sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ '@types/json-schema': 7.0.11
+ '@types/semver': 7.3.12
+ '@typescript-eslint/scope-manager': 5.40.1
+ '@typescript-eslint/types': 5.40.1
+ '@typescript-eslint/typescript-estree': 5.40.1_typescript@4.8.4
+ eslint: 8.25.0
+ eslint-scope: 5.1.1
+ eslint-utils: 3.0.0_eslint@8.25.0
+ semver: 7.3.7
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@typescript-eslint/visitor-keys/5.40.1:
+ resolution: {integrity: sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ '@typescript-eslint/types': 5.40.1
+ eslint-visitor-keys: 3.3.0
+ dev: true
+
+ /@vitejs/plugin-legacy/2.2.0_terser@5.15.1+vite@3.1.8:
+ resolution: {integrity: sha512-xkSXZl2LNk0KKyo5CJknNW84mSlmHIClFzsBuFXkX3yBt+Lr8UO/n4QOg2X7+jvurgBRies9FRn3ZvMem+TmIg==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ terser: ^5.4.0
+ vite: ^3.0.0
+ dependencies:
+ '@babel/standalone': 7.19.2
+ core-js: 3.25.2
+ magic-string: 0.26.3
+ regenerator-runtime: 0.13.9
+ systemjs: 6.12.6
+ terser: 5.15.1
+ vite: 3.1.8_sass@1.55.0+terser@5.15.1
+ dev: false
+
+ /@vitejs/plugin-react/2.1.0_vite@3.1.8:
+ resolution: {integrity: sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^3.0.0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/plugin-transform-react-jsx': 7.18.10_@babel+core@7.19.6
+ '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.19.6
+ '@babel/plugin-transform-react-jsx-source': 7.18.6_@babel+core@7.19.6
+ magic-string: 0.26.2
+ react-refresh: 0.14.0
+ vite: 3.1.8_sass@1.55.0+terser@5.15.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@wagmi/core/0.6.4_fptuxfze67a5krt4ctgnmu3p3y:
+ resolution: {integrity: sha512-ihb/U5B69FO4YtPgAuCgTonniCVysLjr8mzNNOWoLjwUOhNEpCdntA8S9Qii4Tj/XcwIKOApOMw9jgc52L5k3A==}
+ peerDependencies:
+ '@coinbase/wallet-sdk': '>=3.3.0'
+ '@walletconnect/ethereum-provider': '>=1.7.5'
+ ethers: '>=5.5.1'
+ peerDependenciesMeta:
+ '@coinbase/wallet-sdk':
+ optional: true
+ '@walletconnect/ethereum-provider':
+ optional: true
+ dependencies:
+ '@coinbase/wallet-sdk': 3.5.3_@babel+core@7.19.6
+ '@walletconnect/ethereum-provider': 1.8.0
+ abitype: 0.1.7_typescript@4.8.4
+ ethers: 5.7.2
+ eventemitter3: 4.0.7
+ zustand: 4.1.2_react@18.2.0
+ transitivePeerDependencies:
+ - immer
+ - react
+ - typescript
+ dev: false
+
+ /@walletconnect/browser-utils/1.8.0:
+ resolution: {integrity: sha512-Wcqqx+wjxIo9fv6eBUFHPsW1y/bGWWRboni5dfD8PtOmrihrEpOCmvRJe4rfl7xgJW8Ea9UqKEaq0bIRLHlK4A==}
+ dependencies:
+ '@walletconnect/safe-json': 1.0.0
+ '@walletconnect/types': 1.8.0
+ '@walletconnect/window-getters': 1.0.0
+ '@walletconnect/window-metadata': 1.0.0
+ detect-browser: 5.2.0
+ dev: false
+
+ /@walletconnect/client/1.8.0:
+ resolution: {integrity: sha512-svyBQ14NHx6Cs2j4TpkQaBI/2AF4+LXz64FojTjMtV4VMMhl81jSO1vNeg+yYhQzvjcGH/GpSwixjyCW0xFBOQ==}
+ dependencies:
+ '@walletconnect/core': 1.8.0
+ '@walletconnect/iso-crypto': 1.8.0
+ '@walletconnect/types': 1.8.0
+ '@walletconnect/utils': 1.8.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: false
+
+ /@walletconnect/core/1.8.0:
+ resolution: {integrity: sha512-aFTHvEEbXcZ8XdWBw6rpQDte41Rxwnuk3SgTD8/iKGSRTni50gI9S3YEzMj05jozSiOBxQci4pJDMVhIUMtarw==}
+ dependencies:
+ '@walletconnect/socket-transport': 1.8.0
+ '@walletconnect/types': 1.8.0
+ '@walletconnect/utils': 1.8.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: false
+
+ /@walletconnect/crypto/1.0.2:
+ resolution: {integrity: sha512-+OlNtwieUqVcOpFTvLBvH+9J9pntEqH5evpINHfVxff1XIgwV55PpbdvkHu6r9Ib4WQDOFiD8OeeXs1vHw7xKQ==}
+ dependencies:
+ '@walletconnect/encoding': 1.0.1
+ '@walletconnect/environment': 1.0.0
+ '@walletconnect/randombytes': 1.0.2
+ aes-js: 3.1.2
+ hash.js: 1.1.7
+ dev: false
+
+ /@walletconnect/encoding/1.0.1:
+ resolution: {integrity: sha512-8opL2rs6N6E3tJfsqwS82aZQDL3gmupWUgmvuZ3CGU7z/InZs3R9jkzH8wmYtpbq0sFK3WkJkQRZFFk4BkrmFA==}
+ dependencies:
+ is-typedarray: 1.0.0
+ typedarray-to-buffer: 3.1.5
+ dev: false
+
+ /@walletconnect/environment/1.0.0:
+ resolution: {integrity: sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ==}
+ dev: false
+
+ /@walletconnect/ethereum-provider/1.8.0:
+ resolution: {integrity: sha512-Nq9m+oo5P0F+njsROHw9KMWdoc/8iGHYzQdkjJN/1C7DtsqFRg5k5a3hd9rzCLpbPsOC1q8Z5lRs6JQgDvPm6Q==}
+ dependencies:
+ '@walletconnect/client': 1.8.0
+ '@walletconnect/jsonrpc-http-connection': 1.0.3
+ '@walletconnect/jsonrpc-provider': 1.0.5
+ '@walletconnect/signer-connection': 1.8.0
+ '@walletconnect/types': 1.8.0
+ '@walletconnect/utils': 1.8.0
+ eip1193-provider: 1.0.1
+ eventemitter3: 4.0.7
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - encoding
+ - utf-8-validate
+ dev: false
+
+ /@walletconnect/iso-crypto/1.8.0:
+ resolution: {integrity: sha512-pWy19KCyitpfXb70hA73r9FcvklS+FvO9QUIttp3c2mfW8frxgYeRXfxLRCIQTkaYueRKvdqPjbyhPLam508XQ==}
+ dependencies:
+ '@walletconnect/crypto': 1.0.2
+ '@walletconnect/types': 1.8.0
+ '@walletconnect/utils': 1.8.0
+ dev: false
+
+ /@walletconnect/jsonrpc-http-connection/1.0.3:
+ resolution: {integrity: sha512-npPvDG2JxyxoqOphDiyjp5pPeASRBrlfQS39wHESPHlFIjBuvNt9lV9teh53MK9Ncbyxh4y2qEKMfPgcUulTRg==}
+ dependencies:
+ '@walletconnect/jsonrpc-utils': 1.0.3
+ '@walletconnect/safe-json': 1.0.0
+ cross-fetch: 3.1.5
+ transitivePeerDependencies:
+ - encoding
+ dev: false
+
+ /@walletconnect/jsonrpc-provider/1.0.5:
+ resolution: {integrity: sha512-v61u4ZIV8+p9uIHS2Kl2YRj/2idrQiHcrbrJXw3McQkEJtj9mkCofr1Hu/n419wSRM5uiNK8Z4WRS9zGTTAhWQ==}
+ dependencies:
+ '@walletconnect/jsonrpc-utils': 1.0.3
+ '@walletconnect/safe-json': 1.0.0
+ dev: false
+
+ /@walletconnect/jsonrpc-types/1.0.1:
+ resolution: {integrity: sha512-+6coTtOuChCqM+AoYyi4Q83p9l/laI6NvuM2/AHaZFuf0gT0NjW7IX2+86qGyizn7Ptq4AYZmfxurAxTnhefuw==}
+ dependencies:
+ keyvaluestorage-interface: 1.0.0
+ dev: false
+
+ /@walletconnect/jsonrpc-utils/1.0.3:
+ resolution: {integrity: sha512-3yb49bPk16MNLk6uIIHPSHQCpD6UAo1OMOx1rM8cW/MPEAYAzrSW5hkhG7NEUwX9SokRIgnZK3QuQkiyNzBMhQ==}
+ dependencies:
+ '@walletconnect/environment': 1.0.0
+ '@walletconnect/jsonrpc-types': 1.0.1
+ dev: false
+
+ /@walletconnect/mobile-registry/1.4.0:
+ resolution: {integrity: sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw==}
+ deprecated: 'Deprecated in favor of dynamic registry available from: https://github.com/walletconnect/walletconnect-registry'
+ dev: false
+
+ /@walletconnect/qrcode-modal/1.8.0:
+ resolution: {integrity: sha512-BueaFefaAi8mawE45eUtztg3ZFbsAH4DDXh1UNwdUlsvFMjqcYzLUG0xZvDd6z2eOpbgDg2N3bl6gF0KONj1dg==}
+ dependencies:
+ '@walletconnect/browser-utils': 1.8.0
+ '@walletconnect/mobile-registry': 1.4.0
+ '@walletconnect/types': 1.8.0
+ copy-to-clipboard: 3.3.2
+ preact: 10.4.1
+ qrcode: 1.4.4
+ dev: false
+
+ /@walletconnect/randombytes/1.0.2:
+ resolution: {integrity: sha512-ivgOtAyqQnN0rLQmOFPemsgYGysd/ooLfaDA/ACQ3cyqlca56t3rZc7pXfqJOIETx/wSyoF5XbwL+BqYodw27A==}
+ dependencies:
+ '@walletconnect/encoding': 1.0.1
+ '@walletconnect/environment': 1.0.0
+ randombytes: 2.1.0
+ dev: false
+
+ /@walletconnect/safe-json/1.0.0:
+ resolution: {integrity: sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==}
+ dev: false
+
+ /@walletconnect/signer-connection/1.8.0:
+ resolution: {integrity: sha512-+YAaTAP52MWZJ2wWnqKClKCPlPHBo6reURFe0cWidLADh9mi/kPWGALZ5AENK22zpem1bbKV466rF5Rzvu0ehA==}
+ dependencies:
+ '@walletconnect/client': 1.8.0
+ '@walletconnect/jsonrpc-types': 1.0.1
+ '@walletconnect/jsonrpc-utils': 1.0.3
+ '@walletconnect/qrcode-modal': 1.8.0
+ '@walletconnect/types': 1.8.0
+ eventemitter3: 4.0.7
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: false
+
+ /@walletconnect/socket-transport/1.8.0:
+ resolution: {integrity: sha512-5DyIyWrzHXTcVp0Vd93zJ5XMW61iDM6bcWT4p8DTRfFsOtW46JquruMhxOLeCOieM4D73kcr3U7WtyR4JUsGuQ==}
+ dependencies:
+ '@walletconnect/types': 1.8.0
+ '@walletconnect/utils': 1.8.0
+ ws: 7.5.3
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: false
+
+ /@walletconnect/types/1.8.0:
+ resolution: {integrity: sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg==}
+ dev: false
+
+ /@walletconnect/utils/1.8.0:
+ resolution: {integrity: sha512-zExzp8Mj1YiAIBfKNm5u622oNw44WOESzo6hj+Q3apSMIb0Jph9X3GDIdbZmvVZsNPxWDL7uodKgZcCInZv2vA==}
+ dependencies:
+ '@walletconnect/browser-utils': 1.8.0
+ '@walletconnect/encoding': 1.0.1
+ '@walletconnect/jsonrpc-utils': 1.0.3
+ '@walletconnect/types': 1.8.0
+ bn.js: 4.11.8
+ js-sha3: 0.8.0
+ query-string: 6.13.5
+ dev: false
+
+ /@walletconnect/window-getters/1.0.0:
+ resolution: {integrity: sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==}
+ dev: false
+
+ /@walletconnect/window-metadata/1.0.0:
+ resolution: {integrity: sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==}
+ dependencies:
+ '@walletconnect/window-getters': 1.0.0
+ dev: false
+
+ /JSONStream/1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ /abitype/0.1.7_typescript@4.8.4:
+ resolution: {integrity: sha512-mNBIrA8xbkR0PrxXSO/7p3irNhyLKO6S4VfU3YrR37cqpJIq1D63Yg8KlovOZkCVAaQ+lJkGDkOhSpv1QmMXIg==}
+ engines: {pnpm: '>=7'}
+ peerDependencies:
+ typescript: '>=4.7.4'
+ dependencies:
+ typescript: 4.8.4
+ dev: false
+
+ /accepts/1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+ dev: false
+
+ /acorn-jsx/5.3.2_acorn@8.8.0:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 8.8.0
+ dev: true
+
+ /acorn-walk/8.2.0:
+ resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
+ engines: {node: '>=0.4.0'}
+ dev: true
+
+ /acorn/8.8.0:
+ resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ /add-stream/1.0.0:
+ resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==}
+ dev: true
+
+ /aes-js/3.0.0:
+ resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==}
+ dev: false
+
+ /aes-js/3.1.2:
+ resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==}
+ dev: false
+
+ /ajv/6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+ dev: true
+
+ /ajv/8.11.0:
+ resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+ dev: true
+
+ /ansi-align/3.0.1:
+ resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+ dependencies:
+ string-width: 4.2.3
+ dev: false
+
+ /ansi-escapes/3.2.0:
+ resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /ansi-regex/3.0.1:
+ resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /ansi-regex/4.1.1:
+ resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
+ engines: {node: '>=6'}
+
+ /ansi-regex/5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ /ansi-regex/6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /ansi-styles/3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+ dependencies:
+ color-convert: 1.9.3
+
+ /ansi-styles/4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+ dev: true
+
+ /ansi-styles/6.1.1:
+ resolution: {integrity: sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /anymatch/3.1.2:
+ resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ /arch/2.2.0:
+ resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
+ dev: false
+
+ /arg/4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+ dev: true
+
+ /argparse/2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ dev: true
+
+ /aria-hidden/1.2.1_iapumuv4e6jcjznwuxpf4tt22e:
+ resolution: {integrity: sha512-PN344VAf9j1EAi+jyVHOJ8XidQdPVssGco39eNcsGdM4wcsILtxrKLkbuiMfLWYROK1FjRQasMWCBttrhjnr6A==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
+ react: ^16.9.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.0.21
+ react: 18.2.0
+ tslib: 2.4.0
+ dev: false
+
+ /aria-query/4.2.2:
+ resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==}
+ engines: {node: '>=6.0'}
+ dependencies:
+ '@babel/runtime': 7.18.9
+ '@babel/runtime-corejs3': 7.18.9
+ dev: true
+
+ /array-flatten/1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+ dev: false
+
+ /array-ify/1.0.0:
+ resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
+
+ /array-includes/3.1.5:
+ resolution: {integrity: sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+ get-intrinsic: 1.1.2
+ is-string: 1.0.7
+ dev: true
+
+ /array-union/2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /array.prototype.flat/1.3.0:
+ resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+ es-shim-unscopables: 1.0.0
+ dev: true
+
+ /array.prototype.flatmap/1.3.0:
+ resolution: {integrity: sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+ es-shim-unscopables: 1.0.0
+ dev: true
+
+ /arrify/1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /ast-types-flow/0.0.7:
+ resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
+ dev: true
+
+ /astral-regex/2.0.0:
+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /async-mutex/0.2.6:
+ resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==}
+ dependencies:
+ tslib: 2.4.0
+ dev: false
+
+ /asynckit/0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+ dev: false
+
+ /autoprefixer/10.4.12_postcss@8.4.18:
+ resolution: {integrity: sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+ dependencies:
+ browserslist: 4.21.4
+ caniuse-lite: 1.0.30001416
+ fraction.js: 4.2.0
+ normalize-range: 0.1.2
+ picocolors: 1.0.0
+ postcss: 8.4.18
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /available-typed-arrays/1.0.5:
+ resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
+ engines: {node: '>= 0.4'}
+ dev: false
+
+ /axe-core/4.4.3:
+ resolution: {integrity: sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==}
+ engines: {node: '>=4'}
+
+ /axios/0.21.4:
+ resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
+ dependencies:
+ follow-redirects: 1.15.1
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
+ /axios/1.1.3:
+ resolution: {integrity: sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==}
+ dependencies:
+ follow-redirects: 1.15.1
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
+ /axobject-query/2.2.0:
+ resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==}
+ dev: true
+
+ /babel-plugin-dynamic-import-node/2.3.3:
+ resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==}
+ dependencies:
+ object.assign: 4.1.4
+ dev: false
+
+ /babel-plugin-macros/3.1.0:
+ resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+ engines: {node: '>=10', npm: '>=6'}
+ dependencies:
+ '@babel/runtime': 7.18.9
+ cosmiconfig: 7.0.1
+ resolve: 1.22.1
+
+ /babel-plugin-polyfill-corejs2/0.3.2_@babel+core@7.19.6:
+ resolution: {integrity: sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/compat-data': 7.19.3
+ '@babel/core': 7.19.6
+ '@babel/helper-define-polyfill-provider': 0.3.2_@babel+core@7.19.6
+ semver: 6.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /babel-plugin-polyfill-corejs3/0.5.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-define-polyfill-provider': 0.3.2_@babel+core@7.19.6
+ core-js-compat: 3.25.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /babel-plugin-polyfill-regenerator/0.4.0_@babel+core@7.19.6:
+ resolution: {integrity: sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.19.6
+ '@babel/helper-define-polyfill-provider': 0.3.2_@babel+core@7.19.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /balanced-match/1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ dev: true
+
+ /balanced-match/2.0.0:
+ resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==}
+ dev: true
+
+ /base-x/3.0.9:
+ resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: false
+
+ /base64-js/1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ dev: false
+
+ /bech32/1.1.4:
+ resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==}
+ dev: false
+
+ /big-integer/1.6.51:
+ resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
+ engines: {node: '>=0.6'}
+ dev: false
+
+ /bigint-buffer/1.1.5:
+ resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==}
+ engines: {node: '>= 10.0.0'}
+ requiresBuild: true
+ dependencies:
+ bindings: 1.5.0
+ dev: false
+
+ /binary-extensions/2.2.0:
+ resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
+ engines: {node: '>=8'}
+
+ /bind-decorator/1.0.11:
+ resolution: {integrity: sha512-yzkH0uog6Vv/vQ9+rhSKxecnqGUZHYncg7qS7voz3Q76+TAi1SGiOKk2mlOvusQnFz9Dc4BC/NMkeXu11YgjJg==}
+ dev: false
+
+ /bindings/1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+ dependencies:
+ file-uri-to-path: 1.0.0
+ dev: false
+
+ /blakejs/1.2.1:
+ resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==}
+ dev: false
+
+ /bn.js/4.11.8:
+ resolution: {integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==}
+ dev: false
+
+ /bn.js/4.12.0:
+ resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
+ dev: false
+
+ /bn.js/5.2.1:
+ resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
+ dev: false
+
+ /body-parser/1.20.0:
+ resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.4
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.10.3
+ raw-body: 2.5.1
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /boolbase/1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ dev: true
+
+ /borsh/0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+ dependencies:
+ bn.js: 5.2.1
+ bs58: 4.0.1
+ text-encoding-utf-8: 1.0.2
+ dev: false
+
+ /boxen/7.0.0:
+ resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ ansi-align: 3.0.1
+ camelcase: 7.0.0
+ chalk: 5.0.1
+ cli-boxes: 3.0.0
+ string-width: 5.1.2
+ type-fest: 2.19.0
+ widest-line: 4.0.1
+ wrap-ansi: 8.0.1
+ dev: false
+
+ /bplist-parser/0.2.0:
+ resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
+ engines: {node: '>= 5.10.0'}
+ dependencies:
+ big-integer: 1.6.51
+ dev: false
+
+ /brace-expansion/1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ dev: true
+
+ /brace-expansion/2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ dependencies:
+ balanced-match: 1.0.2
+ dev: true
+
+ /braces/3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.0.1
+
+ /brorand/1.1.0:
+ resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
+ dev: false
+
+ /browserify-aes/1.2.0:
+ resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
+ dependencies:
+ buffer-xor: 1.0.3
+ cipher-base: 1.0.4
+ create-hash: 1.2.0
+ evp_bytestokey: 1.0.3
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+ dev: false
+
+ /browserslist/4.21.4:
+ resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001416
+ electron-to-chromium: 1.4.272
+ node-releases: 2.0.6
+ update-browserslist-db: 1.0.9_browserslist@4.21.4
+
+ /bs58/4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+ dependencies:
+ base-x: 3.0.9
+ dev: false
+
+ /bs58check/2.1.2:
+ resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==}
+ dependencies:
+ bs58: 4.0.1
+ create-hash: 1.2.0
+ safe-buffer: 5.2.1
+ dev: false
+
+ /btoa/1.2.1:
+ resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==}
+ engines: {node: '>= 0.4.0'}
+ hasBin: true
+ dev: false
+
+ /buffer-alloc-unsafe/1.1.0:
+ resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
+ dev: false
+
+ /buffer-alloc/1.2.0:
+ resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
+ dependencies:
+ buffer-alloc-unsafe: 1.1.0
+ buffer-fill: 1.0.0
+ dev: false
+
+ /buffer-fill/1.0.0:
+ resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
+ dev: false
+
+ /buffer-from/1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ /buffer-xor/1.0.3:
+ resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
+ dev: false
+
+ /buffer/5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ dev: false
+
+ /buffer/6.0.1:
+ resolution: {integrity: sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==}
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ dev: false
+
+ /buffer/6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ dev: false
+
+ /bufferutil/4.0.6:
+ resolution: {integrity: sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==}
+ engines: {node: '>=6.14.2'}
+ requiresBuild: true
+ dependencies:
+ node-gyp-build: 4.5.0
+ dev: false
+
+ /bundle-name/3.0.0:
+ resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==}
+ engines: {node: '>=12'}
+ dependencies:
+ run-applescript: 5.0.0
+ dev: false
+
+ /byte-size/8.1.0:
+ resolution: {integrity: sha512-FkgMTAg44I0JtEaUAvuZTtU2a2YDmBRbQxdsQNSMtLCjhG0hMcF5b1IMN9UjSCJaU4nvlj/GER7B9sI4nKdCgA==}
+ engines: {node: '>=12.17'}
+ dev: false
+
+ /bytes/3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+ dev: false
+
+ /call-bind/1.0.2:
+ resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
+ dependencies:
+ function-bind: 1.1.1
+ get-intrinsic: 1.1.2
+
+ /callsites/3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ /camelcase-keys/6.2.2:
+ resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
+ engines: {node: '>=8'}
+ dependencies:
+ camelcase: 5.3.1
+ map-obj: 4.3.0
+ quick-lru: 4.0.1
+ dev: true
+
+ /camelcase/5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ /camelcase/6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /camelcase/7.0.0:
+ resolution: {integrity: sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==}
+ engines: {node: '>=14.16'}
+ dev: false
+
+ /caniuse-lite/1.0.30001416:
+ resolution: {integrity: sha512-06wzzdAkCPZO+Qm4e/eNghZBDfVNDsCgw33T27OwBH9unE9S478OYw//Q2L7Npf/zBzs7rjZOszIFQkwQKAEqA==}
+
+ /chalk/2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
+ /chalk/4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
+ /chalk/5.0.1:
+ resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ dev: false
+
+ /chardet/0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ dev: true
+
+ /chokidar/3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+ dependencies:
+ anymatch: 3.1.2
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ /cipher-base/1.0.4:
+ resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+ dev: false
+
+ /classnames/2.3.2:
+ resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==}
+ dev: false
+
+ /cli-boxes/3.0.0:
+ resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /cli-cursor/2.1.0:
+ resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
+ engines: {node: '>=4'}
+ dependencies:
+ restore-cursor: 2.0.0
+ dev: true
+
+ /cli-width/2.2.1:
+ resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==}
+ dev: true
+
+ /clipboardy/3.0.0:
+ resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ arch: 2.2.0
+ execa: 5.1.1
+ is-wsl: 2.2.0
+ dev: false
+
+ /cliui/5.0.0:
+ resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
+ dependencies:
+ string-width: 3.1.0
+ strip-ansi: 5.2.0
+ wrap-ansi: 5.1.0
+ dev: false
+
+ /cliui/7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /cliui/8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /clone/2.1.2:
+ resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /clsx/1.2.1:
+ resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /color-convert/1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+ dependencies:
+ color-name: 1.1.3
+
+ /color-convert/2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+ dev: true
+
+ /color-name/1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ /color-name/1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ dev: true
+
+ /colord/2.9.3:
+ resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
+ dev: true
+
+ /combined-stream/1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ delayed-stream: 1.0.0
+ dev: false
+
+ /commander/2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ /commander/7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /commander/9.4.0:
+ resolution: {integrity: sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==}
+ engines: {node: ^12.20.0 || >=14}
+
+ /compare-func/2.0.0:
+ resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
+ dependencies:
+ array-ify: 1.0.0
+ dot-prop: 5.3.0
+
+ /concat-map/0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ dev: true
+
+ /concat-stream/2.0.0:
+ resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
+ engines: {'0': node >= 6.0}
+ dependencies:
+ buffer-from: 1.1.2
+ inherits: 2.0.4
+ readable-stream: 3.6.0
+ typedarray: 0.0.6
+ dev: true
+
+ /content-disposition/0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: false
+
+ /content-type/1.0.4:
+ resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /conventional-changelog-angular/5.0.13:
+ resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-atom/2.0.8:
+ resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-codemirror/2.0.8:
+ resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-config-spec/2.1.0:
+ resolution: {integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==}
+ dev: true
+
+ /conventional-changelog-conventionalcommits/4.6.3:
+ resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ lodash: 4.17.21
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-conventionalcommits/5.0.0:
+ resolution: {integrity: sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ lodash: 4.17.21
+ q: 1.5.1
+ dev: false
+
+ /conventional-changelog-core/4.2.4:
+ resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ add-stream: 1.0.0
+ conventional-changelog-writer: 5.0.1
+ conventional-commits-parser: 3.2.4
+ dateformat: 3.0.3
+ get-pkg-repo: 4.2.1
+ git-raw-commits: 2.0.11
+ git-remote-origin-url: 2.0.0
+ git-semver-tags: 4.1.1
+ lodash: 4.17.21
+ normalize-package-data: 3.0.3
+ q: 1.5.1
+ read-pkg: 3.0.0
+ read-pkg-up: 3.0.0
+ through2: 4.0.2
+ dev: true
+
+ /conventional-changelog-ember/2.0.9:
+ resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-eslint/3.0.9:
+ resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-express/2.0.6:
+ resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-jquery/3.0.11:
+ resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-jshint/2.0.9:
+ resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-preset-loader/2.3.4:
+ resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /conventional-changelog-writer/5.0.1:
+ resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ conventional-commits-filter: 2.0.7
+ dateformat: 3.0.3
+ handlebars: 4.7.7
+ json-stringify-safe: 5.0.1
+ lodash: 4.17.21
+ meow: 8.1.2
+ semver: 6.3.0
+ split: 1.0.1
+ through2: 4.0.2
+ dev: true
+
+ /conventional-changelog/3.1.25:
+ resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ conventional-changelog-angular: 5.0.13
+ conventional-changelog-atom: 2.0.8
+ conventional-changelog-codemirror: 2.0.8
+ conventional-changelog-conventionalcommits: 4.6.3
+ conventional-changelog-core: 4.2.4
+ conventional-changelog-ember: 2.0.9
+ conventional-changelog-eslint: 3.0.9
+ conventional-changelog-express: 2.0.6
+ conventional-changelog-jquery: 3.0.11
+ conventional-changelog-jshint: 2.0.9
+ conventional-changelog-preset-loader: 2.3.4
+ dev: true
+
+ /conventional-commits-filter/2.0.7:
+ resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==}
+ engines: {node: '>=10'}
+ dependencies:
+ lodash.ismatch: 4.4.0
+ modify-values: 1.0.1
+ dev: true
+
+ /conventional-commits-parser/3.2.4:
+ resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ JSONStream: 1.3.5
+ is-text-path: 1.0.1
+ lodash: 4.17.21
+ meow: 8.1.2
+ split2: 3.2.2
+ through2: 4.0.2
+ dev: true
+
+ /conventional-recommended-bump/6.1.0:
+ resolution: {integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ concat-stream: 2.0.0
+ conventional-changelog-preset-loader: 2.3.4
+ conventional-commits-filter: 2.0.7
+ conventional-commits-parser: 3.2.4
+ git-raw-commits: 2.0.11
+ git-semver-tags: 4.1.1
+ meow: 8.1.2
+ q: 1.5.1
+ dev: true
+
+ /convert-source-map/1.8.0:
+ resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
+ dependencies:
+ safe-buffer: 5.1.2
+
+ /cookie-signature/1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+ dev: false
+
+ /cookie/0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /copy-to-clipboard/3.3.2:
+ resolution: {integrity: sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg==}
+ dependencies:
+ toggle-selection: 1.0.6
+ dev: false
+
+ /core-js-compat/3.25.0:
+ resolution: {integrity: sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow==}
+ dependencies:
+ browserslist: 4.21.4
+ semver: 7.0.0
+ dev: false
+
+ /core-js-pure/3.25.0:
+ resolution: {integrity: sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A==}
+ requiresBuild: true
+ dev: true
+
+ /core-js/3.25.2:
+ resolution: {integrity: sha512-YB4IAT1bjEfxTJ1XYy11hJAKskO+qmhuDBM8/guIfMz4JvdsAQAqvyb97zXX7JgSrfPLG5mRGFWJwJD39ruq2A==}
+ requiresBuild: true
+ dev: false
+
+ /core-util-is/1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+ dev: true
+
+ /cosmiconfig-typescript-loader/4.1.1_vfayau7oz5qy4giwqlppd3j3ti:
+ resolution: {integrity: sha512-9DHpa379Gp0o0Zefii35fcmuuin6q92FnLDffzdZ0l9tVd3nEobG3O+MZ06+kuBvFTSVScvNb/oHA13Nd4iipg==}
+ engines: {node: '>=12', npm: '>=6'}
+ peerDependencies:
+ '@types/node': '*'
+ cosmiconfig: '>=7'
+ ts-node: '>=10'
+ typescript: '>=3'
+ dependencies:
+ '@types/node': 14.18.32
+ cosmiconfig: 7.0.1
+ ts-node: 10.9.1_jcmx33t3olsvcxopqdljsohpme
+ typescript: 4.8.4
+ dev: true
+
+ /cosmiconfig/7.0.1:
+ resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/parse-json': 4.0.0
+ import-fresh: 3.3.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ yaml: 1.10.2
+
+ /create-hash/1.2.0:
+ resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
+ dependencies:
+ cipher-base: 1.0.4
+ inherits: 2.0.4
+ md5.js: 1.3.5
+ ripemd160: 2.0.2
+ sha.js: 2.4.11
+ dev: false
+
+ /create-hmac/1.1.7:
+ resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
+ dependencies:
+ cipher-base: 1.0.4
+ create-hash: 1.2.0
+ inherits: 2.0.4
+ ripemd160: 2.0.2
+ safe-buffer: 5.2.1
+ sha.js: 2.4.11
+ dev: false
+
+ /create-require/1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+ dev: true
+
+ /cross-fetch/3.1.5:
+ resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==}
+ dependencies:
+ node-fetch: 2.6.7
+ transitivePeerDependencies:
+ - encoding
+ dev: false
+
+ /cross-spawn-async/2.2.5:
+ resolution: {integrity: sha512-snteb3aVrxYYOX9e8BabYFK9WhCDhTlw1YQktfTthBogxri4/2r9U2nQc0ffY73ZAxezDc+U8gvHAeU1wy1ubQ==}
+ deprecated: cross-spawn no longer requires a build toolchain, use it instead
+ dependencies:
+ lru-cache: 4.1.5
+ which: 1.3.1
+ dev: false
+
+ /cross-spawn/7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ /css-functions-list/3.1.0:
+ resolution: {integrity: sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==}
+ engines: {node: '>=12.22'}
+ dev: true
+
+ /css-select/4.3.0:
+ resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ nth-check: 2.1.1
+ dev: true
+
+ /css-tree/1.1.3:
+ resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ mdn-data: 2.0.14
+ source-map: 0.6.1
+ dev: true
+
+ /css-unit-converter/1.1.2:
+ resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==}
+ dev: false
+
+ /css-what/6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+ dev: true
+
+ /cssesc/3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /csso/4.2.0:
+ resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ css-tree: 1.1.3
+ dev: true
+
+ /csstype/3.1.0:
+ resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==}
+
+ /d3-array/2.12.1:
+ resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
+ dependencies:
+ internmap: 1.0.1
+ dev: false
+
+ /d3-color/2.0.0:
+ resolution: {integrity: sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==}
+ dev: false
+
+ /d3-format/2.0.0:
+ resolution: {integrity: sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==}
+ dev: false
+
+ /d3-interpolate/2.0.1:
+ resolution: {integrity: sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==}
+ dependencies:
+ d3-color: 2.0.0
+ dev: false
+
+ /d3-path/2.0.0:
+ resolution: {integrity: sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA==}
+ dev: false
+
+ /d3-scale/3.3.0:
+ resolution: {integrity: sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==}
+ dependencies:
+ d3-array: 2.12.1
+ d3-format: 2.0.0
+ d3-interpolate: 2.0.1
+ d3-time: 2.1.1
+ d3-time-format: 3.0.0
+ dev: false
+
+ /d3-shape/2.1.0:
+ resolution: {integrity: sha512-PnjUqfM2PpskbSLTJvAzp2Wv4CZsnAgTfcVRTwW03QR3MkXF8Uo7B1y/lWkAsmbKwuecto++4NlsYcvYpXpTHA==}
+ dependencies:
+ d3-path: 2.0.0
+ dev: false
+
+ /d3-time-format/3.0.0:
+ resolution: {integrity: sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==}
+ dependencies:
+ d3-time: 2.1.1
+ dev: false
+
+ /d3-time/2.1.1:
+ resolution: {integrity: sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==}
+ dependencies:
+ d3-array: 2.12.1
+ dev: false
+
+ /damerau-levenshtein/1.0.8:
+ resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
+ dev: true
+
+ /dargs/7.0.0:
+ resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /dashify/2.0.0:
+ resolution: {integrity: sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /dateformat/3.0.3:
+ resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==}
+ dev: true
+
+ /dayjs/1.11.6:
+ resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==}
+ dev: false
+
+ /debug/2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+
+ /debug/3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.3
+ dev: true
+
+ /debug/4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+
+ /decamelize-keys/1.1.0:
+ resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ decamelize: 1.2.0
+ map-obj: 1.0.1
+ dev: true
+
+ /decamelize/1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
+
+ /decimal.js-light/2.5.1:
+ resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==}
+ dev: false
+
+ /decode-uri-component/0.2.0:
+ resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==}
+ engines: {node: '>=0.10'}
+ dev: false
+
+ /deep-is/0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ dev: true
+
+ /deepmerge/4.2.2:
+ resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /default-browser-id/3.0.0:
+ resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
+ engines: {node: '>=12'}
+ dependencies:
+ bplist-parser: 0.2.0
+ untildify: 4.0.0
+ dev: false
+
+ /default-browser/3.1.0:
+ resolution: {integrity: sha512-SOHecvSoairSAWxEHP/0qcsld/KtI3DargfEuELQDyHIYmS2EMgdGhHOTC1GxaYr+NLUV6kDroeiSBfnNHnn8w==}
+ engines: {node: '>=12'}
+ dependencies:
+ bundle-name: 3.0.0
+ default-browser-id: 3.0.0
+ execa: 5.1.1
+ xdg-default-browser: 2.1.0
+ dev: false
+
+ /define-lazy-prop/2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /define-properties/1.1.4:
+ resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-property-descriptors: 1.0.0
+ object-keys: 1.1.1
+
+ /delay/5.0.0:
+ resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /delayed-stream/1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ /depd/2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+ dev: false
+
+ /dequal/2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /destroy/1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ dev: false
+
+ /detect-browser/5.2.0:
+ resolution: {integrity: sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==}
+ dev: false
+
+ /detect-indent/6.1.0:
+ resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /detect-newline/3.1.0:
+ resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /diff/4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+ dev: true
+
+ /dijkstrajs/1.0.2:
+ resolution: {integrity: sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==}
+ dev: false
+
+ /dir-glob/3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-type: 4.0.0
+
+ /doctrine/2.1.0:
+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+
+ /doctrine/3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+
+ /dom-helpers/3.4.0:
+ resolution: {integrity: sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==}
+ dependencies:
+ '@babel/runtime': 7.18.9
+ dev: false
+
+ /dom-helpers/5.2.1:
+ resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
+ dependencies:
+ '@babel/runtime': 7.18.9
+ csstype: 3.1.0
+ dev: false
+
+ /dom-serializer/1.4.1:
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ entities: 2.2.0
+ dev: true
+
+ /domelementtype/2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+ dev: true
+
+ /domhandler/4.3.1:
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
+ engines: {node: '>= 4'}
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+
+ /domutils/2.8.0:
+ resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
+ dependencies:
+ dom-serializer: 1.4.1
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ dev: true
+
+ /dot-prop/5.3.0:
+ resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-obj: 2.0.0
+
+ /dotgitignore/2.1.0:
+ resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==}
+ engines: {node: '>=6'}
+ dependencies:
+ find-up: 3.0.0
+ minimatch: 3.1.2
+ dev: true
+
+ /eastasianwidth/0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ dev: false
+
+ /ee-first/1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+ dev: false
+
+ /eip1193-provider/1.0.1:
+ resolution: {integrity: sha512-kSuqwQ26d7CzuS/t3yRXo2Su2cVH0QfvyKbr2H7Be7O5YDyIq4hQGCNTo5wRdP07bt+E2R/8nPCzey4ojBHf7g==}
+ dependencies:
+ '@json-rpc-tools/provider': 1.7.6
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - utf-8-validate
+ dev: false
+
+ /electron-to-chromium/1.4.272:
+ resolution: {integrity: sha512-KS6gPPGNrzpVv9HzFVq+Etd0AjZEPr5pvaTBn2yD6KV4+cKW4I0CJoJNgmTG6gUQPAMZ4wIPtcOuoou3qFAZCA==}
+
+ /elliptic/6.5.4:
+ resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==}
+ dependencies:
+ bn.js: 4.12.0
+ brorand: 1.1.0
+ hash.js: 1.1.7
+ hmac-drbg: 1.0.1
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+ dev: false
+
+ /emoji-regex/7.0.3:
+ resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
+ dev: false
+
+ /emoji-regex/8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ /emoji-regex/9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ /encodeurl/1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+ dev: false
+
+ /entities/2.2.0:
+ resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
+ dev: true
+
+ /entities/4.3.1:
+ resolution: {integrity: sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==}
+ engines: {node: '>=0.12'}
+ dev: true
+
+ /error-ex/1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+ dependencies:
+ is-arrayish: 0.2.1
+
+ /es-abstract/1.20.1:
+ resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ es-to-primitive: 1.2.1
+ function-bind: 1.1.1
+ function.prototype.name: 1.1.5
+ get-intrinsic: 1.1.2
+ get-symbol-description: 1.0.0
+ has: 1.0.3
+ has-property-descriptors: 1.0.0
+ has-symbols: 1.0.3
+ internal-slot: 1.0.3
+ is-callable: 1.2.4
+ is-negative-zero: 2.0.2
+ is-regex: 1.1.4
+ is-shared-array-buffer: 1.0.2
+ is-string: 1.0.7
+ is-weakref: 1.0.2
+ object-inspect: 1.12.2
+ object-keys: 1.1.1
+ object.assign: 4.1.4
+ regexp.prototype.flags: 1.4.3
+ string.prototype.trimend: 1.0.5
+ string.prototype.trimstart: 1.0.5
+ unbox-primitive: 1.0.2
+
+ /es-shim-unscopables/1.0.0:
+ resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
+ dependencies:
+ has: 1.0.3
+ dev: true
+
+ /es-to-primitive/1.2.1:
+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-callable: 1.2.4
+ is-date-object: 1.0.5
+ is-symbol: 1.0.4
+
+ /es6-promise/4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+ dev: false
+
+ /es6-promisify/5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+ dependencies:
+ es6-promise: 4.2.8
+ dev: false
+
+ /esbuild-android-64/0.15.12:
+ resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-android-arm64/0.15.12:
+ resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-darwin-64/0.15.12:
+ resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-darwin-arm64/0.15.12:
+ resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-freebsd-64/0.15.12:
+ resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-freebsd-arm64/0.15.12:
+ resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-linux-32/0.15.12:
+ resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-linux-64/0.15.12:
+ resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-linux-arm/0.15.12:
+ resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-linux-arm64/0.15.12:
+ resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-linux-mips64le/0.15.12:
+ resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-linux-ppc64le/0.15.12:
+ resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-linux-riscv64/0.15.12:
+ resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-linux-s390x/0.15.12:
+ resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-netbsd-64/0.15.12:
+ resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-openbsd-64/0.15.12:
+ resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-sunos-64/0.15.12:
+ resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-windows-32/0.15.12:
+ resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-windows-64/0.15.12:
+ resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ optional: true
+
+ /esbuild-windows-arm64/0.15.12:
+ resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ optional: true
+
+ /esbuild/0.15.12:
+ resolution: {integrity: sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/android-arm': 0.15.12
+ '@esbuild/linux-loong64': 0.15.12
+ esbuild-android-64: 0.15.12
+ esbuild-android-arm64: 0.15.12
+ esbuild-darwin-64: 0.15.12
+ esbuild-darwin-arm64: 0.15.12
+ esbuild-freebsd-64: 0.15.12
+ esbuild-freebsd-arm64: 0.15.12
+ esbuild-linux-32: 0.15.12
+ esbuild-linux-64: 0.15.12
+ esbuild-linux-arm: 0.15.12
+ esbuild-linux-arm64: 0.15.12
+ esbuild-linux-mips64le: 0.15.12
+ esbuild-linux-ppc64le: 0.15.12
+ esbuild-linux-riscv64: 0.15.12
+ esbuild-linux-s390x: 0.15.12
+ esbuild-netbsd-64: 0.15.12
+ esbuild-openbsd-64: 0.15.12
+ esbuild-sunos-64: 0.15.12
+ esbuild-windows-32: 0.15.12
+ esbuild-windows-64: 0.15.12
+ esbuild-windows-arm64: 0.15.12
+
+ /escalade/3.1.1:
+ resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+ engines: {node: '>=6'}
+
+ /escape-html/1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+ dev: false
+
+ /escape-string-regexp/1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ /escape-string-regexp/4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ /eslint-config-prettier/8.5.0_eslint@8.25.0:
+ resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ eslint: 8.25.0
+ dev: true
+
+ /eslint-import-resolver-node/0.3.6:
+ resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==}
+ dependencies:
+ debug: 3.2.7
+ resolve: 1.22.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-module-utils/2.7.4_kok4ds6cswjqjqxmx3ykaoipha:
+ resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q
+ debug: 3.2.7
+ eslint: 8.25.0
+ eslint-import-resolver-node: 0.3.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-plugin-import/2.26.0_vcunoyu347gmi72pwsm7mdvjca:
+ resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 5.40.1_z4bbprzjrhnsfa24uvmcbu7f5q
+ array-includes: 3.1.5
+ array.prototype.flat: 1.3.0
+ debug: 2.6.9
+ doctrine: 2.1.0
+ eslint: 8.25.0
+ eslint-import-resolver-node: 0.3.6
+ eslint-module-utils: 2.7.4_kok4ds6cswjqjqxmx3ykaoipha
+ has: 1.0.3
+ is-core-module: 2.10.0
+ is-glob: 4.0.3
+ minimatch: 3.1.2
+ object.values: 1.1.5
+ resolve: 1.22.1
+ tsconfig-paths: 3.14.1
+ transitivePeerDependencies:
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
+ /eslint-plugin-jsx-a11y/6.6.1_eslint@8.25.0:
+ resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ dependencies:
+ '@babel/runtime': 7.18.9
+ aria-query: 4.2.2
+ array-includes: 3.1.5
+ ast-types-flow: 0.0.7
+ axe-core: 4.4.3
+ axobject-query: 2.2.0
+ damerau-levenshtein: 1.0.8
+ emoji-regex: 9.2.2
+ eslint: 8.25.0
+ has: 1.0.3
+ jsx-ast-utils: 3.3.3
+ language-tags: 1.0.5
+ minimatch: 3.1.2
+ semver: 6.3.0
+ dev: true
+
+ /eslint-plugin-prettier/4.2.1_hvbqyfstm4urdpm6ffpwfka4e4:
+ resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ eslint: '>=7.28.0'
+ eslint-config-prettier: '*'
+ prettier: '>=2.0.0'
+ peerDependenciesMeta:
+ eslint-config-prettier:
+ optional: true
+ dependencies:
+ eslint: 8.25.0
+ eslint-config-prettier: 8.5.0_eslint@8.25.0
+ prettier: 2.7.1
+ prettier-linter-helpers: 1.0.0
+ dev: true
+
+ /eslint-plugin-react-hooks/4.6.0_eslint@8.25.0:
+ resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ dependencies:
+ eslint: 8.25.0
+ dev: true
+
+ /eslint-plugin-react/7.31.8_eslint@8.25.0:
+ resolution: {integrity: sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ dependencies:
+ array-includes: 3.1.5
+ array.prototype.flatmap: 1.3.0
+ doctrine: 2.1.0
+ eslint: 8.25.0
+ estraverse: 5.3.0
+ jsx-ast-utils: 3.3.3
+ minimatch: 3.1.2
+ object.entries: 1.1.5
+ object.fromentries: 2.0.5
+ object.hasown: 1.1.1
+ object.values: 1.1.5
+ prop-types: 15.8.1
+ resolve: 2.0.0-next.4
+ semver: 6.3.0
+ string.prototype.matchall: 4.0.7
+ dev: true
+
+ /eslint-plugin-simple-import-sort/8.0.0_eslint@8.25.0:
+ resolution: {integrity: sha512-bXgJQ+lqhtQBCuWY/FUWdB27j4+lqcvXv5rUARkzbeWLwea+S5eBZEQrhnO+WgX3ZoJHVj0cn943iyXwByHHQw==}
+ peerDependencies:
+ eslint: '>=5.0.0'
+ dependencies:
+ eslint: 8.25.0
+ dev: true
+
+ /eslint-scope/5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+ dev: true
+
+ /eslint-scope/7.1.1:
+ resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+ dev: true
+
+ /eslint-utils/3.0.0_eslint@8.25.0:
+ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
+ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
+ peerDependencies:
+ eslint: '>=5'
+ dependencies:
+ eslint: 8.25.0
+ eslint-visitor-keys: 2.1.0
+ dev: true
+
+ /eslint-visitor-keys/2.1.0:
+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /eslint-visitor-keys/3.3.0:
+ resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /eslint/8.25.0:
+ resolution: {integrity: sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ '@eslint/eslintrc': 1.3.3
+ '@humanwhocodes/config-array': 0.10.7
+ '@humanwhocodes/module-importer': 1.0.1
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.4
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.1.1
+ eslint-utils: 3.0.0_eslint@8.25.0
+ eslint-visitor-keys: 3.3.0
+ espree: 9.4.0
+ esquery: 1.4.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.17.0
+ globby: 11.1.0
+ grapheme-splitter: 1.0.4
+ ignore: 5.2.0
+ import-fresh: 3.3.0
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ js-sdsl: 4.1.4
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.1
+ regexpp: 3.2.0
+ strip-ansi: 6.0.1
+ strip-json-comments: 3.1.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /espree/9.4.0:
+ resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: 8.8.0
+ acorn-jsx: 5.3.2_acorn@8.8.0
+ eslint-visitor-keys: 3.3.0
+ dev: true
+
+ /esquery/1.4.0:
+ resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /esrecurse/4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /estraverse/4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estraverse/5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estree-walker/0.6.1:
+ resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
+ dev: true
+
+ /estree-walker/1.0.1:
+ resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
+ dev: true
+
+ /estree-walker/2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+ dev: true
+
+ /esutils/2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ /etag/1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /eth-block-tracker/4.4.3_@babel+core@7.19.6:
+ resolution: {integrity: sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==}
+ dependencies:
+ '@babel/plugin-transform-runtime': 7.18.10_@babel+core@7.19.6
+ '@babel/runtime': 7.18.9
+ eth-query: 2.1.2
+ json-rpc-random-id: 1.0.1
+ pify: 3.0.0
+ safe-event-emitter: 1.0.1
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+ dev: false
+
+ /eth-json-rpc-filters/4.2.2:
+ resolution: {integrity: sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==}
+ dependencies:
+ '@metamask/safe-event-emitter': 2.0.0
+ async-mutex: 0.2.6
+ eth-json-rpc-middleware: 6.0.0
+ eth-query: 2.1.2
+ json-rpc-engine: 6.1.0
+ pify: 5.0.0
+ transitivePeerDependencies:
+ - encoding
+ dev: false
+
+ /eth-json-rpc-middleware/6.0.0:
+ resolution: {integrity: sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==}
+ dependencies:
+ btoa: 1.2.1
+ clone: 2.1.2
+ eth-query: 2.1.2
+ eth-rpc-errors: 3.0.0
+ eth-sig-util: 1.4.2
+ ethereumjs-util: 5.2.1
+ json-rpc-engine: 5.4.0
+ json-stable-stringify: 1.0.1
+ node-fetch: 2.6.7
+ pify: 3.0.0
+ safe-event-emitter: 1.0.1
+ transitivePeerDependencies:
+ - encoding
+ dev: false
+
+ /eth-query/2.1.2:
+ resolution: {integrity: sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==}
+ dependencies:
+ json-rpc-random-id: 1.0.1
+ xtend: 4.0.2
+ dev: false
+
+ /eth-rpc-errors/3.0.0:
+ resolution: {integrity: sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==}
+ dependencies:
+ fast-safe-stringify: 2.1.1
+ dev: false
+
+ /eth-rpc-errors/4.0.2:
+ resolution: {integrity: sha512-n+Re6Gu8XGyfFy1it0AwbD1x0MUzspQs0D5UiPs1fFPCr6WAwZM+vbIhXheBFrpgosqN9bs5PqlB4Q61U/QytQ==}
+ dependencies:
+ fast-safe-stringify: 2.1.1
+ dev: false
+
+ /eth-sig-util/1.4.2:
+ resolution: {integrity: sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==}
+ deprecated: Deprecated in favor of '@metamask/eth-sig-util'
+ dependencies:
+ ethereumjs-abi: github.com/ethereumjs/ethereumjs-abi/ee3994657fa7a427238e6ba92a84d0b529bbcde0
+ ethereumjs-util: 5.2.1
+ dev: false
+
+ /ethereum-cryptography/0.1.3:
+ resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==}
+ dependencies:
+ '@types/pbkdf2': 3.1.0
+ '@types/secp256k1': 4.0.3
+ blakejs: 1.2.1
+ browserify-aes: 1.2.0
+ bs58check: 2.1.2
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ hash.js: 1.1.7
+ keccak: 3.0.2
+ pbkdf2: 3.1.2
+ randombytes: 2.1.0
+ safe-buffer: 5.2.1
+ scrypt-js: 3.0.1
+ secp256k1: 4.0.3
+ setimmediate: 1.0.5
+ dev: false
+
+ /ethereumjs-util/5.2.1:
+ resolution: {integrity: sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==}
+ dependencies:
+ bn.js: 4.12.0
+ create-hash: 1.2.0
+ elliptic: 6.5.4
+ ethereum-cryptography: 0.1.3
+ ethjs-util: 0.1.6
+ rlp: 2.2.7
+ safe-buffer: 5.2.1
+ dev: false
+
+ /ethereumjs-util/6.2.1:
+ resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==}
+ dependencies:
+ '@types/bn.js': 4.11.6
+ bn.js: 4.12.0
+ create-hash: 1.2.0
+ elliptic: 6.5.4
+ ethereum-cryptography: 0.1.3
+ ethjs-util: 0.1.6
+ rlp: 2.2.7
+ dev: false
+
+ /ethers/5.7.2:
+ resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==}
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/base64': 5.7.0
+ '@ethersproject/basex': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/bytes': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/contracts': 5.7.0
+ '@ethersproject/hash': 5.7.0
+ '@ethersproject/hdnode': 5.7.0
+ '@ethersproject/json-wallets': 5.7.0
+ '@ethersproject/keccak256': 5.7.0
+ '@ethersproject/logger': 5.7.0
+ '@ethersproject/networks': 5.7.1
+ '@ethersproject/pbkdf2': 5.7.0
+ '@ethersproject/properties': 5.7.0
+ '@ethersproject/providers': 5.7.2
+ '@ethersproject/random': 5.7.0
+ '@ethersproject/rlp': 5.7.0
+ '@ethersproject/sha2': 5.7.0
+ '@ethersproject/signing-key': 5.7.0
+ '@ethersproject/solidity': 5.7.0
+ '@ethersproject/strings': 5.7.0
+ '@ethersproject/transactions': 5.7.0
+ '@ethersproject/units': 5.7.0
+ '@ethersproject/wallet': 5.7.0
+ '@ethersproject/web': 5.7.1
+ '@ethersproject/wordlists': 5.7.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: false
+
+ /ethjs-util/0.1.6:
+ resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+ dependencies:
+ is-hex-prefixed: 1.0.0
+ strip-hex-prefix: 1.0.0
+ dev: false
+
+ /eventemitter3/4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+ dev: false
+
+ /events/3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+ dev: false
+
+ /evp_bytestokey/1.0.3:
+ resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
+ dependencies:
+ md5.js: 1.3.5
+ safe-buffer: 5.2.1
+ dev: false
+
+ /execa/0.2.2:
+ resolution: {integrity: sha512-zmBGzLd3nhA/NB9P7VLoceAO6vyYPftvl809Vjwe5U2fYI9tYWbeKqP3wZlAw9WS+znnkogf/bhSU+Gcn2NbkQ==}
+ engines: {node: '>=0.12'}
+ dependencies:
+ cross-spawn-async: 2.2.5
+ npm-run-path: 1.0.0
+ object-assign: 4.1.1
+ path-key: 1.0.0
+ strip-eof: 1.0.0
+ dev: false
+
+ /execa/5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ /express/4.18.1:
+ resolution: {integrity: sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==}
+ engines: {node: '>= 0.10.0'}
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.0
+ content-disposition: 0.5.4
+ content-type: 1.0.4
+ cookie: 0.5.0
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.2.0
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.1
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.7
+ proxy-addr: 2.0.7
+ qs: 6.10.3
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.18.0
+ serve-static: 1.15.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /external-editor/3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+ dev: true
+
+ /eyes/0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+ dev: false
+
+ /fast-deep-equal/3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ dev: true
+
+ /fast-diff/1.2.0:
+ resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==}
+ dev: true
+
+ /fast-equals/2.0.4:
+ resolution: {integrity: sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w==}
+ dev: false
+
+ /fast-glob/3.2.12:
+ resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
+
+ /fast-json-stable-stringify/2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ dev: true
+
+ /fast-levenshtein/2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ dev: true
+
+ /fast-safe-stringify/2.1.1:
+ resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
+ dev: false
+
+ /fast-stable-stringify/1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+ dev: false
+
+ /fastest-levenshtein/1.0.16:
+ resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
+ engines: {node: '>= 4.9.1'}
+ dev: true
+
+ /fastq/1.13.0:
+ resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
+ dependencies:
+ reusify: 1.0.4
+
+ /figures/2.0.0:
+ resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==}
+ engines: {node: '>=4'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /figures/3.2.0:
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /file-entry-cache/6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flat-cache: 3.0.4
+ dev: true
+
+ /file-saver/2.0.5:
+ resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==}
+ dev: false
+
+ /file-uri-to-path/1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+ dev: false
+
+ /fill-range/7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+
+ /filter-obj/1.1.0:
+ resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /finalhandler/1.2.0:
+ resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /find-root/1.1.0:
+ resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
+
+ /find-up/2.1.0:
+ resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ locate-path: 2.0.0
+ dev: true
+
+ /find-up/3.0.0:
+ resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
+ engines: {node: '>=6'}
+ dependencies:
+ locate-path: 3.0.0
+
+ /find-up/4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+ dev: true
+
+ /find-up/5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+ dev: true
+
+ /flat-cache/3.0.4:
+ resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flatted: 3.2.7
+ rimraf: 3.0.2
+ dev: true
+
+ /flatted/3.2.7:
+ resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
+ dev: true
+
+ /follow-redirects/1.15.1:
+ resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+ dev: false
+
+ /for-each/0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ dependencies:
+ is-callable: 1.2.4
+ dev: false
+
+ /form-data/4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+ dev: false
+
+ /forwarded/0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /fraction.js/4.2.0:
+ resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
+ dev: true
+
+ /framer-motion/7.6.1_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-8US03IWJKrLoSb81l5OahNzB9Sv7Jo1RhIwUoTG/25BRUdO9lOqq/klsdZqNmNG0ua9IEJJQ8hkYpETJ4N6VSw==}
+ peerDependencies:
+ react: ^18.0.0
+ react-dom: ^18.0.0
+ dependencies:
+ '@motionone/dom': 10.13.1
+ framesync: 6.1.2
+ hey-listen: 1.0.8
+ popmotion: 11.0.5
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ style-value-types: 5.1.2
+ tslib: 2.4.0
+ optionalDependencies:
+ '@emotion/is-prop-valid': 0.8.8
+ dev: false
+
+ /framesync/6.1.2:
+ resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==}
+ dependencies:
+ tslib: 2.4.0
+ dev: false
+
+ /fresh/0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /fs-extra/10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ graceful-fs: 4.2.10
+ jsonfile: 6.1.0
+ universalify: 2.0.0
+ dev: true
+
+ /fs.realpath/1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ dev: true
+
+ /fsevents/2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ optional: true
+
+ /function-bind/1.1.1:
+ resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
+
+ /function.prototype.name/1.1.5:
+ resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+ functions-have-names: 1.2.3
+
+ /functions-have-names/1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+ /gensync/1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ /get-caller-file/2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ /get-intrinsic/1.1.2:
+ resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==}
+ dependencies:
+ function-bind: 1.1.1
+ has: 1.0.3
+ has-symbols: 1.0.3
+
+ /get-pkg-repo/4.2.1:
+ resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==}
+ engines: {node: '>=6.9.0'}
+ hasBin: true
+ dependencies:
+ '@hutson/parse-repository-url': 3.0.2
+ hosted-git-info: 4.1.0
+ through2: 2.0.5
+ yargs: 16.2.0
+ dev: true
+
+ /get-port/6.1.2:
+ resolution: {integrity: sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: false
+
+ /get-stream/6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ /get-symbol-description/1.0.0:
+ resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ get-intrinsic: 1.1.2
+
+ /git-raw-commits/2.0.11:
+ resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ dargs: 7.0.0
+ lodash: 4.17.21
+ meow: 8.1.2
+ split2: 3.2.2
+ through2: 4.0.2
+ dev: true
+
+ /git-remote-origin-url/2.0.0:
+ resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==}
+ engines: {node: '>=4'}
+ dependencies:
+ gitconfiglocal: 1.0.0
+ pify: 2.3.0
+ dev: true
+
+ /git-semver-tags/4.1.1:
+ resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ meow: 8.1.2
+ semver: 6.3.0
+ dev: true
+
+ /gitconfiglocal/1.0.0:
+ resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==}
+ dependencies:
+ ini: 1.3.8
+ dev: true
+
+ /glob-parent/5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: 4.0.3
+
+ /glob-parent/6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob-regex/0.3.2:
+ resolution: {integrity: sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==}
+ dev: false
+
+ /glob/7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+
+ /glob/8.0.3:
+ resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.0
+ once: 1.4.0
+ dev: true
+
+ /global-dirs/0.1.1:
+ resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==}
+ engines: {node: '>=4'}
+ dependencies:
+ ini: 1.3.8
+ dev: true
+
+ /global-modules/2.0.0:
+ resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==}
+ engines: {node: '>=6'}
+ dependencies:
+ global-prefix: 3.0.0
+ dev: true
+
+ /global-prefix/3.0.0:
+ resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==}
+ engines: {node: '>=6'}
+ dependencies:
+ ini: 1.3.8
+ kind-of: 6.0.3
+ which: 1.3.1
+ dev: true
+
+ /globals/11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
+ /globals/13.17.0:
+ resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.20.2
+ dev: true
+
+ /globby/11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.2.12
+ ignore: 5.2.0
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: true
+
+ /globby/13.1.2:
+ resolution: {integrity: sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ dir-glob: 3.0.1
+ fast-glob: 3.2.12
+ ignore: 5.2.0
+ merge2: 1.4.1
+ slash: 4.0.0
+ dev: false
+
+ /globjoin/0.1.4:
+ resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==}
+ dev: true
+
+ /globrex/0.1.2:
+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+ dev: false
+
+ /graceful-fs/4.2.10:
+ resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+ dev: true
+
+ /grapheme-splitter/1.0.4:
+ resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
+ dev: true
+
+ /handlebars/4.7.7:
+ resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.6
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.17.0
+ dev: true
+
+ /hard-rejection/2.1.0:
+ resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /has-bigints/1.0.2:
+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+
+ /has-flag/3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
+ /has-flag/4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /has-property-descriptors/1.0.0:
+ resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
+ dependencies:
+ get-intrinsic: 1.1.2
+
+ /has-symbols/1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ /has-tostringtag/1.0.0:
+ resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+
+ /has/1.0.3:
+ resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
+ engines: {node: '>= 0.4.0'}
+ dependencies:
+ function-bind: 1.1.1
+
+ /hash-base/3.1.0:
+ resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==}
+ engines: {node: '>=4'}
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 3.6.0
+ safe-buffer: 5.2.1
+ dev: false
+
+ /hash.js/1.1.7:
+ resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
+ dependencies:
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ dev: false
+
+ /hex-rgb/5.0.0:
+ resolution: {integrity: sha512-NQO+lgVUCtHxZ792FodgW0zflK+ozS9X9dwGp9XvvmPlH7pyxd588cn24TD3rmPm/N0AIRXF10Otah8yKqGw4w==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /hey-listen/1.0.8:
+ resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==}
+ dev: false
+
+ /history/5.3.0:
+ resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==}
+ dependencies:
+ '@babel/runtime': 7.18.9
+ dev: false
+
+ /hmac-drbg/1.0.1:
+ resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
+ dependencies:
+ hash.js: 1.1.7
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+ dev: false
+
+ /hoist-non-react-statics/3.3.2:
+ resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+ dependencies:
+ react-is: 16.13.1
+
+ /hosted-git-info/2.8.9:
+ resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+ dev: true
+
+ /hosted-git-info/4.1.0:
+ resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
+ engines: {node: '>=10'}
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /html-parse-stringify/3.0.1:
+ resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==}
+ dependencies:
+ void-elements: 3.1.0
+ dev: false
+
+ /html-tags/3.2.0:
+ resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /http-errors/2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+ dev: false
+
+ /human-signals/2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ /husky/8.0.1:
+ resolution: {integrity: sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
+ /i18next/21.9.2:
+ resolution: {integrity: sha512-00fVrLQOwy45nm3OtC9l1WiLK3nJlIYSljgCt0qzTaAy65aciMdRy9GsuW+a2AtKtdg9/njUGfRH30LRupV7ZQ==}
+ dependencies:
+ '@babel/runtime': 7.18.9
+ dev: false
+
+ /iconv-lite/0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ safer-buffer: 2.1.2
+
+ /ieee754/1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+ dev: false
+
+ /ignore/5.2.0:
+ resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
+ engines: {node: '>= 4'}
+
+ /immutable/4.1.0:
+ resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==}
+
+ /import-fresh/3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ /import-lazy/4.0.0:
+ resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /imurmurhash/0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+ dev: true
+
+ /indent-string/4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /inflight/1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: true
+
+ /inherits/2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ /ini/1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ dev: true
+
+ /inquirer/6.5.2:
+ resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ ansi-escapes: 3.2.0
+ chalk: 2.4.2
+ cli-cursor: 2.1.0
+ cli-width: 2.2.1
+ external-editor: 3.1.0
+ figures: 2.0.0
+ lodash: 4.17.21
+ mute-stream: 0.0.7
+ run-async: 2.4.1
+ rxjs: 6.6.7
+ string-width: 2.1.1
+ strip-ansi: 5.2.0
+ through: 2.3.8
+ dev: true
+
+ /internal-slot/1.0.3:
+ resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.1.2
+ has: 1.0.3
+ side-channel: 1.0.4
+
+ /internmap/1.0.1:
+ resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
+ dev: false
+
+ /ipaddr.js/1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+ dev: false
+
+ /is-arguments/1.1.1:
+ resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ has-tostringtag: 1.0.0
+ dev: false
+
+ /is-arrayish/0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ /is-bigint/1.0.4:
+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+ dependencies:
+ has-bigints: 1.0.2
+
+ /is-binary-path/2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+ dependencies:
+ binary-extensions: 2.2.0
+
+ /is-boolean-object/1.1.2:
+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ has-tostringtag: 1.0.0
+
+ /is-callable/1.2.4:
+ resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==}
+ engines: {node: '>= 0.4'}
+
+ /is-core-module/2.10.0:
+ resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==}
+ dependencies:
+ has: 1.0.3
+
+ /is-date-object/1.0.5:
+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+
+ /is-docker/2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dev: false
+
+ /is-extglob/2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ /is-fullwidth-code-point/2.0.0:
+ resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
+ engines: {node: '>=4'}
+
+ /is-fullwidth-code-point/3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ /is-generator-function/1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: false
+
+ /is-glob/4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+
+ /is-hex-prefixed/1.0.0:
+ resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+ dev: false
+
+ /is-negative-zero/2.0.2:
+ resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
+ engines: {node: '>= 0.4'}
+
+ /is-number-object/1.0.7:
+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+
+ /is-number/7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ /is-obj/2.0.0:
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+ engines: {node: '>=8'}
+
+ /is-plain-obj/1.1.0:
+ resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-plain-object/5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-regex/1.1.4:
+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ has-tostringtag: 1.0.0
+
+ /is-shared-array-buffer/1.0.2:
+ resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+ dependencies:
+ call-bind: 1.0.2
+
+ /is-stream/2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ /is-string/1.0.7:
+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+
+ /is-symbol/1.0.4:
+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+
+ /is-text-path/1.0.1:
+ resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ text-extensions: 1.9.0
+ dev: true
+
+ /is-typed-array/1.1.9:
+ resolution: {integrity: sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.2
+ es-abstract: 1.20.1
+ for-each: 0.3.3
+ has-tostringtag: 1.0.0
+ dev: false
+
+ /is-typedarray/1.0.0:
+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
+ dev: false
+
+ /is-weakref/1.0.2:
+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+ dependencies:
+ call-bind: 1.0.2
+
+ /is-wsl/2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-docker: 2.2.1
+ dev: false
+
+ /isarray/1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+ dev: true
+
+ /isarray/2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+ dev: false
+
+ /isexe/2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ /isomorphic-ws/4.0.1_ws@7.5.9:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+ dependencies:
+ ws: 7.5.9
+ dev: false
+
+ /jayson/3.7.0:
+ resolution: {integrity: sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dependencies:
+ '@types/connect': 3.4.35
+ '@types/node': 12.20.55
+ '@types/ws': 7.4.7
+ JSONStream: 1.3.5
+ commander: 2.20.3
+ delay: 5.0.0
+ es6-promisify: 5.0.0
+ eyes: 0.1.8
+ isomorphic-ws: 4.0.1_ws@7.5.9
+ json-stringify-safe: 5.0.1
+ lodash: 4.17.21
+ uuid: 8.3.2
+ ws: 7.5.9
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ dev: false
+
+ /js-sdsl/4.1.4:
+ resolution: {integrity: sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==}
+ dev: true
+
+ /js-sha3/0.8.0:
+ resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==}
+ dev: false
+
+ /js-tokens/4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ /js-yaml/4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: true
+
+ /jsesc/0.5.0:
+ resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+ hasBin: true
+ dev: false
+
+ /jsesc/2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ /json-parse-better-errors/1.0.2:
+ resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
+ dev: true
+
+ /json-parse-even-better-errors/2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ /json-rpc-engine/5.4.0:
+ resolution: {integrity: sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==}
+ dependencies:
+ eth-rpc-errors: 3.0.0
+ safe-event-emitter: 1.0.1
+ dev: false
+
+ /json-rpc-engine/6.1.0:
+ resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ '@metamask/safe-event-emitter': 2.0.0
+ eth-rpc-errors: 4.0.2
+ dev: false
+
+ /json-rpc-random-id/1.0.1:
+ resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==}
+ dev: false
+
+ /json-schema-traverse/0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ dev: true
+
+ /json-schema-traverse/1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ dev: true
+
+ /json-stable-stringify-without-jsonify/1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ dev: true
+
+ /json-stable-stringify/1.0.1:
+ resolution: {integrity: sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==}
+ dependencies:
+ jsonify: 0.0.0
+ dev: false
+
+ /json-stringify-safe/5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ /json5/1.0.1:
+ resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.6
+ dev: true
+
+ /json5/2.2.1:
+ resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ /jsonc-parser/3.1.0:
+ resolution: {integrity: sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==}
+ dev: true
+
+ /jsonfile/6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.0
+ optionalDependencies:
+ graceful-fs: 4.2.10
+ dev: true
+
+ /jsonify/0.0.0:
+ resolution: {integrity: sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==}
+ dev: false
+
+ /jsonparse/1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ /jsx-ast-utils/3.3.3:
+ resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ array-includes: 3.1.5
+ object.assign: 4.1.4
+ dev: true
+
+ /keccak/3.0.2:
+ resolution: {integrity: sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==}
+ engines: {node: '>=10.0.0'}
+ requiresBuild: true
+ dependencies:
+ node-addon-api: 2.0.2
+ node-gyp-build: 4.5.0
+ readable-stream: 3.6.0
+ dev: false
+
+ /keyvaluestorage-interface/1.0.0:
+ resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==}
+ dev: false
+
+ /kind-of/6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /known-css-properties/0.25.0:
+ resolution: {integrity: sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==}
+ dev: true
+
+ /language-subtag-registry/0.3.22:
+ resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
+ dev: true
+
+ /language-tags/1.0.5:
+ resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
+ dependencies:
+ language-subtag-registry: 0.3.22
+ dev: true
+
+ /levn/0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+
+ /lines-and-columns/1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ /little-state-machine/4.4.1_react@18.2.0:
+ resolution: {integrity: sha512-ZIBJz3dYmLBThE695yScD5biTdoG0qC+roWB6LFztWUhmxta6L9yjWdlBAyX/5cOB/rUPgWLT+5sPK+ZjAfeZw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17 || ^18
+ dependencies:
+ react: 18.2.0
+ dev: true
+
+ /load-json-file/4.0.0:
+ resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
+ engines: {node: '>=4'}
+ dependencies:
+ graceful-fs: 4.2.10
+ parse-json: 4.0.0
+ pify: 3.0.0
+ strip-bom: 3.0.0
+ dev: true
+
+ /locate-path/2.0.0:
+ resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-locate: 2.0.0
+ path-exists: 3.0.0
+ dev: true
+
+ /locate-path/3.0.0:
+ resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-locate: 3.0.0
+ path-exists: 3.0.0
+
+ /locate-path/5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+ dependencies:
+ p-locate: 4.1.0
+ dev: true
+
+ /locate-path/6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-locate: 5.0.0
+ dev: true
+
+ /lodash-es/4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ dev: false
+
+ /lodash.debounce/4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+ dev: false
+
+ /lodash.ismatch/4.4.0:
+ resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==}
+ dev: true
+
+ /lodash.merge/4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ /lodash.truncate/4.4.2:
+ resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==}
+ dev: true
+
+ /lodash/4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ /loose-envify/1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+ dependencies:
+ js-tokens: 4.0.0
+
+ /lru-cache/4.1.5:
+ resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
+ dependencies:
+ pseudomap: 1.0.2
+ yallist: 2.1.2
+ dev: false
+
+ /lru-cache/6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+ dependencies:
+ yallist: 4.0.0
+ dev: true
+
+ /lunr/2.3.9:
+ resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==}
+ dev: true
+
+ /magic-string/0.25.9:
+ resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+ dependencies:
+ sourcemap-codec: 1.4.8
+ dev: true
+
+ /magic-string/0.26.2:
+ resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==}
+ engines: {node: '>=12'}
+ dependencies:
+ sourcemap-codec: 1.4.8
+ dev: false
+
+ /magic-string/0.26.3:
+ resolution: {integrity: sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==}
+ engines: {node: '>=12'}
+ dependencies:
+ sourcemap-codec: 1.4.8
+ dev: false
+
+ /make-error/1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+ dev: true
+
+ /map-obj/1.0.1:
+ resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /map-obj/4.3.0:
+ resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /marked/4.0.19:
+ resolution: {integrity: sha512-rgQF/OxOiLcvgUAj1Q1tAf4Bgxn5h5JZTp04Fx4XUkVhs7B+7YA9JEWJhJpoO8eJt8MkZMwqLCNeNqj1bCREZQ==}
+ engines: {node: '>= 12'}
+ hasBin: true
+ dev: true
+
+ /mathml-tag-names/2.1.3:
+ resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==}
+ dev: true
+
+ /md5.js/1.3.5:
+ resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
+ dependencies:
+ hash-base: 3.1.0
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+ dev: false
+
+ /mdn-data/2.0.14:
+ resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
+ dev: true
+
+ /media-typer/0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /memoize-one/5.2.1:
+ resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==}
+ dev: false
+
+ /memoize-one/6.0.0:
+ resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
+ dev: false
+
+ /meow/8.1.2:
+ resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/minimist': 1.2.2
+ camelcase-keys: 6.2.2
+ decamelize-keys: 1.1.0
+ hard-rejection: 2.1.0
+ minimist-options: 4.1.0
+ normalize-package-data: 3.0.3
+ read-pkg-up: 7.0.1
+ redent: 3.0.0
+ trim-newlines: 3.0.1
+ type-fest: 0.18.1
+ yargs-parser: 20.2.9
+ dev: true
+
+ /meow/9.0.0:
+ resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/minimist': 1.2.2
+ camelcase-keys: 6.2.2
+ decamelize: 1.2.0
+ decamelize-keys: 1.1.0
+ hard-rejection: 2.1.0
+ minimist-options: 4.1.0
+ normalize-package-data: 3.0.3
+ read-pkg-up: 7.0.1
+ redent: 3.0.0
+ trim-newlines: 3.0.1
+ type-fest: 0.18.1
+ yargs-parser: 20.2.9
+ dev: true
+
+ /merge-descriptors/1.0.1:
+ resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
+ dev: false
+
+ /merge-stream/2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ /merge2/1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ /methods/1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /micromatch/4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+
+ /mime-db/1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /mime-types/2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+ dev: false
+
+ /mime/1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: false
+
+ /mimic-fn/1.2.0:
+ resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /mimic-fn/2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ /min-indent/1.0.1:
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /minimalistic-assert/1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+ dev: false
+
+ /minimalistic-crypto-utils/1.0.1:
+ resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
+ dev: false
+
+ /minimatch/3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ dependencies:
+ brace-expansion: 1.1.11
+ dev: true
+
+ /minimatch/5.1.0:
+ resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
+ engines: {node: '>=10'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
+ /minimist-options/4.1.0:
+ resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
+ engines: {node: '>= 6'}
+ dependencies:
+ arrify: 1.0.1
+ is-plain-obj: 1.1.0
+ kind-of: 6.0.3
+ dev: true
+
+ /minimist/1.2.6:
+ resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==}
+
+ /modify-values/1.0.1:
+ resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /ms/2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ /ms/2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ /ms/2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ /mute-stream/0.0.7:
+ resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==}
+ dev: true
+
+ /nanoclone/0.2.1:
+ resolution: {integrity: sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==}
+ dev: false
+
+ /nanoid/3.3.4:
+ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ /natural-compare/1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ dev: true
+
+ /negotiator/0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /neo-async/2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+ dev: true
+
+ /node-addon-api/2.0.2:
+ resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==}
+ dev: false
+
+ /node-fetch/2.6.7:
+ resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+ dependencies:
+ whatwg-url: 5.0.0
+ dev: false
+
+ /node-gyp-build/4.5.0:
+ resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==}
+ hasBin: true
+ dev: false
+
+ /node-releases/2.0.6:
+ resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==}
+
+ /normalize-package-data/2.5.0:
+ resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+ dependencies:
+ hosted-git-info: 2.8.9
+ resolve: 1.22.1
+ semver: 5.7.1
+ validate-npm-package-license: 3.0.4
+ dev: true
+
+ /normalize-package-data/3.0.3:
+ resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
+ engines: {node: '>=10'}
+ dependencies:
+ hosted-git-info: 4.1.0
+ is-core-module: 2.10.0
+ semver: 7.3.7
+ validate-npm-package-license: 3.0.4
+ dev: true
+
+ /normalize-path/3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ /normalize-range/0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /npm-run-path/1.0.0:
+ resolution: {integrity: sha512-PrGAi1SLlqNvKN5uGBjIgnrTb8fl0Jz0a3JJmeMcGnIBh7UE9Gc4zsAMlwDajOMg2b1OgP6UPvoLUboTmMZPFA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ path-key: 1.0.0
+ dev: false
+
+ /npm-run-path/4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: 3.1.1
+
+ /nth-check/2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+ dependencies:
+ boolbase: 1.0.0
+ dev: true
+
+ /object-assign/4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ /object-inspect/1.12.2:
+ resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
+
+ /object-keys/1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ /object.assign/4.1.4:
+ resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+
+ /object.entries/1.1.5:
+ resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+ dev: true
+
+ /object.fromentries/2.0.5:
+ resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+ dev: true
+
+ /object.hasown/1.1.1:
+ resolution: {integrity: sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==}
+ dependencies:
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+ dev: true
+
+ /object.values/1.1.5:
+ resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+ dev: true
+
+ /on-finished/2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ ee-first: 1.1.1
+ dev: false
+
+ /once/1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+ dev: true
+
+ /onetime/2.0.1:
+ resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ mimic-fn: 1.2.0
+ dev: true
+
+ /onetime/5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+
+ /open/8.4.0:
+ resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==}
+ engines: {node: '>=12'}
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+ dev: false
+
+ /optionator/0.9.1:
+ resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.3
+ dev: true
+
+ /os-tmpdir/1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /p-limit/1.3.0:
+ resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-try: 1.0.0
+ dev: true
+
+ /p-limit/2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-try: 2.2.0
+
+ /p-limit/3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ yocto-queue: 0.1.0
+ dev: true
+
+ /p-locate/2.0.0:
+ resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-limit: 1.3.0
+ dev: true
+
+ /p-locate/3.0.0:
+ resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-limit: 2.3.0
+
+ /p-locate/4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+ dependencies:
+ p-limit: 2.3.0
+ dev: true
+
+ /p-locate/5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-limit: 3.1.0
+ dev: true
+
+ /p-try/1.0.0:
+ resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /p-try/2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ /parent-module/1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+ dependencies:
+ callsites: 3.1.0
+
+ /parse-json/4.0.0:
+ resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
+ engines: {node: '>=4'}
+ dependencies:
+ error-ex: 1.3.2
+ json-parse-better-errors: 1.0.2
+ dev: true
+
+ /parse-json/5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@babel/code-frame': 7.18.6
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ /parseurl/1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+ dev: false
+
+ /path-exists/3.0.0:
+ resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+ engines: {node: '>=4'}
+
+ /path-exists/4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-is-absolute/1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-key/1.0.0:
+ resolution: {integrity: sha512-T3hWy7tyXlk3QvPFnT+o2tmXRzU4GkitkUWLp/WZ0S/FXd7XMx176tRurgTvHTNMJOQzTcesHNpBqetH86mQ9g==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /path-key/3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ /path-parse/1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ /path-to-regexp/0.1.7:
+ resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
+ dev: false
+
+ /path-type/3.0.0:
+ resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
+ engines: {node: '>=4'}
+ dependencies:
+ pify: 3.0.0
+ dev: true
+
+ /path-type/4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ /pbkdf2/3.1.2:
+ resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
+ engines: {node: '>=0.12'}
+ dependencies:
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ ripemd160: 2.0.2
+ safe-buffer: 5.2.1
+ sha.js: 2.4.11
+ dev: false
+
+ /picocolors/1.0.0:
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+
+ /picomatch/2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ /pify/2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /pify/3.0.0:
+ resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
+ engines: {node: '>=4'}
+
+ /pify/5.0.0:
+ resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /pngjs/3.4.0:
+ resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==}
+ engines: {node: '>=4.0.0'}
+ dev: false
+
+ /popmotion/11.0.5:
+ resolution: {integrity: sha512-la8gPM1WYeFznb/JqF4GiTkRRPZsfaj2+kCxqQgr2MJylMmIKUwBfWW8Wa5fml/8gmtlD5yI01MP1QCZPWmppA==}
+ dependencies:
+ framesync: 6.1.2
+ hey-listen: 1.0.8
+ style-value-types: 5.1.2
+ tslib: 2.4.0
+ dev: false
+
+ /postcss-media-query-parser/0.2.3:
+ resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==}
+ dev: true
+
+ /postcss-resolve-nested-selector/0.1.1:
+ resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==}
+ dev: true
+
+ /postcss-safe-parser/6.0.0_postcss@8.4.18:
+ resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.3.3
+ dependencies:
+ postcss: 8.4.18
+ dev: true
+
+ /postcss-scss/4.0.5_postcss@8.4.18:
+ resolution: {integrity: sha512-F7xpB6TrXyqUh3GKdyB4Gkp3QL3DDW1+uI+gxx/oJnUt/qXI4trj5OGlp9rOKdoABGULuqtqeG+3HEVQk4DjmA==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.3.3
+ dependencies:
+ postcss: 8.4.18
+ dev: true
+
+ /postcss-selector-parser/6.0.10:
+ resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
+ engines: {node: '>=4'}
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /postcss-value-parser/3.3.1:
+ resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==}
+ dev: false
+
+ /postcss-value-parser/4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+ dev: true
+
+ /postcss/8.4.18:
+ resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.4
+ picocolors: 1.0.0
+ source-map-js: 1.0.2
+
+ /preact/10.10.6:
+ resolution: {integrity: sha512-w0mCL5vICUAZrh1DuHEdOWBjxdO62lvcO++jbzr8UhhYcTbFkpegLH9XX+7MadjTl/y0feoqwQ/zAnzkc/EGog==}
+ dev: false
+
+ /preact/10.4.1:
+ resolution: {integrity: sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q==}
+ dev: false
+
+ /prelude-ls/1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+ dev: true
+
+ /prettier-linter-helpers/1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ fast-diff: 1.2.0
+ dev: true
+
+ /prettier/2.7.1:
+ resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ dev: true
+
+ /prism-react-renderer/1.3.5_react@18.2.0:
+ resolution: {integrity: sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==}
+ peerDependencies:
+ react: '>=0.14.9'
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /process-nextick-args/2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ dev: true
+
+ /prop-types/15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ react-is: 16.13.1
+
+ /property-expr/2.0.5:
+ resolution: {integrity: sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==}
+ dev: false
+
+ /proxy-addr/2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+ dev: false
+
+ /proxy-from-env/1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+ dev: false
+
+ /pseudomap/1.0.2:
+ resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
+ dev: false
+
+ /punycode/2.1.1:
+ resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
+ engines: {node: '>=6'}
+
+ /q/1.5.1:
+ resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
+ engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
+
+ /qrcode/1.4.4:
+ resolution: {integrity: sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dependencies:
+ buffer: 5.7.1
+ buffer-alloc: 1.2.0
+ buffer-from: 1.1.2
+ dijkstrajs: 1.0.2
+ isarray: 2.0.5
+ pngjs: 3.4.0
+ yargs: 13.3.2
+ dev: false
+
+ /qs/6.10.3:
+ resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.4
+ dev: false
+
+ /qs/6.11.0:
+ resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.4
+ dev: false
+
+ /query-string/6.13.5:
+ resolution: {integrity: sha512-svk3xg9qHR39P3JlHuD7g3nRnyay5mHbrPctEBDUxUkHRifPHXJDhBUycdCC0NBjXoDf44Gb+IsOZL1Uwn8M/Q==}
+ engines: {node: '>=6'}
+ dependencies:
+ decode-uri-component: 0.2.0
+ split-on-first: 1.1.0
+ strict-uri-encode: 2.0.0
+ dev: false
+
+ /query-string/7.1.1:
+ resolution: {integrity: sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==}
+ engines: {node: '>=6'}
+ dependencies:
+ decode-uri-component: 0.2.0
+ filter-obj: 1.1.0
+ split-on-first: 1.1.0
+ strict-uri-encode: 2.0.0
+ dev: false
+
+ /queue-microtask/1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ /quick-lru/4.0.1:
+ resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /radash/8.0.3:
+ resolution: {integrity: sha512-7JaEbiMy5gxISeIZTYKdYDUW6aMF6Gj0A2yifmk+Qj9KOdHDJyXxJBvH0MYQGTc5dOYkZuohh/d4IF/xcp0hbw==}
+ engines: {node: '>=12.22.12'}
+ dev: false
+
+ /randombytes/2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: false
+
+ /range-parser/1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /raw-body/2.5.1:
+ resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+ dev: false
+
+ /react-click-away-listener/2.2.2_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-6x5Ra+2xagMq+5YcBu42jtht+bKVErgPXaI/GqYP5M8Xz2o/UbGyMd3TISQK6ixfORUTvdHeRnOVU3TbSpZ5Zg==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /react-dom/18.2.0_react@18.2.0:
+ resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.2.0
+ scheduler: 0.23.0
+
+ /react-fast-compare/3.2.0:
+ resolution: {integrity: sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==}
+ dev: false
+
+ /react-frame-component/5.2.3_v2m5e27vhdewzwhryxwfaorcca:
+ resolution: {integrity: sha512-r+h0o3r/uqOLNT724z4CRVkxQouKJvoi3OPfjqWACD30Y87rtEmeJrNZf1WYPGknn1Y8200HAjx7hY/dPUGgmA==}
+ peerDependencies:
+ prop-types: ^15.5.9
+ react: '>= 16.3'
+ react-dom: '>= 16.3'
+ dependencies:
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /react-hook-form/7.38.0_react@18.2.0:
+ resolution: {integrity: sha512-gxWW1kMeru9xR1GoR+Iw4hA+JBOM3SHfr4DWCUKY0xc7Vv1MLsF109oHtBeWl9shcyPFx67KHru44DheN0XY5A==}
+ engines: {node: '>=12.22.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17 || ^18
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /react-i18next/11.18.6_ulhmqqxshznzmtuvahdi5nasbq:
+ resolution: {integrity: sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==}
+ peerDependencies:
+ i18next: '>= 19.0.0'
+ react: '>= 16.8.0'
+ react-dom: '*'
+ react-native: '*'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+ react-native:
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.18.9
+ html-parse-stringify: 3.0.1
+ i18next: 21.9.2
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /react-idle-timer/5.4.2_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-ofCS/qpFjm6ZguEyePvtf9YMDnLj7zZfeLXRWGRpsC6Ga47H4dm7EvoUW8MsozGEGy8zCvPK0Sk6YuAnwLEzRQ==}
+ peerDependencies:
+ react: '>=16'
+ react-dom: '>=16'
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /react-inspector/6.0.1_react@18.2.0:
+ resolution: {integrity: sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==}
+ peerDependencies:
+ react: ^16.8.4 || ^17.0.0 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /react-is/16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
+ /react-is/18.2.0:
+ resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
+ dev: false
+
+ /react-lifecycles-compat/3.0.4:
+ resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==}
+ dev: false
+
+ /react-native-url-polyfill/1.3.0:
+ resolution: {integrity: sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ==}
+ peerDependencies:
+ react-native: '*'
+ dependencies:
+ whatwg-url-without-unicode: 8.0.0-3
+ dev: false
+
+ /react-popper/2.3.0_r6q5zrenym2zg7je7hgi674bti:
+ resolution: {integrity: sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==}
+ peerDependencies:
+ '@popperjs/core': ^2.0.0
+ react: ^16.8.0 || ^17 || ^18
+ react-dom: ^16.8.0 || ^17 || ^18
+ dependencies:
+ '@popperjs/core': 2.11.6
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-fast-compare: 3.2.0
+ warning: 4.0.3
+ dev: false
+
+ /react-refresh/0.14.0:
+ resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /react-resize-detector/7.1.2_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw==}
+ peerDependencies:
+ react: ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ lodash: 4.17.21
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /react-router-dom/6.4.2_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-yM1kjoTkpfjgczPrcyWrp+OuQMyB1WleICiiGfstnQYo/S8hPEEnVjr/RdmlH6yKK4Tnj1UGXFSa7uwAtmDoLQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ react: '>=16.8'
+ react-dom: '>=16.8'
+ dependencies:
+ '@remix-run/router': 1.0.2
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-router: 6.4.2_react@18.2.0
+ dev: false
+
+ /react-router/6.4.2_react@18.2.0:
+ resolution: {integrity: sha512-Rb0BAX9KHhVzT1OKhMvCDMw776aTYM0DtkxqUBP8dNBom3mPXlfNs76JNGK8wKJ1IZEY1+WGj+cvZxHVk/GiKw==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ react: '>=16.8'
+ dependencies:
+ '@remix-run/router': 1.0.2
+ react: 18.2.0
+ dev: false
+
+ /react-select/5.5.4_4vbxmiqiebt2rvx7s6k23gxsii:
+ resolution: {integrity: sha512-lyr19joBUm/CNJgjZMBSnFvJ/MeHCmBYvQ050qYAP3EPa7Oenlnx9guhU+SW0goYgxLQyqwRvkFllQpFAp8tmQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ '@babel/runtime': 7.18.9
+ '@emotion/cache': 11.10.3
+ '@emotion/react': 11.10.0_d3zi5agmim5yvele7myolzagti
+ '@floating-ui/dom': 1.0.2
+ '@types/react-transition-group': 4.4.5
+ memoize-one: 6.0.0
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-transition-group: 4.4.5_biqbaboplfbrettd7655fr4n2y
+ use-isomorphic-layout-effect: 1.1.2_iapumuv4e6jcjznwuxpf4tt22e
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@types/react'
+ dev: false
+
+ /react-simple-animate/3.5.1_react-dom@18.2.0:
+ resolution: {integrity: sha512-VpQS4nYU3G8+xU9hMinbeFZqHRVe+rNicec+y+Jaz3kHCV5TlBSkTzoaz/Nycsh2ShoWWfqfhV3Rn8E85QNqZg==}
+ peerDependencies:
+ react-dom: ^16.8.0 || ^17 || ^18
+ dependencies:
+ react-dom: 18.2.0_react@18.2.0
+ dev: true
+
+ /react-smooth/2.0.1_v2m5e27vhdewzwhryxwfaorcca:
+ resolution: {integrity: sha512-Own9TA0GPPf3as4vSwFhDouVfXP15ie/wIHklhyKBH5AN6NFtdk0UpHBnonV11BtqDkAWlt40MOUc+5srmW7NA==}
+ peerDependencies:
+ prop-types: ^15.6.0
+ react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ fast-equals: 2.0.4
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-transition-group: 2.9.0_biqbaboplfbrettd7655fr4n2y
+ dev: false
+
+ /react-table/7.8.0_react@18.2.0:
+ resolution: {integrity: sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==}
+ peerDependencies:
+ react: ^16.8.3 || ^17.0.0-0 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /react-toastify/9.0.8_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-EwM+teWt49HSHx+67qI08yLAW1zAsBxCXLCsUfxHYv1W7/R3ZLhrqKalh7j+kjgPna1h5LQMSMwns4tB4ww2yQ==}
+ peerDependencies:
+ react: '>=16'
+ react-dom: '>=16'
+ dependencies:
+ clsx: 1.2.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /react-transition-group/2.9.0_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==}
+ peerDependencies:
+ react: '>=15.0.0'
+ react-dom: '>=15.0.0'
+ dependencies:
+ dom-helpers: 3.4.0
+ loose-envify: 1.4.0
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-lifecycles-compat: 3.0.4
+ dev: false
+
+ /react-transition-group/4.4.5_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
+ peerDependencies:
+ react: '>=16.6.0'
+ react-dom: '>=16.6.0'
+ dependencies:
+ '@babel/runtime': 7.18.9
+ dom-helpers: 5.2.1
+ loose-envify: 1.4.0
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /react-virtualized-auto-sizer/1.0.7_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-Mxi6lwOmjwIjC1X4gABXMJcKHsOo0xWl3E3ugOgufB8GJU+MqrtY35aBuvCYv/razQ1Vbp7h1gWJjGjoNN5pmA==}
+ engines: {node: '>8.0.0'}
+ peerDependencies:
+ react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc
+ react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /react-window/1.8.7_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==}
+ engines: {node: '>8.0.0'}
+ peerDependencies:
+ react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ '@babel/runtime': 7.18.9
+ memoize-one: 5.2.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /react/18.2.0:
+ resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ loose-envify: 1.4.0
+
+ /read-pkg-up/3.0.0:
+ resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==}
+ engines: {node: '>=4'}
+ dependencies:
+ find-up: 2.1.0
+ read-pkg: 3.0.0
+ dev: true
+
+ /read-pkg-up/7.0.1:
+ resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
+ engines: {node: '>=8'}
+ dependencies:
+ find-up: 4.1.0
+ read-pkg: 5.2.0
+ type-fest: 0.8.1
+ dev: true
+
+ /read-pkg/3.0.0:
+ resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
+ engines: {node: '>=4'}
+ dependencies:
+ load-json-file: 4.0.0
+ normalize-package-data: 2.5.0
+ path-type: 3.0.0
+ dev: true
+
+ /read-pkg/5.2.0:
+ resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/normalize-package-data': 2.4.1
+ normalize-package-data: 2.5.0
+ parse-json: 5.2.0
+ type-fest: 0.6.0
+ dev: true
+
+ /readable-stream/2.3.7:
+ resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readable-stream/3.6.0:
+ resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
+ engines: {node: '>= 6'}
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ /readdirp/3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+ dependencies:
+ picomatch: 2.3.1
+
+ /recharts-scale/0.4.5:
+ resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==}
+ dependencies:
+ decimal.js-light: 2.5.1
+ dev: false
+
+ /recharts/2.1.15_v2m5e27vhdewzwhryxwfaorcca:
+ resolution: {integrity: sha512-16VMAvrsdqkEe7sT9uyJ1F+OZzrC6+5eW+pVSU04SVO6O5Nr5lY78h/uKMjsZJTN0nfOfgV7YfHZcivtqgPU9g==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ prop-types: ^15.6.0
+ react: ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ '@types/d3-interpolate': 2.0.2
+ '@types/d3-scale': 3.3.2
+ '@types/d3-shape': 2.1.3
+ classnames: 2.3.2
+ d3-interpolate: 2.0.1
+ d3-scale: 3.3.0
+ d3-shape: 2.1.0
+ eventemitter3: 4.0.7
+ lodash: 4.17.21
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ react-is: 16.13.1
+ react-resize-detector: 7.1.2_biqbaboplfbrettd7655fr4n2y
+ react-smooth: 2.0.1_v2m5e27vhdewzwhryxwfaorcca
+ recharts-scale: 0.4.5
+ reduce-css-calc: 2.1.8
+ dev: false
+
+ /recrawl-sync/2.2.2:
+ resolution: {integrity: sha512-E2sI4F25Fu2nrfV+KsnC7/qfk/spQIYXlonfQoS4rwxeNK5BjxnLPbWiRXHVXPwYBOTWtPX5765kTm/zJiL+LQ==}
+ dependencies:
+ '@cush/relative': 1.0.0
+ glob-regex: 0.3.2
+ slash: 3.0.0
+ tslib: 1.14.1
+ dev: false
+
+ /redent/3.0.0:
+ resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+ engines: {node: '>=8'}
+ dependencies:
+ indent-string: 4.0.0
+ strip-indent: 3.0.0
+ dev: true
+
+ /reduce-css-calc/2.1.8:
+ resolution: {integrity: sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==}
+ dependencies:
+ css-unit-converter: 1.1.2
+ postcss-value-parser: 3.3.1
+ dev: false
+
+ /regenerate-unicode-properties/10.0.1:
+ resolution: {integrity: sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==}
+ engines: {node: '>=4'}
+ dependencies:
+ regenerate: 1.4.2
+ dev: false
+
+ /regenerate/1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+ dev: false
+
+ /regenerator-runtime/0.13.9:
+ resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==}
+
+ /regenerator-transform/0.15.0:
+ resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==}
+ dependencies:
+ '@babel/runtime': 7.18.9
+ dev: false
+
+ /regexp.prototype.flags/1.4.3:
+ resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ functions-have-names: 1.2.3
+
+ /regexpp/3.2.0:
+ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /regexpu-core/5.1.0:
+ resolution: {integrity: sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==}
+ engines: {node: '>=4'}
+ dependencies:
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.0.1
+ regjsgen: 0.6.0
+ regjsparser: 0.8.4
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.0.0
+ dev: false
+
+ /regjsgen/0.6.0:
+ resolution: {integrity: sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==}
+ dev: false
+
+ /regjsparser/0.8.4:
+ resolution: {integrity: sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==}
+ hasBin: true
+ dependencies:
+ jsesc: 0.5.0
+ dev: false
+
+ /require-directory/2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ /require-from-string/2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /require-main-filename/2.0.0:
+ resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
+ dev: false
+
+ /resolve-from/4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ /resolve-from/5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /resolve-global/1.0.0:
+ resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==}
+ engines: {node: '>=8'}
+ dependencies:
+ global-dirs: 0.1.1
+ dev: true
+
+ /resolve/1.22.1:
+ resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.10.0
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ /resolve/2.0.0-next.4:
+ resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.10.0
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+ dev: true
+
+ /restore-cursor/2.0.0:
+ resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ onetime: 2.0.1
+ signal-exit: 3.0.7
+ dev: true
+
+ /reusify/1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ /rimraf/3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
+ /ripemd160/2.0.2:
+ resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
+ dependencies:
+ hash-base: 3.1.0
+ inherits: 2.0.4
+ dev: false
+
+ /rlp/2.2.7:
+ resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==}
+ hasBin: true
+ dependencies:
+ bn.js: 5.2.1
+ dev: false
+
+ /rollup-plugin-inject/3.0.2:
+ resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==}
+ deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.
+ dependencies:
+ estree-walker: 0.6.1
+ magic-string: 0.25.9
+ rollup-pluginutils: 2.8.2
+ dev: true
+
+ /rollup-plugin-node-polyfills/0.2.1:
+ resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==}
+ dependencies:
+ rollup-plugin-inject: 3.0.2
+ dev: true
+
+ /rollup-plugin-polyfill-node/0.10.2_rollup@3.2.3:
+ resolution: {integrity: sha512-5GMywXiLiuQP6ZzED/LO/Q0HyDi2W6b8VN+Zd3oB0opIjyRs494Me2ZMaqKWDNbGiW4jvvzl6L2n4zRgxS9cSQ==}
+ peerDependencies:
+ rollup: ^1.20.0 || ^2.0.0
+ dependencies:
+ '@rollup/plugin-inject': 4.0.4_rollup@3.2.3
+ rollup: 3.2.3
+ dev: true
+
+ /rollup-pluginutils/2.8.2:
+ resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
+ dependencies:
+ estree-walker: 0.6.1
+ dev: true
+
+ /rollup/2.78.1:
+ resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ /rollup/2.79.1:
+ resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+ optionalDependencies:
+ fsevents: 2.3.2
+ dev: true
+
+ /rollup/3.2.3:
+ resolution: {integrity: sha512-qfadtkY5kl0F5e4dXVdj2D+GtOdifasXHFMiL1SMf9ADQDv5Eti6xReef9FKj+iQPR2pvtqWna57s/PjARY4fg==}
+ engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+ hasBin: true
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ /rpc-websockets/7.5.0:
+ resolution: {integrity: sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ==}
+ dependencies:
+ '@babel/runtime': 7.18.9
+ eventemitter3: 4.0.7
+ uuid: 8.3.2
+ ws: 8.8.1_22kvxa7zeyivx4jp72v2w3pkvy
+ optionalDependencies:
+ bufferutil: 4.0.6
+ utf-8-validate: 5.0.9
+ dev: false
+
+ /run-applescript/5.0.0:
+ resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==}
+ engines: {node: '>=12'}
+ dependencies:
+ execa: 5.1.1
+ dev: false
+
+ /run-async/2.4.1:
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /run-parallel/1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ dependencies:
+ queue-microtask: 1.2.3
+
+ /rxjs/6.6.7:
+ resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
+ engines: {npm: '>=2.0.0'}
+ dependencies:
+ tslib: 1.14.1
+
+ /rxjs/7.5.7:
+ resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==}
+ dependencies:
+ tslib: 2.4.0
+ dev: false
+
+ /safe-buffer/5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ /safe-buffer/5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ /safe-event-emitter/1.0.1:
+ resolution: {integrity: sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==}
+ deprecated: Renamed to @metamask/safe-event-emitter
+ dependencies:
+ events: 3.3.0
+ dev: false
+
+ /safe-json-utils/1.1.1:
+ resolution: {integrity: sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==}
+ dev: false
+
+ /safer-buffer/2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ /sass/1.55.0:
+ resolution: {integrity: sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==}
+ engines: {node: '>=12.0.0'}
+ hasBin: true
+ dependencies:
+ chokidar: 3.5.3
+ immutable: 4.1.0
+ source-map-js: 1.0.2
+
+ /scheduler/0.23.0:
+ resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+ dependencies:
+ loose-envify: 1.4.0
+
+ /scrypt-js/3.0.1:
+ resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==}
+ dev: false
+
+ /secp256k1/4.0.3:
+ resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==}
+ engines: {node: '>=10.0.0'}
+ requiresBuild: true
+ dependencies:
+ elliptic: 6.5.4
+ node-addon-api: 2.0.2
+ node-gyp-build: 4.5.0
+ dev: false
+
+ /semver/5.7.1:
+ resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
+ hasBin: true
+ dev: true
+
+ /semver/6.3.0:
+ resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
+ hasBin: true
+
+ /semver/7.0.0:
+ resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==}
+ hasBin: true
+ dev: false
+
+ /semver/7.3.7:
+ resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /send/0.18.0:
+ resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /serve-static/1.15.0:
+ resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.18.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /set-blocking/2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+ dev: false
+
+ /setimmediate/1.0.5:
+ resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
+ dev: false
+
+ /setprototypeof/1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+ dev: false
+
+ /sha.js/2.4.11:
+ resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
+ hasBin: true
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+ dev: false
+
+ /shebang-command/2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: 3.0.0
+
+ /shebang-regex/3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ /shiki/0.11.1:
+ resolution: {integrity: sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==}
+ dependencies:
+ jsonc-parser: 3.1.0
+ vscode-oniguruma: 1.6.2
+ vscode-textmate: 6.0.0
+ dev: true
+
+ /side-channel/1.0.4:
+ resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+ dependencies:
+ call-bind: 1.0.2
+ get-intrinsic: 1.1.2
+ object-inspect: 1.12.2
+
+ /signal-exit/3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ /slash/3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ /slash/4.0.0:
+ resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /slice-ansi/4.0.0:
+ resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+ dev: true
+
+ /source-map-js/1.0.2:
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+ engines: {node: '>=0.10.0'}
+
+ /source-map-support/0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ /source-map/0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+
+ /source-map/0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ /sourcemap-codec/1.4.8:
+ resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
+
+ /spdx-correct/3.1.1:
+ resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==}
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.12
+ dev: true
+
+ /spdx-exceptions/2.3.0:
+ resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
+ dev: true
+
+ /spdx-expression-parse/3.0.1:
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+ dependencies:
+ spdx-exceptions: 2.3.0
+ spdx-license-ids: 3.0.12
+ dev: true
+
+ /spdx-license-ids/3.0.12:
+ resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==}
+ dev: true
+
+ /split-on-first/1.1.0:
+ resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /split/1.0.1:
+ resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
+ dependencies:
+ through: 2.3.8
+ dev: true
+
+ /split2/3.2.2:
+ resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
+ dependencies:
+ readable-stream: 3.6.0
+ dev: true
+
+ /stable/0.1.8:
+ resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
+ deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
+ dev: true
+
+ /standard-version/9.5.0:
+ resolution: {integrity: sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ chalk: 2.4.2
+ conventional-changelog: 3.1.25
+ conventional-changelog-config-spec: 2.1.0
+ conventional-changelog-conventionalcommits: 4.6.3
+ conventional-recommended-bump: 6.1.0
+ detect-indent: 6.1.0
+ detect-newline: 3.1.0
+ dotgitignore: 2.1.0
+ figures: 3.2.0
+ find-up: 5.0.0
+ git-semver-tags: 4.1.1
+ semver: 7.3.7
+ stringify-package: 1.0.1
+ yargs: 16.2.0
+ dev: true
+
+ /statuses/2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+ dev: false
+
+ /stream-browserify/3.0.0:
+ resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 3.6.0
+ dev: false
+
+ /strict-uri-encode/2.0.0:
+ resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /string-width/2.1.1:
+ resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==}
+ engines: {node: '>=4'}
+ dependencies:
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 4.0.0
+ dev: true
+
+ /string-width/3.1.0:
+ resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
+ engines: {node: '>=6'}
+ dependencies:
+ emoji-regex: 7.0.3
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 5.2.0
+ dev: false
+
+ /string-width/4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ /string-width/5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.0.1
+ dev: false
+
+ /string.prototype.matchall/4.0.7:
+ resolution: {integrity: sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+ get-intrinsic: 1.1.2
+ has-symbols: 1.0.3
+ internal-slot: 1.0.3
+ regexp.prototype.flags: 1.4.3
+ side-channel: 1.0.4
+ dev: true
+
+ /string.prototype.trimend/1.0.5:
+ resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+
+ /string.prototype.trimstart/1.0.5:
+ resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.1.4
+ es-abstract: 1.20.1
+
+ /string_decoder/1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: true
+
+ /string_decoder/1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ dependencies:
+ safe-buffer: 5.2.1
+
+ /stringify-package/1.0.1:
+ resolution: {integrity: sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==}
+ dev: true
+
+ /strip-ansi/4.0.0:
+ resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-regex: 3.0.1
+ dev: true
+
+ /strip-ansi/5.2.0:
+ resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
+ engines: {node: '>=6'}
+ dependencies:
+ ansi-regex: 4.1.1
+
+ /strip-ansi/6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+
+ /strip-ansi/7.0.1:
+ resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-regex: 6.0.1
+ dev: false
+
+ /strip-bom/3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ /strip-eof/1.0.0:
+ resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /strip-final-newline/2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ /strip-hex-prefix/1.0.0:
+ resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==}
+ engines: {node: '>=6.5.0', npm: '>=3'}
+ dependencies:
+ is-hex-prefixed: 1.0.0
+ dev: false
+
+ /strip-indent/3.0.0:
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ min-indent: 1.0.1
+ dev: true
+
+ /strip-json-comments/3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /style-search/0.1.0:
+ resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
+ dev: true
+
+ /style-value-types/5.1.2:
+ resolution: {integrity: sha512-Vs9fNreYF9j6W2VvuDTP7kepALi7sk0xtk2Tu8Yxi9UoajJdEVpNpCov0HsLTqXvNGKX+Uv09pkozVITi1jf3Q==}
+ dependencies:
+ hey-listen: 1.0.8
+ tslib: 2.4.0
+ dev: false
+
+ /stylelint-config-prettier-scss/0.0.1_stylelint@14.14.0:
+ resolution: {integrity: sha512-lBAYG9xYOh2LeWEPC/64xeUxwOTnQ8nDyBijQoWoJb10/bMGrUwnokpt8jegGck2Vbtxh6XGwH63z5qBcVHreQ==}
+ engines: {node: '>= 12'}
+ hasBin: true
+ peerDependencies:
+ stylelint: '>=11.0.0'
+ dependencies:
+ stylelint: 14.14.0
+ stylelint-config-prettier: 9.0.3_stylelint@14.14.0
+ dev: true
+
+ /stylelint-config-prettier/9.0.3_stylelint@14.14.0:
+ resolution: {integrity: sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==}
+ engines: {node: '>= 12'}
+ hasBin: true
+ peerDependencies:
+ stylelint: '>=11.0.0'
+ dependencies:
+ stylelint: 14.14.0
+ dev: true
+
+ /stylelint-config-recommended-scss/7.0.0_mnalcscwzozovshmobozjae4pq:
+ resolution: {integrity: sha512-rGz1J4rMAyJkvoJW4hZasuQBB7y9KIrShb20l9DVEKKZSEi1HAy0vuNlR8HyCKy/jveb/BdaQFcoiYnmx4HoiA==}
+ peerDependencies:
+ stylelint: ^14.4.0
+ dependencies:
+ postcss-scss: 4.0.5_postcss@8.4.18
+ stylelint: 14.14.0
+ stylelint-config-recommended: 8.0.0_stylelint@14.14.0
+ stylelint-scss: 4.3.0_stylelint@14.14.0
+ transitivePeerDependencies:
+ - postcss
+ dev: true
+
+ /stylelint-config-recommended/8.0.0_stylelint@14.14.0:
+ resolution: {integrity: sha512-IK6dWvE000+xBv9jbnHOnBq01gt6HGVB2ZTsot+QsMpe82doDQ9hvplxfv4YnpEuUwVGGd9y6nbaAnhrjcxhZQ==}
+ peerDependencies:
+ stylelint: ^14.8.0
+ dependencies:
+ stylelint: 14.14.0
+ dev: true
+
+ /stylelint-config-standard-scss/5.0.0_mnalcscwzozovshmobozjae4pq:
+ resolution: {integrity: sha512-zoXLibojHZYPFjtkc4STZtAJ2yGTq3Bb4MYO0oiyO6f/vNxDKRcSDZYoqN260Gv2eD5niQIr1/kr5SXlFj9kcQ==}
+ peerDependencies:
+ stylelint: ^14.9.0
+ dependencies:
+ stylelint: 14.14.0
+ stylelint-config-recommended-scss: 7.0.0_mnalcscwzozovshmobozjae4pq
+ stylelint-config-standard: 26.0.0_stylelint@14.14.0
+ transitivePeerDependencies:
+ - postcss
+ dev: true
+
+ /stylelint-config-standard/26.0.0_stylelint@14.14.0:
+ resolution: {integrity: sha512-hUuB7LaaqM8abvkOO84wh5oYSkpXgTzHu2Zza6e7mY+aOmpNTjoFBRxSLlzY0uAOMWEFx0OMKzr+reG1BUtcqQ==}
+ peerDependencies:
+ stylelint: ^14.9.0
+ dependencies:
+ stylelint: 14.14.0
+ stylelint-config-recommended: 8.0.0_stylelint@14.14.0
+ dev: true
+
+ /stylelint-scss/4.3.0_stylelint@14.14.0:
+ resolution: {integrity: sha512-GvSaKCA3tipzZHoz+nNO7S02ZqOsdBzMiCx9poSmLlb3tdJlGddEX/8QzCOD8O7GQan9bjsvLMsO5xiw6IhhIQ==}
+ peerDependencies:
+ stylelint: ^14.5.1
+ dependencies:
+ lodash: 4.17.21
+ postcss-media-query-parser: 0.2.3
+ postcss-resolve-nested-selector: 0.1.1
+ postcss-selector-parser: 6.0.10
+ postcss-value-parser: 4.2.0
+ stylelint: 14.14.0
+ dev: true
+
+ /stylelint/14.14.0:
+ resolution: {integrity: sha512-yUI+4xXfPHVnueYddSQ/e1GuEA/2wVhWQbGj16AmWLtQJtn28lVxfS4b0CsWyVRPgd3Auzi0NXOthIEUhtQmmA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ '@csstools/selector-specificity': 2.0.2_dvkg4kkb622mvceygg47xxdz3a
+ balanced-match: 2.0.0
+ colord: 2.9.3
+ cosmiconfig: 7.0.1
+ css-functions-list: 3.1.0
+ debug: 4.3.4
+ fast-glob: 3.2.12
+ fastest-levenshtein: 1.0.16
+ file-entry-cache: 6.0.1
+ global-modules: 2.0.0
+ globby: 11.1.0
+ globjoin: 0.1.4
+ html-tags: 3.2.0
+ ignore: 5.2.0
+ import-lazy: 4.0.0
+ imurmurhash: 0.1.4
+ is-plain-object: 5.0.0
+ known-css-properties: 0.25.0
+ mathml-tag-names: 2.1.3
+ meow: 9.0.0
+ micromatch: 4.0.5
+ normalize-path: 3.0.0
+ picocolors: 1.0.0
+ postcss: 8.4.18
+ postcss-media-query-parser: 0.2.3
+ postcss-resolve-nested-selector: 0.1.1
+ postcss-safe-parser: 6.0.0_postcss@8.4.18
+ postcss-selector-parser: 6.0.10
+ postcss-value-parser: 4.2.0
+ resolve-from: 5.0.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ style-search: 0.1.0
+ supports-hyperlinks: 2.3.0
+ svg-tags: 1.0.0
+ table: 6.8.0
+ v8-compile-cache: 2.3.0
+ write-file-atomic: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /stylis/4.0.13:
+ resolution: {integrity: sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==}
+
+ /superstruct/0.14.2:
+ resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==}
+ dev: false
+
+ /supports-color/5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+ dependencies:
+ has-flag: 3.0.0
+
+ /supports-color/7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+
+ /supports-hyperlinks/2.3.0:
+ resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ supports-color: 7.2.0
+ dev: true
+
+ /supports-preserve-symlinks-flag/1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ /svg-parser/2.0.4:
+ resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
+ dev: true
+
+ /svg-tags/1.0.0:
+ resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
+ dev: true
+
+ /svgo/2.8.0:
+ resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 4.3.0
+ css-tree: 1.1.3
+ csso: 4.2.0
+ picocolors: 1.0.0
+ stable: 0.1.8
+ dev: true
+
+ /systemjs/6.12.6:
+ resolution: {integrity: sha512-SawLiWya8/uNR4p12OggSYZ35tP4U4QTpfV57DdZEOPr6+J6zlLSeeEpMmzYTEoBAsMhctdEE+SWJUDYX4EaKw==}
+ dev: false
+
+ /table/6.8.0:
+ resolution: {integrity: sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ ajv: 8.11.0
+ lodash.truncate: 4.4.2
+ slice-ansi: 4.0.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /terser/5.15.1:
+ resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ '@jridgewell/source-map': 0.3.2
+ acorn: 8.8.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ /text-encoding-utf-8/1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+ dev: false
+
+ /text-extensions/1.9.0:
+ resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
+ engines: {node: '>=0.10'}
+ dev: true
+
+ /text-table/0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ dev: true
+
+ /through/2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ /through2/2.0.5:
+ resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
+ dependencies:
+ readable-stream: 2.3.7
+ xtend: 4.0.2
+ dev: true
+
+ /through2/4.0.2:
+ resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
+ dependencies:
+ readable-stream: 3.6.0
+ dev: true
+
+ /tippy.js/6.3.7:
+ resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==}
+ dependencies:
+ '@popperjs/core': 2.11.6
+ dev: false
+
+ /titleize/1.0.1:
+ resolution: {integrity: sha512-rUwGDruKq1gX+FFHbTl5qjI7teVO7eOe+C8IcQ7QT+1BK3eEUXJqbZcBOeaRP4FwSC/C1A5jDoIVta0nIQ9yew==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /tmp/0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+ dependencies:
+ os-tmpdir: 1.0.2
+ dev: true
+
+ /to-fast-properties/2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+
+ /to-regex-range/5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: 7.0.0
+
+ /toggle-selection/1.0.6:
+ resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
+ dev: false
+
+ /toidentifier/1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+ dev: false
+
+ /toposort/2.0.2:
+ resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==}
+ dev: false
+
+ /tr46/0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ dev: false
+
+ /trim-newlines/3.0.1:
+ resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /ts-node/10.9.1_jcmx33t3olsvcxopqdljsohpme:
+ resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.9
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.3
+ '@types/node': 14.18.32
+ acorn: 8.8.0
+ acorn-walk: 8.2.0
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 4.8.4
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+ dev: true
+
+ /tsconfig-paths/3.14.1:
+ resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==}
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.1
+ minimist: 1.2.6
+ strip-bom: 3.0.0
+ dev: true
+
+ /tsconfig-paths/4.1.0:
+ resolution: {integrity: sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==}
+ engines: {node: '>=6'}
+ dependencies:
+ json5: 2.2.1
+ minimist: 1.2.6
+ strip-bom: 3.0.0
+ dev: false
+
+ /tslib/1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
+ /tslib/2.4.0:
+ resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
+ dev: false
+
+ /tsutils/3.21.0_typescript@4.8.4:
+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+ engines: {node: '>= 6'}
+ peerDependencies:
+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+ dependencies:
+ tslib: 1.14.1
+ typescript: 4.8.4
+ dev: true
+
+ /tweetnacl/1.0.3:
+ resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
+ dev: false
+
+ /type-check/0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ dev: true
+
+ /type-fest/0.18.1:
+ resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest/0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest/0.6.0:
+ resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /type-fest/0.8.1:
+ resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /type-fest/2.19.0:
+ resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+ engines: {node: '>=12.20'}
+ dev: false
+
+ /type-is/1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+ dev: false
+
+ /typedarray-to-buffer/3.1.5:
+ resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
+ dependencies:
+ is-typedarray: 1.0.0
+ dev: false
+
+ /typedarray/0.0.6:
+ resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
+ dev: true
+
+ /typedoc/0.23.17_typescript@4.8.4:
+ resolution: {integrity: sha512-3rtNubo1dK0pvs6ixpMAq4pESULd5/JNUqJbdyZoeilI14reb1RNVomN4fMgIadd0RMX1aenYjJSSMBOJ+/+0Q==}
+ engines: {node: '>= 14.14'}
+ hasBin: true
+ peerDependencies:
+ typescript: 4.6.x || 4.7.x || 4.8.x
+ dependencies:
+ lunr: 2.3.9
+ marked: 4.0.19
+ minimatch: 5.1.0
+ shiki: 0.11.1
+ typescript: 4.8.4
+ dev: true
+
+ /typescript/4.8.4:
+ resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ /uglify-js/3.17.0:
+ resolution: {integrity: sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /unbox-primitive/1.0.2:
+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ dependencies:
+ call-bind: 1.0.2
+ has-bigints: 1.0.2
+ has-symbols: 1.0.3
+ which-boxed-primitive: 1.0.2
+
+ /unicode-canonical-property-names-ecmascript/2.0.0:
+ resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /unicode-match-property-ecmascript/2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.0
+ unicode-property-aliases-ecmascript: 2.0.0
+ dev: false
+
+ /unicode-match-property-value-ecmascript/2.0.0:
+ resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /unicode-property-aliases-ecmascript/2.0.0:
+ resolution: {integrity: sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /universalify/2.0.0:
+ resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
+ engines: {node: '>= 10.0.0'}
+ dev: true
+
+ /unpipe/1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+ dev: false
+
+ /untildify/4.0.0:
+ resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /update-browserslist-db/1.0.9_browserslist@4.21.4:
+ resolution: {integrity: sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.21.4
+ escalade: 3.1.1
+ picocolors: 1.0.0
+
+ /uri-js/4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ dependencies:
+ punycode: 2.1.1
+ dev: true
+
+ /use-breakpoint/3.0.3_biqbaboplfbrettd7655fr4n2y:
+ resolution: {integrity: sha512-p73F+NZjWNZM34mZwR7iC+he1qoejtWJt5F0+6+fEfxUgOxDaf6A5QmlwY/TgzUY2YvIObN1Hj4DbHZbORmgwQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ peerDependencies:
+ react: '>=16.8'
+ react-dom: '>=16.8'
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0_react@18.2.0
+ dev: false
+
+ /use-deep-compare-effect/1.8.1_react@18.2.0:
+ resolution: {integrity: sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q==}
+ engines: {node: '>=10', npm: '>=6'}
+ peerDependencies:
+ react: '>=16.13'
+ dependencies:
+ '@babel/runtime': 7.18.9
+ dequal: 2.0.3
+ react: 18.2.0
+ dev: true
+
+ /use-isomorphic-layout-effect/1.1.2_iapumuv4e6jcjznwuxpf4tt22e:
+ resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.0.21
+ react: 18.2.0
+ dev: false
+
+ /use-sync-external-store/1.2.0_react@18.2.0:
+ resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /utf-8-validate/5.0.9:
+ resolution: {integrity: sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==}
+ engines: {node: '>=6.14.2'}
+ requiresBuild: true
+ dependencies:
+ node-gyp-build: 4.5.0
+ dev: false
+
+ /util-deprecate/1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ /util/0.12.4:
+ resolution: {integrity: sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==}
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.1.1
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.9
+ safe-buffer: 5.2.1
+ which-typed-array: 1.1.8
+ dev: false
+
+ /utils-merge/1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+ dev: false
+
+ /uuid/8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ /v8-compile-cache-lib/3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+ dev: true
+
+ /v8-compile-cache/2.3.0:
+ resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
+ dev: true
+
+ /validate-npm-package-license/3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+ dependencies:
+ spdx-correct: 3.1.1
+ spdx-expression-parse: 3.0.1
+ dev: true
+
+ /vary/1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+ dev: false
+
+ /vite-plugin-eslint/1.8.1_eslint@8.25.0+vite@3.1.8:
+ resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==}
+ peerDependencies:
+ eslint: '>=7'
+ vite: '>=2'
+ dependencies:
+ '@rollup/pluginutils': 4.2.1
+ '@types/eslint': 8.4.6
+ eslint: 8.25.0
+ rollup: 2.79.1
+ vite: 3.1.8_sass@1.55.0+terser@5.15.1
+ dev: true
+
+ /vite-plugin-package-version/1.0.2_vite@3.1.8:
+ resolution: {integrity: sha512-xCJMR0KD4rqSUwINyHJlLizio2VzYzaMrRkqC9xWaVGXgw1lIrzdD+wBUf1XDM8EhL1JoQ7aykLOfKrlZd1SoQ==}
+ peerDependencies:
+ vite: '>=2.0.0-beta.69'
+ dependencies:
+ vite: 3.1.8_sass@1.55.0+terser@5.15.1
+ dev: true
+
+ /vite-tsconfig-paths/3.5.0_vite@3.1.8:
+ resolution: {integrity: sha512-NKIubr7gXgh/3uniQaOytSg+aKWPrjquP6anAy+zCWEn6h9fB8z2/qdlfQrTgZWaXJ2pHVlllrSdRZltHn9P4g==}
+ peerDependencies:
+ vite: '>2.0.0-0'
+ dependencies:
+ debug: 4.3.4
+ globrex: 0.1.2
+ recrawl-sync: 2.2.2
+ tsconfig-paths: 4.1.0
+ vite: 3.1.8_sass@1.55.0+terser@5.15.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /vite/3.1.8_sass@1.55.0+terser@5.15.1:
+ resolution: {integrity: sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ hasBin: true
+ peerDependencies:
+ less: '*'
+ sass: '*'
+ stylus: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ less:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ terser:
+ optional: true
+ dependencies:
+ esbuild: 0.15.12
+ postcss: 8.4.18
+ resolve: 1.22.1
+ rollup: 2.78.1
+ sass: 1.55.0
+ terser: 5.15.1
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ /void-elements/3.1.0:
+ resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /vscode-oniguruma/1.6.2:
+ resolution: {integrity: sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==}
+ dev: true
+
+ /vscode-textmate/6.0.0:
+ resolution: {integrity: sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==}
+ dev: true
+
+ /wagmi/0.7.5_sybqfdu2w44r4mtbf6khtzswhu:
+ resolution: {integrity: sha512-/HRzvunyd68Dt7QKiAsmbf7rO3rOmvr81/yNpig1pkUyadAgOhFop+4PMr6QoxgN0eJRSNOhpM4GgQxr0FTG/Q==}
+ peerDependencies:
+ ethers: '>=5.5.1'
+ react: '>=17.0.0'
+ dependencies:
+ '@coinbase/wallet-sdk': 3.5.3_@babel+core@7.19.6
+ '@tanstack/query-sync-storage-persister': 4.12.0_h3xf36g7wqpz562xenkni7jjke
+ '@tanstack/react-query': 4.12.0_biqbaboplfbrettd7655fr4n2y
+ '@tanstack/react-query-persist-client': 4.12.0_y5afqvawh53tb7bsdy3jr7gcn4
+ '@wagmi/core': 0.6.4_fptuxfze67a5krt4ctgnmu3p3y
+ '@walletconnect/ethereum-provider': 1.8.0
+ abitype: 0.1.7_typescript@4.8.4
+ ethers: 5.7.2
+ react: 18.2.0
+ use-sync-external-store: 1.2.0_react@18.2.0
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@tanstack/query-core'
+ - bufferutil
+ - debug
+ - encoding
+ - immer
+ - react-dom
+ - react-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+ dev: false
+
+ /warning/4.0.3:
+ resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /webidl-conversions/3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ dev: false
+
+ /webidl-conversions/5.0.0:
+ resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /whatwg-url-without-unicode/8.0.0-3:
+ resolution: {integrity: sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==}
+ engines: {node: '>=10'}
+ dependencies:
+ buffer: 5.7.1
+ punycode: 2.1.1
+ webidl-conversions: 5.0.0
+ dev: false
+
+ /whatwg-url/5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+ dev: false
+
+ /which-boxed-primitive/1.0.2:
+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+ dependencies:
+ is-bigint: 1.0.4
+ is-boolean-object: 1.1.2
+ is-number-object: 1.0.7
+ is-string: 1.0.7
+ is-symbol: 1.0.4
+
+ /which-module/2.0.0:
+ resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
+ dev: false
+
+ /which-typed-array/1.1.8:
+ resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.2
+ es-abstract: 1.20.1
+ for-each: 0.3.3
+ has-tostringtag: 1.0.0
+ is-typed-array: 1.1.9
+ dev: false
+
+ /which/1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+
+ /which/2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+
+ /widest-line/4.0.1:
+ resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 5.1.2
+ dev: false
+
+ /word-wrap/1.2.3:
+ resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /wordwrap/1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+ dev: true
+
+ /wrap-ansi/5.1.0:
+ resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==}
+ engines: {node: '>=6'}
+ dependencies:
+ ansi-styles: 3.2.1
+ string-width: 3.1.0
+ strip-ansi: 5.2.0
+ dev: false
+
+ /wrap-ansi/7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /wrap-ansi/8.0.1:
+ resolution: {integrity: sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: 6.1.1
+ string-width: 5.1.2
+ strip-ansi: 7.0.1
+ dev: false
+
+ /wrappy/1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ dev: true
+
+ /write-file-atomic/4.0.2:
+ resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 3.0.7
+ dev: true
+
+ /ws/7.4.6:
+ resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: false
+
+ /ws/7.5.3:
+ resolution: {integrity: sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: false
+
+ /ws/7.5.9:
+ resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: false
+
+ /ws/8.8.1_22kvxa7zeyivx4jp72v2w3pkvy:
+ resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==}
+ 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
+ dependencies:
+ bufferutil: 4.0.6
+ utf-8-validate: 5.0.9
+ dev: false
+
+ /xdg-default-browser/2.1.0:
+ resolution: {integrity: sha512-HY4G725+IDQr16N8XOjAms5qJGArdJaWIuC7Q7A8UXIwj2mifqnPXephazyL7sIkQPvmEoPX3E0v2yFv6hQUNg==}
+ engines: {node: '>=4'}
+ dependencies:
+ execa: 0.2.2
+ titleize: 1.0.1
+ dev: false
+
+ /xtend/4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ /y18n/4.0.3:
+ resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
+ dev: false
+
+ /y18n/5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yallist/2.1.2:
+ resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
+ dev: false
+
+ /yallist/4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ dev: true
+
+ /yaml/1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+
+ /yargs-parser/13.1.2:
+ resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}
+ dependencies:
+ camelcase: 5.3.1
+ decamelize: 1.2.0
+ dev: false
+
+ /yargs-parser/20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yargs-parser/21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /yargs/13.3.2:
+ resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==}
+ dependencies:
+ cliui: 5.0.0
+ find-up: 3.0.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ require-main-filename: 2.0.0
+ set-blocking: 2.0.0
+ string-width: 3.1.0
+ which-module: 2.0.0
+ y18n: 4.0.3
+ yargs-parser: 13.1.2
+ dev: false
+
+ /yargs/16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+ dev: true
+
+ /yargs/17.6.0:
+ resolution: {integrity: sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==}
+ engines: {node: '>=12'}
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+ dev: true
+
+ /yn/3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /yocto-queue/0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yup/0.32.11:
+ resolution: {integrity: sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@babel/runtime': 7.18.9
+ '@types/lodash': 4.14.184
+ lodash: 4.17.21
+ lodash-es: 4.17.21
+ nanoclone: 0.2.1
+ property-expr: 2.0.5
+ toposort: 2.0.2
+ dev: false
+
+ /zustand/4.1.2_react@18.2.0:
+ resolution: {integrity: sha512-gcRaKchcxFPbImrBb/BKgujOhHhik9YhVpIeP87ETT7uokEe2Szu7KkuZ9ghjtD+/KKkcrRNktR2AiLXPIbKIQ==}
+ engines: {node: '>=12.7.0'}
+ peerDependencies:
+ immer: '>=9.0'
+ react: '>=16.8'
+ peerDependenciesMeta:
+ immer:
+ optional: true
+ react:
+ optional: true
+ dependencies:
+ react: 18.2.0
+ use-sync-external-store: 1.2.0_react@18.2.0
+ dev: false
+
+ github.com/ethereumjs/ethereumjs-abi/ee3994657fa7a427238e6ba92a84d0b529bbcde0:
+ resolution: {tarball: https://codeload.github.com/ethereumjs/ethereumjs-abi/tar.gz/ee3994657fa7a427238e6ba92a84d0b529bbcde0}
+ name: ethereumjs-abi
+ version: 0.6.8
+ dependencies:
+ bn.js: 4.12.0
+ ethereumjs-util: 6.2.1
+ dev: false
diff --git a/web/postcss.config.js b/web/postcss.config.js
new file mode 100644
index 0000000000..a47ef4f952
--- /dev/null
+++ b/web/postcss.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ plugins: {
+ autoprefixer: {},
+ },
+};
diff --git a/web/src/components/App/App.scss b/web/src/components/App/App.scss
new file mode 100644
index 0000000000..32751a9140
--- /dev/null
+++ b/web/src/components/App/App.scss
@@ -0,0 +1,7 @@
+#app {
+ height: inherit;
+ max-height: inherit;
+ position: relative;
+ max-width: 1920px;
+ overflow: hidden;
+}
diff --git a/web/src/components/App/App.tsx b/web/src/components/App/App.tsx
new file mode 100644
index 0000000000..d7ee4be2ef
--- /dev/null
+++ b/web/src/components/App/App.tsx
@@ -0,0 +1,188 @@
+import 'react-toastify/dist/ReactToastify.css';
+import 'tippy.js/dist/svg-arrow.css';
+import 'tippy.js/dist/tippy.css';
+import 'tippy.js/animations/scale.css';
+import './App.scss';
+
+import React, { Suspense, useEffect, useMemo, useState } from 'react';
+import {
+ BrowserRouter as Router,
+ Navigate,
+ Route,
+ Routes,
+} from 'react-router-dom';
+import { ToastContainer, ToastOptions } from 'react-toastify';
+import useBreakpoint from 'use-breakpoint';
+import shallow from 'zustand/shallow';
+
+import AuthPage from '../../pages/auth/AuthPage';
+import LoaderPage from '../../pages/loader/LoaderPage';
+import OpenidPage from '../../pages/openid/OpenidPage';
+import { OverviewPage } from '../../pages/overview/OverviewPage';
+import ProvisionersPage from '../../pages/provisioners/ProvisionersPage';
+import { UserProfilePage } from '../../pages/users/UserProfilePage';
+import WizardPage from '../../pages/vpn/Wizard/WizardPage';
+import WebhooksPage from '../../pages/webhooks/WebhooksPage';
+import ProtectedRoute from '../../shared/components/Router/Guards/ProtectedRoute/ProtectedRoute';
+import ToastifyCloseButton from '../../shared/components/Toasts/CloseButton';
+import {
+ standardToastConfig,
+ standardToastConfigMobile,
+} from '../../shared/components/Toasts/toastConfigs';
+import { deviceBreakpoints } from '../../shared/constants';
+import { useAuthStore } from '../../shared/hooks/store/useAuthStore';
+import useApi from '../../shared/hooks/useApi';
+
+const OAuthPage = React.lazy(() => import('../../pages/oauth/OAuthPage'));
+const UsersPage = React.lazy(() => import('../../pages/users/UsersPage'));
+const OpenidAllowPage = React.lazy(
+ () => import('../../pages/openid/OpenidAllowPage')
+);
+
+const App: React.FC = () => {
+ const [meCheckLoading, setMeCheckLoading] = useState(true);
+
+ const {
+ user: { getMe },
+ } = useApi();
+ const [currentUser, logOut, logIn, isAdmin] = useAuthStore(
+ (state) => [state.user, state.logOut, state.logIn, state.isAdmin],
+ shallow
+ );
+ const { breakpoint } = useBreakpoint(deviceBreakpoints);
+ const getToastDefaultConfig: ToastOptions = useMemo(() => {
+ return breakpoint === 'mobile'
+ ? standardToastConfigMobile
+ : standardToastConfig;
+ }, [breakpoint]);
+
+ useEffect(() => {
+ getMe()
+ .then((user) => {
+ logIn(user);
+ setMeCheckLoading(false);
+ })
+ .catch(() => {
+ if (currentUser) {
+ logOut();
+ }
+ setMeCheckLoading(false);
+ console.clear();
+ });
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ if (meCheckLoading) return ;
+
+ return (
+ <>
+
+
+
+ } />
+
+ } />
+
+
+
+ }
+ />
+
+
+
+ }
+ />
+
+ }>
+
+
+
+ }
+ />
+
+ }>
+
+
+
+ }
+ />
+
+ }>
+
+
+
+ }
+ />
+
+ }>
+
+
+
+ }
+ />
+ } />
+
+
+
+
+ }
+ />
+ }>
+
+
+ }
+ />
+ }>
+
+
+ }
+ />
+
+ ) : (
+
+ )
+ }
+ />
+
+
+
+
+ >
+ );
+};
+
+export default App;
diff --git a/web/src/components/Navigation/ApplicationVersion/ApplicationVersion.tsx b/web/src/components/Navigation/ApplicationVersion/ApplicationVersion.tsx
new file mode 100644
index 0000000000..8d365bfda1
--- /dev/null
+++ b/web/src/components/Navigation/ApplicationVersion/ApplicationVersion.tsx
@@ -0,0 +1,28 @@
+import './style.scss';
+
+import { HTMLMotionProps, motion } from 'framer-motion';
+import React from 'react';
+
+import { useAppStore } from '../../../shared/hooks/store/useAppStore';
+
+// eslint-disable-next-line @typescript-eslint/ban-ts-comment
+// @ts-ignore
+const appVersion = import.meta.env.PACKAGE_VERSION;
+
+const ApplicationVersion: React.FC> = (props) => {
+ const backendVersion = useAppStore((state) => state.backendVersion);
+
+ return (
+
+
+ Copyright @ 2022 TEONITE
+
+ {backendVersion ? `Backend v${backendVersion}` : null}
+ {appVersion ? ` :: Frontend ${appVersion}` : null}
+
+
+
+ );
+};
+
+export default ApplicationVersion;
diff --git a/web/src/components/Navigation/ApplicationVersion/style.scss b/web/src/components/Navigation/ApplicationVersion/style.scss
new file mode 100644
index 0000000000..8d955a34a4
--- /dev/null
+++ b/web/src/components/Navigation/ApplicationVersion/style.scss
@@ -0,0 +1,39 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/mixins' as mix;
+@use '@shared/scss/helpers/bootstrap' as bs;
+
+.AppVersion {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: flex-start;
+ justify-content: center;
+ box-sizing: border-box;
+ width: 100%;
+ height: auto;
+ background-color: transparent;
+ @include bs.media-breakpoint-down(md) {
+ padding: 1.3rem 2rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ padding-left: 4rem;
+ padding-bottom: 1.5rem;
+ padding-top: 1.5rem;
+ }
+
+ p,
+ span {
+ margin: 0;
+ padding: 0;
+ font-size: 1rem;
+ color: v.$gray-light;
+ font-family: Roboto;
+ text-align: left;
+ }
+
+ p {
+ span {
+ display: block;
+ }
+ }
+}
diff --git a/web/src/components/Navigation/MobleNavModal/MobileNavModal.tsx b/web/src/components/Navigation/MobleNavModal/MobileNavModal.tsx
new file mode 100644
index 0000000000..2ef86dc25c
--- /dev/null
+++ b/web/src/components/Navigation/MobleNavModal/MobileNavModal.tsx
@@ -0,0 +1,80 @@
+import './style.scss';
+
+import React from 'react';
+import { useTranslation } from 'react-i18next';
+
+import Divider from '../../../shared/components/layout/Divider/Divider';
+import Modal from '../../../shared/components/layout/Modal/Modal';
+import SvgDefguadNavLogo from '../../../shared/components/svg/DefguadNavLogo';
+import SvgIconHamburgerClose from '../../../shared/components/svg/IconHamburgerClose';
+import SvgIconNavLogout from '../../../shared/components/svg/IconNavLogout';
+import ApplicationVersion from '../ApplicationVersion/ApplicationVersion';
+import { NavigationItem } from '../Navigation';
+import NavigationLink from '../NavigationLink';
+
+interface Props {
+ isOpen: boolean;
+ setIsOpen: (v: boolean) => void;
+ links: NavigationItem[];
+ onLogOut: () => void;
+}
+
+const MobileNavModal: React.FC = ({
+ isOpen,
+ setIsOpen,
+ links,
+ onLogOut,
+}) => {
+ const { t } = useTranslation('en');
+ return (
+
+
+
+
+
+
+ {links.map((link) => (
+ setIsOpen(false)}
+ />
+ ))}
+
+
+
+
+
+ );
+};
+
+export default MobileNavModal;
diff --git a/web/src/components/Navigation/MobleNavModal/style.scss b/web/src/components/Navigation/MobleNavModal/style.scss
new file mode 100644
index 0000000000..be2d55df75
--- /dev/null
+++ b/web/src/components/Navigation/MobleNavModal/style.scss
@@ -0,0 +1,130 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/mixins' as mix;
+
+.modal-root {
+ & > .modal-wrap {
+ & > .modal {
+ &.mobile-nav {
+ height: 100%;
+ padding: 0;
+
+ .modal-content {
+ width: 293px;
+ position: relative;
+ border-radius: 0;
+ display: flex;
+ flex-direction: column;
+
+ .close-mobile-nav {
+ position: fixed;
+ left: 314px;
+ top: 15px;
+ height: 40px;
+ width: 40px;
+ border-radius: 1rem;
+ box-shadow: none;
+ border: 0 solid transparent;
+ background-color: v.$white;
+ display: flex;
+ flex-direction: column;
+ align-content: center;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ }
+
+ .logo-container {
+ width: 100%;
+ box-sizing: border-box;
+ height: 70px;
+ border-bottom: 1px solid v.$gray-border;
+ display: flex;
+ align-items: center;
+ align-content: center;
+ padding-left: 2rem;
+ }
+
+ .links {
+ display: flex;
+ flex-direction: column;
+ align-content: flex-start;
+ align-items: flex-start;
+ justify-content: flex-start;
+ box-sizing: border-box;
+ width: inherit;
+ row-gap: 1rem;
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+
+ a {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 1.5rem;
+ padding: 1.3rem 2rem;
+ text-decoration: none;
+ width: inherit;
+ box-sizing: border-box;
+ height: 50px;
+
+ span {
+ display: block;
+ font-size: 1.5rem;
+ @include mix.text-weight(medium);
+ @include mix.poppins;
+
+ color: v.$gray-light;
+ }
+
+ &.active {
+ background-color: v.$bg-light;
+
+ svg {
+ path {
+ fill: v.$primary;
+ }
+
+ rect {
+ fill: v.$primary;
+ }
+ }
+
+ span {
+ color: v.$text-main;
+ }
+ }
+ }
+ }
+
+ .log-out {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 1.5rem;
+ padding: 1.3rem 2rem;
+ text-decoration: none;
+ width: inherit;
+ box-sizing: border-box;
+ height: 50px;
+ border: 0 solid transparent;
+ background-color: transparent;
+ margin-top: auto;
+
+ span {
+ display: block;
+ font-size: 1.5rem;
+ @include mix.text-weight(medium);
+ @include mix.poppins;
+
+ color: v.$gray-light;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/web/src/components/Navigation/Navigation.tsx b/web/src/components/Navigation/Navigation.tsx
new file mode 100644
index 0000000000..8ffdb646b2
--- /dev/null
+++ b/web/src/components/Navigation/Navigation.tsx
@@ -0,0 +1,285 @@
+import './style.scss';
+
+import { useMutation } from '@tanstack/react-query';
+import { AnimatePresence, motion } from 'framer-motion';
+import React, { useMemo, useState } from 'react';
+import { useTranslation } from 'react-i18next';
+import { useLocation } from 'react-router-dom';
+import useBreakpoint from 'use-breakpoint';
+import shallow from 'zustand/shallow';
+
+import Divider from '../../shared/components/layout/Divider/Divider';
+import IconButton from '../../shared/components/layout/IconButton/IconButton';
+import SvgDefguadNavLogo from '../../shared/components/svg/DefguadNavLogo';
+import SvgDefguadNavLogoCollapsed from '../../shared/components/svg/DefguadNavLogoCollapsed';
+import SvgIconArrowDoubleGrayLeft from '../../shared/components/svg/IconArrowDoubleGrayLeft';
+import SvgIconHamburgerMenu from '../../shared/components/svg/IconHamburgerMenu';
+import SvgIconNavLogout from '../../shared/components/svg/IconNavLogout';
+import SvgIconNavOpenId from '../../shared/components/svg/IconNavOpenid';
+import SvgIconNavOverview from '../../shared/components/svg/IconNavOverview';
+import SvgIconNavProfile from '../../shared/components/svg/IconNavProfile';
+import SvgIconNavSettings from '../../shared/components/svg/IconNavSettings';
+import SvgIconNavUsers from '../../shared/components/svg/IconNavUsers';
+import { deviceBreakpoints } from '../../shared/constants';
+import { useAuthStore } from '../../shared/hooks/store/useAuthStore';
+import { useNavigationStore } from '../../shared/hooks/store/useNavigationStore';
+import useApi from '../../shared/hooks/useApi';
+import ApplicationVersion from './ApplicationVersion/ApplicationVersion';
+import MobileNavModal from './MobleNavModal/MobileNavModal';
+import NavigationLink from './NavigationLink';
+
+export interface NavigationItem {
+ title: string;
+ linkPath: string;
+ icon?: React.ReactNode;
+ allowedToView?: string[];
+}
+
+const Navigation: React.FC = () => {
+ const { t } = useTranslation('en');
+ const [currentUser, storeLogOut] = useAuthStore(
+ (state) => [state.user, state.logOut],
+ shallow
+ );
+ const [isMobileNavOpen, setMobileNavOpen] = useState(false);
+ const [isNavigationOpen, setNavigationOpen, navigationUser] =
+ useNavigationStore(
+ (state) => [state.isNavigationOpen, state.setNavigationOpen, state.user],
+ shallow
+ );
+ const {
+ auth: { logout },
+ } = useApi();
+ const logOutMutation = useMutation(logout, {
+ onSuccess: () => {
+ storeLogOut();
+ },
+ });
+ const { breakpoint } = useBreakpoint(deviceBreakpoints);
+
+ const { pathname } = useLocation();
+
+ const getPageTitle = useMemo(() => {
+ if (pathname.includes('/me')) {
+ return 'My profile';
+ }
+ if (pathname === '/admin/users' || pathname === '/admin/users/') {
+ return 'Users';
+ }
+ if (pathname.includes('/admin/users/') && !pathname.includes('/edit')) {
+ if (
+ navigationUser &&
+ navigationUser.first_name &&
+ navigationUser.last_name
+ ) {
+ return `${navigationUser.first_name} ${navigationUser.last_name}`;
+ }
+ }
+ if (
+ pathname.includes('/admin/users') &&
+ pathname.includes('/edit') &&
+ navigationUser
+ ) {
+ return `Edit ${navigationUser.username}`;
+ }
+ if (pathname.includes('/admin/provisioners')) {
+ return 'Provisioners';
+ }
+ if (pathname.includes('/admin/webhooks')) {
+ return 'Webhooks';
+ }
+ if (pathname.includes('/admin/openid')) {
+ return 'OpenID Apps';
+ }
+ if (pathname.includes('/admin/overview')) {
+ return 'Network overview';
+ }
+ return '';
+ }, [pathname, navigationUser]);
+
+ const navItems: NavigationItem[] = useMemo(() => {
+ let base: NavigationItem[] = [
+ {
+ title: 'Overview',
+ linkPath: '/admin/overview',
+ icon: ,
+ allowedToView: ['admin'],
+ },
+ {
+ title: t('navigation.template.links.users'),
+ linkPath: '/admin/users',
+ icon: ,
+ allowedToView: ['admin'],
+ },
+ {
+ title: t('navigation.template.links.Provisioners'),
+ linkPath: '/admin/provisioners',
+ icon: ,
+ allowedToView: ['admin'],
+ },
+ {
+ title: t('navigation.template.links.Webhooks'),
+ linkPath: '/admin/webhooks',
+ icon: ,
+ allowedToView: ['admin'],
+ },
+ {
+ title: t('navigation.template.links.OpenIDApps'),
+ linkPath: '/admin/openid',
+ icon: ,
+ allowedToView: ['admin'],
+ },
+ {
+ title: t('navigation.template.links.myProfile'),
+ linkPath: `/me`,
+ icon: ,
+ allowedToView: [],
+ },
+ ];
+ base = base.filter((item) => {
+ if (item.allowedToView && item.allowedToView.length) {
+ if (currentUser) {
+ for (const group of currentUser.groups) {
+ if (item.allowedToView?.includes(group)) {
+ return true;
+ }
+ }
+ return false;
+ } else {
+ return false;
+ }
+ } else {
+ return true;
+ }
+ });
+ return base;
+ }, [currentUser, t]);
+
+ return (
+ <>
+ {breakpoint !== 'desktop' ? (
+
+ ) : null}
+ {breakpoint === 'desktop' ? (
+ <>
+
+
+
+
+
+
+
+
+ {isNavigationOpen ? (
+
+ ) : null}
+ {isNavigationOpen ? (
+
+ ) : null}
+
+
+
+ >
+ ) : null}
+ logOutMutation.mutate()}
+ />
+ >
+ );
+};
+
+export default Navigation;
diff --git a/web/src/components/Navigation/NavigationLink.tsx b/web/src/components/Navigation/NavigationLink.tsx
new file mode 100644
index 0000000000..2f12d3632e
--- /dev/null
+++ b/web/src/components/Navigation/NavigationLink.tsx
@@ -0,0 +1,44 @@
+import { AnimatePresence, motion } from 'framer-motion';
+import React from 'react';
+import { Link, useMatch } from 'react-router-dom';
+
+import { NavigationItem } from './Navigation';
+
+interface NavigationLinkProps {
+ item: NavigationItem;
+ callback?: () => void;
+}
+
+const NavigationLink: React.FC = ({ item, callback }) => {
+ const match = useMatch(item.linkPath);
+ return (
+ callback}
+ className={match ? 'active' : undefined}
+ replace
+ >
+ {item.icon}
+ {item.title}
+
+ {match ? (
+
+ ) : null}
+
+
+ );
+};
+
+export default NavigationLink;
diff --git a/web/src/components/Navigation/style.scss b/web/src/components/Navigation/style.scss
new file mode 100644
index 0000000000..0975c8631f
--- /dev/null
+++ b/web/src/components/Navigation/style.scss
@@ -0,0 +1,305 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/mixins' as mix;
+
+.nav-mobile {
+ inset: 0;
+ position: fixed;
+ height: 70px;
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ padding-left: 2rem;
+ padding-right: 2.6rem;
+ background-color: v.$white;
+ border-bottom: 1px solid v.$gray-border;
+ box-sizing: border-box;
+ z-index: 1000;
+
+ .page-title {
+ @include mix.poppins;
+ @include mix.text-weight(semiBold);
+
+ color: v.$text-main;
+ line-height: 3rem;
+ font-size: 2rem;
+ margin-left: auto;
+ margin-right: auto;
+ }
+
+ .hamburger-button {
+ border-color: transparent;
+ border-radius: 0;
+ background-color: transparent;
+
+ &:hover {
+ box-shadow: none;
+ }
+ }
+}
+
+.nav-container {
+ border-right: 1px solid #efefef;
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ z-index: 9999;
+ overflow-y: hidden;
+ height: auto;
+ min-height: 100%;
+ width: 104px;
+ transition-duration: v.$nav-collapse-duration;
+ transition-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1);
+ transition-property: width;
+ background-color: v.$white;
+ overflow-x: hidden;
+
+ span {
+ font-family: Poppins !important;
+ }
+
+ .active-line {
+ height: 100%;
+ width: 2px;
+ background-color: v.$primary;
+ position: absolute;
+ right: 0;
+ top: 0;
+ content: ' ';
+ display: block;
+ }
+
+ .logo-container {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: flex-start;
+ align-content: center;
+ height: 93.5px;
+ width: 100%;
+ transition: none;
+ position: relative;
+
+ svg {
+ position: absolute;
+ top: 50%;
+ left: 4rem;
+ transform: translateY(-50%);
+
+ &:nth-of-type(1) {
+ opacity: 0;
+ }
+ }
+ }
+
+ .divider {
+ display: block;
+ content: ' ';
+ width: 100%;
+ height: 2px;
+ background-color: v.$gray-border;
+ opacity: 0.5;
+ }
+
+ .links {
+ display: flex;
+ flex-direction: column;
+ align-content: center;
+ align-items: flex-end;
+ justify-content: flex-start;
+ gap: 0;
+ flex-grow: 1;
+ width: 100%;
+ max-height: calc(100% - (95.5px + 100px));
+ height: calc(100% - (95.5px + 100px));
+ overflow-y: auto;
+ box-sizing: border-box;
+ padding-top: 39.5px;
+ overflow-x: hidden;
+
+ a {
+ display: flex;
+ text-decoration: none;
+ width: 100%;
+ height: 50px;
+ flex-grow: 0;
+ flex-shrink: 0;
+ box-sizing: border-box;
+ padding-left: 40px;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ gap: 1.5rem;
+ cursor: pointer;
+ position: relative;
+
+ span {
+ display: none;
+ font-size: 1.5rem;
+ line-height: 1.6;
+ font-family: Poppins;
+ @include mix.text-weight(medium);
+
+ color: v.$gray-light;
+ transition-property: color;
+ transition-timing-function: ease;
+ transition-duration: v.$nav-links-animation-duration;
+ }
+
+ & > svg {
+ min-height: 24px;
+ min-width: 24px;
+ }
+
+ &:hover {
+ & > svg {
+ path {
+ fill: v.$primary;
+ }
+ }
+
+ span {
+ color: v.$text-main;
+ }
+ }
+
+ &.active {
+ // border-right: 2px solid v.$primary;
+ span {
+ color: v.$text-main;
+ }
+
+ & > svg {
+ path,
+ rect {
+ fill: v.$primary;
+ }
+ }
+ }
+ }
+ }
+
+ .log-out {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ box-sizing: border-box;
+ padding-left: 4rem;
+ gap: 1.5rem;
+ height: 50px;
+ width: 100%;
+ border: 0 solid transparent;
+ background-color: v.$white;
+ padding-right: 0;
+ cursor: pointer;
+ overflow-x: hidden;
+
+ span {
+ display: none;
+ font-size: 1.5rem;
+ line-height: 1.6;
+ @include mix.text-weight(medium);
+
+ color: v.$gray-light;
+ transition-property: color;
+ transition-timing-function: ease;
+ transition-duration: v.$nav-links-animation-duration;
+ }
+
+ & > svg {
+ min-height: 24px;
+ min-width: 24px;
+ }
+
+ &:hover {
+ span {
+ color: v.$text-main;
+ }
+
+ & > svg {
+ path,
+ rect {
+ fill: v.$primary;
+ }
+ }
+ }
+ }
+
+ &.visible {
+ width: 234px;
+
+ .logo-container {
+ svg {
+ &:nth-of-type(1) {
+ opacity: 1;
+ }
+
+ &:nth-of-type(2) {
+ opacity: 0;
+ }
+ }
+ }
+
+ .links {
+ span {
+ display: flex;
+ flex-wrap: nowrap;
+ min-width: 100px;
+ }
+ }
+
+ .log-out {
+ span {
+ display: flex;
+ }
+ }
+ }
+}
+
+.nav-control-button {
+ position: fixed;
+ top: 31px;
+ left: 219px;
+ background-color: v.$bg-light;
+ border: 1px solid v.$gray-border;
+ border-radius: 1rem;
+ height: 30px;
+ width: 30px;
+ display: flex;
+ flex-direction: column;
+ align-content: center;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ transition: box-shadow v.$nav-links-animation-duration ease,
+ background-color v.$nav-links-animation-duration ease,
+ left v.$nav-collapse-duration cubic-bezier(0.25, 0.8, 0.25, 1);
+ z-index: 10000;
+
+ &:hover {
+ border: 0 solid transparent;
+ background-color: v.$primary;
+ box-shadow: 0 6px 10px #0c8ce066;
+
+ & > svg {
+ rect {
+ fill: v.$white;
+ transition-property: fill;
+ transition-timing-function: ease;
+ transition-duration: v.$nav-links-animation-duration;
+ }
+ }
+ }
+
+ &.collapsed {
+ left: 89px;
+
+ & > svg {
+ transform: rotateY(180deg);
+ }
+ }
+}
diff --git a/web/src/favicon.svg b/web/src/favicon.svg
new file mode 100644
index 0000000000..9fcafad53d
--- /dev/null
+++ b/web/src/favicon.svg
@@ -0,0 +1,41 @@
+;
diff --git a/web/src/i18n.ts b/web/src/i18n.ts
new file mode 100644
index 0000000000..df6ed8917c
--- /dev/null
+++ b/web/src/i18n.ts
@@ -0,0 +1,28 @@
+import i18n from 'i18next';
+import { initReactI18next } from 'react-i18next';
+
+import en from './locales/en/translation.json';
+
+export const resources = {
+ en: {
+ en: en,
+ },
+} as const;
+
+const defaultNS = 'en';
+
+i18n.use(initReactI18next).init({
+ defaultNS,
+ ns: ['en'],
+ resources,
+ lng: 'en',
+ fallbackLng: 'en',
+ interpolation: {
+ escapeValue: false,
+ },
+ react: {
+ useSuspense: false,
+ },
+});
+
+export default i18n;
diff --git a/web/src/locales/en/translation.json b/web/src/locales/en/translation.json
new file mode 100644
index 0000000000..752f2ae85a
--- /dev/null
+++ b/web/src/locales/en/translation.json
@@ -0,0 +1,198 @@
+{
+ "auth": {
+ "login": {
+ "form": {
+ "required": {
+ "username": "Username field is required",
+ "password": "Password field is required"
+ },
+ "placeholder": {
+ "username": "Username",
+ "password": "Password"
+ },
+ "template": {
+ "login": "Log in",
+ "register": "Create new account"
+ }
+ }
+ },
+ "register": {
+ "login-link": "Back to login",
+ "form": {
+ "required": {
+ "username": "Username field is required",
+ "email": "Email field is required",
+ "confirmEmail": "Email confirmation field is required"
+ },
+ "placeholder": {
+ "username": "Username",
+ "email": "E-mail",
+ "confirmEmail": "Repeat e-mail"
+ },
+ "template": {
+ "submit": "Finish"
+ }
+ },
+ "template": {
+ "header": "Create new account"
+ }
+ }
+ },
+ "wizard": {
+ "navigation": {
+ "titles": {
+ "step1": "Chose network name & type",
+ "mesh": {
+ "step2": "Add locations",
+ "step3": "Add users"
+ },
+ "regular": {
+ "step2": "Network configuration",
+ "step3": "Add users"
+ }
+ }
+ },
+ "common": {
+ "back": "Back",
+ "next": "Next",
+ "select": "Select"
+ },
+ "locations": {
+ "form": {
+ "validation": {
+ "invalidAddress": "Enter a valid network address"
+ }
+ }
+ },
+ "networkType": {
+ "network": {
+ "placeholder": "Your network name, eg. \"My network\"",
+ "validation": {
+ "required": "Network name is required"
+ }
+ },
+ "meshNetwork": {
+ "title": "Mesh network",
+ "description": "Maecenas nulla tellus, egestas a eleifend ut, suscipit vitae dolor. Aliquam vestibulum metus volutpat gravida luctus."
+ },
+ "regularNetwork": {
+ "title": "Regular network",
+ "description": "Maecenas nulla tellus, egestas a eleifend ut, suscipit vitae dolor. Aliquam vestibulum metus volutpat gravida luctus."
+ }
+ },
+ "networkIpAddress": {
+ "label": "VPN network address and mask",
+ "placeholder": "Eg. 10.1.1.1/24",
+ "validation": {
+ "required": "Network address is required",
+ "invalidAddress": "Enter a valid network address"
+ }
+ },
+ "networkEndpoint": {
+ "label": "Gateway address",
+ "description": "Gateway's public address, used by VPN users to connect",
+ "placeholder": "Eg. 185.33.38.123",
+ "validation": {
+ "required": "Gateway address is required",
+ "invalidEndpoint": "Enter a valid gateway address"
+ }
+ },
+ "networkPort": {
+ "label": "Gateway port",
+ "placeholder": "Eg. 50051",
+ "validation": {
+ "required": "Gateway port is required",
+ "invalidPort": "Enter a valid port"
+ }
+ },
+ "networkAllowedIps": {
+ "label": "Allowed Ips",
+ "description": "List of addresses/masks that should be routed through the VPN network",
+ "placeholder": "Eg. 10.1.1.0/24, 10.2.2.0/24",
+ "validation": {
+ "invalidEndpoint": "Enter a valid list of allowed ips"
+ }
+ },
+ "networkDns": {
+ "label": "DNS",
+ "description": "specify the DNS resolvers to query when the WireGuard interface is up",
+ "placeholder": "Eg. 1.1.1.1",
+ "validation": {
+ "invalidDns": "Enter a valid dns address"
+ }
+ },
+ "users": {
+ "userCredentials": {
+ "label": "User credentials:"
+ },
+ "userName": {
+ "placeholder": "Username",
+ "validation": {
+ "required": "Username is required",
+ "unique": "E-mail should be unique"
+ }
+ },
+ "email": {
+ "placeholder": "User e-mail address",
+ "validation": {
+ "required": "Email is required"
+ }
+ },
+ "submit": "Add user",
+ "usersTable": {
+ "label": "Users:",
+ "noUsers": "You can add users later from the admin panel."
+ }
+ }
+ },
+ "navigation": {
+ "template": {
+ "links": {
+ "vpn": "VPN",
+ "overview": "Overview",
+ "users": "Users",
+ "locations": "Locations",
+ "settings": "settings",
+ "myProfile": "My profile",
+ "Provisioners": "Provisioners",
+ "Webhooks": "Webhooks",
+ "OpenIDApps": "OpenID Apps"
+ },
+ "logOut": "Logout"
+ }
+ },
+ "users": {
+ "form": {
+ "errors": {
+ "usernameTaken": "Username is already taken"
+ }
+ }
+ },
+ "form": {
+ "errors": {
+ "noSpecialChars": "No special characters are allowed.",
+ "digitOrLowercase": "Only digits and lowercase letters are allowed.",
+ "atLeastOneSpecialChar": "Must contain at least one special character",
+ "atLeastOneDigit": "Must contain at least one digit",
+ "atLeastOneUpperCaseChar": "Must contain at least one upper case character",
+ "atLeastOneLowerCaseChar": "Must contain at least one lower case character",
+ "maximumLength": "Exceeded maximum length of {{length}}",
+ "minimumLength": "Must be at least {{length}} long",
+ "required": "This field is required",
+ "email": "Enter a valid E-mail",
+ "phoneNumber": "Enter a valid phone number",
+ "invalidKey": "Enter a valid key",
+ "invalidUrl": "Enter a valid url"
+ }
+ },
+ "openid": {
+ "app": {
+ "name": "Name",
+ "description": "Description",
+ "homeUrl": "Home url",
+ "redirectUri": "Redirect url",
+ "clientId": "Client id",
+ "clientSecret": "Client secret"
+ }
+ }
+}
diff --git a/web/src/main.tsx b/web/src/main.tsx
new file mode 100644
index 0000000000..ec2110f1cb
--- /dev/null
+++ b/web/src/main.tsx
@@ -0,0 +1,22 @@
+import './i18n';
+import './shared/scss/styles.scss';
+
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
+import { lazy, StrictMode, Suspense } from 'react';
+import { createRoot } from 'react-dom/client';
+
+import LoaderPage from './pages/loader/LoaderPage';
+
+const App = lazy(() => import('./components/App/App'));
+
+const queryClient = new QueryClient();
+const root = createRoot(document.getElementById('root') as HTMLElement);
+root.render(
+
+
+ }>
+
+
+
+
+);
diff --git a/web/src/pages/auth/AuthPage.tsx b/web/src/pages/auth/AuthPage.tsx
new file mode 100644
index 0000000000..98f40a861e
--- /dev/null
+++ b/web/src/pages/auth/AuthPage.tsx
@@ -0,0 +1,46 @@
+import './style.scss';
+
+import React, { useEffect } from 'react';
+import { Navigate, Route, Routes, useNavigate } from 'react-router-dom';
+import shallow from 'zustand/shallow';
+
+import SvgDefguardLogoLogin from '../../shared/components/svg/DefguardLogoLogin';
+import { useAuthStore } from '../../shared/hooks/store/useAuthStore';
+import Login from './Login/Login';
+
+const AuthPage: React.FC = () => {
+ const navigate = useNavigate();
+
+ const [loggedUser, isAdmin] = useAuthStore(
+ (state) => [state.user, state.isAdmin],
+ shallow
+ );
+
+ useEffect(() => {
+ if (loggedUser) {
+ if (loggedUser && isAdmin) {
+ navigate('/admin', { replace: true });
+ } else {
+ navigate('/me', { replace: true });
+ }
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ return (
+
+
+
+ } />
+ } />
+ } />
+ {/* } /> */}
+ } />
+
+
+ );
+};
+
+export default AuthPage;
diff --git a/web/src/pages/auth/Login/Login.tsx b/web/src/pages/auth/Login/Login.tsx
new file mode 100644
index 0000000000..06eec51254
--- /dev/null
+++ b/web/src/pages/auth/Login/Login.tsx
@@ -0,0 +1,149 @@
+import './style.scss';
+
+import { yupResolver } from '@hookform/resolvers/yup';
+import { useMutation } from '@tanstack/react-query';
+import { AxiosError } from 'axios';
+import React from 'react';
+import { useForm } from 'react-hook-form';
+import { SubmitHandler } from 'react-hook-form';
+import { useTranslation } from 'react-i18next';
+import { useNavigate } from 'react-router';
+import { useLocation } from 'react-router-dom';
+import { toast } from 'react-toastify';
+import * as yup from 'yup';
+
+import { FormInput } from '../../../shared/components/Form/FormInput/FormInput';
+import Button, {
+ ButtonSize,
+ ButtonStyleVariant,
+} from '../../../shared/components/layout/Button/Button';
+import ToastContent, {
+ ToastType,
+} from '../../../shared/components/Toasts/ToastContent';
+import { isUserAdmin } from '../../../shared/helpers/isUserAdmin';
+import { useAuthStore } from '../../../shared/hooks/store/useAuthStore';
+import useApi from '../../../shared/hooks/useApi';
+import { MutationKeys } from '../../../shared/mutations';
+import { patternNoSpecialChars } from '../../../shared/patterns';
+import { LoginData } from '../../../shared/types';
+
+type Inputs = {
+ username: string;
+ password: string;
+};
+
+const Login: React.FC = () => {
+ const { t } = useTranslation('en');
+ const schema = yup
+ .object({
+ username: yup
+ .string()
+ .required(t('auth.login.form.required.username'))
+ .matches(patternNoSpecialChars, t('form.errors.noSpecialChars')),
+ password: yup
+ .string()
+ .required(t('auth.login.form.required.password'))
+ .max(32, t('form.errors.maximumLength', { length: 32 })),
+ })
+ .required();
+ const {
+ auth: { login },
+ user: { getMe },
+ } = useApi();
+ const logIn = useAuthStore((state) => state.logIn);
+ const navigate = useNavigate();
+
+ const responseErrorToast = (message: string) =>
+ toast(, {
+ toastId: 'login-form-error',
+ hideProgressBar: true,
+ });
+
+ const { handleSubmit, control, setError } = useForm({
+ resolver: yupResolver(schema),
+ mode: 'all',
+ defaultValues: {
+ password: '',
+ username: '',
+ },
+ });
+ const location = useLocation();
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ const state = location.state as any;
+
+ const loginMutation = useMutation((data: LoginData) => login(data), {
+ mutationKey: [MutationKeys.LOG_IN],
+ onSuccess: () => {
+ getMe().then((user) => {
+ logIn(user);
+ if (isUserAdmin(user)) {
+ navigate(state ? state.path : '/admin/overview', { replace: true });
+ } else {
+ navigate(state ? state.path : '/me', { replace: true });
+ }
+ });
+ },
+ onError: (error: AxiosError) => {
+ if (error.response && error.response.status === 401) {
+ responseErrorToast('Login failed');
+ setError(
+ 'password',
+ {
+ message: 'username or password is incorrect',
+ },
+ { shouldFocus: true }
+ );
+ } else {
+ console.error(error);
+ }
+ },
+ });
+
+ const onSubmit: SubmitHandler = (data) => {
+ if (!loginMutation.isLoading) {
+ loginMutation.mutate(data);
+ }
+ };
+
+ return (
+
+ Enter your credentials
+
+ {/* or
+ */}
+
+ );
+};
+
+export default Login;
diff --git a/web/src/pages/auth/Login/style.scss b/web/src/pages/auth/Login/style.scss
new file mode 100644
index 0000000000..7aa7d6b264
--- /dev/null
+++ b/web/src/pages/auth/Login/style.scss
@@ -0,0 +1,58 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/mixins' as mix;
+@use '@shared/scss/helpers/bootstrap' as bs;
+
+#login-container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ flex-grow: 1;
+ width: 100%;
+
+ & > p {
+ color: v.$gray-light;
+ font-size: 1.2rem;
+ line-height: 1.4;
+ margin: 2rem 0;
+ }
+
+ & > h1 {
+ margin-bottom: 1.2rem;
+ font-size: 2.8rem;
+ line-height: 3.9rem;
+ @include mix.text-weight(semiBold);
+ }
+
+ & > form {
+ display: flex;
+ flex-direction: column;
+ width: 284px;
+ height: auto;
+
+ .input-container {
+ width: 284px;
+ }
+
+ button {
+ width: 284px;
+ }
+
+ input {
+ width: 284px;
+ }
+ }
+
+ & > button {
+ width: 284px;
+ margin-bottom: 2rem;
+
+ &:last-of-type {
+ margin: 0;
+ }
+ }
+ @include bs.media-breakpoint-up(lg) {
+ width: 50%;
+ }
+}
diff --git a/web/src/pages/auth/Register/Register.tsx b/web/src/pages/auth/Register/Register.tsx
new file mode 100644
index 0000000000..03755946b4
--- /dev/null
+++ b/web/src/pages/auth/Register/Register.tsx
@@ -0,0 +1,88 @@
+import './style.scss';
+
+import { yupResolver } from '@hookform/resolvers/yup';
+import React from 'react';
+import { SubmitHandler, useForm } from 'react-hook-form';
+import { useTranslation } from 'react-i18next';
+import { useNavigate } from 'react-router';
+import * as yup from 'yup';
+
+import { FormInput } from '../../../shared/components/Form/FormInput/FormInput';
+import Button, {
+ ButtonSize,
+ ButtonStyleVariant,
+} from '../../../shared/components/layout/Button/Button';
+import SvgIconArrowGrayLeft from '../../../shared/components/svg/IconArrowGrayLeft';
+
+interface Inputs {
+ username: string;
+ email: string;
+ confirmEmail: string;
+}
+
+const Register: React.FC = () => {
+ const { t } = useTranslation('en');
+ const schema = yup
+ .object({
+ username: yup
+ .string()
+ .required(t('auth.register.form.required.username')),
+ email: yup.string().required(t('auth.register.form.required.email')),
+ confirmEmail: yup
+ .string()
+ .required(t('auth.register.form.required.confirmEmail')),
+ })
+ .required();
+ const { handleSubmit, control } = useForm({
+ resolver: yupResolver(schema),
+ mode: 'all',
+ });
+
+ const onSubmit: SubmitHandler = (data) => console.table(data);
+ const navigate = useNavigate();
+ return (
+
+
+
navigate('../login')}>
+
+
{t('auth.register.login-link')}
+
+
+
+ {t('auth.register.template.header')}
+
+
+
+ );
+};
+
+export default Register;
diff --git a/web/src/pages/auth/Register/style.scss b/web/src/pages/auth/Register/style.scss
new file mode 100644
index 0000000000..19795756ac
--- /dev/null
+++ b/web/src/pages/auth/Register/style.scss
@@ -0,0 +1,108 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/mixins' as mix;
+@use '@shared/scss/helpers/bootstrap' as bs;
+
+#register-container {
+ display: flex;
+ flex-shrink: 0;
+ flex-direction: column;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ width: 100%;
+ position: relative;
+ @include bs.media-breakpoint-up(lg) {
+ width: 50%;
+ }
+
+ .login-link {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ width: 100%;
+ box-sizing: border-box;
+ height: 80px;
+ padding: 0;
+ margin: 0;
+ padding-top: 2rem;
+ padding-left: 2rem;
+
+ & > div {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ gap: 1rem;
+ cursor: pointer;
+
+ button {
+ transition-property: box-shadow, background-color, border-color;
+ transition-timing-function: ease-in-out;
+ transition-duration: 250ms;
+ box-sizing: border-box;
+ }
+
+ p {
+ color: v.$gray-dark;
+ font-size: 1.2rem;
+ line-height: 1.4rem;
+ @include mix.text-weight(medium);
+ }
+ }
+ @include bs.media-breakpoint-up(lg) {
+ padding-top: 4rem;
+ padding-left: 4rem;
+ }
+ }
+
+ .content {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ height: 100%;
+ width: 100%;
+
+ h1 {
+ font-family: Poppins;
+ @include mix.text-weight(semiBold);
+
+ line-height: 4.2rem;
+ font-size: 2.8rem;
+ color: v.$text-main;
+ margin-bottom: 1.2rem;
+ }
+
+ form {
+ display: flex;
+ flex-direction: column;
+ align-content: flex-start;
+ align-items: center;
+ justify-content: center;
+ gap: 2rem;
+ width: 284px;
+ height: auto;
+
+ button {
+ width: 100%;
+ margin-top: 4rem;
+ }
+
+ .input-container {
+ width: inherit;
+ }
+
+ input {
+ width: 100%;
+ }
+ }
+
+ a {
+ text-decoration: none;
+ }
+ }
+}
diff --git a/web/src/pages/auth/style.scss b/web/src/pages/auth/style.scss
new file mode 100644
index 0000000000..b6698bd80a
--- /dev/null
+++ b/web/src/pages/auth/style.scss
@@ -0,0 +1,32 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/bootstrap' as bs;
+
+#auth-container {
+ display: flex;
+ flex-direction: row;
+ align-items: stretch;
+ align-content: center;
+ justify-content: flex-start;
+ width: auto;
+ height: inherit;
+ min-width: 100%;
+ overflow: auto;
+ background-color: v.$bg-light;
+ position: relative;
+ flex-wrap: nowrap;
+
+ .logo-container {
+ display: none;
+ flex-direction: column;
+ align-content: center;
+ align-items: center;
+ justify-content: center;
+ background-color: v.$primary;
+ flex-grow: 1;
+ flex-shrink: 0;
+ width: 50%;
+ @include bs.media-breakpoint-up(lg) {
+ display: flex;
+ }
+ }
+}
diff --git a/web/src/pages/loader/LoaderPage.tsx b/web/src/pages/loader/LoaderPage.tsx
new file mode 100644
index 0000000000..91cf1c38a7
--- /dev/null
+++ b/web/src/pages/loader/LoaderPage.tsx
@@ -0,0 +1,20 @@
+import './style.scss';
+
+import React from 'react';
+
+import LoaderSpinner from '../../shared/components/layout/LoaderSpinner/LoaderSpinner';
+import SvgDefguardLogoLogin from '../../shared/components/svg/DefguardLogoLogin';
+import { ColorsRGB } from '../../shared/constants';
+
+const LoaderPage: React.FC = () => {
+ return (
+
+ );
+};
+
+export default LoaderPage;
diff --git a/web/src/pages/loader/style.scss b/web/src/pages/loader/style.scss
new file mode 100644
index 0000000000..d4e2186a44
--- /dev/null
+++ b/web/src/pages/loader/style.scss
@@ -0,0 +1,22 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/bootstrap' as bs;
+
+.loader-page {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-content: center;
+ align-items: center;
+ justify-content: center;
+ background-color: v.$primary;
+ position: absolute;
+ inset: 0;
+ z-index: 10000000000000;
+ gap: 4rem;
+
+ .logo-container {
+ display: flex;
+ background-color: transparent;
+ }
+}
diff --git a/web/src/pages/oauth/OAuthPage.tsx b/web/src/pages/oauth/OAuthPage.tsx
new file mode 100644
index 0000000000..f4c9ba78da
--- /dev/null
+++ b/web/src/pages/oauth/OAuthPage.tsx
@@ -0,0 +1,136 @@
+import './style.scss';
+
+import { motion } from 'framer-motion';
+import React, { useEffect, useRef, useState } from 'react';
+import { useSearchParams } from 'react-router-dom';
+import { toast } from 'react-toastify';
+
+import Badge, {
+ BadgeStyleVariant,
+} from '../../shared/components/layout/Badge/Badge';
+import Button, {
+ ButtonSize,
+ ButtonStyleVariant,
+} from '../../shared/components/layout/Button/Button';
+import SvgDefguardLogoLogin from '../../shared/components/svg/DefguardLogoLogin';
+import SvgIconCheckmarkWhite from '../../shared/components/svg/IconCheckmarkWhite';
+import SvgIconDelete from '../../shared/components/svg/IconDelete';
+import ToastContent, {
+ ToastType,
+} from '../../shared/components/Toasts/ToastContent';
+import { standardVariants } from '../../shared/variants';
+
+const OAuthPage: React.FC = () => {
+ const [params] = useSearchParams();
+ const [scope, setScope] = useState('');
+ const [responseType, setResponseType] = useState('');
+ const [clientId, setClientId] = useState('');
+ const [codeChallenge, setCodeChallenge] = useState('');
+ const [codeChallengeMethod, setCodeChallengeMethod] = useState(
+ ''
+ );
+ const [redirectUri, setRedirectUri] = useState('');
+ const [state, setState] = useState('');
+ const inputRef = useRef(null);
+
+ useEffect(() => {
+ setScope(params.get('scope'));
+ setResponseType(params.get('response_type'));
+ setClientId(params.get('client_id'));
+ setCodeChallenge(params.get('code_challenge'));
+ setCodeChallengeMethod(params.get('code_challenge_method'));
+ setState(params.get('state'));
+ setRedirectUri(params.get('redirect_uri'));
+ }, [params]);
+
+ const getFormAction = (allow: boolean) => {
+ if (validateParams()) {
+ const res = params;
+ res.append('allow', String(allow));
+ return `/api/v1/oauth/authorize?${res.toString()}`;
+ }
+ return '';
+ };
+
+ const handleSubmit = (allow: boolean) => {
+ const formAction = getFormAction(allow);
+ if (inputRef.current) {
+ inputRef.current.formAction = formAction;
+ inputRef.current.click();
+ }
+ };
+
+ const validateParams = (): boolean => {
+ const check = [
+ scope,
+ responseType,
+ clientId,
+ codeChallenge,
+ codeChallengeMethod,
+ redirectUri,
+ state,
+ ];
+ for (const item in check) {
+ if (typeof item === 'undefined' || typeof item === null) {
+ toast();
+ return false;
+ }
+ }
+ return true;
+ };
+
+ return (
+
+
+
+
+
+
Confirm permissions
+
+ Grant permissions for client:
+ {clientId}
+
+
+
In scopes :
+ {scope && scope.length
+ ? scope
+ .split(' ')
+ .map((s) => (
+
+ ))
+ : null}
+
+
+ }
+ text="Accept"
+ onClick={() => handleSubmit(true)}
+ />
+ }
+ onClick={() => handleSubmit(false)}
+ />
+
+
+
+
+ );
+};
+
+export default OAuthPage;
diff --git a/web/src/pages/oauth/style.scss b/web/src/pages/oauth/style.scss
new file mode 100644
index 0000000000..d219ce6690
--- /dev/null
+++ b/web/src/pages/oauth/style.scss
@@ -0,0 +1,131 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/bootstrap' as bs;
+@use '@shared/scss/helpers/mixins' as mix;
+
+#oauth-consent {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ height: inherit;
+ width: 100%;
+
+ & > form {
+ display: none;
+ }
+
+ .defguard-logo {
+ @include bs.media-breakpoint-down(md) {
+ display: none;
+ }
+ @include bs.media-breakpoint-up(md) {
+ display: flex;
+ width: 100%;
+ height: 100%;
+ }
+
+ flex-direction: column;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ background-color: v.$primary;
+ }
+
+ & > .content {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ background-color: v.$white;
+ width: 100%;
+ height: 100%;
+ box-sizing: border-box;
+ @include bs.media-breakpoint-down(md) {
+ padding: 0 2rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ padding: 0 2rem;
+ }
+
+ h1 {
+ font-size: 4.1rem;
+ text-align: center;
+ @include bs.media-breakpoint-down(md) {
+ padding-bottom: 3rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ padding-bottom: 4rem;
+ }
+ }
+
+ & > p {
+ font-size: 1.5rem;
+ line-height: 1.4rem;
+ color: v.$gray-dark;
+ @include mix.text-weight(medium);
+
+ .client-id {
+ @include mix.text-weight(bold);
+ }
+ }
+
+ .scopes {
+ margin-top: 1rem;
+ margin-bottom: 4rem;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ flex-wrap: wrap;
+ column-gap: 1rem;
+ row-gap: 1.5rem;
+ width: 100%;
+
+ p {
+ font-size: 1.5rem;
+ line-height: 1.4rem;
+ color: v.$gray-dark;
+ @include mix.text-weight(medium);
+ }
+
+ .badge {
+ height: 2.5rem;
+
+ span {
+ font-size: 1.4rem;
+ }
+ }
+ }
+
+ .controls {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ width: 100%;
+ @include bs.media-breakpoint-down(md) {
+ flex-wrap: wrap;
+ row-gap: 1.5rem;
+
+ & > button {
+ width: 100%;
+ }
+ }
+ @include bs.media-breakpoint-up(md) {
+ column-gap: 2rem;
+
+ & > button {
+ width: clamp(80px, 141px, 141px);
+ }
+ }
+
+ & > button {
+ height: 40px;
+ }
+ }
+ }
+}
diff --git a/web/src/pages/openid/OpenidAllowPage.tsx b/web/src/pages/openid/OpenidAllowPage.tsx
new file mode 100644
index 0000000000..ceb3aa154d
--- /dev/null
+++ b/web/src/pages/openid/OpenidAllowPage.tsx
@@ -0,0 +1,182 @@
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
+import './style.scss';
+
+import { AxiosResponse } from 'axios';
+import { motion } from 'framer-motion';
+import { isUndefined } from 'lodash-es';
+import React, { useCallback, useEffect, useRef, useState } from 'react';
+import { useLocation, useSearchParams } from 'react-router-dom';
+import { Navigate } from 'react-router-dom';
+import { toast } from 'react-toastify';
+
+import Button, {
+ ButtonSize,
+ ButtonStyleVariant,
+} from '../../shared/components/layout/Button/Button';
+import SvgDefguadNavLogo from '../../shared/components/svg/DefguadNavLogo';
+import SvgIconCheckmarkWhite from '../../shared/components/svg/IconCheckmarkWhite';
+import SvgIconDelete from '../../shared/components/svg/IconDelete';
+import ToastContent, {
+ ToastType,
+} from '../../shared/components/Toasts/ToastContent';
+import { useAuthStore } from '../../shared/hooks/store/useAuthStore';
+import useApi from '../../shared/hooks/useApi';
+import { patternBaseUrl } from '../../shared/patterns';
+import { standardVariants } from '../../shared/variants';
+import LoaderPage from '../loader/LoaderPage';
+
+const OpenidAllowPage: React.FC = () => {
+ const [params] = useSearchParams();
+ const [scope, setScope] = useState('');
+ const [responseType, setResponseType] = useState('');
+ const [clientId, setClientId] = useState('');
+ const [nonce, setNonce] = useState('');
+ const [redirectUri, setRedirectUri] = useState('');
+ const [state, setState] = useState('');
+ const [isLoading, setLoading] = useState(true);
+ const inputRef = useRef(null);
+ const {
+ openid: { verifyOpenidClient },
+ } = useApi();
+ const location = useLocation();
+ const path = location.pathname + location.search;
+ const currentUser = useAuthStore((state) => state.user);
+
+ const validateParams = useCallback(() => {
+ const check = [scope, responseType, clientId, nonce, redirectUri, state];
+ for (const item in check) {
+ if (typeof item === 'undefined' || typeof item === null) {
+ toast(
+
+ );
+ return false;
+ }
+ }
+ return true;
+ }, [scope, responseType, clientId, nonce, redirectUri, state]);
+
+ const getFormAction = useCallback(
+ (allow: boolean) => {
+ if (validateParams()) {
+ const res = params;
+ res.append('allow', String(allow));
+ return `/api/v1/openid/authorize?${res.toString()}`;
+ }
+ return '';
+ },
+ [validateParams, params]
+ );
+
+ const handleSubmit = useCallback(
+ (allow: boolean) => {
+ const formAction = getFormAction(allow);
+ if (inputRef.current) {
+ inputRef.current.formAction = formAction;
+ inputRef.current.click();
+ }
+ },
+ [getFormAction]
+ );
+
+ useEffect(() => {
+ setScope(params.get('scope'));
+ setResponseType(params.get('response_type'));
+ setClientId(params.get('client_id'));
+ setNonce(params.get('nonce'));
+ setState(params.get('state'));
+ setRedirectUri(params.get('redirect_uri'));
+ }, [params]);
+
+ useEffect(() => {
+ if (validateParams()) {
+ const verifyOpenidClientRequest = {
+ scope: params.get('scope')!,
+ response_type: params.get('response_type')!,
+ client_id: params.get('client_id')!,
+ nonce: params.get('nonce')!,
+ redirect_uri: params.get('redirect_uri')!,
+ state: params.get('state')!,
+ allow: false,
+ };
+ verifyOpenidClient(verifyOpenidClientRequest)
+ .then((res: AxiosResponse) => {
+ if (res.status == 200) {
+ handleSubmit(true);
+ }
+ })
+ .catch(() => setLoading(false));
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [validateParams, handleSubmit, params]);
+
+ if (isUndefined(currentUser)) {
+ return ;
+ }
+
+ const scopes: Record = {
+ profile:
+ 'Know basic information from your profile like first name and last name.',
+ email: 'Know your email adres.',
+ phone: 'Know your phone number.',
+ };
+
+ const domain = params.get('redirect_uri')?.match(patternBaseUrl)![1];
+
+ return (
+ <>
+ {isLoading ? : null}
+
+
+
+
+
+
{domain} would like to:
+
+ {scope && scope.length
+ ? scope
+ .split(' ')
+ .filter((scope) => scope != 'openid' && scope.length > 3)
+ .map((s) => (
+
+ ))
+ : null}
+
+
+
+ By clicking accept button you're allowing {domain} to read
+ above information from your Defguard account.
+
+
+ }
+ text="Cancel"
+ onClick={() => handleSubmit(false)}
+ />
+ }
+ text="Accept"
+ onClick={() => handleSubmit(true)}
+ />
+
+
+
+
+
+ >
+ );
+};
+
+export default OpenidAllowPage;
diff --git a/web/src/pages/openid/OpenidClient/OpenidCLientDetails/OpenidClientDetails.tsx b/web/src/pages/openid/OpenidClient/OpenidCLientDetails/OpenidClientDetails.tsx
new file mode 100644
index 0000000000..b3b4d379f1
--- /dev/null
+++ b/web/src/pages/openid/OpenidClient/OpenidCLientDetails/OpenidClientDetails.tsx
@@ -0,0 +1,26 @@
+import './style.scss';
+
+import { HTMLMotionProps, motion } from 'framer-motion';
+import React from 'react';
+
+import { OpenidClient } from '../../../../shared/types';
+import OpenidClientInfo from './OpenidClientInfo';
+
+interface Props {
+ client: OpenidClient;
+}
+
+const OpenidClientDetail: React.FC & Props> = ({
+ client,
+ ...rest
+}) => {
+ return (
+
+
+
+
+
+ );
+};
+
+export default OpenidClientDetail;
diff --git a/web/src/pages/openid/OpenidClient/OpenidCLientDetails/OpenidClientInfo.tsx b/web/src/pages/openid/OpenidClient/OpenidCLientDetails/OpenidClientInfo.tsx
new file mode 100644
index 0000000000..cf1b578dee
--- /dev/null
+++ b/web/src/pages/openid/OpenidClient/OpenidCLientDetails/OpenidClientInfo.tsx
@@ -0,0 +1,97 @@
+import React, { useMemo } from 'react';
+import { useTranslation } from 'react-i18next';
+
+import { OpenidClient } from '../../../../shared/types';
+interface Props {
+ client: OpenidClient;
+}
+
+interface Detail {
+ label: string;
+ value?: string;
+ hidden?: boolean;
+ titleCase?: boolean;
+}
+
+interface DetailGroup {
+ title: string;
+ details: Detail[];
+ hidden?: boolean;
+ customDetails?: React.ReactNode;
+ adminOnly?: boolean;
+}
+
+const OpenidClientInfo: React.FC = ({ client }) => {
+ const { t } = useTranslation('en');
+ const details: DetailGroup[] = useMemo((): DetailGroup[] => {
+ let res: DetailGroup[] = [
+ {
+ title: 'App information',
+ details: [
+ {
+ label: t('openid.app.name'),
+ value: `${client.name}`,
+ titleCase: true,
+ },
+ {
+ label: t('openid.app.description'),
+ value: client.description,
+ },
+ {
+ label: t('openid.app.homeUrl'),
+ value: client.home_url,
+ },
+ {
+ label: t('openid.app.redirectUri'),
+ value: client.redirect_uri,
+ },
+ {
+ label: t('openid.app.clientId'),
+ value: client.client_id,
+ },
+ {
+ label: t('openid.app.clientSecret'),
+ value: client.client_secret,
+ },
+ ],
+ },
+ ];
+ res = res.filter((group) => !group.hidden);
+ res = res.filter(
+ (group) =>
+ group.details.filter((detail) => detail.value && !detail.hidden)
+ .length || group.customDetails
+ );
+ res = res.map((group) => ({
+ ...group,
+ details: group.details.filter((detail) => detail.value && !detail.hidden),
+ }));
+ return res;
+ }, [client, t]);
+
+ return (
+
+ {details.map((group) => {
+ return (
+
+
{group.title}
+
+ {typeof group.customDetails === 'undefined'
+ ? group.details.map((detail) => (
+
+
+
+ {detail.value}
+
+
+ ))
+ : group.customDetails}
+
+
+ );
+ })}
+
+ );
+};
+
+export default OpenidClientInfo;
diff --git a/web/src/pages/openid/OpenidClient/OpenidCLientDetails/style.scss b/web/src/pages/openid/OpenidClient/OpenidCLientDetails/style.scss
new file mode 100644
index 0000000000..184b4fcf2c
--- /dev/null
+++ b/web/src/pages/openid/OpenidClient/OpenidCLientDetails/style.scss
@@ -0,0 +1,165 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/bootstrap' as bs;
+@use '@shared/scss/helpers/mixins' as mix;
+
+#client-profile {
+ .client-details {
+ & > header {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 0 calc(2.1rem - 1.6rem) 0 calc(2rem - 1.5rem);
+
+ button {
+ height: 40px;
+ width: 40px;
+ margin-left: auto;
+
+ &.edit {
+ width: 125px;
+ }
+
+ &.confirm {
+ &.success {
+ width: 141px;
+ }
+ }
+ }
+ }
+
+ & > .container {
+ border-radius: 1.5rem;
+ background-color: v.$white;
+ box-sizing: border-box;
+ @include bs.media-breakpoint-down(md) {
+ padding: 2rem 1.5rem 3rem;
+ width: 100%;
+ }
+ @include bs.media-breakpoint-up(md) {
+ padding: 3rem 3rem 4rem;
+ width: 100%;
+ }
+
+ .group-title {
+ @include mix.poppins;
+
+ font-size: 1.5rem;
+ line-height: 2.3rem;
+ color: v.$text-main;
+ @include mix.text-weight(medium);
+
+ display: block;
+ width: 100%;
+ text-align: left;
+ @include bs.media-breakpoint-down(md) {
+ margin-bottom: 1.5rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ margin-bottom: 2.2rem;
+ }
+ }
+
+ & > .info {
+ display: flex;
+ flex-direction: column;
+ align-content: flex-start;
+ align-items: flex-start;
+ justify-content: flex-start;
+ flex: 1 1 auto;
+ @include bs.media-breakpoint-down(md) {
+ row-gap: 3rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ row-gap: 4rem;
+ }
+
+ & > .detail-group {
+ width: 100%;
+ height: auto;
+
+ & > .details {
+ display: flex;
+ flex-direction: row;
+ align-content: flex-start;
+ align-items: flex-start;
+ justify-content: flex-start;
+ flex-wrap: wrap;
+ width: 100%;
+ @include bs.media-breakpoint-down(md) {
+ row-gap: 2rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ row-gap: 2rem;
+ }
+
+ & > .detail {
+ height: auto;
+ display: flex;
+ flex-direction: column;
+ flex-wrap: wrap;
+ @include bs.media-breakpoint-down(md) {
+ width: 100%;
+ row-gap: 0.6rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ width: 50%;
+ row-gap: 0.5rem;
+ }
+
+ label {
+ font-size: 1.2rem;
+ color: v.$gray-dark;
+ line-height: 1.4rem;
+ @include bs.media-breakpoint-down(md) {
+ font-family: Roboto;
+ @include mix.text-weight(medium);
+ }
+ }
+
+ span {
+ font-size: 1.5rem;
+ color: v.$text-main;
+ line-height: 2rem;
+ display: block;
+ text-align: left;
+
+ &.title-case {
+ text-transform: capitalize;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ & > .settings {
+ .detail {
+ width: 50%;
+ height: auto;
+ display: flex;
+ flex-direction: column;
+ row-gap: 0.5rem;
+ flex-wrap: wrap;
+
+ label {
+ font-size: 1.2rem;
+ color: v.$gray-dark;
+ line-height: 1.4rem;
+ }
+
+ span {
+ font-size: 1.5rem;
+ color: v.$text-main;
+ line-height: 2rem;
+ display: block;
+ text-align: left;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/web/src/pages/openid/OpenidClient/OpenidClient.tsx b/web/src/pages/openid/OpenidClient/OpenidClient.tsx
new file mode 100644
index 0000000000..71fee9c882
--- /dev/null
+++ b/web/src/pages/openid/OpenidClient/OpenidClient.tsx
@@ -0,0 +1,306 @@
+import './style.scss';
+
+import { useQuery } from '@tanstack/react-query';
+import { AnimatePresence, motion, Variants } from 'framer-motion';
+import React, { useEffect, useMemo, useState } from 'react';
+import { useNavigate, useParams } from 'react-router-dom';
+import { Subject } from 'rxjs';
+import useBreakpoint from 'use-breakpoint';
+import shallow from 'zustand/shallow';
+
+import Button, {
+ ButtonSize,
+ ButtonStyleVariant,
+} from '../../../shared/components/layout/Button/Button';
+import IconButton from '../../../shared/components/layout/IconButton/IconButton';
+import OptionsPopover from '../../../shared/components/layout/OptionsPopover/OptionsPopover';
+import Tabs, { Tab } from '../../../shared/components/layout/Tabs/Tabs';
+import SvgIconCheckmarkWhite from '../../../shared/components/svg/IconCheckmarkWhite';
+import SvgIconEdit from '../../../shared/components/svg/IconEdit';
+import SvgIconEditAlt from '../../../shared/components/svg/IconEditAlt';
+import { deviceBreakpoints } from '../../../shared/constants';
+import { useModalStore } from '../../../shared/hooks/store/useModalStore';
+import { useNavigationStore } from '../../../shared/hooks/store/useNavigationStore';
+import { useOpenidClientStore } from '../../../shared/hooks/store/useOpenidClientStore';
+import useApi from '../../../shared/hooks/useApi';
+import { QueryKeys } from '../../../shared/queries';
+import { OpenidClient } from '../../../shared/types';
+import OpenidClientForm from '../OpenidClientEdit/OpenidClientForm/OpenidClientForm';
+import OpenidClientDetail from './OpenidCLientDetails/OpenidClientDetails';
+
+interface Props {
+ clientData?: OpenidClient;
+}
+
+const OpenIDClient: React.FC = ({ clientData }) => {
+ const navigate = useNavigate();
+ const { id } = useParams();
+ const [editMode, setEditMode] = useOpenidClientStore(
+ (state) => [state.editMode, state.setEditMode],
+ shallow
+ );
+ const setDeleteClientModal = useModalStore(
+ (state) => state.setDeleteOpenidClientModal,
+ shallow
+ );
+ const { breakpoint } = useBreakpoint(deviceBreakpoints);
+ const setNavigationOpenidClient = useNavigationStore(
+ (state) => state.setNavigationOpenidClient
+ );
+ const {
+ openid: { getOpenidClient },
+ } = useApi();
+
+ const [saveEditSubject, setSaveEditSubject] = useState<
+ Subject | undefined
+ >();
+
+ const { data } = useQuery(
+ [QueryKeys.FETCH_CLIENTS, id],
+ () => {
+ if (id) {
+ return getOpenidClient(id);
+ }
+ },
+ {
+ enabled: typeof id === 'string',
+ onSuccess: (data) => {
+ if (data) {
+ setNavigationOpenidClient(data);
+ }
+ },
+ }
+ );
+
+ const client = useMemo(() => (data ? data : clientData), [data, clientData]);
+
+ useEffect(() => {
+ if (!saveEditSubject) {
+ setSaveEditSubject(new Subject());
+ }
+ }, [saveEditSubject]);
+
+ const getTabs: Tab[] = useMemo(
+ (): Tab[] => [
+ {
+ title: 'App details',
+ node: client ? : null,
+ },
+ ],
+ [client]
+ );
+
+ const getHeaderText = useMemo(() => {
+ if (editMode) {
+ return 'Edit app';
+ }
+ if (client) {
+ return client.name;
+ }
+ return '';
+ }, [editMode, client]);
+
+ if (!client || !saveEditSubject) return null;
+
+ return (
+
+
+
+ {breakpoint === 'mobile' ? (
+ <>
+
+ {editMode ? (
+
+
+ ) : null}
+ {editMode ? null : (
+
setEditMode(true)}
+ >
+
+
+ )}
+
+ >
+ ) : null}
+ {breakpoint !== 'mobile' ? (
+ <>
+ {getHeaderText}
+ {!editMode ? (
+
+ setEditMode(true)}
+ size={ButtonSize.SMALL}
+ icon={}
+ text="Edit app"
+ />
+
+ ) : null}
+ {editMode ? (
+
+
+
+ setDeleteClientModal({
+ visible: true,
+ client: client,
+ onSuccess: () =>
+ navigate('/admin/openid', { replace: true }),
+ })
+ }
+ />
+
+
+ setEditMode(false)}
+ />
+ }
+ text="Save changes"
+ onClick={() => saveEditSubject.next({})}
+ />
+
+
+ ) : null}
+ >
+ ) : null}
+
+
+
+
+ {editMode ? (
+
+
+
+
+
+
+ ) : null}
+ {!editMode ? (
+
+ ) : null}
+
+
+
+ );
+};
+
+export default OpenIDClient;
+
+const standardVariants: Variants = {
+ hidden: {
+ opacity: 0,
+ transition: {
+ duration: 0.2,
+ },
+ },
+ show: {
+ opacity: 1,
+ transition: {
+ duration: 0.2,
+ },
+ },
+};
+
+interface AdminCommandsButtonProps {
+ client: OpenidClient;
+}
+
+const AdminCommandsButton: React.FC = ({
+ client,
+}) => {
+ const navigate = useNavigate();
+ const [menuOpen, setMenuOpen] = useState(false);
+ const [refElement, setRefElement] = useState(null);
+ const setDeleteClientModal = useModalStore(
+ (state) => state.setDeleteOpenidClientModal,
+ shallow
+ );
+
+ const getOptionsItems = useMemo(() => {
+ const res = [
+ {
+ setDeleteClientModal({
+ visible: true,
+ client: client,
+ onSuccess: () => navigate('/admin/openid', { replace: true }),
+ });
+ setMenuOpen(false);
+ }}
+ >
+ Delete app
+ ,
+ ];
+ return res;
+ }, [navigate, setDeleteClientModal, client]);
+
+ return (
+ <>
+
+
+
+ {refElement ? (
+
+ ) : null}
+ >
+ );
+};
diff --git a/web/src/pages/openid/OpenidClient/style.scss b/web/src/pages/openid/OpenidClient/style.scss
new file mode 100644
index 0000000000..bba8e0da96
--- /dev/null
+++ b/web/src/pages/openid/OpenidClient/style.scss
@@ -0,0 +1,180 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/bootstrap' as bs;
+@use '@shared/scss/helpers/mixins' as mix;
+
+#client-profile {
+ height: auto;
+ min-height: 100%;
+ width: 100%;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ @include bs.media-breakpoint-down(md) {
+ padding-top: 3rem;
+ height: inherit;
+ max-height: inherit;
+ }
+ @include bs.media-breakpoint-up(md) {
+ padding: 3.9rem 6rem 6rem;
+ }
+
+ & > header {
+ @include bs.media-breakpoint-down(md) {
+ padding-bottom: 3rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ margin-bottom: 4rem;
+ flex-wrap: wrap;
+ }
+
+ .mobile-controls {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ box-sizing: border-box;
+ padding: 0 2rem;
+ height: 40px;
+
+ .edit-controls {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 100%;
+ width: 100%;
+ column-gap: 1rem;
+
+ & > button {
+ width: 100%;
+ }
+
+ .admin-button {
+ margin-left: auto;
+ width: 40px;
+
+ &.active {
+ svg {
+ rect,
+ path {
+ fill: v.$primary;
+ }
+ }
+ }
+ }
+ }
+
+ .edit-button {
+ margin-left: auto;
+ }
+
+ &.admin {
+ .edit-controls {
+ grid-template-columns: 1fr 1fr 40px;
+ }
+ }
+ }
+
+ h1 {
+ font-size: 4.1rem;
+ line-height: 6.1rem;
+ font-family: Poppins;
+ color: v.$text-main;
+ @include mix.text-weight(semiBold);
+
+ margin-right: 3rem;
+ text-transform: capitalize;
+ }
+
+ .edit-button-container {
+ display: flex;
+ flex: 1;
+ justify-content: flex-end;
+ }
+
+ .controls {
+ display: flex;
+ flex-direction: row;
+ flex-grow: 1;
+ justify-content: space-between;
+
+ .edit-controls {
+ display: flex;
+ flex-direction: row;
+ column-gap: 1rem;
+ }
+
+ .admin-controls {
+ display: flex;
+ flex-direction: row;
+ column-gap: 1rem;
+ }
+ }
+ }
+
+ & > .activity-status {
+ margin-bottom: 2.4rem;
+ }
+
+ & > .content {
+ display: flex;
+ @include bs.media-breakpoint-down(md) {
+ flex-direction: column;
+ row-gap: 3rem;
+ box-sizing: border-box;
+ padding: 0 1.4rem 3rem 2rem;
+ max-height: calc(100% - 70px);
+ width: calc(100% - 6px);
+ margin-right: 6px;
+ overflow-y: auto;
+ }
+ @include bs.media-breakpoint-up(md) {
+ flex-direction: row;
+ justify-content: flex-start;
+ gap: 3rem;
+ flex-wrap: wrap;
+
+ .devices {
+ width: 369px;
+ }
+ }
+
+ h2 {
+ &.title {
+ @include bs.media-breakpoint-down(md) {
+ font-size: 1.5rem;
+ line-height: 2.1rem;
+ color: v.$text-main;
+ @include mix.text-weight(semiBold);
+
+ text-transform: uppercase;
+ width: auto;
+ }
+ }
+ }
+
+ .edit-client-data {
+ @include bs.media-breakpoint-down(md) {
+ width: 100%;
+ }
+ @include bs.media-breakpoint-up(md) {
+ width: clamp(400px, 768px, 100%);
+ }
+
+ & > .container-basic {
+ box-sizing: border-box;
+ padding: 3rem 3rem 4rem;
+ width: inherit;
+ }
+ }
+
+ .tabs-container {
+ height: auto;
+ width: clamp(400px, 768px, 100%);
+ }
+ }
+}
diff --git a/web/src/pages/openid/OpenidClientEdit/OpenidClientForm/OpenidClientForm.tsx b/web/src/pages/openid/OpenidClientEdit/OpenidClientForm/OpenidClientForm.tsx
new file mode 100644
index 0000000000..8404657a70
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientEdit/OpenidClientForm/OpenidClientForm.tsx
@@ -0,0 +1,162 @@
+import './style.scss';
+
+import { yupResolver } from '@hookform/resolvers/yup';
+import { useMutation, useQueryClient } from '@tanstack/react-query';
+import { pick as lodashPick } from 'lodash-es';
+import React, { useMemo, useRef } from 'react';
+import { useEffect } from 'react';
+import { SubmitHandler, useForm } from 'react-hook-form';
+import { useTranslation } from 'react-i18next';
+import { useNavigate } from 'react-router';
+import { toast } from 'react-toastify';
+import { Subject } from 'rxjs';
+import * as yup from 'yup';
+
+import { FormInput } from '../../../../shared/components/Form/FormInput/FormInput';
+import ToastContent, {
+ ToastType,
+} from '../../../../shared/components/Toasts/ToastContent';
+import useApi from '../../../../shared/hooks/useApi';
+import { patternValidUrl } from '../../../../shared/patterns';
+import { QueryKeys } from '../../../../shared/queries';
+import { OpenidClient } from '../../../../shared/types';
+
+interface Inputs {
+ name: string;
+ description: string;
+ redirect_uri: string;
+ home_url: string;
+}
+
+interface Props {
+ client: OpenidClient;
+ saveSubject: Subject;
+ navigateOnSuccess?: boolean;
+ onSuccessCallBack?: () => void;
+}
+
+const saveSuccessToast = (): void => {
+ toast.success(
+
+ );
+};
+
+const OpenidClientForm: React.FC = ({
+ client,
+ saveSubject,
+ navigateOnSuccess = true,
+ onSuccessCallBack,
+}) => {
+ const { t } = useTranslation('en');
+
+ const submitRef = useRef(null);
+
+ const defaultValues = useMemo(
+ () =>
+ lodashPick(client, ['name', 'home_url', 'description', 'redirect_uri']),
+ [client]
+ );
+
+ const schema = yup
+ .object({
+ name: yup
+ .string()
+ .required(t('form.errors.required'))
+ .max(16, t('form.errors.maximumLength', { length: 16 })),
+ home_url: yup
+ .string()
+ .required(t('form.errors.required'))
+ .matches(patternValidUrl, t('form.errors.invalidUrl')),
+ description: yup
+ .string()
+ .required(t('form.errors.required'))
+ .max(30, t('form.errors.minimumLength', { length: 30 })),
+ redirect_uri: yup
+ .string()
+ .required(t('form.errors.required'))
+ .matches(patternValidUrl, t('form.errors.invalidUrl')),
+ })
+ .required();
+
+ const {
+ openid: { editOpenidClient },
+ } = useApi();
+ const navigate = useNavigate();
+ const queryClient = useQueryClient();
+ const editOpenidClientMutation = useMutation(
+ (clientData: OpenidClient) => editOpenidClient(clientData),
+ {
+ onSuccess: () => {
+ queryClient.invalidateQueries([QueryKeys.FETCH_CLIENTS]);
+ saveSuccessToast();
+ if (navigateOnSuccess) {
+ navigate(-1);
+ } else {
+ if (onSuccessCallBack) {
+ onSuccessCallBack();
+ }
+ }
+ reset(defaultValues);
+ },
+ }
+ );
+ const { control, handleSubmit, reset } = useForm({
+ resolver: yupResolver(schema),
+ mode: 'all',
+ defaultValues: defaultValues,
+ });
+
+ const onSubmit: SubmitHandler = (data) => {
+ editOpenidClientMutation.mutate({ ...client, ...data });
+ };
+
+ useEffect(() => {
+ if (saveSubject) {
+ const sub = saveSubject.subscribe(() => {
+ submitRef.current?.click();
+ });
+ return () => sub.unsubscribe();
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [saveSubject]);
+
+ return (
+
+ );
+};
+
+export default OpenidClientForm;
diff --git a/web/src/pages/openid/OpenidClientEdit/OpenidClientForm/style.scss b/web/src/pages/openid/OpenidClientEdit/OpenidClientForm/style.scss
new file mode 100644
index 0000000000..d7d04e5dc8
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientEdit/OpenidClientForm/style.scss
@@ -0,0 +1,64 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/bootstrap' as bs;
+@use '@shared/scss/helpers/mixins' as mix;
+
+.client-edit-form {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-start;
+ align-content: flex-start;
+ align-items: flex-start;
+ align-self: stretch;
+ width: 100%;
+ flex: 1 1 auto;
+ flex-wrap: wrap;
+ @include bs.media-breakpoint-up(md) {
+ column-gap: 2rem;
+ }
+
+ input {
+ &[type='submit'] {
+ display: none;
+ }
+ }
+
+ & > .labeled-input {
+ @include bs.media-breakpoint-up(md) {
+ &.half {
+ width: calc(50% - 10px);
+ }
+
+ &.solo {
+ width: 100%;
+
+ .input-container {
+ width: calc(50% - 10px);
+ }
+ }
+ }
+ }
+
+ & > .input-group {
+ & > label {
+ @include mix.text-weight(medium);
+
+ color: v.$text-main;
+ @include bs.media-breakpoint-down(md) {
+ font-family: Roboto;
+ font-size: 1.2rem;
+ line-height: 1.4rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ font-family: Poppins;
+ font-size: 1.5rem;
+ line-height: 2.3rem;
+ }
+ }
+
+ & > .labeled-input {
+ &:nth-last-of-type(1) {
+ width: 150px;
+ }
+ }
+ }
+}
diff --git a/web/src/pages/openid/OpenidClientsList/AddOpenidClientModal/AddOpenidClientForm.tsx b/web/src/pages/openid/OpenidClientsList/AddOpenidClientModal/AddOpenidClientForm.tsx
new file mode 100644
index 0000000000..a76b91dc72
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/AddOpenidClientModal/AddOpenidClientForm.tsx
@@ -0,0 +1,124 @@
+import { yupResolver } from '@hookform/resolvers/yup';
+import { useMutation, useQueryClient } from '@tanstack/react-query';
+import React from 'react';
+import { useForm } from 'react-hook-form';
+import { SubmitHandler } from 'react-hook-form';
+import { useTranslation } from 'react-i18next';
+import { toast } from 'react-toastify';
+import * as yup from 'yup';
+
+import { FormInput } from '../../../../shared/components/Form/FormInput/FormInput';
+import Button, {
+ ButtonSize,
+ ButtonStyleVariant,
+} from '../../../../shared/components/layout/Button/Button';
+import ToastContent, {
+ ToastType,
+} from '../../../../shared/components/Toasts/ToastContent';
+import useApi from '../../../../shared/hooks/useApi';
+import { patternValidUrl } from '../../../../shared/patterns';
+import { QueryKeys } from '../../../../shared/queries';
+
+interface Inputs {
+ name: string;
+ description: string;
+ home_url: string;
+ redirect_uri: string;
+ enabled: string | number;
+}
+
+interface Props {
+ setIsOpen: (v: boolean) => void;
+}
+
+const AddOpenidClientForm: React.FC = ({ setIsOpen }) => {
+ const { t } = useTranslation('en');
+ const {
+ openid: { addOpenidClient },
+ } = useApi();
+
+ const schema = yup
+ .object({
+ name: yup
+ .string()
+ .required(t('form.errors.required'))
+ .max(16, t('form.errors.maximumLength', { length: 16 })),
+ home_url: yup
+ .string()
+ .required(t('form.errors.required'))
+ .matches(patternValidUrl, t('form.errors.invalidUrl')),
+ description: yup
+ .string()
+ .required(t('form.errors.required'))
+ .max(30, t('form.errors.minimumLength', { length: 30 })),
+ redirect_uri: yup
+ .string()
+ .required(t('form.errors.required'))
+ .matches(patternValidUrl, t('form.errors.invalidUrl')),
+ enabled: yup.boolean(),
+ })
+ .required();
+
+ const { handleSubmit, control } = useForm({
+ resolver: yupResolver(schema),
+ mode: 'all',
+ defaultValues: {
+ name: '',
+ home_url: '',
+ description: '',
+ redirect_uri: '',
+ enabled: 1,
+ },
+ });
+ const queryClient = useQueryClient();
+ const addOpenidClientMutation = useMutation(addOpenidClient, {
+ onSuccess: () => {
+ queryClient.invalidateQueries([QueryKeys.FETCH_CLIENTS]);
+ toast(
+
+ );
+ setIsOpen(false);
+ },
+ });
+
+ const onSubmit: SubmitHandler = (data) =>
+ addOpenidClientMutation.mutate(data);
+
+ return (
+
+ );
+};
+
+export default AddOpenidClientForm;
diff --git a/web/src/pages/openid/OpenidClientsList/AddOpenidClientModal/AddOpenidClientModal.tsx b/web/src/pages/openid/OpenidClientsList/AddOpenidClientModal/AddOpenidClientModal.tsx
new file mode 100644
index 0000000000..05310741de
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/AddOpenidClientModal/AddOpenidClientModal.tsx
@@ -0,0 +1,28 @@
+import './style.scss';
+
+import React from 'react';
+import shallow from 'zustand/shallow';
+
+import MiddleFormModal from '../../../../shared/components/layout/MiddleFormModal/MiddleFormModal';
+import { useModalStore } from '../../../../shared/hooks/store/useModalStore';
+import AddOpenidClientForm from './AddOpenidClientForm';
+
+const AddOpenidClientModal: React.FC = () => {
+ const [{ visible: isOpen }, setModalState] = useModalStore(
+ (state) => [state.addOpenidClientModal, state.setAddOpenidClientModal],
+ shallow
+ );
+
+ const setIsOpen = (v: boolean) => setModalState({ visible: v });
+
+ return (
+
+ );
+};
+
+export default AddOpenidClientModal;
diff --git a/web/src/pages/openid/OpenidClientsList/AddOpenidClientModal/style.scss b/web/src/pages/openid/OpenidClientsList/AddOpenidClientModal/style.scss
new file mode 100644
index 0000000000..4831487f6c
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/AddOpenidClientModal/style.scss
@@ -0,0 +1,98 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/mixins' as mix;
+@use '@shared/scss/helpers/bootstrap' as bs;
+
+.modal {
+ &.add-client {
+ padding: 0;
+
+ .modal-content {
+ @include bs.media-breakpoint-up(md) {
+ padding: 4rem 3rem;
+ border-radius: 0;
+ width: 430px;
+ }
+
+ & > header {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ @include bs.media-breakpoint-down(md) {
+ margin-bottom: 3rem;
+ height: 70px;
+ box-sizing: border-box;
+ border-bottom: 1px solid v.$gray-border;
+ padding: 0 2rem;
+
+ & > button {
+ margin-left: auto;
+ }
+ }
+ @include bs.media-breakpoint-up(md) {
+ margin-bottom: 4rem;
+ }
+
+ h3 {
+ @include mix.header;
+
+ font-size: 2rem;
+ line-height: 3rem;
+ color: v.$text-main;
+ }
+ }
+
+ form {
+ max-width: 100%;
+ align-items: flex-start;
+ width: 100%;
+ @include bs.media-breakpoint-down(md) {
+ row-gap: 1rem;
+ margin-bottom: 5rem;
+ box-sizing: border-box;
+ padding: 0 2.1rem 0 2rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ gap: 1.5rem;
+ margin-bottom: 4rem;
+ }
+
+ & > div {
+ width: 100%;
+ }
+
+ label {
+ font-family: Poppins;
+ font-size: 1.5rem;
+ line-height: 2.3rem;
+ @include mix.text-weight(medium);
+
+ margin-bottom: 2rem;
+ display: block;
+ color: v.$text-main;
+ }
+
+ .input-container {
+ margin-bottom: 6rem;
+ width: 100%;
+
+ input {
+ width: 100%;
+ }
+ }
+
+ button {
+ width: 100%;
+ }
+ }
+
+ .close {
+ margin-top: auto;
+ width: 100%;
+ height: 50px;
+ }
+ }
+ }
+}
diff --git a/web/src/pages/openid/OpenidClientsList/OpenidClientsList.tsx b/web/src/pages/openid/OpenidClientsList/OpenidClientsList.tsx
new file mode 100644
index 0000000000..154d6f84fd
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/OpenidClientsList.tsx
@@ -0,0 +1,210 @@
+import './style.scss';
+
+import { useQuery } from '@tanstack/react-query';
+import { motion } from 'framer-motion';
+import { orderBy } from 'lodash-es';
+import React, { useState } from 'react';
+import { useMemo } from 'react';
+import { useNavigate } from 'react-router';
+import Select from 'react-select';
+import { Column } from 'react-table';
+import useBreakpoint from 'use-breakpoint';
+
+import Button, {
+ ButtonSize,
+ ButtonStyleVariant,
+} from '../../../shared/components/layout/Button/Button';
+import { DeviceAvatar } from '../../../shared/components/layout/DeviceAvatar/DeviceAvatar';
+import NoData from '../../../shared/components/layout/NoData/NoData';
+import Search from '../../../shared/components/layout/Search/Search';
+import { IconDeactivated } from '../../../shared/components/svg';
+import SvgIconCheckmarkGreen from '../../../shared/components/svg/IconCheckmarkGreen';
+import SvgIconPlusWhite from '../../../shared/components/svg/IconPlusWhite';
+import { deviceBreakpoints } from '../../../shared/constants';
+import { useModalStore } from '../../../shared/hooks/store/useModalStore';
+import { useNavigationStore } from '../../../shared/hooks/store/useNavigationStore';
+import useApi from '../../../shared/hooks/useApi';
+import { QueryKeys } from '../../../shared/queries';
+import { OpenidClient } from '../../../shared/types';
+import { standardVariants } from '../../../shared/variants';
+import AddOpenidClientModal from './AddOpenidClientModal/AddOpenidClientModal';
+import OpenidClientsListMobile from './OpenidClientsListMobile/OpenidClientsListMobile';
+import OpenidClientsListTable from './OpenidClientsListTable/OpenidClientsListTable';
+
+const OpenidClientsList: React.FC = () => {
+ const { breakpoint } = useBreakpoint(deviceBreakpoints);
+ const navigate = useNavigate();
+ const {
+ openid: { getOpenidClients },
+ license: { getLicense },
+ } = useApi();
+
+ const { data: license } = useQuery([QueryKeys.FETCH_LICENSE], getLicense);
+
+ const hasAccess = useMemo(() => {
+ return license?.openid || license?.enterprise;
+ }, [license]);
+
+ const { data: clients, isLoading } = useQuery(
+ [QueryKeys.FETCH_CLIENTS],
+ getOpenidClients,
+ { enabled: hasAccess }
+ );
+ const [clientsSearchValue, setClientsSearchValue] = useState('');
+ const setNavigationOpenidClient = useNavigationStore(
+ (state) => state.setNavigationOpenidClient
+ );
+ const setOpenidClientAddModalState = useModalStore(
+ (state) => state.setAddOpenidClientModal
+ );
+ const navigateToClient = (client: OpenidClient) => {
+ setNavigationOpenidClient(client);
+ navigate(`${client.id}`);
+ };
+ const tableColumns: Column[] = useMemo(
+ () => [
+ {
+ Header: 'name',
+ accessor: 'name',
+ Cell: ({ row }) => {
+ return (
+
+
+
navigateToClient(row.original)}
+ >
+ {row.original.name}
+
+
+ );
+ },
+ },
+ {
+ Header: 'Description',
+ accessor: 'description',
+ Cell: (cell) => {cell.value}
,
+ },
+ {
+ Header: 'Status',
+ accessor: 'enabled',
+ Cell: (cell) => (
+
+ {cell.value ? : }
+
+ {cell.value ? 'Enabled' : 'Disabled'}
+
+
+ ),
+ },
+ ],
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ []
+ );
+
+ const filteredClients = useMemo(() => {
+ if (!clients || (clients && !clients.length)) {
+ return [];
+ }
+ let searched: OpenidClient[] = [];
+ if (clients) {
+ searched = clients.filter(
+ (client) =>
+ client.name
+ .toLocaleLowerCase()
+ .includes(clientsSearchValue.toLocaleLowerCase()) ||
+ client.description
+ ?.toLocaleLowerCase()
+ .includes(clientsSearchValue.toLocaleLowerCase())
+ );
+ }
+ if (searched.length) {
+ return orderBy(searched, ['name'], ['asc']);
+ }
+ return searched;
+ }, [clients, clientsSearchValue]);
+
+ return (
+
+
+ OpenID Apps
+ {breakpoint !== 'mobile' ? (
+ setClientsSearchValue(e.target.value)}
+ />
+ ) : null}
+
+
+
+
All apps
+
+ {clients && clients.length ? clients.length : 0}
+
+
+
+ {breakpoint !== 'mobile' ? (
+
+ ) : null}
+ setOpenidClientAddModalState({ visible: true })}
+ size={ButtonSize.SMALL}
+ styleVariant={ButtonStyleVariant.PRIMARY}
+ icon={}
+ text="Add new"
+ disabled={!hasAccess}
+ // disabled={license?.openid || license?.enterprise ? true : false}
+ />
+
+ {breakpoint === 'mobile' ? (
+ setClientsSearchValue(e.target.value)}
+ />
+ ) : null}
+
+
+ {!hasAccess ? (
+
+ ) : (
+ clients &&
+ clients.length &&
+ !isLoading &&
+ (breakpoint === 'mobile' ? (
+
+ ) : (
+
+ ))
+ )}
+
+
+ );
+};
+
+export default OpenidClientsList;
diff --git a/web/src/pages/openid/OpenidClientsList/OpenidClientsListMobile/OpenidClientListItem.tsx b/web/src/pages/openid/OpenidClientsList/OpenidClientsListMobile/OpenidClientListItem.tsx
new file mode 100644
index 0000000000..27764ded71
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/OpenidClientsListMobile/OpenidClientListItem.tsx
@@ -0,0 +1,72 @@
+import React, { useState } from 'react';
+import { useNavigate } from 'react-router-dom';
+
+//import SvgIconUserListExpanded from '../../../../shared/components/svg/IconNavUsers';
+import { DeviceAvatar } from '../../../../shared/components/layout/DeviceAvatar/DeviceAvatar';
+import Divider from '../../../../shared/components/layout/Divider/Divider';
+import SvgIconCheckmarkGreen from '../../../../shared/components/svg/IconCheckmarkGreen';
+import SvgIconDisconnected from '../../../../shared/components/svg/IconDisconnected';
+import SvgIconUserList from '../../../../shared/components/svg/IconUserList';
+import SvgIconUserListExpanded from '../../../../shared/components/svg/IconUserListExpanded';
+import { useNavigationStore } from '../../../../shared/hooks/store/useNavigationStore';
+import { OpenidClient } from '../../../../shared/types';
+import OpenidClientEditButton from '../OpenidClientsListTable/OpenidClientEditButton';
+
+interface Props {
+ client: OpenidClient;
+}
+
+const OpenidClientListItem: React.FC = ({ client }) => {
+ const [expanded, setExpanded] = useState(false);
+ const navigate = useNavigate();
+ const setNavigationOpenidClient = useNavigationStore(
+ (state) => state.setNavigationOpenidClient
+ );
+
+ const navigateToOpenidClient = () => {
+ setNavigationOpenidClient(client);
+ navigate(`/admin/openid/${client.id}`, { replace: true });
+ };
+
+ return (
+
+
+ setExpanded((state) => !state)}
+ >
+ {expanded ? : }
+
+ <>
+
+
+ {client.name}
+
+ >
+
+
+ {expanded ? (
+ <>
+
+
+
+
+
+ {client.enabled ? (
+
+ ) : (
+
+ )}
+
{client.enabled ? 'Enabled' : 'Disabled'}
+
+
+
{client.description}
+
+
+ >
+ ) : null}
+
+ );
+};
+
+export default OpenidClientListItem;
diff --git a/web/src/pages/openid/OpenidClientsList/OpenidClientsListMobile/OpenidClientsListMobile.tsx b/web/src/pages/openid/OpenidClientsList/OpenidClientsListMobile/OpenidClientsListMobile.tsx
new file mode 100644
index 0000000000..7313823f37
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/OpenidClientsListMobile/OpenidClientsListMobile.tsx
@@ -0,0 +1,35 @@
+import './style.scss';
+
+import { motion } from 'framer-motion';
+import React from 'react';
+
+import NoData from '../../../../shared/components/layout/NoData/NoData';
+import { OpenidClient } from '../../../../shared/types';
+import { tableRowVariants } from '../../../../shared/variants';
+import OpenidClientListItem from './OpenidClientListItem';
+
+interface Props {
+ clients: OpenidClient[];
+}
+
+const OpenidClientListMobile: React.FC = ({ clients }) => {
+ if (clients.length === 0) return ;
+
+ return (
+
+ {clients.map((client, index) => (
+
+
+
+ ))}
+
+ );
+};
+
+export default OpenidClientListMobile;
diff --git a/web/src/pages/openid/OpenidClientsList/OpenidClientsListMobile/style.scss b/web/src/pages/openid/OpenidClientsList/OpenidClientsListMobile/style.scss
new file mode 100644
index 0000000000..fa34f7fac3
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/OpenidClientsListMobile/style.scss
@@ -0,0 +1,146 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/bootstrap' as bs;
+@use '@shared/scss/helpers/mixins' as mix;
+
+.clients-list-mobile {
+ max-height: calc(100% - 125px);
+ overflow-y: auto;
+ overflow-x: hidden;
+ width: calc(100% - 0.8rem);
+ margin-right: 0.8rem;
+ box-sizing: border-box;
+ padding-left: 2rem;
+ padding-right: 0.8rem;
+ padding-bottom: 2rem;
+ list-style: none;
+
+ & > li {
+ position: relative;
+
+ &:not(:last-of-type) {
+ margin-bottom: 1rem;
+ }
+
+ .client-container {
+ border-radius: 1.5rem;
+ background-color: v.$white;
+ width: calc(100% - 9px);
+ margin-right: 9px;
+
+ .top {
+ height: 60px;
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ box-sizing: border-box;
+ padding: 0 1rem;
+
+ .collapse-icon-container {
+ @include mix.icon-container;
+
+ cursor: pointer;
+ }
+
+ .name {
+ margin-left: 1rem;
+ @include mix.text-weight(medium);
+
+ color: v.$text-main;
+ font-size: 1.3rem;
+ line-height: 1.5rem;
+ text-transform: capitalize;
+ cursor: pointer;
+ client-select: none;
+ }
+
+ & > button {
+ margin-left: auto;
+ }
+
+ .client-edit {
+ @include mix.icon-container;
+
+ border: none;
+ background-color: transparent;
+ }
+
+ .avatar-icon {
+ width: 40px;
+ height: 40px;
+ background-color: v.$light-gray-bg;
+ border-radius: 10px;
+ margin-left: 1rem;
+
+ &.active {
+ background-color: v.$primary;
+
+ svg {
+ rect {
+ fill: v.$white;
+ }
+
+ path {
+ fill: v.$white;
+ }
+ }
+ }
+ }
+ }
+
+ .client-details-collapse {
+ box-sizing: border-box;
+ width: 100%;
+ height: auto;
+ padding: 1.7rem 1rem;
+
+ & > div {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: flex-start;
+ justify-content: center;
+ row-gap: 0.6rem;
+
+ & > label {
+ font-family: Roboto;
+ font-size: 1.2rem;
+ @include mix.text-weight(medium);
+
+ color: v.$gray-light;
+ line-height: 1.4rem;
+ }
+
+ & > p {
+ font-family: Roboto;
+ font-size: 1.5rem;
+ line-height: 1.8rem;
+ color: v.$text-main;
+ @include mix.text-weight(medium);
+ }
+
+ .status {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 0.8rem;
+
+ p {
+ font-size: 1.5rem;
+ line-height: 1.8rem;
+ @include mix.text-weight(medium);
+
+ &.active {
+ color: v.$text-main;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/web/src/pages/openid/OpenidClientsList/OpenidClientsListTable/OpenidClientEditButton.tsx b/web/src/pages/openid/OpenidClientsList/OpenidClientsListTable/OpenidClientEditButton.tsx
new file mode 100644
index 0000000000..ab425951ad
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/OpenidClientsListTable/OpenidClientEditButton.tsx
@@ -0,0 +1,195 @@
+import { useMutation, useQueryClient } from '@tanstack/react-query';
+import React, { useState } from 'react';
+import { useNavigate } from 'react-router';
+import { toast } from 'react-toastify';
+import useBreakpoint from 'use-breakpoint';
+import shallow from 'zustand/shallow';
+
+import Button, {
+ ButtonSize,
+ ButtonStyleVariant,
+} from '../../../../shared/components/layout/Button/Button';
+import OptionsPopover from '../../../../shared/components/layout/OptionsPopover/OptionsPopover';
+import SvgIconDelete from '../../../../shared/components/svg/IconDelete';
+import SvgIconEditAlt from '../../../../shared/components/svg/IconEditAlt';
+import ToastContent, {
+ ToastType,
+} from '../../../../shared/components/Toasts/ToastContent';
+import { deviceBreakpoints } from '../../../../shared/constants';
+import { useModalStore } from '../../../../shared/hooks/store/useModalStore';
+import { useOpenidClientStore } from '../../../../shared/hooks/store/useOpenidClientStore';
+import useApi from '../../../../shared/hooks/useApi';
+import { QueryKeys } from '../../../../shared/queries';
+import { OpenidClient } from '../../../../shared/types';
+
+interface Props {
+ client: OpenidClient;
+}
+
+const OpenidClientEditButton: React.FC = ({ client }) => {
+ const [isEditOpen, setEditOpen] = useState(false);
+ const { breakpoint } = useBreakpoint(deviceBreakpoints);
+ const navigate = useNavigate();
+ const setOpenidClientViewEditMode = useOpenidClientStore(
+ (state) => state.setEditMode
+ );
+ const setDeleteOpenidClientModal = useModalStore(
+ (state) => state.setDeleteOpenidClientModal,
+ shallow
+ );
+ const [isDeleteOpen, setDeleteOpen] = useState(false);
+ const [referenceElement, setReferenceElement] =
+ useState(null);
+ const {
+ openid: { deleteOpenidClient, changeOpenidClientState },
+ } = useApi();
+ const queryClient = useQueryClient();
+ const deleteClientMutation = useMutation(
+ (client: OpenidClient) => deleteOpenidClient(client.id),
+ {
+ onSuccess: (_, variables) => {
+ toast(
+
+ );
+ setEditOpen(false);
+ setDeleteOpen(false);
+ queryClient.invalidateQueries([QueryKeys.FETCH_CLIENTS]);
+ },
+ onError: () => {
+ setDeleteOpen(false);
+ },
+ }
+ );
+ const handleDeleteClick = () => {
+ if (breakpoint !== 'mobile') {
+ setEditOpen(false);
+ setDeleteOpen(true);
+ } else {
+ setEditOpen(false);
+ setDeleteOpenidClientModal({
+ visible: true,
+ client: client,
+ onSuccess: onDeleteClientSuccess,
+ });
+ }
+ };
+ const onDeleteClientSuccess = () => {
+ queryClient.invalidateQueries([QueryKeys.FETCH_CLIENTS]);
+ };
+
+ const [isEnableOpen, setEnableModalOpen] = useState(false);
+
+ const changeClientStateMutation = useMutation(
+ (client: OpenidClient) =>
+ changeOpenidClientState({ id: client.id, enabled: !client.enabled }),
+ {
+ onSuccess: () => {
+ setEnableModalOpen(false);
+ queryClient.invalidateQueries([QueryKeys.FETCH_CLIENTS]);
+ },
+ onError: () => {
+ setEnableModalOpen(false);
+ },
+ }
+ );
+ const setEnableOpenidClientModal = useModalStore(
+ (state) => state.setEnableOpenidClientModal,
+ shallow
+ );
+ const handleEnableClick = () => {
+ if (breakpoint !== 'mobile') {
+ setEditOpen(false);
+ setEnableModalOpen(true);
+ } else {
+ setEditOpen(false);
+ setEnableOpenidClientModal({
+ visible: true,
+ client: client,
+ onSuccess: onDeleteClientSuccess,
+ });
+ }
+ };
+ return (
+ <>
+ setEditOpen(true)}
+ className="client-edit"
+ >
+
+
+ {referenceElement ? (
+ {
+ setOpenidClientViewEditMode(true);
+ navigate(`${client.id}`);
+ }}
+ >
+ Edit
+ ,
+
+ {client.enabled ? 'Disable' : 'Enable'}
+ ,
+
+ Delete
+ ,
+ ]}
+ referenceElement={referenceElement}
+ isOpen={isEditOpen}
+ setIsOpen={setEditOpen}
+ popperOptions={{ placement: 'left' }}
+ />
+ ) : null}
+ {isDeleteOpen && breakpoint !== 'mobile' ? (
+
+ setDeleteOpen(false)}
+ text="Cancel"
+ />
+ }
+ onClick={() => deleteClientMutation.mutate(client)}
+ />
+
+ ) : null}
+ {isEnableOpen && breakpoint !== 'mobile' ? (
+
+ setEnableModalOpen(false)}
+ text="Cancel"
+ />
+ changeClientStateMutation.mutate(client)}
+ />
+
+ ) : null}
+ >
+ );
+};
+
+export default OpenidClientEditButton;
diff --git a/web/src/pages/openid/OpenidClientsList/OpenidClientsListTable/OpenidClientsListTable.tsx b/web/src/pages/openid/OpenidClientsList/OpenidClientsListTable/OpenidClientsListTable.tsx
new file mode 100644
index 0000000000..54670e3d2a
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/OpenidClientsListTable/OpenidClientsListTable.tsx
@@ -0,0 +1,98 @@
+import './style.scss';
+
+import { motion, Variants } from 'framer-motion';
+import React, { ComponentPropsWithoutRef } from 'react';
+import { Column, useTable } from 'react-table';
+
+import SvgIconUserListHover from '../../../../shared/components/svg/IconUserListHover';
+import { OpenidClient } from '../../../../shared/types';
+import OpenidClientEditButton from './OpenidClientEditButton';
+
+interface Props {
+ columns: Column[];
+ data: OpenidClient[];
+}
+
+const tableBodyVariants: Variants = {
+ hidden: {
+ opacity: 0,
+ },
+ idle: {
+ opacity: 1,
+ },
+};
+
+const tableRowVariants: Variants = {
+ idle: () => ({
+ boxShadow: '5px 10px 20px rgba(0, 0, 0, 0)',
+ }),
+ hover: {
+ boxShadow: '5px 10px 20px rgba(0, 0, 0, 0.1)',
+ },
+};
+
+const rowIconVariants: Variants = {
+ idle: {
+ opacity: 0,
+ },
+ hover: {
+ opacity: 1,
+ },
+};
+
+const OpenidClientsListTable: React.FC<
+ ComponentPropsWithoutRef<'table'> & Props
+> = ({ data, columns, ...rest }) => {
+ const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =
+ useTable({ columns, data });
+ return (
+
+
+ {headerGroups.map((headerGroup) => (
+ // eslint-disable-next-line react/jsx-key
+
+ {headerGroup.headers.map((column) => (
+ // eslint-disable-next-line react/jsx-key
+ | {column.render('Header')} |
+ ))}
+ Actions |
+
+ ))}
+
+
+ {rows.map((row) => {
+ prepareRow(row);
+ return (
+ // eslint-disable-next-line react/jsx-key
+
+
+
+
+ {row.cells.map((cell) => (
+ // eslint-disable-next-line react/jsx-key
+ {cell.render('Cell')} |
+ ))}
+
+
+ |
+
+ );
+ })}
+
+
+ );
+};
+
+export default OpenidClientsListTable;
diff --git a/web/src/pages/openid/OpenidClientsList/OpenidClientsListTable/style.scss b/web/src/pages/openid/OpenidClientsList/OpenidClientsListTable/style.scss
new file mode 100644
index 0000000000..cc8aebcae0
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/OpenidClientsListTable/style.scss
@@ -0,0 +1,293 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/bootstrap' as bs;
+@use '@shared/scss/helpers/mixins' as mix;
+
+@mixin tableSpacing($span: 0, $body: false) {
+ &:nth-of-type(#{1 + $span}) {
+ width: 25%;
+ }
+ &:nth-of-type(#{2 + $span}) {
+ width: 25%;
+ opacity: 1;
+ }
+ &:nth-of-type(#{3 + $span}) {
+ width: 25%;
+ opacity: 1;
+ }
+ &:nth-of-type(#{4 + $span}) {
+ width: 25%;
+ opacity: 1;
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ justify-content: flex-end;
+ }
+}
+
+#clients-list {
+ .clients-table {
+ height: auto;
+ max-height: calc(100% - 67px - 147px - 2rem);
+ margin-right: 2.4rem;
+ margin-bottom: 2rem;
+ width: 100%;
+ max-width: calc(100% - 2.4rem);
+ overflow: auto;
+ position: relative;
+
+ .clients-list-table {
+ width: 100%;
+
+ thead {
+ tr {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ box-sizing: border-box;
+ margin-bottom: 1rem;
+ padding-left: calc(6rem + 5.2rem);
+ padding-right: calc(3rem + 4rem);
+
+ th {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ font-size: 1.2rem;
+ line-height: 1.4rem;
+ color: v.$gray-light;
+ @include mix.text-weight(medium);
+ @include tableSpacing;
+
+ text-transform: capitalize;
+ }
+ }
+ }
+
+ tbody {
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ padding-bottom: 2rem;
+ padding-left: 6rem;
+ padding-right: 3rem;
+ box-sizing: border-box;
+ min-width: 850px;
+
+ tr {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ align-content: center;
+ justify-content: flex-start;
+ align-items: center;
+ padding-left: 5.2rem;
+ padding-right: 4rem;
+ height: 60px;
+ background-color: v.$white;
+ border-radius: 1.5rem;
+ box-shadow: 5px 5px 15px #00000005;
+
+ .row-icon {
+ position: absolute;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ height: inherit;
+ width: auto;
+ left: 1.5rem;
+ cursor: pointer;
+
+ svg {
+ opacity: 0.4;
+ }
+ }
+
+ .row-edit {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-end;
+
+ & > button {
+ padding: 0;
+ }
+
+ &:hover {
+ svg {
+ cursor: pointer;
+
+ react,
+ path {
+ fill: v.$primary;
+ }
+ }
+ }
+
+ .delete-client-overlay {
+ position: absolute;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-end;
+ gap: 1rem;
+ background-color: v.$white;
+ width: 75%;
+ height: 100%;
+ right: 0;
+ top: 0;
+ border-top-right-radius: 1.5rem;
+ border-bottom-right-radius: 1.5rem;
+ box-sizing: border-box;
+ padding: 0 1rem;
+
+ & > button {
+ min-width: 128px;
+
+ svg {
+ rect,
+ path {
+ fill: v.$white;
+ stroke-width: 0;
+ }
+
+ g {
+ stroke: v.$white;
+ stroke-width: 2px;
+ }
+ }
+ }
+ }
+ }
+
+ td {
+ height: inherit;
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ @include tableSpacing(1, true);
+
+ button {
+ &.client-edit {
+ background-color: transparent;
+ border: 0 solid transparent;
+
+ &.active {
+ svg {
+ path {
+ fill: v.$primary;
+ }
+ }
+ }
+ }
+ }
+
+ & > p,
+ & > span {
+ color: v.$text-main;
+ font-family: Roboto;
+ font-size: 1.5rem;
+ line-height: 1.8rem;
+ @include mix.text-weight(medium);
+ }
+
+ .client-name {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ gap: 1rem;
+ color: v.$text-main;
+ font-family: Roboto;
+ font-size: 1.5rem;
+ line-height: 1.8rem;
+ @include mix.text-weight(medium);
+
+ text-transform: capitalize;
+
+ .avatar-icon {
+ width: 40px;
+ height: 40px;
+ background-color: v.$light-gray-bg;
+ border-radius: 10px;
+
+ &.active {
+ background-color: v.$primary;
+
+ svg {
+ rect {
+ fill: v.$white;
+ }
+
+ path {
+ fill: v.$white;
+ }
+ }
+ }
+ }
+ }
+
+ .actions {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ gap: 0.8rem;
+
+ .avatar-icon {
+ background-color: v.$bg-light;
+ border-radius: 1rem;
+
+ span {
+ height: auto;
+ width: auto;
+ color: v.$gray-light;
+ font-size: 1.2rem;
+ line-height: 1.4rem;
+ font-family: Roboto;
+ @include mix.text-weight(medium);
+ }
+ }
+ }
+
+ .status {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ font-size: 1.5rem;
+ line-height: 1.8rem;
+ color: v.$text-main;
+ font-family: Roboto;
+ @include mix.text-weight(medium);
+
+ &.never {
+ color: v.$gray-light;
+ }
+ }
+
+ &:nth-of-type(2) {
+ p {
+ cursor: pointer;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/web/src/pages/openid/OpenidClientsList/style.scss b/web/src/pages/openid/OpenidClientsList/style.scss
new file mode 100644
index 0000000000..dd36bb7fc6
--- /dev/null
+++ b/web/src/pages/openid/OpenidClientsList/style.scss
@@ -0,0 +1,188 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/bootstrap' as bs;
+@use '@shared/scss/helpers/mixins' as mix;
+
+#clients-list {
+ position: relative;
+ overflow: hidden;
+ height: inherit;
+ @include bs.media-breakpoint-down(md) {
+ overflow-y: auto;
+ max-height: inherit;
+ }
+ @include bs.media-breakpoint-up(md) {
+ align-self: stretch;
+ width: 100%;
+ box-sizing: border-box;
+ client-select: none;
+ }
+
+ header {
+ display: flex;
+ @include bs.media-breakpoint-down(md) {
+ flex-direction: column;
+ }
+ @include bs.media-breakpoint-up(md) {
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ width: 100%;
+ gap: 3rem;
+ padding: 4rem 6rem 4.6rem;
+ box-sizing: border-box;
+ }
+
+ h1 {
+ @include bs.media-breakpoint-down(md) {
+ display: none;
+ }
+ @include bs.media-breakpoint-up(md) {
+ font-size: 4.1rem;
+ line-height: 6.1rem;
+ font-family: Poppins;
+ color: v.$text-main;
+ @include mix.text-weight(semiBold);
+ }
+ }
+
+ .search {
+ width: auto;
+ min-width: 36rem;
+
+ input {
+ &:disabled {
+ cursor: not-allowed;
+ }
+ }
+ }
+ }
+
+ .actions {
+ width: 100%;
+ height: auto;
+ display: flex;
+ @include bs.media-breakpoint-down(md) {
+ flex-direction: row;
+ flex-wrap: wrap;
+ row-gap: 1.5rem;
+ margin: 1.5rem 0;
+ box-sizing: border-box;
+ padding: 0 2rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ padding: 0 6rem 2.7rem;
+ box-sizing: border-box;
+ }
+
+ .clients-count {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ width: auto;
+ height: auto;
+ gap: 1rem;
+
+ span {
+ @include mix.text-weight(semiBold);
+ @include mix.poppins;
+
+ color: v.$text-main;
+ @include bs.media-breakpoint-down(md) {
+ font-size: 1.5rem;
+ line-height: 2.1rem;
+ text-transform: uppercase;
+ }
+ @include bs.media-breakpoint-up(md) {
+ font-size: 2rem;
+ line-height: 3rem;
+ }
+ }
+
+ .count {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ width: 30px;
+ height: 30px;
+ background-color: v.$gray-light;
+ border-radius: 1rem;
+
+ span {
+ @include mix.text-weight(semiBold);
+ @include mix.poppins;
+
+ color: v.$white;
+ font-size: 1.2rem;
+ text-align: center;
+ line-height: 1.8rem;
+ }
+ }
+ }
+
+ .table-controls {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: center;
+ margin-left: auto;
+
+ & > .add-client {
+ min-width: 110px;
+ width: auto;
+ }
+ @include bs.media-breakpoint-down(md) {
+ column-gap: 1rem;
+
+ & > button {
+ width: 40px;
+ height: 40px;
+
+ span {
+ display: none;
+ }
+ }
+
+ & > .add-client {
+ min-width: 0;
+ padding: 0;
+ width: 40px;
+ height: 40px;
+ }
+ }
+ @include bs.media-breakpoint-up(md) {
+ gap: 2rem;
+
+ & > div {
+ width: 180px;
+ }
+
+ .btn {
+ min-width: 110px;
+ }
+ }
+ }
+
+ .icon-plus-white_svg__a,
+ .icon-plus-white_svg__c {
+ fill: white;
+ }
+
+ .clients-search {
+ width: 100%;
+
+ &:disabled {
+ cursor: not-allowed;
+ }
+ }
+ }
+}
diff --git a/web/src/pages/openid/OpenidPage.tsx b/web/src/pages/openid/OpenidPage.tsx
new file mode 100644
index 0000000000..91c85d269c
--- /dev/null
+++ b/web/src/pages/openid/OpenidPage.tsx
@@ -0,0 +1,35 @@
+import './style.scss';
+
+import React from 'react';
+import { Navigate, Route, Routes } from 'react-router-dom';
+
+import PageContainer from '../../shared/components/layout/PageContainer/PageContainer';
+import LoaderPage from '../loader/LoaderPage';
+import DeleteClientModal from './modals/DeleteClientModal/DeleteClientModal';
+import EnableClientModal from './modals/EnableClientModal/EnableClientModal';
+import OpenidClientsList from './OpenidClientsList/OpenidClientsList';
+
+const OpenidClient = React.lazy(() => import('./OpenidClient/OpenidClient'));
+
+const OpenidPage: React.FC = () => {
+ return (
+
+
+ } />
+ }>
+
+
+ }
+ />
+ } />
+
+
+
+
+ );
+};
+
+export default OpenidPage;
diff --git a/web/src/pages/openid/modals/DeleteClientModal/DeleteClientModal.tsx b/web/src/pages/openid/modals/DeleteClientModal/DeleteClientModal.tsx
new file mode 100644
index 0000000000..364266314e
--- /dev/null
+++ b/web/src/pages/openid/modals/DeleteClientModal/DeleteClientModal.tsx
@@ -0,0 +1,73 @@
+import { useMutation, useQueryClient } from '@tanstack/react-query';
+import React from 'react';
+import { toast } from 'react-toastify';
+import shallow from 'zustand/shallow';
+
+import ConfirmModal, {
+ ConfirmModalType,
+} from '../../../../shared/components/layout/ConfirmModal/ConfirmModal';
+import ToastContent, {
+ ToastType,
+} from '../../../../shared/components/Toasts/ToastContent';
+import { useModalStore } from '../../../../shared/hooks/store/useModalStore';
+import useApi from '../../../../shared/hooks/useApi';
+import { QueryKeys } from '../../../../shared/queries';
+import { OpenidClient } from '../../../../shared/types';
+
+const DeleteClientModal: React.FC = () => {
+ const {
+ openid: { deleteOpenidClient },
+ } = useApi();
+
+ const queryClient = useQueryClient();
+
+ const [modalState, setModalState] = useModalStore(
+ (state) => [
+ state.deleteOpenidClientModal,
+ state.setDeleteOpenidClientModal,
+ ],
+ shallow
+ );
+
+ const { mutate, isLoading } = useMutation(
+ (client: OpenidClient) => deleteOpenidClient(client.id),
+ {
+ onSuccess: (_, variables) => {
+ toast(
+
+ );
+ queryClient.invalidateQueries([QueryKeys.FETCH_CLIENTS]);
+ if (modalState.onSuccess) {
+ modalState.onSuccess();
+ }
+ setModalState({ visible: false });
+ },
+ onError: () => {
+ setModalState({ visible: false });
+ },
+ }
+ );
+
+ return (
+ setModalState({ visible: v })}
+ type={ConfirmModalType.WARNING}
+ title="Delete app"
+ subTitle={`Do you want to delete ${modalState.client?.name} app permanently?`}
+ cancelText="Cancel"
+ submitText="Delete app"
+ onSubmit={() => {
+ if (modalState.client) {
+ mutate(modalState.client);
+ }
+ }}
+ loading={isLoading}
+ />
+ );
+};
+
+export default DeleteClientModal;
diff --git a/web/src/pages/openid/modals/EnableClientModal/EnableClientModal.tsx b/web/src/pages/openid/modals/EnableClientModal/EnableClientModal.tsx
new file mode 100644
index 0000000000..60c296b054
--- /dev/null
+++ b/web/src/pages/openid/modals/EnableClientModal/EnableClientModal.tsx
@@ -0,0 +1,80 @@
+import { useMutation, useQueryClient } from '@tanstack/react-query';
+import React from 'react';
+import { toast } from 'react-toastify';
+import shallow from 'zustand/shallow';
+
+import ConfirmModal, {
+ ConfirmModalType,
+} from '../../../../shared/components/layout/ConfirmModal/ConfirmModal';
+import ToastContent, {
+ ToastType,
+} from '../../../../shared/components/Toasts/ToastContent';
+import { useModalStore } from '../../../../shared/hooks/store/useModalStore';
+import useApi from '../../../../shared/hooks/useApi';
+import { QueryKeys } from '../../../../shared/queries';
+import { OpenidClient } from '../../../../shared/types';
+
+const EnableClientModal: React.FC = () => {
+ const {
+ openid: { changeOpenidClientState },
+ } = useApi();
+
+ const queryClient = useQueryClient();
+
+ const [modalState, setModalState] = useModalStore(
+ (state) => [
+ state.enableOpenidClientModal,
+ state.setEnableOpenidClientModal,
+ ],
+ shallow
+ );
+
+ const { mutate, isLoading } = useMutation(
+ (client: OpenidClient) =>
+ changeOpenidClientState({ id: client.id, enabled: !client.enabled }),
+ {
+ onSuccess: (_, variables) => {
+ toast(
+
+ );
+ queryClient.invalidateQueries([QueryKeys.FETCH_CLIENTS]);
+ if (modalState.onSuccess) {
+ modalState.onSuccess();
+ }
+ setModalState({ visible: false });
+ },
+ onError: () => {
+ setModalState({ visible: false });
+ },
+ }
+ );
+
+ return (
+ setModalState({ visible: v })}
+ type={
+ modalState.client?.enabled
+ ? ConfirmModalType.WARNING
+ : ConfirmModalType.NORMAL
+ }
+ title={modalState.client?.enabled ? 'Disable app' : 'Enable app'}
+ subTitle={`Do you want to ${
+ modalState.client?.enabled ? 'disable' : 'enable'
+ } ${modalState.client?.name} app?`}
+ cancelText="Cancel"
+ submitText={modalState.client?.enabled ? 'Disable ' : 'Enable '}
+ onSubmit={() => {
+ if (modalState.client) {
+ mutate(modalState.client);
+ }
+ }}
+ loading={isLoading}
+ />
+ );
+};
+
+export default EnableClientModal;
diff --git a/web/src/pages/openid/style.scss b/web/src/pages/openid/style.scss
new file mode 100644
index 0000000000..2787460de0
--- /dev/null
+++ b/web/src/pages/openid/style.scss
@@ -0,0 +1,190 @@
+@use '@shared/scss/base/variables' as v;
+@use '@shared/scss/helpers/bootstrap' as bs;
+@use '@shared/scss/helpers/mixins' as mix;
+
+.openid-page {
+ background-color: v.$gray-dark;
+}
+
+#openid-consent {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ height: inherit;
+ background-color: #70707080;
+
+ & > form {
+ display: none;
+ }
+
+ .header {
+ display: flex;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ border-bottom: 1px solid;
+ border-color: v.$gray-border;
+ top: 50%;
+ bottom: 50%;
+ width: 100%;
+ height: 15%;
+
+ svg {
+ width: 120px;
+ height: 40px;
+ }
+ @include bs.media-breakpoint-down(sm) {
+ align-items: center;
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+
+ svg {
+ position: absolute;
+ margin-bottom: 1rem;
+ }
+ }
+ }
+
+ & > .content {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ align-content: center;
+ background-color: v.$white;
+ border-radius: 15px;
+ box-sizing: border-box;
+ margin: auto;
+ width: 45vh;
+ height: 80%;
+
+ @include bs.media-breakpoint-down(md) {
+ width: 70%;
+ height: 85%;
+ }
+
+ h1 {
+ font-family: Poppins;
+ text-align: center;
+ align-items: center;
+ justify-content: center;
+ margin: 2rem;
+ font-size: 2rem;
+
+ @include bs.media-breakpoint-down(md) {
+ font-size: 1.8rem;
+ }
+ }
+
+ & > p {
+ font-size: 1.4rem;
+ line-height: 1.4rem;
+ color: v.$gray-dark;
+ @include mix.text-weight(medium);
+ }
+
+ .scopes-container {
+ background-color: #f8f9f8;
+ height: 50%;
+ display: flex;
+ margin-top: auto;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ flex-wrap: wrap;
+ column-gap: 1rem;
+ row-gap: 1.5rem;
+ width: 100%;
+ overflow: auto;
+ @include bs.media-breakpoint-down(md) {
+ padding-top: 10vh;
+ }
+
+ .scope {
+ background-color: v.$white;
+ height: fit-content;
+ box-shadow: 5px 5px 15px #00000029;
+ border-radius: 20px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 80%;
+ @include mix.text-weight(medium);
+
+ p {
+ font-family: Roboto;
+ text-align: center;
+ color: v.$text-main;
+ font-weight: 400;
+ font-size: 2rem;
+ margin: 2rem;
+ @include bs.media-breakpoint-down(md) {
+ font-size: 1.8rem;
+ }
+ @include bs.media-breakpoint-down(sm) {
+ padding-top: auto;
+ position: relative;
+ }
+ }
+ }
+ }
+
+ .footer {
+ margin-top: auto;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ align-content: center;
+ text-align: center;
+
+ .disclaimer {
+ text-align: center;
+ font-family: Roboto;
+ @include bs.media-breakpoint-down(md) {
+ font-size: 1.25rem;
+ }
+
+ margin-top: auto;
+ margin: 4rem;
+ line-height: 1.8rem;
+ width: 60%;
+ color: v.$gray-dark;
+ }
+
+ .controls {
+ display: flex;
+ margin-top: auto;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ width: 100%;
+ margin-bottom: 2rem;
+
+ @include bs.media-breakpoint-down(md) {
+ flex-wrap: wrap;
+ gap: 1.6rem;
+
+ & > button {
+ flex-direction: row;
+ width: 200px;
+ }
+ }
+ @include bs.media-breakpoint-up(md) {
+ column-gap: 2rem;
+
+ & > button {
+ width: clamp(80px, 141px, 141px);
+ }
+ }
+
+ & > button {
+ height: 40px;
+ flex-direction: column;
+ }
+ }
+ }
+ }
+}
diff --git a/web/src/pages/overview/OverviewActivityStream/OverviewActivityStream.tsx b/web/src/pages/overview/OverviewActivityStream/OverviewActivityStream.tsx
new file mode 100644
index 0000000000..af20d6f3ca
--- /dev/null
+++ b/web/src/pages/overview/OverviewActivityStream/OverviewActivityStream.tsx
@@ -0,0 +1,28 @@
+import './style.scss';
+
+// import {
+// ActivityStatus,
+// ActivityType,
+// } from '../../../shared/components/layout/ActivityStatus/ActivityStatus';
+
+export const OverviewActivityStream = () => {
+ return (
+
+
+
Currently there is no activity detected
+ {/*
*/}
+ {/*
*/}
+ {/*
+
+
John Goodman uses 37% of network capacity
+ */}
+ {/*
*/}
+ {/*
*/}
+
+ );
+};
diff --git a/web/src/pages/overview/OverviewActivityStream/style.scss b/web/src/pages/overview/OverviewActivityStream/style.scss
new file mode 100644
index 0000000000..2e1184787d
--- /dev/null
+++ b/web/src/pages/overview/OverviewActivityStream/style.scss
@@ -0,0 +1,100 @@
+@use '../../../shared/scss/base/variables/' as v;
+@use '../../../shared/scss/helpers/mixins' as mix;
+@use '../../../shared/scss/helpers/bootstrap' as bs;
+
+#network-overview-page {
+ .page-content {
+ .bottom-row {
+ & > .activity-stream {
+ width: 100%;
+ display: grid;
+ grid-template-rows: 28px 1fr;
+ box-sizing: border-box;
+ position: relative;
+ @include bs.media-breakpoint-down(xl) {
+ padding-top: 4rem;
+ row-gap: 1.5rem;
+ min-height: 350px;
+ }
+ @include bs.media-breakpoint-up(xl) {
+ height: 100%;
+ padding-bottom: 6rem;
+ row-gap: 2rem;
+ }
+
+ & > .no-data-text {
+ margin-left: 0;
+ margin-top: 0;
+ @include bs.media-breakpoint-down(md) {
+ margin-left: 0;
+ text-align: center;
+ }
+ }
+
+ & > header {
+ grid-row: 1;
+ }
+
+ & > .stream {
+ grid-row: 2;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: flex-start;
+ justify-content: flex-start;
+ row-gap: 2rem;
+ box-sizing: border-box;
+ padding: 2rem;
+ border-radius: 15px;
+ box-shadow: 5px 5px 15px #00000005;
+ background-color: v.$white;
+
+ & > .activity {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: center;
+ justify-content: center;
+ row-gap: 0.5rem;
+ width: 100%;
+
+ & > .info {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ width: 100%;
+
+ .activity-status {
+ svg {
+ margin-right: 0.6rem;
+ }
+ }
+
+ & > .time {
+ margin-left: auto;
+ @include mix.typography(12px, 14px, medium, v.$gray-light);
+ }
+ }
+
+ & > .message {
+ @include mix.typography(12px, 14px, medium);
+
+ box-sizing: border-box;
+ padding-left: 2.4rem;
+ overflow: hidden;
+
+ span {
+ color: v.$gray-light;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/web/src/pages/overview/OverviewConnectedUsers/OverviewConnectedUsers.tsx b/web/src/pages/overview/OverviewConnectedUsers/OverviewConnectedUsers.tsx
new file mode 100644
index 0000000000..f6ca4aba35
--- /dev/null
+++ b/web/src/pages/overview/OverviewConnectedUsers/OverviewConnectedUsers.tsx
@@ -0,0 +1,101 @@
+import './style.scss';
+
+import { useMemo } from 'react';
+
+import { NetworkUserStats, OverviewLayoutType } from '../../../shared/types';
+import { getMaxDeviceStats } from '../helpers/stats';
+import { useOverviewStore } from '../hooks/store/useOverviewStore';
+import { UserConnectionCard } from './UserConnectionCard/UserConnectionCard';
+import { UserConnectionListItem } from './UserConnectionListItem/UserConnectionListItem';
+
+interface Props {
+ stats?: NetworkUserStats[];
+}
+
+export const OverviewConnectedUsers = ({ stats }: Props) => {
+ const viewMode = useOverviewStore((state) => state.viewMode);
+ const getContentClassName = useMemo(() => {
+ const rest = ['connected-users'];
+ switch (viewMode) {
+ case OverviewLayoutType.GRID:
+ rest.push('grid');
+ break;
+ case OverviewLayoutType.LIST:
+ rest.push('list');
+ break;
+ }
+ return rest.join(' ');
+ }, [viewMode]);
+ const dataMax = stats ? getMaxDeviceStats(stats) : undefined;
+
+ const renderedStats = useMemo(() => {
+ if (!stats || !stats.length) {
+ return null;
+ }
+
+ if (viewMode === OverviewLayoutType.GRID) {
+ return stats.map((userStats) => (
+
+ ));
+ }
+
+ return ;
+ }, [stats, viewMode, dataMax]);
+
+ return (
+
+
+ {!stats || !stats.length ? (
+
Currently there are no connected users
+ ) : null}
+
{renderedStats}
+
+ );
+};
+
+interface RenderUserListProps {
+ data: NetworkUserStats[];
+ dataMax: number | undefined;
+}
+
+const RenderUserList = ({ data, dataMax }: RenderUserListProps) => {
+ return (
+ <>
+
+
+ User name
+
+
+ Device
+
+
+ Connected
+
+
+ Device location
+
+ {/*
+ Connections
+
*/}
+
+ Network usage
+
+
+
+ {data.map((userStats) => (
+
+ ))}
+
+ >
+ );
+};
diff --git a/web/src/pages/overview/OverviewConnectedUsers/UserConnectionCard/UserConnectionCard.tsx b/web/src/pages/overview/OverviewConnectedUsers/UserConnectionCard/UserConnectionCard.tsx
new file mode 100644
index 0000000000..e4fbec13fe
--- /dev/null
+++ b/web/src/pages/overview/OverviewConnectedUsers/UserConnectionCard/UserConnectionCard.tsx
@@ -0,0 +1,400 @@
+import './style.scss';
+
+import dayjs from 'dayjs';
+import utc from 'dayjs/plugin/utc';
+import { motion } from 'framer-motion';
+import { floor } from 'lodash-es';
+import { useCallback, useEffect, useMemo, useState } from 'react';
+import { usePopper } from 'react-popper';
+
+import Badge, {
+ BadgeStyleVariant,
+} from '../../../../shared/components/layout/Badge/Badge';
+import {
+ DeviceAvatar,
+ DeviceAvatarVariants,
+} from '../../../../shared/components/layout/DeviceAvatar/DeviceAvatar';
+import IconButton from '../../../../shared/components/layout/IconButton/IconButton';
+import {
+ NetworkDirection,
+ NetworkSpeed,
+} from '../../../../shared/components/layout/NetworkSpeed/NetworkSpeed';
+import UserInitials, {
+ UserInitialsType,
+} from '../../../../shared/components/layout/UserInitials/UserInitials';
+import SvgIconCancel from '../../../../shared/components/svg/IconCancel';
+import SvgIconConnected from '../../../../shared/components/svg/IconConnected';
+import SvgIconOpenModal from '../../../../shared/components/svg/IconOpenModal';
+import SvgIconUserListElement from '../../../../shared/components/svg/IconUserListElement';
+import { getUserFullName } from '../../../../shared/helpers/getUserFullName';
+import { NetworkDeviceStats, NetworkUserStats } from '../../../../shared/types';
+import { titleCase } from '../../../../shared/utils/titleCase';
+import {
+ summarizeDeviceStats,
+ summarizeUsersNetworkStats,
+} from '../../helpers/stats';
+import { NetworkUsageChart } from '../shared/components/NetworkUsageChart/NetworkUsageChart';
+dayjs.extend(utc);
+interface Props {
+ data: NetworkUserStats;
+ dataMax: number | undefined;
+}
+
+export const UserConnectionCard = ({ data, dataMax }: Props) => {
+ const [expanded, setExpanded] = useState(false);
+ const [containerHovered, setContainerHovered] = useState(false);
+ const [popperElement, setPopperElement] = useState(
+ null
+ );
+ const pageElement = document.getElementById('network-overview-page');
+ const [referenceElement, setReferenceElement] =
+ useState(null);
+ const {
+ styles: popperStyles,
+ attributes: popperAttributes,
+ state,
+ } = usePopper(referenceElement, popperElement, {
+ placement: 'bottom',
+ modifiers: [
+ {
+ name: 'offset',
+ enabled: true,
+ options: {
+ offset: [0, -150],
+ },
+ },
+ ],
+ });
+ const getClassName = useMemo(() => {
+ const res = ['connected-user-card'];
+ if (expanded) {
+ res.push('expanded');
+ }
+ return res.join(' ');
+ }, [expanded]);
+
+ const getPopperClassName = useMemo(() => {
+ const res = ['user-connection-card-popper-container'];
+ if (expanded) {
+ res.push('expanded');
+ }
+ if (state?.placement) {
+ res.push(`placement-${state?.placement}`);
+ }
+ return res.join(' ');
+ }, [expanded, state?.placement]);
+
+ const checkClickOutside = useCallback(
+ (event: MouseEvent) => {
+ const popperRect = popperElement?.getBoundingClientRect();
+ if (popperRect) {
+ const start_x = popperRect?.x;
+ const end_x = start_x + popperRect?.width;
+ const start_y = popperRect?.y;
+ const end_y = start_y + popperRect.height;
+ const { clientX, clientY } = event;
+ if (
+ clientX < start_x ||
+ clientX > end_x ||
+ clientY < start_y ||
+ clientY > end_y
+ ) {
+ setExpanded(false);
+ }
+ }
+ },
+ [popperElement]
+ );
+
+ useEffect(() => {
+ if (expanded) {
+ const element = document.body;
+ element?.addEventListener('click', checkClickOutside);
+ return () => {
+ element?.removeEventListener('click', checkClickOutside);
+ };
+ }
+ }, [checkClickOutside, expanded, state?.placement]);
+
+ return (
+ <>
+ setContainerHovered(true)}
+ onHoverEnd={() => setContainerHovered(false)}
+ ref={setReferenceElement}
+ >
+ {!expanded && }
+ {containerHovered && !expanded && (
+ setExpanded(true)}
+ >
+
+
+ )}
+
+ {expanded && pageElement && (
+
+
+
+
+
setExpanded(false)}
+ >
+
+
+
+ {data.devices.map((device) => (
+
+ ))}
+
+
+ )}
+ >
+ );
+};
+
+interface MainCardContentProps {
+ data: NetworkUserStats;
+ dataMax: number | undefined;
+}
+
+const MainCardContent = ({ data, dataMax }: MainCardContentProps) => {
+ const getOldestDevice = useMemo(() => {
+ const rankMap = data.devices.sort((a, b) => {
+ const aDate = dayjs.utc(a.connected_at);
+ const bDate = dayjs.utc(b.connected_at);
+ return aDate.toDate().getTime() - bDate.toDate().getTime();
+ });
+ return rankMap[0];
+ }, [data]);
+ const getSummarizedStats = useMemo(
+ () => summarizeDeviceStats(data.devices),
+ [data.devices]
+ );
+ const getUserSummarizedStats = useMemo(
+ () => summarizeUsersNetworkStats([data]),
+ [data]
+ );
+
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+};
+
+interface NameBoxProps {
+ name: string;
+ publicIp: string;
+ wireguardIp: string;
+}
+
+const NameBox = ({ name, publicIp, wireguardIp }: NameBoxProps) => {
+ return (
+
+ );
+};
+
+interface ConnectionTimeProps {
+ connectedAt: string;
+}
+
+const ConnectionTime = ({ connectedAt }: ConnectionTimeProps) => {
+ const getConnectionTime = useMemo(() => {
+ const minutes = dayjs().diff(dayjs.utc(connectedAt), 'm');
+ if (minutes > 60) {
+ const hours = floor(minutes / 60);
+ const res = [`${hours}h`];
+ if (minutes % 60 > 0) {
+ res.push(`${minutes % 60}m`);
+ }
+ return res.join(' ');
+ }
+ return `${minutes}m`;
+ }, [connectedAt]);
+
+ return (
+
+
Connected:
+
+
+ {getConnectionTime}
+
+
+ );
+};
+
+// TODO: Reimplement when mesh network will be ready
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+const ActiveConnections = () => {
+ return (
+
+
Connections:
+
+
+
+
+
+
+ );
+};
+
+interface ActiveDevicesProps {
+ data: NetworkDeviceStats[];
+}
+
+const ActiveDevices = ({ data }: ActiveDevicesProps) => {
+ const activeDeviceCount = data.length;
+ const showCount = useMemo(() => activeDeviceCount > 3, [activeDeviceCount]);
+ const getCount = useMemo(() => 2 - activeDeviceCount, [activeDeviceCount]);
+ const getSliceEnd = useMemo(() => {
+ if (activeDeviceCount > 3) {
+ return 2;
+ }
+ return activeDeviceCount;
+ }, [activeDeviceCount]);
+ return (
+
+
Devices:
+
+ {data.slice(0, getSliceEnd).map((device) => (
+
+ ))}
+ {showCount && (
+
+ +{getCount}
+
+ )}
+
+
+ );
+};
+
+const DeviceAvatarBox = () => {
+ return (
+
+
+
+ );
+};
+
+interface ExpandedDeviceCardProps {
+ data: NetworkDeviceStats;
+ dataMax: number | undefined;
+}
+
+const ExpandedDeviceCard = ({ data, dataMax }: ExpandedDeviceCardProps) => {
+ const getSummarizedStats = useMemo(
+ () => summarizeDeviceStats([data]),
+ [data]
+ );
+ const downloadSummary = getSummarizedStats.reduce((sum, e) => {
+ return sum + e.download;
+ }, 0);
+
+ const uploadSummary = getSummarizedStats.reduce((sum, e) => {
+ return sum + e.upload;
+ }, 0);
+
+ return (
+ <>
+
+ >
+ );
+};
diff --git a/web/src/pages/overview/OverviewConnectedUsers/UserConnectionCard/style.scss b/web/src/pages/overview/OverviewConnectedUsers/UserConnectionCard/style.scss
new file mode 100644
index 0000000000..1c7296d8e9
--- /dev/null
+++ b/web/src/pages/overview/OverviewConnectedUsers/UserConnectionCard/style.scss
@@ -0,0 +1,335 @@
+@use '../../../../shared/scss/base/variables/' as v;
+@use '../../../../shared/scss/helpers/mixins/' as mix;
+@use '../../../../shared/scss/helpers/bootstrap' as bs;
+
+.connected-user-card {
+ background-color: v.$white;
+ border-radius: 15px;
+ padding: 2rem;
+ display: flex;
+ max-width: 370px;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: flex-start;
+ justify-content: flex-start;
+ row-gap: 2rem;
+ position: relative;
+ border: 1px solid v.$white;
+ box-sizing: border-box;
+
+ //@include bs.media-breakpoint-down(xl) {
+ //margin: auto;
+ //}
+ & > .expand-button {
+ position: absolute;
+ right: 1rem;
+ top: 1rem;
+ width: 30px;
+ height: 30px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+
+ &:hover {
+ svg {
+ path,
+ rect,
+ g {
+ fill: v.$primary;
+ }
+ }
+ }
+ }
+}
+
+.connected-user-card,
+.user-connection-card-popper-container {
+ & > * {
+ width: 100%;
+ }
+
+ .upper,
+ .lower {
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+ align-content: center;
+ justify-content: flex-start;
+ }
+
+ .upper {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+
+ & > .name-box {
+ margin-left: 1rem;
+ }
+ }
+
+ .lower {
+ width: 100%;
+ column-gap: 4rem;
+ @include bs.media-breakpoint-down(xl) {
+ column-gap: 3rem;
+ }
+
+ span {
+ &.label {
+ @include mix.typography(12px, 14px, medium, v.$gray-light);
+ }
+ }
+ }
+
+ .lower-box {
+ row-gap: 0.6rem;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: flex-start;
+ justify-content: flex-start;
+
+ & > .content-wrapper {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ }
+ }
+
+ .active-devices,
+ .active-connections {
+ & > .content-wrapper {
+ column-gap: 0.8rem;
+ }
+ }
+
+ .active-devices {
+ .content-wrapper {
+ .avatar-box {
+ width: 30px;
+ height: 30px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ border-radius: 10px;
+ box-sizing: border-box;
+ background-color: v.$bg-light;
+ }
+
+ .count-box {
+ width: 30px;
+ height: 30px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+ border-radius: 10px;
+ box-sizing: border-box;
+ background-color: v.$bg-light;
+
+ & > span {
+ @include mix.typography(12px, 14px, medium, v.$gray-light);
+ }
+ }
+ }
+ }
+
+ .name-box {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: flex-start;
+ justify-content: flex-start;
+ row-gap: 0.3rem;
+
+ & > .name {
+ @include mix.typography(15px, 21px, medium, $font-family: 'Poppins');
+ }
+
+ & > .lower {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 0.4rem;
+ }
+ }
+
+ .connection-time {
+ max-width: 61px;
+ row-gap: 1.4rem;
+
+ & > .content-wrapper {
+ column-gap: 0.6rem;
+
+ & > span {
+ @include mix.typography(15px, 18px, medium);
+
+ text-align: left;
+ overflow: hidden;
+ white-space: nowrap;
+ }
+ }
+ }
+
+ .network-usage {
+ @include mix.typography(12px, 14px, medium);
+
+ height: 30px;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-end;
+ align-content: flex-end;
+ justify-content: flex-end;
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+
+ .network-usage-summary {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-end;
+ align-content: flex-end;
+ justify-content: flex-end;
+ flex-grow: 1;
+ flex-shrink: 1;
+
+ .network-usage-stats {
+ gap: 50px;
+ display: flex;
+
+ .speed-value {
+ font-size: 12px;
+ }
+ }
+ }
+}
+
+.user-connection-card-popper-container {
+ // filter: drop-shadow(5px 10px 30px rgba(0, 0, 5, 0.1));
+ z-index: 2;
+ border: 1px solid v.$gray-border-dark;
+ padding: 0;
+ background-color: v.$white;
+ border-radius: 15px;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: flex-start;
+ justify-content: flex-start;
+ width: 370px;
+ @include bs.media-breakpoint-down(xl) {
+ width: inherit;
+ }
+ @include bs.media-breakpoint-up(xl) {
+ @include mix.elevate;
+ }
+
+ & > .user-info-wrapper {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: flex-start;
+ justify-content: flex-start;
+ row-gap: 2rem;
+ box-sizing: border-box;
+ padding: 2rem;
+ }
+
+ & > .collapse-button {
+ position: absolute;
+ width: 30px;
+ height: 30px;
+ right: -3px;
+ top: -3px;
+ background-color: v.$gray-light;
+ border-radius: 10px;
+ z-index: 3;
+
+ svg {
+ path,
+ rect,
+ g {
+ fill: v.$white;
+ }
+ }
+ }
+
+ & > .devices {
+ border-bottom-left-radius: 15px;
+ border-bottom-right-radius: 15px;
+
+ & > .divider {
+ background-color: v.$gray-border;
+ height: 1px;
+ }
+
+ & > .expanded-device-card {
+ background-color: v.$white;
+ box-sizing: border-box;
+ padding: 2rem 2.9rem;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: flex-start;
+ justify-content: flex-start;
+ row-gap: 1.5rem;
+ border-top: 1px solid v.$gray-border;
+ border-bottom: 1px solid transparent;
+
+ .network-usage-stats {
+ gap: 120px;
+
+ //@include bs.media-breakpoint-down(xl) {
+ //gap: 70px;
+ //}
+ }
+
+ .active-connections {
+ margin-left: 4rem;
+ }
+
+ &:first-of-type {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+
+ &:last-of-type {
+ border-bottom-left-radius: 15px;
+ border-bottom-right-radius: 15px;
+ }
+ }
+ }
+
+ &.placement-top {
+ flex-flow: wrap-reverse;
+
+ & > .devices {
+ & > .expanded-device-card {
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid v.$gray-border;
+
+ &:first-of-type {
+ border-top-left-radius: 15px;
+ border-top-right-radius: 15px;
+ }
+
+ &:last-of-type {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ }
+ }
+ }
+}
diff --git a/web/src/pages/overview/OverviewConnectedUsers/UserConnectionListItem/UserConnectionListItem.tsx b/web/src/pages/overview/OverviewConnectedUsers/UserConnectionListItem/UserConnectionListItem.tsx
new file mode 100644
index 0000000000..8336804b9d
--- /dev/null
+++ b/web/src/pages/overview/OverviewConnectedUsers/UserConnectionListItem/UserConnectionListItem.tsx
@@ -0,0 +1,305 @@
+import './style.scss';
+
+import dayjs from 'dayjs';
+import utc from 'dayjs/plugin/utc';
+import { floor } from 'lodash-es';
+import { useMemo, useState } from 'react';
+
+import Badge, {
+ BadgeStyleVariant,
+} from '../../../../shared/components/layout/Badge/Badge';
+import {
+ DeviceAvatar,
+ DeviceAvatarVariants,
+} from '../../../../shared/components/layout/DeviceAvatar/DeviceAvatar';
+import IconButton from '../../../../shared/components/layout/IconButton/IconButton';
+import {
+ NetworkDirection,
+ NetworkSpeed,
+} from '../../../../shared/components/layout/NetworkSpeed/NetworkSpeed';
+import UserInitials, {
+ UserInitialsType,
+} from '../../../../shared/components/layout/UserInitials/UserInitials';
+import {
+ IconPacketsIn,
+ IconPacketsOut,
+} from '../../../../shared/components/svg';
+import SvgIconConnected from '../../../../shared/components/svg/IconConnected';
+import SvgIconUserList from '../../../../shared/components/svg/IconUserList';
+import SvgIconUserListElement from '../../../../shared/components/svg/IconUserListElement';
+import SvgIconUserListExpanded from '../../../../shared/components/svg/IconUserListExpanded';
+import { getUserFullName } from '../../../../shared/helpers/getUserFullName';
+import { NetworkDeviceStats, NetworkUserStats } from '../../../../shared/types';
+import { summarizeDeviceStats } from '../../helpers/stats';
+import { NetworkUsageChart } from '../shared/components/NetworkUsageChart/NetworkUsageChart';
+dayjs.extend(utc);
+
+interface Props {
+ data: NetworkUserStats;
+ dataMax: number | undefined;
+}
+
+export const UserConnectionListItem = ({ data, dataMax }: Props) => {
+ const [expanded, setExpanded] = useState(false);
+
+ const getClassName = useMemo(() => {
+ const res = ['user-connection-list-item'];
+ if (expanded) {
+ res.push('expanded');
+ }
+ return res.join(' ');
+ }, [expanded]);
+
+ return (
+
+ setExpanded((state) => !state)}
+ />
+
+ {expanded &&
+ data.devices.map((device) => (
+
+ ))}
+
+ );
+};
+
+interface UserRowProps {
+ data: NetworkUserStats;
+ dataMax: number | undefined;
+}
+
+const UserRow = ({ data, dataMax }: UserRowProps) => {
+ const getOldestDevice = useMemo(() => {
+ const rankMap = data.devices.sort((a, b) => {
+ const aDate = dayjs.utc(a.connected_at);
+ const bDate = dayjs.utc(b.connected_at);
+ return aDate.toDate().getTime() - bDate.toDate().getTime();
+ });
+ return rankMap[0];
+ }, [data]);
+
+ const getSummarizedDevicesStat = useMemo(
+ () => summarizeDeviceStats(data.devices),
+ [data.devices]
+ );
+ const downloadSummary = getSummarizedDevicesStat.reduce((sum, e) => {
+ return sum + e.download;
+ }, 0);
+
+ const uploadSummary = getSummarizedDevicesStat.reduce((sum, e) => {
+ return sum + e.upload;
+ }, 0);
+
+ return (
+
+
+
+ {getUserFullName(data.user)}
+
+
+
+
+
+
+ );
+};
+
+interface DeviceRowProps {
+ data: NetworkDeviceStats;
+ dataMax: number | undefined;
+}
+
+const DeviceRow = ({ data, dataMax }: DeviceRowProps) => {
+ const downloadSummary = data.stats.reduce((sum, e) => {
+ return sum + e.download;
+ }, 0);
+
+ const uploadSummary = data.stats.reduce((sum, e) => {
+ return sum + e.upload;
+ }, 0);
+
+ return (
+
+
+
+
+ {data.name}
+
+
+
+
+
+
+ );
+};
+
+interface ActiveDevicesProps {
+ data: NetworkDeviceStats[];
+}
+
+const ActiveDevices = ({ data }: ActiveDevicesProps) => {
+ const activeDeviceCount = data.length;
+ const showCount = useMemo(() => activeDeviceCount > 3, [activeDeviceCount]);
+ const getCount = useMemo(() => activeDeviceCount - 2, [activeDeviceCount]);
+ const getSliceEnd = useMemo(() => {
+ if (activeDeviceCount > 3) {
+ return 2;
+ }
+ return activeDeviceCount;
+ }, [activeDeviceCount]);
+ return (
+
+ {data.slice(0, getSliceEnd).map((device) => (
+
+ ))}
+ {showCount && (
+
+ +{getCount}
+
+ )}
+
+ );
+};
+
+interface DeviceIpsProps {
+ publicIp: string;
+ wireguardIp: string;
+}
+
+const DeviceIps = ({ publicIp, wireguardIp }: DeviceIpsProps) => {
+ return (
+
+
+
+
+ );
+};
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+const Connections = () => {
+ return (
+
+
+
+
+
+ );
+};
+
+interface ConnectionTimeProps {
+ connectedAt: string;
+}
+
+const ConnectionTime = ({ connectedAt }: ConnectionTimeProps) => {
+ const getConnectionTime = useMemo(() => {
+ const minutes = dayjs().diff(dayjs.utc(connectedAt), 'm');
+ if (minutes > 60) {
+ const hours = floor(minutes / 60);
+ const res = [`${hours}h`];
+ if (minutes % 60 > 0) {
+ res.push(`${minutes % 60}m`);
+ }
+ return res.join(' ');
+ }
+ return `${minutes}m`;
+ }, [connectedAt]);
+ return (
+
+
+ {getConnectionTime}
+
+ );
+};
+
+interface ExpandButtonProps {
+ expanded: boolean;
+ onExpand: () => void;
+}
+
+const ExpandButton = ({ expanded, onExpand }: ExpandButtonProps) => {
+ return (
+ onExpand()} className="blank expand-devices">
+ {expanded ? : }
+
+ );
+};
diff --git a/web/src/pages/overview/OverviewConnectedUsers/UserConnectionListItem/style.scss b/web/src/pages/overview/OverviewConnectedUsers/UserConnectionListItem/style.scss
new file mode 100644
index 0000000000..bc97be70b6
--- /dev/null
+++ b/web/src/pages/overview/OverviewConnectedUsers/UserConnectionListItem/style.scss
@@ -0,0 +1,173 @@
+@use '../../../../shared/scss/base/variables/' as v;
+@use '../../../../shared/scss/helpers/mixins' as mix;
+
+.user-connection-list-item {
+ background-color: v.$white;
+ display: flex;
+ flex-direction: column;
+ border-radius: 15px;
+ box-sizing: border-box;
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+ position: relative;
+
+ & > .user-row {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ width: 100%;
+
+ & > .user-name {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 1rem;
+ padding-left: 52px;
+
+ & > .full-name {
+ @include mix.typography(15px, 18px, medium);
+ }
+ }
+
+ & > .active-time {
+ & > .time {
+ @include mix.typography(15px, 18px, medium, v.$text-main);
+ }
+ }
+ }
+
+ & > .device-row {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ width: 100%;
+ box-sizing: border-box;
+ padding-top: 14px;
+ border-top: 1px solid #f7f7f7;
+
+ &:not(:last-of-type) {
+ padding-bottom: 15px;
+ }
+
+ &:last-of-type {
+ padding-bottom: 0.5rem;
+ }
+
+ & > .device-name {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 1rem;
+ padding-left: 52px;
+
+ & > svg {
+ margin-left: 1.2rem;
+ }
+
+ & > .name {
+ @include mix.typography(12px, 14px, medium, v.$text-main);
+ }
+ }
+
+ & > .active-time {
+ & > .time {
+ @include mix.typography(12px, 14px, medium, v.$text-main);
+ }
+ }
+ }
+
+ & > .expand-devices {
+ position: absolute;
+ width: 22px;
+ height: 22px;
+ left: 15px;
+ top: 19px;
+ }
+
+ .active-devices {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ column-gap: 0.8rem;
+
+ & > .count-box {
+ width: 30px;
+ height: 30px;
+ display: flex;
+ flex-direction: column;
+ align-content: center;
+ align-items: center;
+ justify-content: center;
+
+ span {
+ @include mix.typography(12px, 14px, medium, v.$gray-light);
+ }
+ }
+ }
+
+ .device-ips {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 0.7rem;
+ }
+
+ .connections {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ column-gap: 0.8rem;
+ }
+
+ .network-usage {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ column-gap: 1rem;
+
+ .network-usage-summary {
+ display: flex;
+ flex-direction: column;
+
+ .transfer {
+ display: flex;
+ flex-direction: row;
+ gap: 0.4rem;
+ align-items: center;
+ }
+ }
+ }
+
+ .active-time {
+ display: flex;
+ flex-direction: row;
+ align-content: center;
+ align-items: center;
+ justify-content: flex-start;
+ column-gap: 0.6rem;
+ }
+
+ &.expanded {
+ @include mix.elevate;
+
+ & > .user-row {
+ padding-bottom: 1rem;
+ }
+ }
+}
diff --git a/web/src/pages/overview/OverviewConnectedUsers/shared/components/NetworkUsageChart/NetworkUsageChart.tsx b/web/src/pages/overview/OverviewConnectedUsers/shared/components/NetworkUsageChart/NetworkUsageChart.tsx
new file mode 100644
index 0000000000..b4bb7dea90
--- /dev/null
+++ b/web/src/pages/overview/OverviewConnectedUsers/shared/components/NetworkUsageChart/NetworkUsageChart.tsx
@@ -0,0 +1,66 @@
+import dayjs from 'dayjs';
+import { useMemo } from 'react';
+import { Bar, BarChart, XAxis, YAxis } from 'recharts';
+
+import { ColorsRGB } from '../../../../../../shared/constants';
+import { NetworkDeviceStats } from '../../../../../../shared/types';
+import { parseStatsForCharts } from '../../../../helpers/stats';
+
+interface NetworkUsageProps {
+ data: NetworkDeviceStats['stats'];
+ width?: number;
+ height?: number;
+ hideX?: boolean;
+ barSize?: number;
+ dataMax?: string | number;
+}
+
+export const NetworkUsageChart = ({
+ data,
+ height = 15,
+ width = 105,
+ hideX = true,
+ barSize = 2,
+ dataMax = 'dataMax + 1',
+}: NetworkUsageProps) => {
+ const getFormattedData = useMemo(() => parseStatsForCharts(data), [data]);
+
+ return (
+
+
+
+
+
+
+
+
+ );
+};
+
+const formatXTick = (tickData: number) =>
+ dayjs.utc(tickData).local().format('HH:mm');
diff --git a/web/src/pages/overview/OverviewConnectedUsers/style.scss b/web/src/pages/overview/OverviewConnectedUsers/style.scss
new file mode 100644
index 0000000000..75c9041141
--- /dev/null
+++ b/web/src/pages/overview/OverviewConnectedUsers/style.scss
@@ -0,0 +1,156 @@
+@use '../../../shared/scss/base/variables/' as v;
+@use '../../../shared/scss/helpers/mixins' as mix;
+@use '../../../shared/scss/helpers/bootstrap' as bs;
+@use 'sass:list';
+
+$column-widths: 250px, 167px, 136px, 168px, 200px;
+
+@mixin set-list-column-widths() {
+ @for $i from 1 through length($column-widths) {
+ & > :nth-child(#{$i}) {
+ width: nth($column-widths, $i);
+ }
+ }
+}
+
+.overview-connected-users {
+ & > header {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ width: 100%;
+ height: 40px;
+ box-sizing: border-box;
+ }
+
+ & > .connected-users {
+ min-height: calc(100% - 94px);
+ max-height: calc(100% - 94px);
+
+ &.list {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-content: flex-start;
+ justify-content: flex-start;
+ box-sizing: border-box;
+ padding-left: 0 !important;
+ @include bs.media-breakpoint-down(xl) {
+ overflow: auto;
+ }
+ @include bs.media-breakpoint-up(xl) {
+ overflow: hidden;
+ padding-right: 1rem;
+ }
+
+ & > .headers {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ box-sizing: border-box;
+ height: 22px;
+ @include bs.media-breakpoint-down(xl) {
+ padding-left: calc(52px + 1.5rem);
+ padding-right: 1.5rem;
+ }
+ @include bs.media-breakpoint-up(xl) {
+ padding-left: calc(52px + 6rem);
+ padding-right: 34px;
+ width: 100%;
+ }
+
+ & > .header {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 0.6rem;
+
+ & > span {
+ @include mix.typography(12px, 14px, medium, v.$gray-light);
+ }
+
+ &.active {
+ & > span {
+ color: v.$text-main;
+ }
+ }
+ }
+ @include set-list-column-widths;
+ }
+
+ & > .users-list {
+ box-sizing: border-box;
+ overflow: auto;
+ padding-right: 1.5rem;
+ padding-top: 1.5rem;
+ padding-bottom: 1.5rem;
+ @include bs.media-breakpoint-down(xl) {
+ max-height: calc(50vh);
+ padding-left: 1.5rem;
+ }
+ @include bs.media-breakpoint-up(xl) {
+ min-height: calc(100% - 28px);
+ max-height: calc(100% - 28px);
+ padding-left: 6rem;
+ width: 100%;
+ }
+
+ & > .user-connection-list-item {
+ & > .user-row,
+ .device-row {
+ @include set-list-column-widths;
+ }
+
+ &:not(:last-of-type) {
+ margin-bottom: 1rem;
+ }
+ }
+ }
+ }
+
+ &.grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, 370px);
+ grid-auto-rows: 150px;
+ width: 100%;
+ gap: 1.5rem;
+ overflow: auto;
+ box-sizing: border-box;
+ position: relative;
+ padding-top: 1rem;
+ padding-bottom: 4rem;
+ @include bs.media-breakpoint-down(md) {
+ justify-content: center;
+ }
+ @include bs.media-breakpoint-down(xl) {
+ padding-top: 1rem;
+ padding-bottom: 1.5rem;
+ margin-right: 1.4rem;
+ width: calc(100% - 1.6rem);
+ overflow: auto;
+ max-height: 100vh;
+ grid-template-columns: 1fr;
+ }
+ @include bs.media-breakpoint-up(xl) {
+ padding-top: 1rem;
+ padding-bottom: 4rem;
+ }
+ }
+ }
+}
+
+.no-data-text {
+ margin-left: 6rem;
+ margin-top: 1rem;
+
+ @include bs.media-breakpoint-down(md) {
+ margin-left: 0;
+ text-align: center;
+ }
+}
diff --git a/web/src/pages/overview/OverviewPage.tsx b/web/src/pages/overview/OverviewPage.tsx
new file mode 100644
index 0000000000..c7ec91a57b
--- /dev/null
+++ b/web/src/pages/overview/OverviewPage.tsx
@@ -0,0 +1,162 @@
+import './style.scss';
+
+import { useQuery } from '@tanstack/react-query';
+import { isNull, isUndefined } from 'lodash-es';
+import { useEffect } from 'react';
+import { useNavigate } from 'react-router';
+import useBreakpoint from 'use-breakpoint';
+import shallow from 'zustand/shallow';
+
+import { Action } from '../../shared/components/layout/Action/Action';
+import Button, {
+ ButtonStyleVariant,
+} from '../../shared/components/layout/Button/Button';
+import PageContainer from '../../shared/components/layout/PageContainer/PageContainer';
+import { IconEditNetwork } from '../../shared/components/svg';
+import { deviceBreakpoints } from '../../shared/constants';
+import { apiToWizardNetwork } from '../../shared/helpers/apiToWizardNetwork';
+import { useAppStore } from '../../shared/hooks/store/useAppStore';
+import { useModalStore } from '../../shared/hooks/store/useModalStore';
+import useApi from '../../shared/hooks/useApi';
+import { QueryKeys } from '../../shared/queries';
+import { OverviewLayoutType } from '../../shared/types';
+import GatewaySetupModal from '../vpn/modals/GatewaySetupModal/GatewaySetupModal';
+import { useWizardStore } from '../vpn/Wizard/WizardSteps/store';
+import { getNetworkStatsFilterValue } from './helpers/stats';
+import { useOverviewStore } from './hooks/store/useOverviewStore';
+import { OverviewActivityStream } from './OverviewActivityStream/OverviewActivityStream';
+import { OverviewConnectedUsers } from './OverviewConnectedUsers/OverviewConnectedUsers';
+import { OverviewStats } from './OverviewStats/OverviewStats';
+import { OverviewStatsFilterSelect } from './OverviewStatsFilterSelect/OverviewStatsFilterSelect';
+import { OverviewViewSelect } from './OverviewViewSelect/OverviewViewSelect';
+
+export const OverviewPage = () => {
+ const { breakpoint } = useBreakpoint(deviceBreakpoints);
+ const viewMode = useOverviewStore((state) => state.viewMode);
+ const setOverViewStore = useOverviewStore((state) => state.setState);
+ const statsFilter = useOverviewStore((state) => state.statsFilter);
+ const wizardCompleted = useAppStore((state) => state.wizardCompleted);
+
+ const setGatewaySetupModal = useModalStore(
+ (state) => state.setGatewaySetupModal
+ );
+ const {
+ network: { getNetworks, getUsersStats, getNetworkStats },
+ } = useApi();
+
+ const [resetWizardStore, setNetwork, setWizardState] = useWizardStore(
+ (state) => [state.resetStore, state.setNetwork, state.setState],
+ shallow
+ );
+
+ const navigate = useNavigate();
+
+ const { data: networkStats } = useQuery(
+ [QueryKeys.FETCH_NETWORK_STATS, statsFilter],
+ () => getNetworkStats({ from: getNetworkStatsFilterValue(statsFilter) })
+ );
+
+ const { data: networkUsersStats } = useQuery(
+ [QueryKeys.FETCH_NETWORK_USERS_STATS, statsFilter],
+ () => getUsersStats({ from: getNetworkStatsFilterValue(statsFilter) }),
+ {
+ enabled: !isUndefined(statsFilter),
+ }
+ );
+
+ const {
+ data: networks,
+ isLoading: networksLoading,
+ isSuccess: networksSuccess,
+ } = useQuery([QueryKeys.FETCH_NETWORKS], getNetworks, {
+ onSuccess: (networks) => {
+ const network = networks[0];
+ if (network) {
+ if (isNull(network.connected_at)) {
+ setGatewaySetupModal({ visible: true });
+ }
+ }
+ },
+ });
+
+ useEffect(() => {
+ if (breakpoint === 'mobile' && viewMode === OverviewLayoutType.LIST) {
+ setOverViewStore({ viewMode: OverviewLayoutType.GRID });
+ }
+ if (breakpoint === 'tablet' && viewMode === OverviewLayoutType.GRID) {
+ setOverViewStore({ viewMode: OverviewLayoutType.LIST });
+ }
+ }, [viewMode, breakpoint, setOverViewStore]);
+
+ useEffect(() => {
+ if (!networksLoading && networksSuccess) {
+ if (networks?.length == 0 && !wizardCompleted) {
+ resetWizardStore({
+ editMode: false,
+ });
+ navigate('/admin/wizard', { replace: true });
+ }
+ }
+ }, [
+ networks,
+ navigate,
+ networksLoading,
+ resetWizardStore,
+ networksSuccess,
+ wizardCompleted,
+ ]);
+
+ return (
+ <>
+
+ {breakpoint !== 'desktop' && (
+
+
+
+
+ )}
+ {breakpoint === 'desktop' && (
+
+ Network overview
+
+
+ setGatewaySetupModal({ visible: true })}
+ className="docker-command"
+ >
+ Docker run command
+
+ }
+ disabled={isUndefined(networks) || networksLoading}
+ onClick={() => {
+ if (networks) {
+ setNetwork(apiToWizardNetwork(networks[0]));
+ setWizardState({
+ editMode: true,
+ });
+ navigate('/admin/wizard/1', {
+ replace: true,
+ });
+ }
+ }}
+ />
+
+ )}
+ {networkStats && networkUsersStats && (
+
+ )}
+
+
+
+
+
+
+ >
+ );
+};
diff --git a/web/src/pages/overview/OverviewStats/OverviewStats.tsx b/web/src/pages/overview/OverviewStats/OverviewStats.tsx
new file mode 100644
index 0000000000..5871b4cfd9
--- /dev/null
+++ b/web/src/pages/overview/OverviewStats/OverviewStats.tsx
@@ -0,0 +1,127 @@
+import './style.scss';
+
+import { forwardRef } from 'react';
+import AutoSizer from 'react-virtualized-auto-sizer';
+import useBreakpoint from 'use-breakpoint';
+
+import {
+ NetworkDirection,
+ NetworkSpeed,
+} from '../../../shared/components/layout/NetworkSpeed/NetworkSpeed';
+import {
+ Icon24HConnections,
+ IconActiveConnections,
+ IconNetworkLoad,
+ IconPacketsIn,
+ IconPacketsOut,
+} from '../../../shared/components/svg';
+import { deviceBreakpoints } from '../../../shared/constants';
+import { NetworkUserStats, WireguardNetworkStats } from '../../../shared/types';
+import { useOverviewStore } from '../hooks/store/useOverviewStore';
+import { NetworkUsageChart } from '../OverviewConnectedUsers/shared/components/NetworkUsageChart/NetworkUsageChart';
+interface Props {
+ usersStats?: NetworkUserStats[];
+ networkStats: WireguardNetworkStats;
+}
+
+export const OverviewStats = forwardRef(
+ ({ networkStats }, ref) => {
+ const { breakpoint } = useBreakpoint(deviceBreakpoints);
+ const filterValue = useOverviewStore((state) => state.statsFilter);
+ return (
+
+
+
+
Active users
+
+
+ {networkStats.active_users}
+
+
+
+
Active devices in {filterValue}h
+
+
+
+ {networkStats.active_devices}
+
+
+
+
+
Network load
+
+
+
+ 11%
+
+
+
+ {breakpoint !== 'mobile' && (
+
+
Total transfer:
+
+
+
+ In:
+
+
+
+
+
+ Out:
+
+
+
+
+
+ )}
+
+
+
+ Activity
+
+
Total transfer:
+
+
+
+
+
+
+
+
+
+
+
+ {({ width }) => (
+ <>
+ {networkStats.transfer_series && (
+
+ )}
+ >
+ )}
+
+
+
+ );
+ }
+);
diff --git a/web/src/pages/overview/OverviewStats/style.scss b/web/src/pages/overview/OverviewStats/style.scss
new file mode 100644
index 0000000000..b8753f87aa
--- /dev/null
+++ b/web/src/pages/overview/OverviewStats/style.scss
@@ -0,0 +1,257 @@
+@use '../../../shared/scss/base/variables/' as v;
+@use '../../../shared/scss/helpers/mixins' as mix;
+@use '../../../shared/scss/helpers/bootstrap/' as bs;
+
+#network-overview-page {
+ .page-content {
+ & > .overview-network-stats {
+ display: grid;
+ column-gap: 3rem;
+ row-gap: 2rem;
+ grid-template-columns: 1fr;
+ justify-items: start;
+ box-sizing: border-box;
+ @include bs.media-breakpoint-down(md) {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ }
+ @include bs.media-breakpoint-down(xl) {
+ padding-left: 2rem;
+ padding-right: 2rem;
+ }
+ @include bs.media-breakpoint-up(xl) {
+ padding-left: 6rem;
+ padding-right: 6rem;
+ }
+ @include bs.media-breakpoint-up(xxl) {
+ grid-template-columns: 1fr 1fr;
+ justify-items: center;
+ }
+
+ & > .summary,
+ .activity-graph {
+ max-width: 768px;
+ }
+
+ & > .summary {
+ box-shadow: 5px 5px 15px #00000005;
+ background-color: v.$white;
+ border-radius: 15px;
+ height: 104px;
+ position: relative;
+ width: 100%;
+ @include bs.media-breakpoint-down(md) {
+ height: 60px;
+ }
+ @include bs.media-breakpoint-down(xl) {
+ display: grid;
+ grid-auto-columns: 1fr;
+ grid-template-rows: 1fr;
+ }
+ @include bs.media-breakpoint-up(xl) {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ }
+
+ & > .info {
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ box-sizing: border-box;
+ height: 100%;
+ @include bs.media-breakpoint-down(md) {
+ align-items: center;
+ align-content: center;
+ justify-content: center;
+
+ &:last-of-type {
+ padding-right: 1.5rem;
+ }
+ }
+ @include bs.media-breakpoint-up(md) {
+ padding-top: 2rem;
+ }
+ @include bs.media-breakpoint-down(xl) {
+ grid-row: 1;
+ width: 100%;
+ }
+ @include bs.media-breakpoint-up(xl) {
+ width: 192.5px;
+ }
+
+ &:first-of-type {
+ @include bs.media-breakpoint-down(md) {
+ padding-left: 1.5rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ padding-left: 2rem;
+ }
+ }
+
+ &:not(:first-of-type) {
+ @include bs.media-breakpoint-down(md) {
+ padding-left: 1rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ padding-left: 1.95rem;
+ }
+
+ border-left: 1px solid v.$gray-border;
+ }
+
+ & > .info-title {
+ @include bs.media-breakpoint-down(md) {
+ display: none;
+ }
+ @include mix.typography(
+ 12px,
+ 17px,
+ medium,
+ v.$gray-light,
+ 'Poppins'
+ );
+ }
+
+ & > .content {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 1.15rem;
+
+ & > .info-value {
+ @include bs.media-breakpoint-down(md) {
+ @include mix.typography(
+ 20px,
+ 28px,
+ semiBold,
+ v.$text-main,
+ 'Poppins'
+ );
+ }
+ @include bs.media-breakpoint-up(md) {
+ @include mix.typography(
+ 41px,
+ 57px,
+ semiBold,
+ v.$text-main,
+ 'Poppins'
+ );
+ }
+ }
+ }
+
+ &.network-usage {
+ flex-grow: 1;
+ row-gap: 0.8rem;
+
+ & > .content {
+ column-gap: 2.7rem;
+
+ & > .network-usage {
+ & > span {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 0.4rem;
+ @include mix.typography(
+ 12px,
+ 17px,
+ medium,
+ v.$text-main,
+ 'Poppins'
+ );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ & > .activity-graph {
+ padding: 1.5rem 2rem 1rem;
+ box-sizing: border-box;
+ border-radius: 15px;
+ background-color: v.$white;
+ box-shadow: 5px 5px 15px #00000005;
+ height: 104px;
+ width: 100%;
+
+ & > header {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ margin-bottom: 1.5rem;
+
+ h3 {
+ @include mix.typography(
+ 15px,
+ 21px,
+ medium,
+ v.$text-main,
+ 'Poppins'
+ );
+ @include bs.media-breakpoint-down(md) {
+ text-transform: uppercase;
+ @include mix.text-weight(semiBold);
+ }
+ @include bs.media-breakpoint-up(md) {
+ }
+ }
+
+ & > .peaks {
+ margin-left: auto;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ height: 17px;
+ @include bs.media-breakpoint-down(md) {
+ column-gap: 1rem;
+ }
+ @include bs.media-breakpoint-up(md) {
+ column-gap: 2rem;
+ }
+
+ & > span {
+ @include bs.media-breakpoint-down(md) {
+ &:first-of-type {
+ display: none;
+ }
+ }
+ @include mix.typography(
+ 12px,
+ 17px,
+ medium,
+ v.$gray-light,
+ 'Poppins'
+ );
+ }
+
+ & > .network-speed {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-content: center;
+ justify-content: flex-start;
+ column-gap: 0.4rem;
+ }
+ }
+ }
+
+ & > .network-speed {
+ margin-top: 1rem;
+ }
+ }
+ }
+ }
+}
diff --git a/web/src/pages/overview/OverviewStatsFilterSelect/OverviewStatsFilterSelect.tsx b/web/src/pages/overview/OverviewStatsFilterSelect/OverviewStatsFilterSelect.tsx
new file mode 100644
index 0000000000..93c6cd3969
--- /dev/null
+++ b/web/src/pages/overview/OverviewStatsFilterSelect/OverviewStatsFilterSelect.tsx
@@ -0,0 +1,65 @@
+import { useMemo } from 'react';
+import Select from 'react-select';
+
+import { useOverviewStore } from '../hooks/store/useOverviewStore';
+
+export const OverviewStatsFilterSelect = () => {
+ const filterValue = useOverviewStore((state) => state.statsFilter);
+ const setOverviewStore = useOverviewStore((state) => state.setState);
+
+ const getCurrentValue = useMemo(
+ () => selectOptions.find((o) => o.value === filterValue),
+ [filterValue]
+ );
+
+ return (
+