diff --git a/common/build.gradle.kts b/common/build.gradle.kts
index db6c3ef..5cc5585 100644
--- a/common/build.gradle.kts
+++ b/common/build.gradle.kts
@@ -19,7 +19,7 @@ dependencies {
api("io.jsonwebtoken:jjwt-impl:0.12.3")
api("io.jsonwebtoken:jjwt-jackson:0.12.3")
- api("org.springframework.boot:spring-boot-starter-web")
+ compileOnly("org.springframework:spring-web")
compileOnly("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok")
diff --git a/docker-compose.yml b/docker-compose.yml
index b24e7c7..d44a2d6 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,6 +1,19 @@
name: is-coursework
services:
+ frontend:
+ build:
+ context: ./domains-frontend
+ dockerfile: Dockerfile
+ container_name: frontend
+ ports:
+ - "3000:3000"
+ depends_on:
+ - api-gateway
+ - exdns
+ networks:
+ - domain-registrar-network
+
api-gateway:
build:
context: .
diff --git a/domains-frontend/.dockerignore b/domains-frontend/.dockerignore
new file mode 100644
index 0000000..62b26e1
--- /dev/null
+++ b/domains-frontend/.dockerignore
@@ -0,0 +1,4 @@
+node_modules
+dist
+.git
+*.md
diff --git a/domains-frontend/.prettierignore b/domains-frontend/.prettierignore
new file mode 100644
index 0000000..ac66857
--- /dev/null
+++ b/domains-frontend/.prettierignore
@@ -0,0 +1,4 @@
+# Lock files
+package-lock.json
+pnpm-lock.yaml
+yarn.lock
diff --git a/domains-frontend/.prettierrc b/domains-frontend/.prettierrc
new file mode 100644
index 0000000..0a72520
--- /dev/null
+++ b/domains-frontend/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "trailingComma": "es5",
+ "tabWidth": 2,
+ "semi": true,
+ "singleQuote": true
+}
diff --git a/domains-frontend/Dockerfile b/domains-frontend/Dockerfile
new file mode 100644
index 0000000..8314398
--- /dev/null
+++ b/domains-frontend/Dockerfile
@@ -0,0 +1,18 @@
+FROM node:20-alpine AS build
+WORKDIR /app
+
+RUN corepack enable && corepack prepare pnpm@latest --activate
+
+COPY package.json pnpm-lock.yaml ./
+RUN pnpm install --frozen-lockfile
+
+COPY . .
+RUN pnpm build
+
+FROM nginx:alpine
+COPY --from=build /app/dist /usr/share/nginx/html
+COPY nginx.conf /etc/nginx/conf.d/default.conf
+
+EXPOSE 3000
+
+CMD ["nginx", "-g", "daemon off;"]
diff --git a/domains-frontend/nginx.conf b/domains-frontend/nginx.conf
new file mode 100644
index 0000000..9486ff5
--- /dev/null
+++ b/domains-frontend/nginx.conf
@@ -0,0 +1,25 @@
+server {
+ listen 3000;
+ server_name localhost;
+
+ root /usr/share/nginx/html;
+ index index.html;
+
+ location /api/ {
+ proxy_pass http://api-gateway:8080/api/;
+ 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;
+ }
+
+ location /exdns/ {
+ proxy_pass http://exdns:8000/;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ }
+
+ location / {
+ try_files $uri $uri/ /index.html;
+ }
+}
diff --git a/domains-frontend/orval.config.ts b/domains-frontend/orval.config.ts
new file mode 100644
index 0000000..b6db5e1
--- /dev/null
+++ b/domains-frontend/orval.config.ts
@@ -0,0 +1,48 @@
+import { defineConfig } from 'orval';
+
+export default defineConfig({
+ auth: {
+ // input: 'src/api/specs/auth-openapi.json',
+ input: 'http://localhost:8080/api/auth/v3/api-docs',
+ output: {
+ client: 'axios-functions',
+ target: 'src/api/services/auth.ts',
+ schemas: 'src/api/models/auth',
+ override: {
+ mutator: {
+ path: './src/api/apiClient.ts',
+ name: 'customInstance',
+ },
+ },
+ },
+ },
+ domainOrder: {
+ // input: 'src/api/specs/domain-order-openapi.json',
+ input: 'http://localhost:8080/api/domains/v3/api-docs',
+ output: {
+ client: 'axios-functions',
+ target: 'src/api/services/domain-order.ts',
+ schemas: 'src/api/models/domain-order',
+ override: {
+ mutator: {
+ path: './src/api/apiClientDomains.ts',
+ name: 'customInstance',
+ },
+ },
+ },
+ },
+ exdns: {
+ input: 'src/api/specs/exdns.json',
+ output: {
+ client: 'axios-functions',
+ target: 'src/api/services/exdns.ts',
+ schemas: 'src/api/models/exdns',
+ override: {
+ mutator: {
+ path: './src/api/apiClientExdns.ts',
+ name: 'customInstance',
+ },
+ },
+ },
+ },
+});
diff --git a/domains-frontend/package.json b/domains-frontend/package.json
new file mode 100644
index 0000000..e7d9edb
--- /dev/null
+++ b/domains-frontend/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "domains-frontend",
+ "version": "1.0.0",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "build": "rsbuild build",
+ "dev": "rsbuild dev --open",
+ "format": "prettier --write .",
+ "preview": "rsbuild preview",
+ "genapi": "orval --config orval.config.ts"
+ },
+ "dependencies": {
+ "@chakra-ui/react": "^3.30.0",
+ "@emotion/react": "^11.14.0",
+ "@fontsource-variable/jost": "^5.2.8",
+ "@fontsource/golos-text": "^5.2.8",
+ "@simplewebauthn/browser": "^13.2.2",
+ "axios": "^1.13.2",
+ "dayjs": "^1.11.19",
+ "lucide-react": "^0.562.0",
+ "mobx": "^6.15.0",
+ "mobx-react-lite": "^4.1.1",
+ "next-themes": "^0.4.6",
+ "react": "^19.2.3",
+ "react-dom": "^19.2.3",
+ "react-hook-form": "^7.70.0",
+ "react-icons": "^5.5.0",
+ "react-router": "^7.12.0"
+ },
+ "devDependencies": {
+ "@rsbuild/core": "^1.7.1",
+ "@rsbuild/plugin-react": "^1.4.2",
+ "@types/react": "^19.2.7",
+ "@types/react-dom": "^19.2.3",
+ "orval": "^7.17.2",
+ "prettier": "^3.7.3",
+ "typescript": "^5.9.3"
+ }
+}
diff --git a/domains-frontend/pnpm-lock.yaml b/domains-frontend/pnpm-lock.yaml
new file mode 100644
index 0000000..2377d13
--- /dev/null
+++ b/domains-frontend/pnpm-lock.yaml
@@ -0,0 +1,4976 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@chakra-ui/react':
+ specifier: ^3.30.0
+ version: 3.30.0(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@emotion/react':
+ specifier: ^11.14.0
+ version: 11.14.0(@types/react@19.2.7)(react@19.2.3)
+ '@fontsource-variable/jost':
+ specifier: ^5.2.8
+ version: 5.2.8
+ '@fontsource/golos-text':
+ specifier: ^5.2.8
+ version: 5.2.8
+ '@simplewebauthn/browser':
+ specifier: ^13.2.2
+ version: 13.2.2
+ axios:
+ specifier: ^1.13.2
+ version: 1.13.2
+ dayjs:
+ specifier: ^1.11.19
+ version: 1.11.19
+ lucide-react:
+ specifier: ^0.562.0
+ version: 0.562.0(react@19.2.3)
+ mobx:
+ specifier: ^6.15.0
+ version: 6.15.0
+ mobx-react-lite:
+ specifier: ^4.1.1
+ version: 4.1.1(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ next-themes:
+ specifier: ^0.4.6
+ version: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react:
+ specifier: ^19.2.3
+ version: 19.2.3
+ react-dom:
+ specifier: ^19.2.3
+ version: 19.2.3(react@19.2.3)
+ react-hook-form:
+ specifier: ^7.70.0
+ version: 7.70.0(react@19.2.3)
+ react-icons:
+ specifier: ^5.5.0
+ version: 5.5.0(react@19.2.3)
+ react-router:
+ specifier: ^7.12.0
+ version: 7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ devDependencies:
+ '@rsbuild/core':
+ specifier: ^1.7.1
+ version: 1.7.2
+ '@rsbuild/plugin-react':
+ specifier: ^1.4.2
+ version: 1.4.2(@rsbuild/core@1.7.2)
+ '@types/react':
+ specifier: ^19.2.7
+ version: 19.2.7
+ '@types/react-dom':
+ specifier: ^19.2.3
+ version: 19.2.3(@types/react@19.2.7)
+ orval:
+ specifier: ^7.17.2
+ version: 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ prettier:
+ specifier: ^3.7.3
+ version: 3.7.4
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+
+packages:
+
+ '@apidevtools/json-schema-ref-parser@14.0.1':
+ resolution: {integrity: sha512-Oc96zvmxx1fqoSEdUmfmvvb59/KDOnUoJ7s2t7bISyAn0XEz57LCCw8k2Y4Pf3mwKaZLMciESALORLgfe2frCw==}
+ engines: {node: '>= 16'}
+
+ '@apidevtools/openapi-schemas@2.1.0':
+ resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==}
+ engines: {node: '>=10'}
+
+ '@apidevtools/swagger-methods@3.0.2':
+ resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==}
+
+ '@apidevtools/swagger-parser@12.1.0':
+ resolution: {integrity: sha512-e5mJoswsnAX0jG+J09xHFYQXb/bUc5S3pLpMxUuRUA2H8T2kni3yEoyz2R3Dltw5f4A6j6rPNMpWTK+iVDFlng==}
+ peerDependencies:
+ openapi-types: '>=7'
+
+ '@ark-ui/react@5.30.0':
+ resolution: {integrity: sha512-MIWgj6uWTuG42DGaXUQARObvuQJymm+/1wsdGEDrIHtSv0a2PFQO4svwMvMFwfFbL1jVkJzzBU6JDAH0xKbvyw==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@asyncapi/specs@6.10.0':
+ resolution: {integrity: sha512-vB5oKLsdrLUORIZ5BXortZTlVyGWWMC1Nud/0LtgxQ3Yn2738HigAD6EVqScvpPsDUI/bcLVsYEXN4dtXQHVng==}
+
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.28.5':
+ resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.27.1':
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/runtime@7.28.4':
+ resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.27.2':
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.28.5':
+ resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
+ engines: {node: '>=6.9.0'}
+
+ '@chakra-ui/react@3.30.0':
+ resolution: {integrity: sha512-eIRRAilqY4f2zN8GWRnjcciBYsvy3GZDOmzGD9xk596LBxCTNCJaivdBiHCcgNlqA3y1wMyM1jepy2b2vQC4QA==}
+ peerDependencies:
+ '@emotion/react': '>=11'
+ react: '>=18'
+ react-dom: '>=18'
+
+ '@commander-js/extra-typings@14.0.0':
+ resolution: {integrity: sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg==}
+ peerDependencies:
+ commander: ~14.0.0
+
+ '@emnapi/core@1.8.1':
+ resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
+
+ '@emnapi/runtime@1.8.1':
+ resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
+
+ '@emnapi/wasi-threads@1.1.0':
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+
+ '@emotion/babel-plugin@11.13.5':
+ resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==}
+
+ '@emotion/cache@11.14.0':
+ resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==}
+
+ '@emotion/hash@0.9.2':
+ resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
+
+ '@emotion/is-prop-valid@1.4.0':
+ resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==}
+
+ '@emotion/memoize@0.9.0':
+ resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
+
+ '@emotion/react@11.14.0':
+ resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@emotion/serialize@1.3.3':
+ resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==}
+
+ '@emotion/sheet@1.4.0':
+ resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==}
+
+ '@emotion/unitless@0.10.0':
+ resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==}
+
+ '@emotion/use-insertion-effect-with-fallbacks@1.2.0':
+ resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==}
+ peerDependencies:
+ react: '>=16.8.0'
+
+ '@emotion/utils@1.4.2':
+ resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==}
+
+ '@emotion/weak-memoize@0.4.0':
+ resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
+
+ '@esbuild/aix-ppc64@0.25.12':
+ resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.25.12':
+ resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.25.12':
+ resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.25.12':
+ resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.25.12':
+ resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.25.12':
+ resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.25.12':
+ resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.25.12':
+ resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.25.12':
+ resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.25.12':
+ resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.25.12':
+ resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.25.12':
+ resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.25.12':
+ resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.25.12':
+ resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.25.12':
+ resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.25.12':
+ resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.25.12':
+ resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.25.12':
+ resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.25.12':
+ resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.25.12':
+ resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.25.12':
+ resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.25.12':
+ resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.25.12':
+ resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.25.12':
+ resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@exodus/schemasafe@1.3.0':
+ resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==}
+
+ '@floating-ui/core@1.7.3':
+ resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
+
+ '@floating-ui/dom@1.7.4':
+ resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
+
+ '@floating-ui/utils@0.2.10':
+ resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
+
+ '@fontsource-variable/jost@5.2.8':
+ resolution: {integrity: sha512-+VDDHpbhgZ9A8KeHb7/LUMRR1LILVKIscNhVRSDzn3tFXoi1mFA/OhO8CZL/u2OujoGjZANjOdUZIgaxclxyjw==}
+
+ '@fontsource/golos-text@5.2.8':
+ resolution: {integrity: sha512-8aJxXaRDbZVh97RBmL1nzUUI5K5KuG0b7LC/p5Q204/OF6IdpSeXTD6nxHwqrfLQXLr6hEO5c+y2rHqkHnuu2g==}
+
+ '@gerrit0/mini-shiki@3.21.0':
+ resolution: {integrity: sha512-9PrsT5DjZA+w3lur/aOIx3FlDeHdyCEFlv9U+fmsVyjPZh61G5SYURQ/1ebe2U63KbDmI2V8IhIUegWb8hjOyg==}
+
+ '@ibm-cloud/openapi-ruleset-utilities@1.9.0':
+ resolution: {integrity: sha512-AoFbSarOqFBYH+1TZ9Ahkm2IWYSi5v0pBk88fpV+5b3qGJukypX8PwvCWADjuyIccKg48/F73a6hTTkBzDQ2UA==}
+ engines: {node: '>=16.0.0'}
+
+ '@ibm-cloud/openapi-ruleset@1.33.5':
+ resolution: {integrity: sha512-oT8USsTulFAA8FiBN0lA2rJqQI2lIt+HP2pdakGQXo3EviL2vqJTgpSCRwjl6mLJL158f1BVcdQUOEFGxomK3w==}
+ engines: {node: '>=16.0.0'}
+
+ '@internationalized/date@3.10.0':
+ resolution: {integrity: sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==}
+
+ '@internationalized/number@3.6.5':
+ resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@jsep-plugin/assignment@1.3.0':
+ resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
+
+ '@jsep-plugin/regex@1.0.4':
+ resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
+
+ '@jsep-plugin/ternary@1.1.4':
+ resolution: {integrity: sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
+
+ '@module-federation/error-codes@0.22.0':
+ resolution: {integrity: sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==}
+
+ '@module-federation/runtime-core@0.22.0':
+ resolution: {integrity: sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==}
+
+ '@module-federation/runtime-tools@0.22.0':
+ resolution: {integrity: sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==}
+
+ '@module-federation/runtime@0.22.0':
+ resolution: {integrity: sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==}
+
+ '@module-federation/sdk@0.22.0':
+ resolution: {integrity: sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==}
+
+ '@module-federation/webpack-bundler-runtime@0.22.0':
+ resolution: {integrity: sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==}
+
+ '@napi-rs/wasm-runtime@1.0.7':
+ resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@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'}
+
+ '@orval/angular@7.17.2':
+ resolution: {integrity: sha512-+WBILd8KJD/I8eyX2eyTmzhyY+oTvbCTV25YoF2/UzWaBIq0reIhe5i2J2vUBXFnhZDLfwJYn70v341y7NSPlQ==}
+
+ '@orval/axios@7.17.2':
+ resolution: {integrity: sha512-9wNxnEtNSI4S22V5ta4f5jaFAfrJ5PEcQwALP6ogsBxT0lUhzHWhRGWaopA2SJLW8eCGfPVo4fF/x/2i9ecG8w==}
+
+ '@orval/core@7.17.2':
+ resolution: {integrity: sha512-7kv7JgC6Va9hE/OiYTaJEU52Uy52y8Ill26QZufgP9yeMT60h3yiycF//LSQp83P+fGzcS9PLuCS4uRPmrMtgA==}
+
+ '@orval/fetch@7.17.2':
+ resolution: {integrity: sha512-gBgk4POAacKs4c7VKCQPTkdLWvxF2s1p/EBKT1N6h2QKUxZcO7MbV141FQXFghFGFYgpuNiUTlox4BbSeCVrXw==}
+
+ '@orval/hono@7.17.2':
+ resolution: {integrity: sha512-YSTDYPysnD5LyugRKGSU4kZEMgK0HeLeZ7r1X/4u6U5FrRdhmjf+gjnCseBR61yKwS/8BLMogIe7qw8uOs83Hg==}
+
+ '@orval/mcp@7.17.2':
+ resolution: {integrity: sha512-7aJcZMSh2ZPHdcgz0JdilVTLcaMbPeEHJgpJTvSUZembgQvBwJYfalaaROfBmRH9nSfHP11DYmsuG5kTIfd3JA==}
+
+ '@orval/mock@7.17.2':
+ resolution: {integrity: sha512-otVzA/yR2lKQJRSIeVyuh+tl/uE/EJQ82oJg9Zu11S70QzxMTCg/IEe8fbTeE3APtoujhACB6aZ/qqbmK29ugw==}
+
+ '@orval/query@7.17.2':
+ resolution: {integrity: sha512-dbD3U6CuRBYszMQOlitO4MryLnrlZIHwjNGsree0l5WO25e9QrfEMPxFU9wVaLnP/w10ODMBsBIBNUmy5ifXxQ==}
+
+ '@orval/swr@7.17.2':
+ resolution: {integrity: sha512-BWN7E41JEfr2qVFi+sNwPH3jXJgL4BiIAJTqZraZW0S89EmI4kU2yh3YveNmeopXai7mssaiiAlE8qe4wFcWnw==}
+
+ '@orval/zod@7.17.2':
+ resolution: {integrity: sha512-Zf2sAQAGZ99VzummF4/Tq5pbXe6qR+w37XmLX5bMokshT8lEuV9goT4gftW4AWGY3Azrp/Syj3fdbSBthN/KPw==}
+
+ '@pandacss/is-valid-prop@1.8.0':
+ resolution: {integrity: sha512-ni3nGvk7K7OwvS5QWljnPgLaNhfcqFJnCYQxyEgUBXcAd/hEbwMhXjfuL/VFczWPERJITJdi1FB/giau3pF+DQ==}
+
+ '@rsbuild/core@1.7.2':
+ resolution: {integrity: sha512-VAFO6cM+cyg2ntxNW6g3tB2Jc5J5mpLjLluvm7VtW2uceNzyUlVv41o66Yp1t1ikxd3ljtqegViXem62JqzveA==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+
+ '@rsbuild/plugin-react@1.4.2':
+ resolution: {integrity: sha512-2rJb5mOuqVof2aDq4SbB1E65+0n1vjhAADipC88jvZRNuTOulg79fh7R4tsCiBMI4VWq46gSpwekiK8G5bq6jg==}
+ peerDependencies:
+ '@rsbuild/core': 1.x
+
+ '@rspack/binding-darwin-arm64@1.7.1':
+ resolution: {integrity: sha512-3C0w0kfCHfgOH+AP/Dx1bm/b3AR/or5CmU22Abevek0m95ndU3iT902eLcm9JNiMQnDQLBQbolfj5P591t0oPg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rspack/binding-darwin-x64@1.7.1':
+ resolution: {integrity: sha512-HTrBpdw2gWwcpJ3c8h4JF8B1YRNvrFT+K620ycttrlu/HvI4/U770BBJ/ej36R/hdh59JvMCGe+w49FyXv6rzg==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rspack/binding-linux-arm64-gnu@1.7.1':
+ resolution: {integrity: sha512-BX9yAPCO0WBFyOzKl9bSXT/cH27nnOJp02smIQMxfv7RNfwGkJg5GgakYcuYG+9U1HEFitBSzmwS2+dxDcAxlg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rspack/binding-linux-arm64-musl@1.7.1':
+ resolution: {integrity: sha512-maBX19XyiVkxzh/NA79ALetCobc4zUyoWkWLeCGyW5xKzhPVFatJp+qCiHqHkqUZcgRo+1i5ihoZ2bXmelIeZg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rspack/binding-linux-x64-gnu@1.7.1':
+ resolution: {integrity: sha512-8KJAeBLiWcN7zEc9aaS7LRJPZVtZuQU8mCsn+fRhdQDSc+a9FcTN8b6Lw29z8cejwbU6Gxr/8wk5XGexMWFaZA==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rspack/binding-linux-x64-musl@1.7.1':
+ resolution: {integrity: sha512-Gn9x5vhKRELvSoZ3ZjquY8eWtCXur0OsYnZ2/ump8mofM6IDaL7Qqu3Hf4Kud31PDH0tfz0jWf9piX32HHPmgg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rspack/binding-wasm32-wasi@1.7.1':
+ resolution: {integrity: sha512-2r9M5iVchmsFkp3sz7A5YnMm2TfpkB71LK3AoaRWKMfvf5oFky0GSGISYd2TCBASO+X2Qskaq+B24Szo8zH5FA==}
+ cpu: [wasm32]
+
+ '@rspack/binding-win32-arm64-msvc@1.7.1':
+ resolution: {integrity: sha512-/WIHp982yqqqAuiz2WLtf1ofo9d1lHDGZJ7flxFllb1iMgnUeSRyX6stxEi11K3Rg6pQa7FdCZGKX/engyj2bw==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rspack/binding-win32-ia32-msvc@1.7.1':
+ resolution: {integrity: sha512-Kpela29n+kDGGsss6q/3qTd6n9VW7TOQaiA7t1YLdCCl8qqcdKlz/vWjFMd2MqgcSGC/16PvChE4sgpUvryfCQ==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rspack/binding-win32-x64-msvc@1.7.1':
+ resolution: {integrity: sha512-B/y4MWqP2Xeto1/HV0qtZNOMPSLrEVOqi2b7JSIXG/bhlf+3IAkDzEEoHs+ZikLR4C8hMaS0pVJsDGKFmGzC9A==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rspack/binding@1.7.1':
+ resolution: {integrity: sha512-qVTV1/UWpMSZktvK5A8+HolgR1Qf0nYR3Gg4Vax5x3/BcHDpwGZ0fbdFRUirGVWH/XwxZ81zoI6F2SZq7xbX+w==}
+
+ '@rspack/core@1.7.1':
+ resolution: {integrity: sha512-kRxfY8RRa6nU3/viDvAIP6CRpx+0rfXFRonPL0pHBx8u6HhV7m9rLEyaN6MWsLgNIAWkleFGb7tdo4ux2ljRJQ==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ '@swc/helpers': '>=0.5.1'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+
+ '@rspack/lite-tapable@1.1.0':
+ resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==}
+
+ '@rspack/plugin-react-refresh@1.6.0':
+ resolution: {integrity: sha512-OO53gkrte/Ty4iRXxxM6lkwPGxsSsupFKdrPFnjwFIYrPvFLjeolAl5cTx+FzO5hYygJiGnw7iEKTmD+ptxqDA==}
+ peerDependencies:
+ react-refresh: '>=0.10.0 <1.0.0'
+ webpack-hot-middleware: 2.x
+ peerDependenciesMeta:
+ webpack-hot-middleware:
+ optional: true
+
+ '@shikijs/engine-oniguruma@3.21.0':
+ resolution: {integrity: sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==}
+
+ '@shikijs/langs@3.21.0':
+ resolution: {integrity: sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==}
+
+ '@shikijs/themes@3.21.0':
+ resolution: {integrity: sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==}
+
+ '@shikijs/types@3.21.0':
+ resolution: {integrity: sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==}
+
+ '@shikijs/vscode-textmate@10.0.2':
+ resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+
+ '@simplewebauthn/browser@13.2.2':
+ resolution: {integrity: sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA==}
+
+ '@stoplight/better-ajv-errors@1.0.3':
+ resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==}
+ engines: {node: ^12.20 || >= 14.13}
+ peerDependencies:
+ ajv: '>=8'
+
+ '@stoplight/json-ref-readers@1.2.2':
+ resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==}
+ engines: {node: '>=8.3.0'}
+
+ '@stoplight/json-ref-resolver@3.1.6':
+ resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==}
+ engines: {node: '>=8.3.0'}
+
+ '@stoplight/json@3.21.7':
+ resolution: {integrity: sha512-xcJXgKFqv/uCEgtGlPxy3tPA+4I+ZI4vAuMJ885+ThkTHFVkC+0Fm58lA9NlsyjnkpxFh4YiQWpH+KefHdbA0A==}
+ engines: {node: '>=8.3.0'}
+
+ '@stoplight/ordered-object-literal@1.0.5':
+ resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==}
+ engines: {node: '>=8'}
+
+ '@stoplight/path@1.3.2':
+ resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==}
+ engines: {node: '>=8'}
+
+ '@stoplight/spectral-core@1.20.0':
+ resolution: {integrity: sha512-5hBP81nCC1zn1hJXL/uxPNRKNcB+/pEIHgCjPRpl/w/qy9yC9ver04tw1W0l/PMiv0UeB5dYgozXVQ4j5a6QQQ==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-formats@1.8.2':
+ resolution: {integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-functions@1.10.1':
+ resolution: {integrity: sha512-obu8ZfoHxELOapfGsCJixKZXZcffjg+lSoNuttpmUFuDzVLT3VmH8QkPXfOGOL5Pz80BR35ClNAToDkdnYIURg==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-parsers@1.0.5':
+ resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-ref-resolver@1.0.5':
+ resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-rulesets@1.22.0':
+ resolution: {integrity: sha512-l2EY2jiKKLsvnPfGy+pXC0LeGsbJzcQP5G/AojHgf+cwN//VYxW1Wvv4WKFx/CLmLxc42mJYF2juwWofjWYNIQ==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-runtime@1.1.4':
+ resolution: {integrity: sha512-YHbhX3dqW0do6DhiPSgSGQzr6yQLlWybhKwWx0cqxjMwxej3TqLv3BXMfIUYFKKUqIwH4Q2mV8rrMM8qD2N0rQ==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/types@13.20.0':
+ resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==}
+ engines: {node: ^12.20 || >=14.13}
+
+ '@stoplight/types@13.6.0':
+ resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==}
+ engines: {node: ^12.20 || >=14.13}
+
+ '@stoplight/types@14.1.1':
+ resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==}
+ engines: {node: ^12.20 || >=14.13}
+
+ '@stoplight/yaml-ast-parser@0.0.50':
+ resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==}
+
+ '@stoplight/yaml@4.3.0':
+ resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==}
+ engines: {node: '>=10.8'}
+
+ '@swc/helpers@0.5.18':
+ resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==}
+
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
+ '@types/es-aggregate-error@1.0.6':
+ resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==}
+
+ '@types/hast@3.0.4':
+ resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/node@25.0.5':
+ resolution: {integrity: sha512-FuLxeLuSVOqHPxSN1fkcD8DLU21gAP7nCKqGRJ/FglbCUBs0NYN6TpHcdmyLeh8C0KwGIaZQJSv+OYG+KZz+Gw==}
+
+ '@types/parse-json@4.0.2':
+ resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
+
+ '@types/react-dom@19.2.3':
+ resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
+ '@types/react@19.2.7':
+ resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==}
+
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+ '@types/urijs@1.19.26':
+ resolution: {integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg==}
+
+ '@zag-js/accordion@1.31.1':
+ resolution: {integrity: sha512-3sGi4EZpGBz/O1IVkk9dzzWzP5vVVOj4Li6C+jHOnrgaWPouA/mBTP5L9HEL8qtFsECFZwpNo486eqiCmeHoGw==}
+
+ '@zag-js/anatomy@1.31.1':
+ resolution: {integrity: sha512-BhIhf3Q0tRA0Jugd7AJfUBzeAb/iATBsw7KyYThMGcPWmrWssL7KWr5AB6RufzGKU7+DCb1QEhlqd4NSOJaYxQ==}
+
+ '@zag-js/angle-slider@1.31.1':
+ resolution: {integrity: sha512-SfWrgnM0zMLX82rsIJOqWk430UnPA17UFGcDqMDRwXy1Wx4yptmx0aFAsSXnRnw4Ee7WaulF2RWBli6O6iYRCA==}
+
+ '@zag-js/aria-hidden@1.31.1':
+ resolution: {integrity: sha512-SoNt4S2LkHNWPglQczWN0E5vAV15MT1GoK9MksZzbkMhl+pkDTdLytpXsQ1IgalC1YUng0XNps/Wt6P3uDuzTA==}
+
+ '@zag-js/async-list@1.31.1':
+ resolution: {integrity: sha512-BDZEmr4KKh3JASgkXouOwoTWRS1UPE3gdZYZ7Sk7SJ1i8+Pk6zUQ4FnxaoF/cSAdCXyjSSr92Kns2bTk/QuNkQ==}
+
+ '@zag-js/auto-resize@1.31.1':
+ resolution: {integrity: sha512-qzWHibjBekSmFweG+EWY8g0lRzKtok7o9XtQ+JFlOu3s6x4D02z2YDzjDdfSLmS7j0NxISnwQkinWiDAZEYHog==}
+
+ '@zag-js/avatar@1.31.1':
+ resolution: {integrity: sha512-Grosi2hRn4wfDYlPd8l+d4GCIFMsoj6ZFqii+1k14AqTDiCUJ/J0jCvOrRHkvkpEqektjuSD7e/GCX+yawqkuQ==}
+
+ '@zag-js/bottom-sheet@1.31.1':
+ resolution: {integrity: sha512-ZBbIpYyZX2zQeqW36aODVi9/I4J3zS1XmIHUjeXmfmf6TlQUA1ydgYl7ipREfmCzNWX2LEA5ZnPJQw0UBcrB8w==}
+
+ '@zag-js/carousel@1.31.1':
+ resolution: {integrity: sha512-228Ol86G/lg8crcomy5cALkUYdOHCHcvJnSOQzeUj80JNjlELzrjBpaAj4lx8dZocfwou2Sg4NyZJ+mISSc+Dg==}
+
+ '@zag-js/checkbox@1.31.1':
+ resolution: {integrity: sha512-oLS8bqhimckLl6coCNmKPPUmB8wIbVhtkpLwLPLgz4vhhUe7gnpB5dea14Ow2JTBnmug8bMh/bJDtuPa9qQuTw==}
+
+ '@zag-js/clipboard@1.31.1':
+ resolution: {integrity: sha512-pv/gOmD9DMg+YmSMjahyd5oSp7/v9K0uQ3att6fPeaNMjB42b3tnY1S1GNVy5Ltf/qHDab6WVwlEN+1zKHXaYw==}
+
+ '@zag-js/collapsible@1.31.1':
+ resolution: {integrity: sha512-eCC5G6bBZUwF8z2XULQXUNRxqte9I2Sv+WJ2brycPn1a68uYD76RzFBmLQ2er95VbshUdeo8nRuX8MooAFuYzg==}
+
+ '@zag-js/collection@1.31.1':
+ resolution: {integrity: sha512-ecpfyfCj8Y0/GUPuHYsLxexIrx10VuR3Wd0H+lamcki3lYgQxZrpLRFMwgTqmI/m7t3zhm5QeEvMUJ1H14YMLA==}
+
+ '@zag-js/color-picker@1.31.1':
+ resolution: {integrity: sha512-AWNZth49iEDxqh1DBZNSKpfEM/FF+MjL5bgUHVctnHdkpFsZLynJorWQQ4hNXNDFEc/I5w10KSxVCcO6tsPGFw==}
+
+ '@zag-js/color-utils@1.31.1':
+ resolution: {integrity: sha512-HdjTRU8C0tO6hK+PBVlu8iQH1MJaAnJAEdq2FcD97mq0PiPhrSj6iOftnrvPsE4CRieVFjnJWOvaubWFc4VmHA==}
+
+ '@zag-js/combobox@1.31.1':
+ resolution: {integrity: sha512-IT0getSAGzngdRL20iX/iAh2d7DzVoMDDppOsOFBG2owKAgLpj8uLvUhy+lcrm6N8yxYOya89D6Aef7V5KdwlQ==}
+
+ '@zag-js/core@1.31.1':
+ resolution: {integrity: sha512-RaMJeqtjxG6k7iFD3WQnlyFJVT3yfQN+pJygAHH37GsMtiNzQQJOoesjb0LV9T27jwMXeNUzrh3MSDr1/0yVcQ==}
+
+ '@zag-js/date-picker@1.31.1':
+ resolution: {integrity: sha512-AOWN/IskGidVQt5g+uE9cILqJBTclE6OG1GC9WSWuyP/y4F+PdP/781SgYpYCZg/6pMGbL01PFKKb7xOOCeZAg==}
+ peerDependencies:
+ '@internationalized/date': '>=3.0.0'
+
+ '@zag-js/date-utils@1.31.1':
+ resolution: {integrity: sha512-+Aq9g/rqLeiRmnazgdZMc59gAxqxbw3GGy8AngrtNipgRtMhPlzGa3S4Qsq1yau6OKaHZ13uckUS+MhLNbBY+Q==}
+ peerDependencies:
+ '@internationalized/date': '>=3.0.0'
+
+ '@zag-js/dialog@1.31.1':
+ resolution: {integrity: sha512-iaWlYQ6TYoVjM/X5+UZVZzKiMboE50GnEzGUpbhbeRNRiLqSu5dODSFzior1G4kde/ns5eN+BTf/Tm6AT4N2og==}
+
+ '@zag-js/dismissable@1.31.1':
+ resolution: {integrity: sha512-jCdJwQmEkG6PlrN13fUk2l7ZclSu54FZwmT4xOtQpEbaiAiESm5KI5oyFh5jDPY47Goa28UJkEjWXVgKXKWb0g==}
+
+ '@zag-js/dom-query@1.31.1':
+ resolution: {integrity: sha512-2tCZLwSfoXm62gwl0neiAN6u5VnzUhy5wHtKbX+klqGFatnca3Bm++H9+4PHMrwUWRbPg3H5N151lKFEOQhBfQ==}
+
+ '@zag-js/editable@1.31.1':
+ resolution: {integrity: sha512-JMICHw4/x0YqDy/n+I+TeaXlFbTA0j9w3UqOWMwUFQ+dAsq4JLXeqZDXu19MQN6yaTFdOpG1EFw4FEVTsu+d3Q==}
+
+ '@zag-js/file-upload@1.31.1':
+ resolution: {integrity: sha512-cp7qMiXKrIcTfDamOz9wlnJLeBF8gucTI7Y+iKaP+hiIW+OG254GElfQiqXNDad3HUmD+Dt8Tx6uAzL/mw3sbQ==}
+
+ '@zag-js/file-utils@1.31.1':
+ resolution: {integrity: sha512-MDDz52IdPh/mPUYrqUXvh7qDckJHs+mt5gjfx0N89qh2JNXuRU14zPotOKTzIKM4o+HFZkAT6BAfMpr9CX/0ug==}
+
+ '@zag-js/floating-panel@1.31.1':
+ resolution: {integrity: sha512-Pjgd/wjdglZ90dtq/LC4o5sc6w0m+RehhPmJcIzq9T+E/Xrb6qrhf06QhxB9LwSj4DG/gIv87gmD2qF1VH7cRQ==}
+
+ '@zag-js/focus-trap@1.31.1':
+ resolution: {integrity: sha512-omgUhAz1r81pYAujqYIIavdTKJzDRExioSiqhnx/xq10a6Q/xavMFflq8w7edMc9JHkTOnr9E5qh9abCVJjhpQ==}
+
+ '@zag-js/focus-visible@1.31.1':
+ resolution: {integrity: sha512-GC59A3yd7tj8aKhzvhrM+CEZZraXm5y/SpfIjz1J7kGV6eeXbUtjkbe75g99Ve8iJYfQVQlAj2GyN3oniHc5Zw==}
+
+ '@zag-js/highlight-word@1.31.1':
+ resolution: {integrity: sha512-nQw7t8LgWXW+6Z5E/p6T+OST0DDXp35mrFCzrkJL54aVTZ3GuLyIP2p0/HGQr2hE/KKLbZEs5i6UcXF84tiI4g==}
+
+ '@zag-js/hover-card@1.31.1':
+ resolution: {integrity: sha512-R74kz2wPgGwB3jKQeD91kdtlvVKpffWBJHqw8yCBd95GXGVmhym+BPoCToJzcqiemP8+0EtSuVPU9IHaSuJnSg==}
+
+ '@zag-js/i18n-utils@1.31.1':
+ resolution: {integrity: sha512-SARkFuo1+Q0WcNv4jqvxp5hjCOqu/gBa7p6BTh7v5Bo00QhKRM/bCvVt0EB6V+h2oejrZfkwZ0MwbpQiL6L2aQ==}
+
+ '@zag-js/image-cropper@1.31.1':
+ resolution: {integrity: sha512-hFuy4I3jIJ/iyJsnfbLX1l/cJtN42j7lwhw8TeWVX8Y+hHxFPMSKx7AQirt/hALUbyy7QsQgAd5IslpsYq1Nlg==}
+
+ '@zag-js/interact-outside@1.31.1':
+ resolution: {integrity: sha512-oxBAlBqcatlxGUmhwUCRYTADIBrVoyxM1YrFzR1R8jhvVR/QCaxoLAyKwcA3mWXlZ8+NlXb7n5ELE11BZb/rEg==}
+
+ '@zag-js/json-tree-utils@1.31.1':
+ resolution: {integrity: sha512-wrNek2UBE69FWpo2f0E2MxiboBS+Uop79LeQU2jNDujA1o3x6b1Lp2r7Fl1sfnUWMdKVVQb44oqfIj2g3CTEmQ==}
+
+ '@zag-js/listbox@1.31.1':
+ resolution: {integrity: sha512-LcTIr4I9eN4MR1nSRfQfseWgj4ybOXXAY2o5dBpEBL67dnCSX3swNb/4LQO+ebj077BViQb66pBb1KSoeHGkEQ==}
+
+ '@zag-js/live-region@1.31.1':
+ resolution: {integrity: sha512-RBx8jk1dgvkEUuFs77SBZn0WwvEkeZgVawVu6XUAy4ENfhP0D/qkvwNk+Els8InKmr1gWKajD7sh+g8M40Ex6A==}
+
+ '@zag-js/marquee@1.31.1':
+ resolution: {integrity: sha512-Rt7+zy7CDOxXm0PqaTcmuWxcrZOPOpZY4T6IxOZk4ZcOXJQ2v7CkF3EK0pdI9PyI6Zpk/YIwQkENjidT55db0A==}
+
+ '@zag-js/menu@1.31.1':
+ resolution: {integrity: sha512-eJPRM8tlauRTsAoJXchDBzMzL2RhXYSHmHak2IJCDMApCV51p0MqGYP8Er3DbMSQTPUFuTq779uUIarDqW+zmA==}
+
+ '@zag-js/navigation-menu@1.31.1':
+ resolution: {integrity: sha512-xS4aynqmB9NYicPbEW8lPPakAfDfSgIDL1pRVSD6f1+VXkHD6LgNn6jUNDNbFt65mGhLpA2IczbvLCxv0g/ISQ==}
+
+ '@zag-js/number-input@1.31.1':
+ resolution: {integrity: sha512-vn+BXEZ2/g2CMIFFyjjye/SbCeW3I/rlszL8EyBmhMcuA1l51OX2WKry6HeQNiU41uMyFg2rb1pb5KVw1gJsCg==}
+
+ '@zag-js/pagination@1.31.1':
+ resolution: {integrity: sha512-icW6FNzIKNz7iXU+prlQWpMFJedDrhmCKzzI39SY+dv5g1Gnrlc0b44PxvNl5PWFLSkB5KBT/R1WCqd8Kh4cCA==}
+
+ '@zag-js/password-input@1.31.1':
+ resolution: {integrity: sha512-AivOeNO14a39xhxVMB2TVmIjmQ89OwVz0+2IjX3JjLS2Pmia+gg9xnVd2kBIcKfnqUN4MBnzmk7t46YWJMQVVQ==}
+
+ '@zag-js/pin-input@1.31.1':
+ resolution: {integrity: sha512-k3ESoX5ve5sbWBLTCPYAzgLjRU7mVNEUiqAOhRgazOcBGV5wjGh398zWb1jr0FMxPnoAMrXDN/CQwJTmJcMKrg==}
+
+ '@zag-js/popover@1.31.1':
+ resolution: {integrity: sha512-uCFJP3DFBkEBAre6lgGLw2xWS2ZIuT/DLeajIXb+8BmC9KCF0wY4c9qojx9F3rGMJQxcGl+WUoXENkOvkTaVhQ==}
+
+ '@zag-js/popper@1.31.1':
+ resolution: {integrity: sha512-wLXcEqzn9MK1rGbsgnDH26o5ZWqR4oeb6ZepKKy0gcuJl/1S5/dr1VBvxJNMZlf9d6etvYklG5LRnIVkXCbrjA==}
+
+ '@zag-js/presence@1.31.1':
+ resolution: {integrity: sha512-tv+WsBnA0abIlDuEfZMh0lRPF4cMs6kWJosNkGBwzeXnGds+KXjzpL2KDtwDgbJgN3sI0xHPMYjRy2v3ZamcDA==}
+
+ '@zag-js/progress@1.31.1':
+ resolution: {integrity: sha512-f9lIDHCRcFAG14LVEKOAPTdqPzphwIIraC6fTr9AwmNlYI6/qFDkz3jOlYVSyk5VsJAIFM/777x/CdqjliiOqg==}
+
+ '@zag-js/qr-code@1.31.1':
+ resolution: {integrity: sha512-Rxh+HF12SgUp5rvTelp1qyLK3xkn37h2fT/L4eBQ0f8OUEo8wfowEbs36+1i61d6UuH7PJt4q/07eIf6vNVevA==}
+
+ '@zag-js/radio-group@1.31.1':
+ resolution: {integrity: sha512-OfKIdEtSG0EuHM+cFVqcR+04yzZmcDRgG3j0QhoJsyS1my63ZHbwC2HNAtfPFh4U4sJx9yUexwSzPGZ6pOzIdw==}
+
+ '@zag-js/rating-group@1.31.1':
+ resolution: {integrity: sha512-BkQUglKm4a+KXYPACYvIvBJSuEyzV0YQqjjiucwJ5UiOlK72C66VBvyGN+DqJRDnkU1K5azt6E1Ja5ANk3fgsg==}
+
+ '@zag-js/react@1.31.1':
+ resolution: {integrity: sha512-a7uYH+tcw1UYbcovyVBzlh6X8KztK/b1+s8sMs4Srhd24M+hZMetV94Z0bM1Km5aNAnoS4gkH3gtJjH0OphquQ==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@zag-js/rect-utils@1.31.1':
+ resolution: {integrity: sha512-lBFheAnz8+3aGDFjqlkw0Iew/F03lFjiIf26hkkcFSZu0ltNZUMG/X3XLHUnHxdfbdBguc8ons6mr2MkVvisng==}
+
+ '@zag-js/remove-scroll@1.31.1':
+ resolution: {integrity: sha512-gVVJuFKaCjo652RmajYmkjXKgjJWLQ5ZhZLTaLUKWM1mAarvlqnLui8jrHEHLxqpfsjQylfdhJKkWmyF8NAgTA==}
+
+ '@zag-js/scroll-area@1.31.1':
+ resolution: {integrity: sha512-GBXd1K3U0AHwWlJaqAMKQMZyeoxuBO6XYrVgdvzgiftQbJrZs5fuYOFyDvPLDWHTLYxaHso44/f+9EmAUAiytw==}
+
+ '@zag-js/scroll-snap@1.31.1':
+ resolution: {integrity: sha512-YWsfhcQqiffu2X9HuB0fMnEQAu6rEOfGcvQYinvB6pjWPOvIJGxGMi/dYyy21XQDNJ9K1IcWRIo/yuaajoJyQQ==}
+
+ '@zag-js/select@1.31.1':
+ resolution: {integrity: sha512-vKWb8BiRY83Y3HkDNnimf6cr1yvzJh1HwZlzXFz0y47zEvlikQaf+r96obR78RgTtMjNTTV15tTXdc1/WFoYkw==}
+
+ '@zag-js/signature-pad@1.31.1':
+ resolution: {integrity: sha512-bz3WtLuIZoLrJDKcdS7fPAdD/Qi9wKiKACl5cu+ftv9zg8w+qqYNLtjH9HxeUFbCtQRKqcdXjO/UZ8iL07hgsQ==}
+
+ '@zag-js/slider@1.31.1':
+ resolution: {integrity: sha512-FILbLTMd3BnyclZ28+ippfyqzYPGK60qZapxtTERmWDC75Okf8AFnTCQf84Y8jRmBKCS1yhjF+IOtkFAENeB6w==}
+
+ '@zag-js/splitter@1.31.1':
+ resolution: {integrity: sha512-7SGBT2/xKsOzeSQEg+Otn1XV3RHrAz3jTySjBRKoEmdxubhfREqbKotbGVG65aTve11fQnmJ3Oyt3GJOeraxLA==}
+
+ '@zag-js/steps@1.31.1':
+ resolution: {integrity: sha512-KsBH38V3tH9/q8CDgx4sUSXLYwFdcp1crZy8hTIcN0RUiZ55PmqYKkN2znzBjTbaCW9yhP8kXsbuo2s8OIU5lQ==}
+
+ '@zag-js/store@1.31.1':
+ resolution: {integrity: sha512-d5ZTRciTuXOGQ3nML15kQLaTiR1wJPxT1Fu1nN659X6Rl8DPtubYaRCZ3RCk9Kyiyg2z5HxeVqDswaDvGbM9Rg==}
+
+ '@zag-js/switch@1.31.1':
+ resolution: {integrity: sha512-Jii3OSqSa9sQux+hvSRvp9dirzUF09+PAjrLjCQs+BT08EZ0XqeGvVzM0Wqf9LFy07HdLZntai3IUaXLF6byBw==}
+
+ '@zag-js/tabs@1.31.1':
+ resolution: {integrity: sha512-QBq4ngpBNMNEI7Wuaq8llwHOqgcVbNHHEDC5zHg60Bf7MY5ltP8wSq6Kldu0zZRVwrLzanYoMELDUyf9H0vtnw==}
+
+ '@zag-js/tags-input@1.31.1':
+ resolution: {integrity: sha512-V4lJe/aMIs7WVoXYfszU6E3iARLLRQFMiycu76/slb8NWJiLrkSIaMQ4FAe2pqkodgCWXA83tuaeAZRq7ouTFg==}
+
+ '@zag-js/timer@1.31.1':
+ resolution: {integrity: sha512-bXfeSbneWGOBKlD5dYq06T8CSY9Ky+qb1yIfJAFsRF4n34mpUYRdtfwpNQYyddGpkLD7oH4VibajeZXB7HaL0g==}
+
+ '@zag-js/toast@1.31.1':
+ resolution: {integrity: sha512-MueHEei9ol3H6tWBruLxF7yEUpV3vsJ8brTQVRRtPr/6pqBs5kGzfL4YskhQ2tiwO6egay8YrkbaS3xJfpKt4w==}
+
+ '@zag-js/toggle-group@1.31.1':
+ resolution: {integrity: sha512-Mojc7mex01/gvwXfrUIIThzT7HOktZoMge9rrb6+P7rQX7ulyNXYPjQrW2tay+t54GOJ3xODo9dU7PpRzXeHbw==}
+
+ '@zag-js/toggle@1.31.1':
+ resolution: {integrity: sha512-HbFBuGfdyYkNvOp3cEB8Civ4E92finT4u3e4LKysB4/LboqKA0cJvFhSnHyThbROONTx06W/3CxwoSFR4o8IhA==}
+
+ '@zag-js/tooltip@1.31.1':
+ resolution: {integrity: sha512-pWEU5XhEPpnyl2VLrGJlyjj7+p+X0UX3Fld+WGhc/hCaWiuW2ZzD/ewDRhSOZu4/TzAO3axrPqG1YhW4fhogKQ==}
+
+ '@zag-js/tour@1.31.1':
+ resolution: {integrity: sha512-ZmcAevXxoENHmHG0xwdIt1oCLe2/DW1CEBFPr7YuGKc+FU3QbBVZMzcBHrJCe0nkKXhUKzHOHM78bOHD/gM76w==}
+
+ '@zag-js/tree-view@1.31.1':
+ resolution: {integrity: sha512-Q+VSQz7X1XR8gT7ICWXlQOJIvzTWw/9BlF7B073UpEgAKRFlD11FmERka5y/BYqj8uE0vazcbSEA3Vc2dgCMJA==}
+
+ '@zag-js/types@1.31.1':
+ resolution: {integrity: sha512-mKw5DoeBjFykfUHv3ifCRjcogFTqp0aCCsmqQMfnf+J/mg2aXpAx76AXT1PYXAVVhxdP6qGXNd0mOQZDVrIlSQ==}
+
+ '@zag-js/utils@1.31.1':
+ resolution: {integrity: sha512-KLm0pmOtf4ydALbaVLboL7W98TDVxwVVLvSuvtRgV53XTjlsVopTRA5/Xmzq2NhWujDZAXv7bRV603NDgDcjSw==}
+
+ abort-controller@3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ajv-draft-04@1.0.0:
+ resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
+ peerDependencies:
+ ajv: ^8.5.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-errors@3.0.0:
+ resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==}
+ peerDependencies:
+ ajv: ^8.0.1
+
+ ajv-formats@2.1.1:
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv@8.17.1:
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ array-buffer-byte-length@1.0.2:
+ resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
+ engines: {node: '>= 0.4'}
+
+ array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+
+ arraybuffer.prototype.slice@1.0.4:
+ resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
+ engines: {node: '>= 0.4'}
+
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
+ async-function@1.0.0:
+ resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
+ engines: {node: '>= 0.4'}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ axios@1.13.2:
+ resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
+
+ babel-plugin-macros@3.1.0:
+ resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+ engines: {node: '>=10', npm: '>=6'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ call-me-maybe@1.0.2:
+ resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@14.0.2:
+ resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
+ engines: {node: '>=20'}
+
+ compare-versions@6.1.1:
+ resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ convert-source-map@1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+
+ cookie@1.1.1:
+ resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
+ engines: {node: '>=18'}
+
+ core-js@3.47.0:
+ resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==}
+
+ cosmiconfig@7.1.0:
+ resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+ engines: {node: '>=10'}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ data-view-buffer@1.0.2:
+ resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-length@1.0.2:
+ resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-offset@1.0.1:
+ resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
+ engines: {node: '>= 0.4'}
+
+ dayjs@1.11.19:
+ resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ dependency-graph@0.11.0:
+ resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==}
+ engines: {node: '>= 0.6.0'}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ enquirer@2.4.1:
+ resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
+ engines: {node: '>=8.6'}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ error-ex@1.3.4:
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
+
+ error-stack-parser@2.1.4:
+ resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
+
+ es-abstract@1.24.1:
+ resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==}
+ engines: {node: '>= 0.4'}
+
+ es-aggregate-error@1.0.14:
+ resolution: {integrity: sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==}
+ engines: {node: '>= 0.4'}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ es-to-primitive@1.3.0:
+ resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
+ engines: {node: '>= 0.4'}
+
+ es6-promise@3.3.1:
+ resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
+
+ esbuild@0.25.12:
+ resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ event-target-shim@5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-memoize@2.5.2:
+ resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==}
+
+ fast-safe-stringify@2.1.1:
+ resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
+
+ fast-uri@3.1.0:
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+
+ fastq@1.20.1:
+ resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-root@1.1.0:
+ resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
+
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
+
+ fs-extra@11.3.3:
+ resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==}
+ engines: {node: '>=14.14'}
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ function.prototype.name@1.1.8:
+ resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
+ engines: {node: '>= 0.4'}
+
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+ generator-function@2.0.1:
+ resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
+ engines: {node: '>= 0.4'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ get-symbol-description@1.1.0:
+ resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+
+ globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ has-bigints@1.1.0:
+ resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
+ engines: {node: '>= 0.4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.2.0:
+ resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hoist-non-react-statics@3.3.2:
+ resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+
+ html-entities@2.6.0:
+ resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
+
+ http2-client@1.3.5:
+ resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ immer@9.0.21:
+ resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
+
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
+ inflected@2.1.0:
+ resolution: {integrity: sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==}
+
+ internal-slot@1.1.0:
+ resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
+ engines: {node: '>= 0.4'}
+
+ is-array-buffer@3.0.5:
+ resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
+ engines: {node: '>= 0.4'}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-async-function@2.1.1:
+ resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
+ engines: {node: '>= 0.4'}
+
+ is-bigint@1.1.0:
+ resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
+ engines: {node: '>= 0.4'}
+
+ is-boolean-object@1.2.2:
+ resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
+ engines: {node: '>= 0.4'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-data-view@1.0.2:
+ resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
+ engines: {node: '>= 0.4'}
+
+ is-date-object@1.1.0:
+ resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-finalizationregistry@1.1.1:
+ resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
+ engines: {node: '>= 0.4'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-function@1.1.2:
+ resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
+
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
+
+ is-number-object@1.1.1:
+ resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
+
+ is-shared-array-buffer@1.0.4:
+ resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
+ engines: {node: '>= 0.4'}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ is-string@1.1.1:
+ resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
+ engines: {node: '>= 0.4'}
+
+ is-symbol@1.1.1:
+ resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
+ engines: {node: '>= 0.4'}
+
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
+
+ is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
+
+ is-weakref@1.1.1:
+ resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
+ engines: {node: '>= 0.4'}
+
+ is-weakset@2.0.4:
+ resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
+ engines: {node: '>= 0.4'}
+
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
+ hasBin: true
+
+ jsep@1.4.0:
+ resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==}
+ engines: {node: '>= 10.16.0'}
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+ jsonc-parser@2.2.1:
+ resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==}
+
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+
+ jsonpath-plus@10.3.0:
+ resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ jsonpointer@5.0.1:
+ resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
+ engines: {node: '>=0.10.0'}
+
+ jsonschema@1.5.0:
+ resolution: {integrity: sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==}
+
+ leven@3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ linkify-it@5.0.0:
+ resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.isempty@4.4.0:
+ resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==}
+
+ lodash.omitby@4.6.0:
+ resolution: {integrity: sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ==}
+
+ lodash.topath@4.5.2:
+ resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==}
+
+ lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+
+ lodash.uniqby@4.7.0:
+ resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==}
+
+ lodash.uniqwith@4.5.0:
+ resolution: {integrity: sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ loglevel-plugin-prefix@0.8.4:
+ resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==}
+
+ loglevel@1.9.2:
+ resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==}
+ engines: {node: '>= 0.6.0'}
+
+ lucide-react@0.562.0:
+ resolution: {integrity: sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==}
+ peerDependencies:
+ react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ lunr@2.3.9:
+ resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==}
+
+ markdown-it@14.1.0:
+ resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
+ hasBin: true
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ mdurl@2.0.0:
+ resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
+
+ 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'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@6.2.0:
+ resolution: {integrity: sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mobx-react-lite@4.1.1:
+ resolution: {integrity: sha512-iUxiMpsvNraCKXU+yPotsOncNNmyeS2B5DKL+TL6Tar/xm+wwNJAubJmtRSeAoYawdZqwv8Z/+5nPRHeQxTiXg==}
+ peerDependencies:
+ mobx: ^6.9.0
+ react: ^16.8.0 || ^17 || ^18 || ^19
+ react-dom: '*'
+ react-native: '*'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+ react-native:
+ optional: true
+
+ mobx@6.15.0:
+ resolution: {integrity: sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ next-themes@0.4.6:
+ resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
+ peerDependencies:
+ react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+
+ nimma@0.2.3:
+ resolution: {integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==}
+ engines: {node: ^12.20 || >=14.13}
+
+ node-fetch-h2@2.3.0:
+ resolution: {integrity: sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==}
+ engines: {node: 4.x || >=6.0.0}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-readfiles@0.2.0:
+ resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
+ oas-kit-common@1.0.8:
+ resolution: {integrity: sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==}
+
+ oas-linter@3.2.2:
+ resolution: {integrity: sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==}
+
+ oas-resolver@2.5.6:
+ resolution: {integrity: sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==}
+ hasBin: true
+
+ oas-schema-walker@1.1.5:
+ resolution: {integrity: sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==}
+
+ oas-validator@5.0.8:
+ resolution: {integrity: sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==}
+
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.7:
+ resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
+ engines: {node: '>= 0.4'}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ openapi-types@12.1.3:
+ resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
+
+ openapi3-ts@4.5.0:
+ resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==}
+
+ orval@7.17.2:
+ resolution: {integrity: sha512-6+drCVVWNukdX+ytFPOC2UJ51gv0kGAPch7cTQYxO7VsGwdZ1DiZhYozdGehwu6QeVvAszPhPlh4uLq53k0x+w==}
+ engines: {node: '>=22.18.0'}
+ hasBin: true
+
+ own-keys@1.0.1:
+ resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
+ engines: {node: '>= 0.4'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ 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-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ perfect-freehand@1.2.2:
+ resolution: {integrity: sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ pony-cause@1.1.1:
+ resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==}
+ engines: {node: '>=12.0.0'}
+
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
+ engines: {node: '>= 0.4'}
+
+ prettier@3.7.4:
+ resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ proxy-compare@3.0.1:
+ resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ proxy-memoize@3.0.1:
+ resolution: {integrity: sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==}
+
+ punycode.js@2.3.1:
+ resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
+ engines: {node: '>=6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ react-dom@19.2.3:
+ resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==}
+ peerDependencies:
+ react: ^19.2.3
+
+ react-hook-form@7.70.0:
+ resolution: {integrity: sha512-COOMajS4FI3Wuwrs3GPpi/Jeef/5W1DRR84Yl5/ShlT3dKVFUfoGiEZ/QE6Uw8P4T2/CLJdcTVYKvWBMQTEpvw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17 || ^18 || ^19
+
+ react-icons@5.5.0:
+ resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==}
+ peerDependencies:
+ react: '*'
+
+ react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
+ react-refresh@0.18.0:
+ resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==}
+ engines: {node: '>=0.10.0'}
+
+ react-router@7.12.0:
+ resolution: {integrity: sha512-kTPDYPFzDVGIIGNLS5VJykK0HfHLY5MF3b+xj0/tTyNYL1gF1qs7u67Z9jEhQk2sQ98SUaHxlG31g1JtF7IfVw==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+
+ react@19.2.3:
+ resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==}
+ engines: {node: '>=0.10.0'}
+
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
+ reflect.getprototypeof@1.0.10:
+ resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
+ engines: {node: '>= 0.4'}
+
+ reftools@1.1.9:
+ resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==}
+
+ regexp.prototype.flags@1.5.4:
+ resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
+ engines: {node: '>= 0.4'}
+
+ 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'}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ safe-array-concat@1.1.3:
+ resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
+ engines: {node: '>=0.4'}
+
+ safe-push-apply@1.0.0:
+ resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
+ engines: {node: '>= 0.4'}
+
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
+ safe-stable-stringify@1.1.1:
+ resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==}
+
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+
+ set-cookie-parser@2.7.2:
+ resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+
+ set-proto@1.0.0:
+ resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
+ engines: {node: '>= 0.4'}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ should-equal@2.0.0:
+ resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==}
+
+ should-format@3.0.3:
+ resolution: {integrity: sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==}
+
+ should-type-adaptors@1.1.0:
+ resolution: {integrity: sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==}
+
+ should-type@1.4.0:
+ resolution: {integrity: sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==}
+
+ should-util@1.0.1:
+ resolution: {integrity: sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==}
+
+ should@13.2.3:
+ resolution: {integrity: sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==}
+
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ simple-eval@1.0.1:
+ resolution: {integrity: sha512-LH7FpTAkeD+y5xQC4fzS+tFtaNlvt3Ib1zKzvhjv/Y+cioV4zIuw4IZr2yhRLu67CWL7FR9/6KXKnjRoZTvGGQ==}
+ engines: {node: '>=12'}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+
+ stackframe@1.3.4:
+ resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
+
+ stop-iteration-iterator@1.1.0:
+ resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
+ engines: {node: '>= 0.4'}
+
+ string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string.prototype.trim@1.2.10:
+ resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimend@1.0.9:
+ resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ stylis@4.2.0:
+ resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ swagger2openapi@7.0.8:
+ resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==}
+ hasBin: true
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ tsconfck@2.1.2:
+ resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==}
+ engines: {node: ^14.13.1 || ^16 || >=18}
+ hasBin: true
+ peerDependencies:
+ typescript: ^4.3.5 || ^5.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ typed-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-length@1.0.3:
+ resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-offset@1.0.4:
+ resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-length@1.0.7:
+ resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
+ engines: {node: '>= 0.4'}
+
+ typedoc-plugin-coverage@4.0.2:
+ resolution: {integrity: sha512-mfn0e7NCqB8x2PfvhXrtmd7KWlsNf1+B2N9y8gR/jexXBLrXl/0e+b2HdG5HaTXGi7i0t2pyQY2VRmq7gtdEHQ==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ typedoc: 0.28.x
+
+ typedoc-plugin-markdown@4.9.0:
+ resolution: {integrity: sha512-9Uu4WR9L7ZBgAl60N/h+jqmPxxvnC9nQAlnnO/OujtG2ubjnKTVUFY1XDhcMY+pCqlX3N2HsQM2QTYZIU9tJuw==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ typedoc: 0.28.x
+
+ typedoc@0.28.15:
+ resolution: {integrity: sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg==}
+ engines: {node: '>= 18', pnpm: '>= 10'}
+ hasBin: true
+ peerDependencies:
+ typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ uc.micro@2.1.0:
+ resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
+
+ unbox-primitive@1.1.0:
+ resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
+ engines: {node: '>= 0.4'}
+
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ uqr@0.1.2:
+ resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==}
+
+ urijs@1.19.11:
+ resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==}
+
+ use-sync-external-store@1.6.0:
+ resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ utility-types@3.11.0:
+ resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==}
+ engines: {node: '>= 4'}
+
+ validator@13.15.26:
+ resolution: {integrity: sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==}
+ engines: {node: '>= 0.10'}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-boxed-primitive@1.1.1:
+ resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
+ engines: {node: '>= 0.4'}
+
+ which-builtin-type@1.2.1:
+ resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
+ engines: {node: '>= 0.4'}
+
+ which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
+
+ which-typed-array@1.1.19:
+ resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+
+ yaml@2.8.2:
+ resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@apidevtools/json-schema-ref-parser@14.0.1':
+ dependencies:
+ '@types/json-schema': 7.0.15
+ js-yaml: 4.1.1
+
+ '@apidevtools/openapi-schemas@2.1.0': {}
+
+ '@apidevtools/swagger-methods@3.0.2': {}
+
+ '@apidevtools/swagger-parser@12.1.0(openapi-types@12.1.3)':
+ dependencies:
+ '@apidevtools/json-schema-ref-parser': 14.0.1
+ '@apidevtools/openapi-schemas': 2.1.0
+ '@apidevtools/swagger-methods': 3.0.2
+ ajv: 8.17.1
+ ajv-draft-04: 1.0.0(ajv@8.17.1)
+ call-me-maybe: 1.0.2
+ openapi-types: 12.1.3
+
+ '@ark-ui/react@5.30.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@internationalized/date': 3.10.0
+ '@zag-js/accordion': 1.31.1
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/angle-slider': 1.31.1
+ '@zag-js/async-list': 1.31.1
+ '@zag-js/auto-resize': 1.31.1
+ '@zag-js/avatar': 1.31.1
+ '@zag-js/bottom-sheet': 1.31.1
+ '@zag-js/carousel': 1.31.1
+ '@zag-js/checkbox': 1.31.1
+ '@zag-js/clipboard': 1.31.1
+ '@zag-js/collapsible': 1.31.1
+ '@zag-js/collection': 1.31.1
+ '@zag-js/color-picker': 1.31.1
+ '@zag-js/color-utils': 1.31.1
+ '@zag-js/combobox': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/date-picker': 1.31.1(@internationalized/date@3.10.0)
+ '@zag-js/date-utils': 1.31.1(@internationalized/date@3.10.0)
+ '@zag-js/dialog': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/editable': 1.31.1
+ '@zag-js/file-upload': 1.31.1
+ '@zag-js/file-utils': 1.31.1
+ '@zag-js/floating-panel': 1.31.1
+ '@zag-js/focus-trap': 1.31.1
+ '@zag-js/highlight-word': 1.31.1
+ '@zag-js/hover-card': 1.31.1
+ '@zag-js/i18n-utils': 1.31.1
+ '@zag-js/image-cropper': 1.31.1
+ '@zag-js/json-tree-utils': 1.31.1
+ '@zag-js/listbox': 1.31.1
+ '@zag-js/marquee': 1.31.1
+ '@zag-js/menu': 1.31.1
+ '@zag-js/navigation-menu': 1.31.1
+ '@zag-js/number-input': 1.31.1
+ '@zag-js/pagination': 1.31.1
+ '@zag-js/password-input': 1.31.1
+ '@zag-js/pin-input': 1.31.1
+ '@zag-js/popover': 1.31.1
+ '@zag-js/presence': 1.31.1
+ '@zag-js/progress': 1.31.1
+ '@zag-js/qr-code': 1.31.1
+ '@zag-js/radio-group': 1.31.1
+ '@zag-js/rating-group': 1.31.1
+ '@zag-js/react': 1.31.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@zag-js/scroll-area': 1.31.1
+ '@zag-js/select': 1.31.1
+ '@zag-js/signature-pad': 1.31.1
+ '@zag-js/slider': 1.31.1
+ '@zag-js/splitter': 1.31.1
+ '@zag-js/steps': 1.31.1
+ '@zag-js/switch': 1.31.1
+ '@zag-js/tabs': 1.31.1
+ '@zag-js/tags-input': 1.31.1
+ '@zag-js/timer': 1.31.1
+ '@zag-js/toast': 1.31.1
+ '@zag-js/toggle': 1.31.1
+ '@zag-js/toggle-group': 1.31.1
+ '@zag-js/tooltip': 1.31.1
+ '@zag-js/tour': 1.31.1
+ '@zag-js/tree-view': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@asyncapi/specs@6.10.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/generator@7.28.5':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/parser@7.28.5':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@babel/runtime@7.28.4': {}
+
+ '@babel/template@7.27.2':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+
+ '@babel/traverse@7.28.5':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.5
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.5
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.28.5':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@chakra-ui/react@3.30.0(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@ark-ui/react': 5.30.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@emotion/is-prop-valid': 1.4.0
+ '@emotion/react': 11.14.0(@types/react@19.2.7)(react@19.2.3)
+ '@emotion/serialize': 1.3.3
+ '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.3)
+ '@emotion/utils': 1.4.2
+ '@pandacss/is-valid-prop': 1.8.0
+ csstype: 3.2.3
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@commander-js/extra-typings@14.0.0(commander@14.0.2)':
+ dependencies:
+ commander: 14.0.2
+
+ '@emnapi/core@1.8.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.1.0
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.8.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.1.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emotion/babel-plugin@11.13.5':
+ dependencies:
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/runtime': 7.28.4
+ '@emotion/hash': 0.9.2
+ '@emotion/memoize': 0.9.0
+ '@emotion/serialize': 1.3.3
+ babel-plugin-macros: 3.1.0
+ convert-source-map: 1.9.0
+ escape-string-regexp: 4.0.0
+ find-root: 1.1.0
+ source-map: 0.5.7
+ stylis: 4.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/cache@11.14.0':
+ dependencies:
+ '@emotion/memoize': 0.9.0
+ '@emotion/sheet': 1.4.0
+ '@emotion/utils': 1.4.2
+ '@emotion/weak-memoize': 0.4.0
+ stylis: 4.2.0
+
+ '@emotion/hash@0.9.2': {}
+
+ '@emotion/is-prop-valid@1.4.0':
+ dependencies:
+ '@emotion/memoize': 0.9.0
+
+ '@emotion/memoize@0.9.0': {}
+
+ '@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3)':
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@emotion/babel-plugin': 11.13.5
+ '@emotion/cache': 11.14.0
+ '@emotion/serialize': 1.3.3
+ '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.3)
+ '@emotion/utils': 1.4.2
+ '@emotion/weak-memoize': 0.4.0
+ hoist-non-react-statics: 3.3.2
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/serialize@1.3.3':
+ dependencies:
+ '@emotion/hash': 0.9.2
+ '@emotion/memoize': 0.9.0
+ '@emotion/unitless': 0.10.0
+ '@emotion/utils': 1.4.2
+ csstype: 3.2.3
+
+ '@emotion/sheet@1.4.0': {}
+
+ '@emotion/unitless@0.10.0': {}
+
+ '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+
+ '@emotion/utils@1.4.2': {}
+
+ '@emotion/weak-memoize@0.4.0': {}
+
+ '@esbuild/aix-ppc64@0.25.12':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/android-arm@0.25.12':
+ optional: true
+
+ '@esbuild/android-x64@0.25.12':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/darwin-x64@0.25.12':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-arm@0.25.12':
+ optional: true
+
+ '@esbuild/linux-ia32@0.25.12':
+ optional: true
+
+ '@esbuild/linux-loong64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.25.12':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-s390x@0.25.12':
+ optional: true
+
+ '@esbuild/linux-x64@0.25.12':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/sunos-x64@0.25.12':
+ optional: true
+
+ '@esbuild/win32-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/win32-ia32@0.25.12':
+ optional: true
+
+ '@esbuild/win32-x64@0.25.12':
+ optional: true
+
+ '@exodus/schemasafe@1.3.0': {}
+
+ '@floating-ui/core@1.7.3':
+ dependencies:
+ '@floating-ui/utils': 0.2.10
+
+ '@floating-ui/dom@1.7.4':
+ dependencies:
+ '@floating-ui/core': 1.7.3
+ '@floating-ui/utils': 0.2.10
+
+ '@floating-ui/utils@0.2.10': {}
+
+ '@fontsource-variable/jost@5.2.8': {}
+
+ '@fontsource/golos-text@5.2.8': {}
+
+ '@gerrit0/mini-shiki@3.21.0':
+ dependencies:
+ '@shikijs/engine-oniguruma': 3.21.0
+ '@shikijs/langs': 3.21.0
+ '@shikijs/themes': 3.21.0
+ '@shikijs/types': 3.21.0
+ '@shikijs/vscode-textmate': 10.0.2
+
+ '@ibm-cloud/openapi-ruleset-utilities@1.9.0': {}
+
+ '@ibm-cloud/openapi-ruleset@1.33.5':
+ dependencies:
+ '@ibm-cloud/openapi-ruleset-utilities': 1.9.0
+ '@stoplight/spectral-formats': 1.8.2
+ '@stoplight/spectral-functions': 1.10.1
+ '@stoplight/spectral-rulesets': 1.22.0
+ chalk: 4.1.2
+ inflected: 2.1.0
+ jsonschema: 1.5.0
+ lodash: 4.17.21
+ loglevel: 1.9.2
+ loglevel-plugin-prefix: 0.8.4
+ minimatch: 6.2.0
+ validator: 13.15.26
+ transitivePeerDependencies:
+ - encoding
+
+ '@internationalized/date@3.10.0':
+ dependencies:
+ '@swc/helpers': 0.5.18
+
+ '@internationalized/number@3.6.5':
+ dependencies:
+ '@swc/helpers': 0.5.18
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)':
+ dependencies:
+ jsep: 1.4.0
+
+ '@jsep-plugin/regex@1.0.4(jsep@1.4.0)':
+ dependencies:
+ jsep: 1.4.0
+
+ '@jsep-plugin/ternary@1.1.4(jsep@1.4.0)':
+ dependencies:
+ jsep: 1.4.0
+
+ '@module-federation/error-codes@0.22.0': {}
+
+ '@module-federation/runtime-core@0.22.0':
+ dependencies:
+ '@module-federation/error-codes': 0.22.0
+ '@module-federation/sdk': 0.22.0
+
+ '@module-federation/runtime-tools@0.22.0':
+ dependencies:
+ '@module-federation/runtime': 0.22.0
+ '@module-federation/webpack-bundler-runtime': 0.22.0
+
+ '@module-federation/runtime@0.22.0':
+ dependencies:
+ '@module-federation/error-codes': 0.22.0
+ '@module-federation/runtime-core': 0.22.0
+ '@module-federation/sdk': 0.22.0
+
+ '@module-federation/sdk@0.22.0': {}
+
+ '@module-federation/webpack-bundler-runtime@0.22.0':
+ dependencies:
+ '@module-federation/runtime': 0.22.0
+ '@module-federation/sdk': 0.22.0
+
+ '@napi-rs/wasm-runtime@1.0.7':
+ dependencies:
+ '@emnapi/core': 1.8.1
+ '@emnapi/runtime': 1.8.1
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.20.1
+
+ '@orval/angular@7.17.2(openapi-types@12.1.3)(typescript@5.9.3)':
+ dependencies:
+ '@orval/core': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ '@orval/axios@7.17.2(openapi-types@12.1.3)(typescript@5.9.3)':
+ dependencies:
+ '@orval/core': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ '@orval/core@7.17.2(openapi-types@12.1.3)(typescript@5.9.3)':
+ dependencies:
+ '@apidevtools/swagger-parser': 12.1.0(openapi-types@12.1.3)
+ '@ibm-cloud/openapi-ruleset': 1.33.5
+ '@stoplight/spectral-core': 1.20.0
+ acorn: 8.15.0
+ chalk: 4.1.2
+ compare-versions: 6.1.1
+ debug: 4.4.3
+ esbuild: 0.25.12
+ esutils: 2.0.3
+ fs-extra: 11.3.3
+ globby: 11.1.0
+ lodash.isempty: 4.4.0
+ lodash.uniq: 4.5.0
+ lodash.uniqby: 4.7.0
+ lodash.uniqwith: 4.5.0
+ micromatch: 4.0.8
+ openapi3-ts: 4.5.0
+ swagger2openapi: 7.0.8
+ typedoc: 0.28.15(typescript@5.9.3)
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ '@orval/fetch@7.17.2(openapi-types@12.1.3)(typescript@5.9.3)':
+ dependencies:
+ '@orval/core': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ openapi3-ts: 4.5.0
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ '@orval/hono@7.17.2(openapi-types@12.1.3)(typescript@5.9.3)':
+ dependencies:
+ '@orval/core': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/zod': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ fs-extra: 11.3.3
+ lodash.uniq: 4.5.0
+ openapi3-ts: 4.5.0
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ '@orval/mcp@7.17.2(openapi-types@12.1.3)(typescript@5.9.3)':
+ dependencies:
+ '@orval/core': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/fetch': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/zod': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ openapi3-ts: 4.5.0
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ '@orval/mock@7.17.2(openapi-types@12.1.3)(typescript@5.9.3)':
+ dependencies:
+ '@orval/core': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ openapi3-ts: 4.5.0
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ '@orval/query@7.17.2(openapi-types@12.1.3)(typescript@5.9.3)':
+ dependencies:
+ '@orval/core': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/fetch': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ chalk: 4.1.2
+ lodash.omitby: 4.6.0
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ '@orval/swr@7.17.2(openapi-types@12.1.3)(typescript@5.9.3)':
+ dependencies:
+ '@orval/core': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/fetch': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ '@orval/zod@7.17.2(openapi-types@12.1.3)(typescript@5.9.3)':
+ dependencies:
+ '@orval/core': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ lodash.uniq: 4.5.0
+ openapi3-ts: 4.5.0
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ '@pandacss/is-valid-prop@1.8.0': {}
+
+ '@rsbuild/core@1.7.2':
+ dependencies:
+ '@rspack/core': 1.7.1(@swc/helpers@0.5.18)
+ '@rspack/lite-tapable': 1.1.0
+ '@swc/helpers': 0.5.18
+ core-js: 3.47.0
+ jiti: 2.6.1
+
+ '@rsbuild/plugin-react@1.4.2(@rsbuild/core@1.7.2)':
+ dependencies:
+ '@rsbuild/core': 1.7.2
+ '@rspack/plugin-react-refresh': 1.6.0(react-refresh@0.18.0)
+ react-refresh: 0.18.0
+ transitivePeerDependencies:
+ - webpack-hot-middleware
+
+ '@rspack/binding-darwin-arm64@1.7.1':
+ optional: true
+
+ '@rspack/binding-darwin-x64@1.7.1':
+ optional: true
+
+ '@rspack/binding-linux-arm64-gnu@1.7.1':
+ optional: true
+
+ '@rspack/binding-linux-arm64-musl@1.7.1':
+ optional: true
+
+ '@rspack/binding-linux-x64-gnu@1.7.1':
+ optional: true
+
+ '@rspack/binding-linux-x64-musl@1.7.1':
+ optional: true
+
+ '@rspack/binding-wasm32-wasi@1.7.1':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.0.7
+ optional: true
+
+ '@rspack/binding-win32-arm64-msvc@1.7.1':
+ optional: true
+
+ '@rspack/binding-win32-ia32-msvc@1.7.1':
+ optional: true
+
+ '@rspack/binding-win32-x64-msvc@1.7.1':
+ optional: true
+
+ '@rspack/binding@1.7.1':
+ optionalDependencies:
+ '@rspack/binding-darwin-arm64': 1.7.1
+ '@rspack/binding-darwin-x64': 1.7.1
+ '@rspack/binding-linux-arm64-gnu': 1.7.1
+ '@rspack/binding-linux-arm64-musl': 1.7.1
+ '@rspack/binding-linux-x64-gnu': 1.7.1
+ '@rspack/binding-linux-x64-musl': 1.7.1
+ '@rspack/binding-wasm32-wasi': 1.7.1
+ '@rspack/binding-win32-arm64-msvc': 1.7.1
+ '@rspack/binding-win32-ia32-msvc': 1.7.1
+ '@rspack/binding-win32-x64-msvc': 1.7.1
+
+ '@rspack/core@1.7.1(@swc/helpers@0.5.18)':
+ dependencies:
+ '@module-federation/runtime-tools': 0.22.0
+ '@rspack/binding': 1.7.1
+ '@rspack/lite-tapable': 1.1.0
+ optionalDependencies:
+ '@swc/helpers': 0.5.18
+
+ '@rspack/lite-tapable@1.1.0': {}
+
+ '@rspack/plugin-react-refresh@1.6.0(react-refresh@0.18.0)':
+ dependencies:
+ error-stack-parser: 2.1.4
+ html-entities: 2.6.0
+ react-refresh: 0.18.0
+
+ '@shikijs/engine-oniguruma@3.21.0':
+ dependencies:
+ '@shikijs/types': 3.21.0
+ '@shikijs/vscode-textmate': 10.0.2
+
+ '@shikijs/langs@3.21.0':
+ dependencies:
+ '@shikijs/types': 3.21.0
+
+ '@shikijs/themes@3.21.0':
+ dependencies:
+ '@shikijs/types': 3.21.0
+
+ '@shikijs/types@3.21.0':
+ dependencies:
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ '@shikijs/vscode-textmate@10.0.2': {}
+
+ '@simplewebauthn/browser@13.2.2': {}
+
+ '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)':
+ dependencies:
+ ajv: 8.17.1
+ jsonpointer: 5.0.1
+ leven: 3.1.0
+
+ '@stoplight/json-ref-readers@1.2.2':
+ dependencies:
+ node-fetch: 2.7.0
+ tslib: 1.14.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/json-ref-resolver@3.1.6':
+ dependencies:
+ '@stoplight/json': 3.21.7
+ '@stoplight/path': 1.3.2
+ '@stoplight/types': 13.6.0
+ '@types/urijs': 1.19.26
+ dependency-graph: 0.11.0
+ fast-memoize: 2.5.2
+ immer: 9.0.21
+ lodash: 4.17.21
+ tslib: 2.8.1
+ urijs: 1.19.11
+
+ '@stoplight/json@3.21.7':
+ dependencies:
+ '@stoplight/ordered-object-literal': 1.0.5
+ '@stoplight/path': 1.3.2
+ '@stoplight/types': 13.6.0
+ jsonc-parser: 2.2.1
+ lodash: 4.17.21
+ safe-stable-stringify: 1.1.1
+
+ '@stoplight/ordered-object-literal@1.0.5': {}
+
+ '@stoplight/path@1.3.2': {}
+
+ '@stoplight/spectral-core@1.20.0':
+ dependencies:
+ '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1)
+ '@stoplight/json': 3.21.7
+ '@stoplight/path': 1.3.2
+ '@stoplight/spectral-parsers': 1.0.5
+ '@stoplight/spectral-ref-resolver': 1.0.5
+ '@stoplight/spectral-runtime': 1.1.4
+ '@stoplight/types': 13.6.0
+ '@types/es-aggregate-error': 1.0.6
+ '@types/json-schema': 7.0.15
+ ajv: 8.17.1
+ ajv-errors: 3.0.0(ajv@8.17.1)
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ es-aggregate-error: 1.0.14
+ jsonpath-plus: 10.3.0
+ lodash: 4.17.21
+ lodash.topath: 4.5.2
+ minimatch: 3.1.2
+ nimma: 0.2.3
+ pony-cause: 1.1.1
+ simple-eval: 1.0.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-formats@1.8.2':
+ dependencies:
+ '@stoplight/json': 3.21.7
+ '@stoplight/spectral-core': 1.20.0
+ '@types/json-schema': 7.0.15
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-functions@1.10.1':
+ dependencies:
+ '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1)
+ '@stoplight/json': 3.21.7
+ '@stoplight/spectral-core': 1.20.0
+ '@stoplight/spectral-formats': 1.8.2
+ '@stoplight/spectral-runtime': 1.1.4
+ ajv: 8.17.1
+ ajv-draft-04: 1.0.0(ajv@8.17.1)
+ ajv-errors: 3.0.0(ajv@8.17.1)
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ lodash: 4.17.21
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-parsers@1.0.5':
+ dependencies:
+ '@stoplight/json': 3.21.7
+ '@stoplight/types': 14.1.1
+ '@stoplight/yaml': 4.3.0
+ tslib: 2.8.1
+
+ '@stoplight/spectral-ref-resolver@1.0.5':
+ dependencies:
+ '@stoplight/json-ref-readers': 1.2.2
+ '@stoplight/json-ref-resolver': 3.1.6
+ '@stoplight/spectral-runtime': 1.1.4
+ dependency-graph: 0.11.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-rulesets@1.22.0':
+ dependencies:
+ '@asyncapi/specs': 6.10.0
+ '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1)
+ '@stoplight/json': 3.21.7
+ '@stoplight/spectral-core': 1.20.0
+ '@stoplight/spectral-formats': 1.8.2
+ '@stoplight/spectral-functions': 1.10.1
+ '@stoplight/spectral-runtime': 1.1.4
+ '@stoplight/types': 13.20.0
+ '@types/json-schema': 7.0.15
+ ajv: 8.17.1
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ json-schema-traverse: 1.0.0
+ leven: 3.1.0
+ lodash: 4.17.21
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-runtime@1.1.4':
+ dependencies:
+ '@stoplight/json': 3.21.7
+ '@stoplight/path': 1.3.2
+ '@stoplight/types': 13.6.0
+ abort-controller: 3.0.0
+ lodash: 4.17.21
+ node-fetch: 2.7.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/types@13.20.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+ utility-types: 3.11.0
+
+ '@stoplight/types@13.6.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+ utility-types: 3.11.0
+
+ '@stoplight/types@14.1.1':
+ dependencies:
+ '@types/json-schema': 7.0.15
+ utility-types: 3.11.0
+
+ '@stoplight/yaml-ast-parser@0.0.50': {}
+
+ '@stoplight/yaml@4.3.0':
+ dependencies:
+ '@stoplight/ordered-object-literal': 1.0.5
+ '@stoplight/types': 14.1.1
+ '@stoplight/yaml-ast-parser': 0.0.50
+ tslib: 2.8.1
+
+ '@swc/helpers@0.5.18':
+ dependencies:
+ tslib: 2.8.1
+
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/es-aggregate-error@1.0.6':
+ dependencies:
+ '@types/node': 25.0.5
+
+ '@types/hast@3.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/node@25.0.5':
+ dependencies:
+ undici-types: 7.16.0
+
+ '@types/parse-json@4.0.2': {}
+
+ '@types/react-dom@19.2.3(@types/react@19.2.7)':
+ dependencies:
+ '@types/react': 19.2.7
+
+ '@types/react@19.2.7':
+ dependencies:
+ csstype: 3.2.3
+
+ '@types/unist@3.0.3': {}
+
+ '@types/urijs@1.19.26': {}
+
+ '@zag-js/accordion@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/anatomy@1.31.1': {}
+
+ '@zag-js/angle-slider@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/rect-utils': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/aria-hidden@1.31.1':
+ dependencies:
+ '@zag-js/dom-query': 1.31.1
+
+ '@zag-js/async-list@1.31.1':
+ dependencies:
+ '@zag-js/core': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/auto-resize@1.31.1':
+ dependencies:
+ '@zag-js/dom-query': 1.31.1
+
+ '@zag-js/avatar@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/bottom-sheet@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/aria-hidden': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/focus-trap': 1.31.1
+ '@zag-js/remove-scroll': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/carousel@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/scroll-snap': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/checkbox@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/focus-visible': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/clipboard@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/collapsible@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/collection@1.31.1':
+ dependencies:
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/color-picker@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/color-utils': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/popper': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/color-utils@1.31.1':
+ dependencies:
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/combobox@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/aria-hidden': 1.31.1
+ '@zag-js/collection': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/popper': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/core@1.31.1':
+ dependencies:
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/date-picker@1.31.1(@internationalized/date@3.10.0)':
+ dependencies:
+ '@internationalized/date': 3.10.0
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/date-utils': 1.31.1(@internationalized/date@3.10.0)
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/live-region': 1.31.1
+ '@zag-js/popper': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/date-utils@1.31.1(@internationalized/date@3.10.0)':
+ dependencies:
+ '@internationalized/date': 3.10.0
+
+ '@zag-js/dialog@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/aria-hidden': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/focus-trap': 1.31.1
+ '@zag-js/remove-scroll': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/dismissable@1.31.1':
+ dependencies:
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/interact-outside': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/dom-query@1.31.1':
+ dependencies:
+ '@zag-js/types': 1.31.1
+
+ '@zag-js/editable@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/interact-outside': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/file-upload@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/file-utils': 1.31.1
+ '@zag-js/i18n-utils': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/file-utils@1.31.1':
+ dependencies:
+ '@zag-js/i18n-utils': 1.31.1
+
+ '@zag-js/floating-panel@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/popper': 1.31.1
+ '@zag-js/rect-utils': 1.31.1
+ '@zag-js/store': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/focus-trap@1.31.1':
+ dependencies:
+ '@zag-js/dom-query': 1.31.1
+
+ '@zag-js/focus-visible@1.31.1':
+ dependencies:
+ '@zag-js/dom-query': 1.31.1
+
+ '@zag-js/highlight-word@1.31.1': {}
+
+ '@zag-js/hover-card@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/popper': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/i18n-utils@1.31.1':
+ dependencies:
+ '@zag-js/dom-query': 1.31.1
+
+ '@zag-js/image-cropper@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/interact-outside@1.31.1':
+ dependencies:
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/json-tree-utils@1.31.1': {}
+
+ '@zag-js/listbox@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/collection': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/focus-visible': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/live-region@1.31.1': {}
+
+ '@zag-js/marquee@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/menu@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/popper': 1.31.1
+ '@zag-js/rect-utils': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/navigation-menu@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/number-input@1.31.1':
+ dependencies:
+ '@internationalized/number': 3.6.5
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/pagination@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/password-input@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/pin-input@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/popover@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/aria-hidden': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/focus-trap': 1.31.1
+ '@zag-js/popper': 1.31.1
+ '@zag-js/remove-scroll': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/popper@1.31.1':
+ dependencies:
+ '@floating-ui/dom': 1.7.4
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/presence@1.31.1':
+ dependencies:
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+
+ '@zag-js/progress@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/qr-code@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+ proxy-memoize: 3.0.1
+ uqr: 0.1.2
+
+ '@zag-js/radio-group@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/focus-visible': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/rating-group@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/react@1.31.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@zag-js/core': 1.31.1
+ '@zag-js/store': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@zag-js/rect-utils@1.31.1': {}
+
+ '@zag-js/remove-scroll@1.31.1':
+ dependencies:
+ '@zag-js/dom-query': 1.31.1
+
+ '@zag-js/scroll-area@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/scroll-snap@1.31.1':
+ dependencies:
+ '@zag-js/dom-query': 1.31.1
+
+ '@zag-js/select@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/collection': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/popper': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/signature-pad@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+ perfect-freehand: 1.2.2
+
+ '@zag-js/slider@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/splitter@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/steps@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/store@1.31.1':
+ dependencies:
+ proxy-compare: 3.0.1
+
+ '@zag-js/switch@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/focus-visible': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/tabs@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/tags-input@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/auto-resize': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/interact-outside': 1.31.1
+ '@zag-js/live-region': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/timer@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/toast@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/toggle-group@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/toggle@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/tooltip@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/focus-visible': 1.31.1
+ '@zag-js/popper': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/tour@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dismissable': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/focus-trap': 1.31.1
+ '@zag-js/interact-outside': 1.31.1
+ '@zag-js/popper': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/tree-view@1.31.1':
+ dependencies:
+ '@zag-js/anatomy': 1.31.1
+ '@zag-js/collection': 1.31.1
+ '@zag-js/core': 1.31.1
+ '@zag-js/dom-query': 1.31.1
+ '@zag-js/types': 1.31.1
+ '@zag-js/utils': 1.31.1
+
+ '@zag-js/types@1.31.1':
+ dependencies:
+ csstype: 3.2.3
+
+ '@zag-js/utils@1.31.1': {}
+
+ abort-controller@3.0.0:
+ dependencies:
+ event-target-shim: 5.0.1
+
+ acorn@8.15.0: {}
+
+ ajv-draft-04@1.0.0(ajv@8.17.1):
+ optionalDependencies:
+ ajv: 8.17.1
+
+ ajv-errors@3.0.0(ajv@8.17.1):
+ dependencies:
+ ajv: 8.17.1
+
+ ajv-formats@2.1.1(ajv@8.17.1):
+ optionalDependencies:
+ ajv: 8.17.1
+
+ ajv@8.17.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ ansi-colors@4.1.3: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ argparse@2.0.1: {}
+
+ array-buffer-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ is-array-buffer: 3.0.5
+
+ array-union@2.1.0: {}
+
+ arraybuffer.prototype.slice@1.0.4:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ is-array-buffer: 3.0.5
+
+ astring@1.9.0: {}
+
+ async-function@1.0.0: {}
+
+ asynckit@0.4.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.1.0
+
+ axios@1.13.2:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ babel-plugin-macros@3.1.0:
+ dependencies:
+ '@babel/runtime': 7.28.4
+ cosmiconfig: 7.1.0
+ resolve: 1.22.11
+
+ balanced-match@1.0.2: {}
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ call-me-maybe@1.0.2: {}
+
+ callsites@3.1.0: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@14.0.2: {}
+
+ compare-versions@6.1.1: {}
+
+ concat-map@0.0.1: {}
+
+ convert-source-map@1.9.0: {}
+
+ cookie@1.1.1: {}
+
+ core-js@3.47.0: {}
+
+ cosmiconfig@7.1.0:
+ dependencies:
+ '@types/parse-json': 4.0.2
+ import-fresh: 3.3.1
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ yaml: 1.10.2
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ csstype@3.2.3: {}
+
+ data-view-buffer@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ data-view-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ data-view-byte-offset@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ dayjs@1.11.19: {}
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ delayed-stream@1.0.0: {}
+
+ dependency-graph@0.11.0: {}
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ emoji-regex@8.0.0: {}
+
+ enquirer@2.4.1:
+ dependencies:
+ ansi-colors: 4.1.3
+ strip-ansi: 6.0.1
+
+ entities@4.5.0: {}
+
+ error-ex@1.3.4:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ error-stack-parser@2.1.4:
+ dependencies:
+ stackframe: 1.3.4
+
+ es-abstract@1.24.1:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ arraybuffer.prototype.slice: 1.0.4
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ data-view-buffer: 1.0.2
+ data-view-byte-length: 1.0.2
+ data-view-byte-offset: 1.0.1
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ es-set-tostringtag: 2.1.0
+ es-to-primitive: 1.3.0
+ function.prototype.name: 1.1.8
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ get-symbol-description: 1.1.0
+ globalthis: 1.0.4
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+ has-proto: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ internal-slot: 1.1.0
+ is-array-buffer: 3.0.5
+ is-callable: 1.2.7
+ is-data-view: 1.0.2
+ is-negative-zero: 2.0.3
+ is-regex: 1.2.1
+ is-set: 2.0.3
+ is-shared-array-buffer: 1.0.4
+ is-string: 1.1.1
+ is-typed-array: 1.1.15
+ is-weakref: 1.1.1
+ math-intrinsics: 1.1.0
+ object-inspect: 1.13.4
+ object-keys: 1.1.1
+ object.assign: 4.1.7
+ own-keys: 1.0.1
+ regexp.prototype.flags: 1.5.4
+ safe-array-concat: 1.1.3
+ safe-push-apply: 1.0.0
+ safe-regex-test: 1.1.0
+ set-proto: 1.0.0
+ stop-iteration-iterator: 1.1.0
+ string.prototype.trim: 1.2.10
+ string.prototype.trimend: 1.0.9
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.3
+ typed-array-byte-length: 1.0.3
+ typed-array-byte-offset: 1.0.4
+ typed-array-length: 1.0.7
+ unbox-primitive: 1.1.0
+ which-typed-array: 1.1.19
+
+ es-aggregate-error@1.0.14:
+ dependencies:
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ globalthis: 1.0.4
+ has-property-descriptors: 1.0.2
+ set-function-name: 2.0.2
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es-to-primitive@1.3.0:
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.1.0
+ is-symbol: 1.1.1
+
+ es6-promise@3.3.1: {}
+
+ esbuild@0.25.12:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.12
+ '@esbuild/android-arm': 0.25.12
+ '@esbuild/android-arm64': 0.25.12
+ '@esbuild/android-x64': 0.25.12
+ '@esbuild/darwin-arm64': 0.25.12
+ '@esbuild/darwin-x64': 0.25.12
+ '@esbuild/freebsd-arm64': 0.25.12
+ '@esbuild/freebsd-x64': 0.25.12
+ '@esbuild/linux-arm': 0.25.12
+ '@esbuild/linux-arm64': 0.25.12
+ '@esbuild/linux-ia32': 0.25.12
+ '@esbuild/linux-loong64': 0.25.12
+ '@esbuild/linux-mips64el': 0.25.12
+ '@esbuild/linux-ppc64': 0.25.12
+ '@esbuild/linux-riscv64': 0.25.12
+ '@esbuild/linux-s390x': 0.25.12
+ '@esbuild/linux-x64': 0.25.12
+ '@esbuild/netbsd-arm64': 0.25.12
+ '@esbuild/netbsd-x64': 0.25.12
+ '@esbuild/openbsd-arm64': 0.25.12
+ '@esbuild/openbsd-x64': 0.25.12
+ '@esbuild/openharmony-arm64': 0.25.12
+ '@esbuild/sunos-x64': 0.25.12
+ '@esbuild/win32-arm64': 0.25.12
+ '@esbuild/win32-ia32': 0.25.12
+ '@esbuild/win32-x64': 0.25.12
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ esutils@2.0.3: {}
+
+ event-target-shim@5.0.1: {}
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ 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
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-glob@3.3.3:
+ 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.8
+
+ fast-memoize@2.5.2: {}
+
+ fast-safe-stringify@2.1.1: {}
+
+ fast-uri@3.1.0: {}
+
+ fastq@1.20.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-root@1.1.0: {}
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ follow-redirects@1.15.11: {}
+
+ for-each@0.3.5:
+ dependencies:
+ is-callable: 1.2.7
+
+ form-data@4.0.5:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
+ fs-extra@11.3.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ function-bind@1.1.2: {}
+
+ function.prototype.name@1.1.8:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ functions-have-names: 1.2.3
+ hasown: 2.0.2
+ is-callable: 1.2.7
+
+ functions-have-names@1.2.3: {}
+
+ generator-function@2.0.1: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-stream@6.0.1: {}
+
+ get-symbol-description@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.2.0
+
+ globby@11.1.0:
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.3
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 3.0.0
+
+ gopd@1.2.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ has-bigints@1.1.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-proto@1.2.0:
+ dependencies:
+ dunder-proto: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hoist-non-react-statics@3.3.2:
+ dependencies:
+ react-is: 16.13.1
+
+ html-entities@2.6.0: {}
+
+ http2-client@1.3.5: {}
+
+ human-signals@2.1.0: {}
+
+ ignore@5.3.2: {}
+
+ immer@9.0.21: {}
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ inflected@2.1.0: {}
+
+ internal-slot@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.1.0
+
+ is-array-buffer@3.0.5:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ is-arrayish@0.2.1: {}
+
+ is-async-function@2.1.1:
+ dependencies:
+ async-function: 1.0.0
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-bigint@1.1.0:
+ dependencies:
+ has-bigints: 1.1.0
+
+ is-boolean-object@1.2.2:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-callable@1.2.7: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-data-view@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ is-typed-array: 1.1.15
+
+ is-date-object@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-finalizationregistry@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.1.2:
+ dependencies:
+ call-bound: 1.0.4
+ generator-function: 2.0.1
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-map@2.0.3: {}
+
+ is-negative-zero@2.0.3: {}
+
+ is-number-object@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-number@7.0.0: {}
+
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ is-set@2.0.3: {}
+
+ is-shared-array-buffer@1.0.4:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-stream@2.0.1: {}
+
+ is-string@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-symbol@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-symbols: 1.1.0
+ safe-regex-test: 1.1.0
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.19
+
+ is-weakmap@2.0.2: {}
+
+ is-weakref@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-weakset@2.0.4:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ isarray@2.0.5: {}
+
+ isexe@2.0.0: {}
+
+ jiti@2.6.1: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@4.1.1:
+ dependencies:
+ argparse: 2.0.1
+
+ jsep@1.4.0: {}
+
+ jsesc@3.1.0: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@1.0.0: {}
+
+ jsonc-parser@2.2.1: {}
+
+ jsonfile@6.2.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsonpath-plus@10.3.0:
+ dependencies:
+ '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0)
+ '@jsep-plugin/regex': 1.0.4(jsep@1.4.0)
+ jsep: 1.4.0
+
+ jsonpointer@5.0.1: {}
+
+ jsonschema@1.5.0: {}
+
+ leven@3.1.0: {}
+
+ lines-and-columns@1.2.4: {}
+
+ linkify-it@5.0.0:
+ dependencies:
+ uc.micro: 2.1.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.isempty@4.4.0: {}
+
+ lodash.omitby@4.6.0: {}
+
+ lodash.topath@4.5.2: {}
+
+ lodash.uniq@4.5.0: {}
+
+ lodash.uniqby@4.7.0: {}
+
+ lodash.uniqwith@4.5.0: {}
+
+ lodash@4.17.21: {}
+
+ loglevel-plugin-prefix@0.8.4: {}
+
+ loglevel@1.9.2: {}
+
+ lucide-react@0.562.0(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+
+ lunr@2.3.9: {}
+
+ markdown-it@14.1.0:
+ dependencies:
+ argparse: 2.0.1
+ entities: 4.5.0
+ linkify-it: 5.0.0
+ mdurl: 2.0.0
+ punycode.js: 2.3.1
+ uc.micro: 2.1.0
+
+ math-intrinsics@1.1.0: {}
+
+ mdurl@2.0.0: {}
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mimic-fn@2.1.0: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@6.2.0:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+ dependencies:
+ mobx: 6.15.0
+ react: 19.2.3
+ use-sync-external-store: 1.6.0(react@19.2.3)
+ optionalDependencies:
+ react-dom: 19.2.3(react@19.2.3)
+
+ mobx@6.15.0: {}
+
+ ms@2.1.3: {}
+
+ next-themes@0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ nimma@0.2.3:
+ dependencies:
+ '@jsep-plugin/regex': 1.0.4(jsep@1.4.0)
+ '@jsep-plugin/ternary': 1.1.4(jsep@1.4.0)
+ astring: 1.9.0
+ jsep: 1.4.0
+ optionalDependencies:
+ jsonpath-plus: 10.3.0
+ lodash.topath: 4.5.2
+
+ node-fetch-h2@2.3.0:
+ dependencies:
+ http2-client: 1.3.5
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-readfiles@0.2.0:
+ dependencies:
+ es6-promise: 3.3.1
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ oas-kit-common@1.0.8:
+ dependencies:
+ fast-safe-stringify: 2.1.1
+
+ oas-linter@3.2.2:
+ dependencies:
+ '@exodus/schemasafe': 1.3.0
+ should: 13.2.3
+ yaml: 1.10.2
+
+ oas-resolver@2.5.6:
+ dependencies:
+ node-fetch-h2: 2.3.0
+ oas-kit-common: 1.0.8
+ reftools: 1.1.9
+ yaml: 1.10.2
+ yargs: 17.7.2
+
+ oas-schema-walker@1.1.5: {}
+
+ oas-validator@5.0.8:
+ dependencies:
+ call-me-maybe: 1.0.2
+ oas-kit-common: 1.0.8
+ oas-linter: 3.2.2
+ oas-resolver: 2.5.6
+ oas-schema-walker: 1.1.5
+ reftools: 1.1.9
+ should: 13.2.3
+ yaml: 1.10.2
+
+ object-inspect@1.13.4: {}
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.7:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+ has-symbols: 1.1.0
+ object-keys: 1.1.1
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ openapi-types@12.1.3: {}
+
+ openapi3-ts@4.5.0:
+ dependencies:
+ yaml: 2.8.2
+
+ orval@7.17.2(openapi-types@12.1.3)(typescript@5.9.3):
+ dependencies:
+ '@apidevtools/swagger-parser': 12.1.0(openapi-types@12.1.3)
+ '@commander-js/extra-typings': 14.0.0(commander@14.0.2)
+ '@orval/angular': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/axios': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/core': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/fetch': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/hono': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/mcp': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/mock': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/query': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/swr': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ '@orval/zod': 7.17.2(openapi-types@12.1.3)(typescript@5.9.3)
+ chalk: 4.1.2
+ chokidar: 4.0.3
+ commander: 14.0.2
+ enquirer: 2.4.1
+ execa: 5.1.1
+ find-up: 5.0.0
+ fs-extra: 11.3.3
+ jiti: 2.6.1
+ js-yaml: 4.1.1
+ lodash.uniq: 4.5.0
+ openapi3-ts: 4.5.0
+ string-argv: 0.3.2
+ tsconfck: 2.1.2(typescript@5.9.3)
+ typedoc: 0.28.15(typescript@5.9.3)
+ typedoc-plugin-coverage: 4.0.2(typedoc@0.28.15(typescript@5.9.3))
+ typedoc-plugin-markdown: 4.9.0(typedoc@0.28.15(typescript@5.9.3))
+ transitivePeerDependencies:
+ - encoding
+ - openapi-types
+ - supports-color
+ - typescript
+
+ own-keys@1.0.1:
+ dependencies:
+ get-intrinsic: 1.3.0
+ object-keys: 1.1.1
+ safe-push-apply: 1.0.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ error-ex: 1.3.4
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ path-exists@4.0.0: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ path-type@4.0.0: {}
+
+ perfect-freehand@1.2.2: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ pony-cause@1.1.1: {}
+
+ possible-typed-array-names@1.1.0: {}
+
+ prettier@3.7.4: {}
+
+ proxy-compare@3.0.1: {}
+
+ proxy-from-env@1.1.0: {}
+
+ proxy-memoize@3.0.1:
+ dependencies:
+ proxy-compare: 3.0.1
+
+ punycode.js@2.3.1: {}
+
+ queue-microtask@1.2.3: {}
+
+ react-dom@19.2.3(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ scheduler: 0.27.0
+
+ react-hook-form@7.70.0(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+
+ react-icons@5.5.0(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+
+ react-is@16.13.1: {}
+
+ react-refresh@0.18.0: {}
+
+ react-router@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+ dependencies:
+ cookie: 1.1.1
+ react: 19.2.3
+ set-cookie-parser: 2.7.2
+ optionalDependencies:
+ react-dom: 19.2.3(react@19.2.3)
+
+ react@19.2.3: {}
+
+ readdirp@4.1.2: {}
+
+ reflect.getprototypeof@1.0.10:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ which-builtin-type: 1.2.1
+
+ reftools@1.1.9: {}
+
+ regexp.prototype.flags@1.5.4:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ set-function-name: 2.0.2
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ resolve-from@4.0.0: {}
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ reusify@1.1.0: {}
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ safe-array-concat@1.1.3:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ has-symbols: 1.1.0
+ isarray: 2.0.5
+
+ safe-push-apply@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ isarray: 2.0.5
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
+ safe-stable-stringify@1.1.1: {}
+
+ scheduler@0.27.0: {}
+
+ set-cookie-parser@2.7.2: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+
+ set-proto@1.0.0:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ should-equal@2.0.0:
+ dependencies:
+ should-type: 1.4.0
+
+ should-format@3.0.3:
+ dependencies:
+ should-type: 1.4.0
+ should-type-adaptors: 1.1.0
+
+ should-type-adaptors@1.1.0:
+ dependencies:
+ should-type: 1.4.0
+ should-util: 1.0.1
+
+ should-type@1.4.0: {}
+
+ should-util@1.0.1: {}
+
+ should@13.2.3:
+ dependencies:
+ should-equal: 2.0.0
+ should-format: 3.0.3
+ should-type: 1.4.0
+ should-type-adaptors: 1.1.0
+ should-util: 1.0.1
+
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
+ signal-exit@3.0.7: {}
+
+ simple-eval@1.0.1:
+ dependencies:
+ jsep: 1.4.0
+
+ slash@3.0.0: {}
+
+ source-map@0.5.7: {}
+
+ stackframe@1.3.4: {}
+
+ stop-iteration-iterator@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ internal-slot: 1.1.0
+
+ string-argv@0.3.2: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string.prototype.trim@1.2.10:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-object-atoms: 1.1.1
+ has-property-descriptors: 1.0.2
+
+ string.prototype.trimend@1.0.9:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ string.prototype.trimstart@1.0.8:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-final-newline@2.0.0: {}
+
+ stylis@4.2.0: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ swagger2openapi@7.0.8:
+ dependencies:
+ call-me-maybe: 1.0.2
+ node-fetch: 2.7.0
+ node-fetch-h2: 2.3.0
+ node-readfiles: 0.2.0
+ oas-kit-common: 1.0.8
+ oas-resolver: 2.5.6
+ oas-schema-walker: 1.1.5
+ oas-validator: 5.0.8
+ reftools: 1.1.9
+ yaml: 1.10.2
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - encoding
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ tsconfck@2.1.2(typescript@5.9.3):
+ optionalDependencies:
+ typescript: 5.9.3
+
+ tslib@1.14.1: {}
+
+ tslib@2.8.1: {}
+
+ typed-array-buffer@1.0.3:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-length@1.0.3:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-offset@1.0.4:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+ reflect.getprototypeof: 1.0.10
+
+ typed-array-length@1.0.7:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ is-typed-array: 1.1.15
+ possible-typed-array-names: 1.1.0
+ reflect.getprototypeof: 1.0.10
+
+ typedoc-plugin-coverage@4.0.2(typedoc@0.28.15(typescript@5.9.3)):
+ dependencies:
+ typedoc: 0.28.15(typescript@5.9.3)
+
+ typedoc-plugin-markdown@4.9.0(typedoc@0.28.15(typescript@5.9.3)):
+ dependencies:
+ typedoc: 0.28.15(typescript@5.9.3)
+
+ typedoc@0.28.15(typescript@5.9.3):
+ dependencies:
+ '@gerrit0/mini-shiki': 3.21.0
+ lunr: 2.3.9
+ markdown-it: 14.1.0
+ minimatch: 9.0.5
+ typescript: 5.9.3
+ yaml: 2.8.2
+
+ typescript@5.9.3: {}
+
+ uc.micro@2.1.0: {}
+
+ unbox-primitive@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-bigints: 1.1.0
+ has-symbols: 1.1.0
+ which-boxed-primitive: 1.1.1
+
+ undici-types@7.16.0: {}
+
+ universalify@2.0.1: {}
+
+ uqr@0.1.2: {}
+
+ urijs@1.19.11: {}
+
+ use-sync-external-store@1.6.0(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+
+ utility-types@3.11.0: {}
+
+ validator@13.15.26: {}
+
+ webidl-conversions@3.0.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-boxed-primitive@1.1.1:
+ dependencies:
+ is-bigint: 1.1.0
+ is-boolean-object: 1.2.2
+ is-number-object: 1.1.1
+ is-string: 1.1.1
+ is-symbol: 1.1.1
+
+ which-builtin-type@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ function.prototype.name: 1.1.8
+ has-tostringtag: 1.0.2
+ is-async-function: 2.1.1
+ is-date-object: 1.1.0
+ is-finalizationregistry: 1.1.1
+ is-generator-function: 1.1.2
+ is-regex: 1.2.1
+ is-weakref: 1.1.1
+ isarray: 2.0.5
+ which-boxed-primitive: 1.1.1
+ which-collection: 1.0.2
+ which-typed-array: 1.1.19
+
+ which-collection@1.0.2:
+ dependencies:
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.4
+
+ which-typed-array@1.1.19:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ for-each: 0.3.5
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ y18n@5.0.8: {}
+
+ yaml@1.10.2: {}
+
+ yaml@2.8.2: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ 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
+
+ yocto-queue@0.1.0: {}
diff --git a/domains-frontend/public/favicon.png b/domains-frontend/public/favicon.png
new file mode 100644
index 0000000..af06119
Binary files /dev/null and b/domains-frontend/public/favicon.png differ
diff --git a/domains-frontend/rsbuild.config.ts b/domains-frontend/rsbuild.config.ts
new file mode 100644
index 0000000..12da9ff
--- /dev/null
+++ b/domains-frontend/rsbuild.config.ts
@@ -0,0 +1,10 @@
+import { defineConfig } from '@rsbuild/core';
+import { pluginReact } from '@rsbuild/plugin-react';
+
+// Docs: https://rsbuild.rs/config/
+export default defineConfig({
+ plugins: [pluginReact()],
+ html: {
+ title: 'Хрофорс Домены',
+ },
+});
diff --git a/domains-frontend/src/App.tsx b/domains-frontend/src/App.tsx
new file mode 100644
index 0000000..2634c74
--- /dev/null
+++ b/domains-frontend/src/App.tsx
@@ -0,0 +1,8 @@
+import { BrowserRouter } from 'react-router';
+import router from './router';
+
+const App = () => {
+ return {router()};
+};
+
+export default App;
diff --git a/domains-frontend/src/api/Constants.ts b/domains-frontend/src/api/Constants.ts
new file mode 100644
index 0000000..cc89095
--- /dev/null
+++ b/domains-frontend/src/api/Constants.ts
@@ -0,0 +1,4 @@
+export const AUTH_URL = '/api/auth';
+export const DOMAIN_ORDER_URL = '/api/domains';
+export const EXDNS_URL = '/exdns';
+export const EXDNS_TOKEN = 'changeme';
\ No newline at end of file
diff --git a/domains-frontend/src/api/apiClient.ts b/domains-frontend/src/api/apiClient.ts
new file mode 100644
index 0000000..f30687f
--- /dev/null
+++ b/domains-frontend/src/api/apiClient.ts
@@ -0,0 +1,109 @@
+import Axios, { type AxiosRequestConfig } from 'axios';
+import { getAccessToken, getRefreshToken, setTokens } from '~/utils/authTokens';
+import { AUTH_URL } from './Constants';
+
+const AUTH_HEADER = 'Authorization';
+
+export const AXIOS_INSTANCE = Axios.create({
+ baseURL: AUTH_URL,
+});
+
+const refreshClient = Axios.create({
+ baseURL: AUTH_URL,
+});
+
+const isRefreshRequest = (url?: string) => url?.includes('/auth/refresh');
+
+const applyAccessToken = (config: AxiosRequestConfig, accessToken?: string) => {
+ if (!accessToken) return;
+ if (isRefreshRequest(config.url)) return;
+
+ const headers = config.headers ?? {};
+ if (
+ typeof (headers as { set?: (k: string, v: string) => void }).set ===
+ 'function'
+ ) {
+ (headers as { set: (k: string, v: string) => void }).set(
+ AUTH_HEADER,
+ `Bearer ${accessToken}`
+ );
+ } else {
+ (headers as Record)[AUTH_HEADER] = `Bearer ${accessToken}`;
+ }
+ config.headers = headers;
+};
+
+const refreshAccessToken = async () => {
+ const refreshToken = getRefreshToken();
+ if (!refreshToken) {
+ return null;
+ }
+
+ const { data } = await refreshClient.post('/auth/refresh', {
+ refreshToken,
+ });
+
+ const accessToken = data?.data?.accessToken;
+ const nextRefreshToken = data?.data?.refreshToken ?? refreshToken;
+
+ if (!accessToken) {
+ return null;
+ }
+
+ setTokens({ access: accessToken, refresh: nextRefreshToken });
+
+ return accessToken;
+};
+
+AXIOS_INSTANCE.interceptors.request.use((config) => {
+ applyAccessToken(config, getAccessToken());
+ return config;
+});
+
+let refreshPromise: Promise | null = null;
+
+AXIOS_INSTANCE.interceptors.response.use(
+ (response) => response,
+ async (error) => {
+ const status = error?.response?.status;
+ const originalConfig = error?.config as
+ | (AxiosRequestConfig & { _retry?: boolean })
+ | undefined;
+
+ if (!originalConfig || status !== 403 || originalConfig._retry) {
+ return Promise.reject(error);
+ }
+
+ if (isRefreshRequest(originalConfig.url)) {
+ return Promise.reject(error);
+ }
+
+ originalConfig._retry = true;
+
+ if (!refreshPromise) {
+ refreshPromise = refreshAccessToken().finally(() => {
+ refreshPromise = null;
+ });
+ }
+
+ const accessToken = await refreshPromise;
+ if (!accessToken) {
+ return Promise.reject(error);
+ }
+
+ applyAccessToken(originalConfig, accessToken);
+ return AXIOS_INSTANCE(originalConfig);
+ }
+);
+
+export const customInstance = (
+ config: AxiosRequestConfig,
+ options?: AxiosRequestConfig
+): Promise => {
+ const promise = AXIOS_INSTANCE({
+ ...config,
+ ...options,
+ }).then(({ data }) => data);
+
+ return promise;
+};
diff --git a/domains-frontend/src/api/apiClientDomains.ts b/domains-frontend/src/api/apiClientDomains.ts
new file mode 100644
index 0000000..b8df4d1
--- /dev/null
+++ b/domains-frontend/src/api/apiClientDomains.ts
@@ -0,0 +1,109 @@
+import Axios, { type AxiosRequestConfig } from 'axios';
+import { getAccessToken, getRefreshToken, setTokens } from '~/utils/authTokens';
+import { DOMAIN_ORDER_URL } from './Constants';
+
+const AUTH_HEADER = 'Authorization';
+
+export const AXIOS_INSTANCE = Axios.create({
+ baseURL: DOMAIN_ORDER_URL,
+});
+
+const refreshClient = Axios.create({
+ baseURL: DOMAIN_ORDER_URL,
+});
+
+const isRefreshRequest = (url?: string) => url?.includes('/auth/refresh');
+
+const applyAccessToken = (config: AxiosRequestConfig, accessToken?: string) => {
+ if (!accessToken) return;
+ if (isRefreshRequest(config.url)) return;
+
+ const headers = config.headers ?? {};
+ if (
+ typeof (headers as { set?: (k: string, v: string) => void }).set ===
+ 'function'
+ ) {
+ (headers as { set: (k: string, v: string) => void }).set(
+ AUTH_HEADER,
+ `Bearer ${accessToken}`
+ );
+ } else {
+ (headers as Record)[AUTH_HEADER] = `Bearer ${accessToken}`;
+ }
+ config.headers = headers;
+};
+
+const refreshAccessToken = async () => {
+ const refreshToken = getRefreshToken();
+ if (!refreshToken) {
+ return null;
+ }
+
+ const { data } = await refreshClient.post('/auth/refresh', {
+ refreshToken,
+ });
+
+ const accessToken = data?.data?.accessToken;
+ const nextRefreshToken = data?.data?.refreshToken ?? refreshToken;
+
+ if (!accessToken) {
+ return null;
+ }
+
+ setTokens({ access: accessToken, refresh: nextRefreshToken });
+
+ return accessToken;
+};
+
+AXIOS_INSTANCE.interceptors.request.use((config) => {
+ applyAccessToken(config, getAccessToken());
+ return config;
+});
+
+let refreshPromise: Promise | null = null;
+
+AXIOS_INSTANCE.interceptors.response.use(
+ (response) => response,
+ async (error) => {
+ const status = error?.response?.status;
+ const originalConfig = error?.config as
+ | (AxiosRequestConfig & { _retry?: boolean })
+ | undefined;
+
+ if (!originalConfig || status !== 403 || originalConfig._retry) {
+ return Promise.reject(error);
+ }
+
+ if (isRefreshRequest(originalConfig.url)) {
+ return Promise.reject(error);
+ }
+
+ originalConfig._retry = true;
+
+ if (!refreshPromise) {
+ refreshPromise = refreshAccessToken().finally(() => {
+ refreshPromise = null;
+ });
+ }
+
+ const accessToken = await refreshPromise;
+ if (!accessToken) {
+ return Promise.reject(error);
+ }
+
+ applyAccessToken(originalConfig, accessToken);
+ return AXIOS_INSTANCE(originalConfig);
+ }
+);
+
+export const customInstance = (
+ config: AxiosRequestConfig,
+ options?: AxiosRequestConfig
+): Promise => {
+ const promise = AXIOS_INSTANCE({
+ ...config,
+ ...options,
+ }).then(({ data }) => data);
+
+ return promise;
+};
diff --git a/domains-frontend/src/api/apiClientExdns.ts b/domains-frontend/src/api/apiClientExdns.ts
new file mode 100644
index 0000000..5eac4dc
--- /dev/null
+++ b/domains-frontend/src/api/apiClientExdns.ts
@@ -0,0 +1,43 @@
+import Axios, { type AxiosRequestConfig } from 'axios';
+import { EXDNS_TOKEN, EXDNS_URL } from './Constants';
+
+const AUTH_HEADER = 'authentication';
+
+export const AXIOS_INSTANCE = Axios.create({
+ baseURL: EXDNS_URL,
+});
+
+const applyToken = (config: AxiosRequestConfig) => {
+ if (!EXDNS_TOKEN) return;
+
+ const headers = config.headers ?? {};
+ if (
+ typeof (headers as { set?: (k: string, v: string) => void }).set ===
+ 'function'
+ ) {
+ (headers as { set: (k: string, v: string) => void }).set(
+ AUTH_HEADER,
+ `Bearer ${EXDNS_TOKEN}`
+ );
+ } else {
+ (headers as Record)[AUTH_HEADER] = `Bearer ${EXDNS_TOKEN}`;
+ }
+ config.headers = headers;
+};
+
+AXIOS_INSTANCE.interceptors.request.use((config) => {
+ applyToken(config);
+ return config;
+});
+
+export const customInstance = (
+ config: AxiosRequestConfig,
+ options?: AxiosRequestConfig
+): Promise => {
+ const promise = AXIOS_INSTANCE({
+ ...config,
+ ...options,
+ }).then(({ data }) => data);
+
+ return promise;
+};
diff --git a/domains-frontend/src/api/models/DomainQuery.ts b/domains-frontend/src/api/models/DomainQuery.ts
new file mode 100644
index 0000000..9cd2f28
--- /dev/null
+++ b/domains-frontend/src/api/models/DomainQuery.ts
@@ -0,0 +1,5 @@
+export interface DomainQuery {
+ fqdn: string;
+ price: number;
+ free: boolean;
+}
diff --git a/domains-frontend/src/api/models/auth/apiError.ts b/domains-frontend/src/api/models/auth/apiError.ts
new file mode 100644
index 0000000..7e7c317
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/apiError.ts
@@ -0,0 +1,13 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { ApiErrorDetails } from './apiErrorDetails';
+
+export interface ApiError {
+ code?: string;
+ message?: string;
+ details?: ApiErrorDetails;
+}
diff --git a/domains-frontend/src/api/models/auth/apiErrorDetails.ts b/domains-frontend/src/api/models/auth/apiErrorDetails.ts
new file mode 100644
index 0000000..2cf3c49
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/apiErrorDetails.ts
@@ -0,0 +1,8 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type ApiErrorDetails = { [key: string]: { [key: string]: unknown } };
diff --git a/domains-frontend/src/api/models/auth/apiResponseBoolean.ts b/domains-frontend/src/api/models/auth/apiResponseBoolean.ts
new file mode 100644
index 0000000..7a7542d
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/apiResponseBoolean.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { ApiError } from './apiError';
+
+export interface ApiResponseBoolean {
+ success?: boolean;
+ data?: boolean;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/auth/apiResponseLoginResponse.ts b/domains-frontend/src/api/models/auth/apiResponseLoginResponse.ts
new file mode 100644
index 0000000..3cfed91
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/apiResponseLoginResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { LoginResponse } from './loginResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseLoginResponse {
+ success?: boolean;
+ data?: LoginResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/auth/apiResponseString.ts b/domains-frontend/src/api/models/auth/apiResponseString.ts
new file mode 100644
index 0000000..5a47115
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/apiResponseString.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { ApiError } from './apiError';
+
+export interface ApiResponseString {
+ success?: boolean;
+ data?: string;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/auth/apiResponseTwoFactorSetupResponse.ts b/domains-frontend/src/api/models/auth/apiResponseTwoFactorSetupResponse.ts
new file mode 100644
index 0000000..647c7bf
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/apiResponseTwoFactorSetupResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { TwoFactorSetupResponse } from './twoFactorSetupResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseTwoFactorSetupResponse {
+ success?: boolean;
+ data?: TwoFactorSetupResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/auth/apiResponseUserResponse.ts b/domains-frontend/src/api/models/auth/apiResponseUserResponse.ts
new file mode 100644
index 0000000..54a4b65
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/apiResponseUserResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { UserResponse } from './userResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseUserResponse {
+ success?: boolean;
+ data?: UserResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/auth/enable2FAWithSecretRequest.ts b/domains-frontend/src/api/models/auth/enable2FAWithSecretRequest.ts
new file mode 100644
index 0000000..2bc24aa
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/enable2FAWithSecretRequest.ts
@@ -0,0 +1,12 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface Enable2FAWithSecretRequest {
+ secret: string;
+ /** @pattern ^\d{6}$ */
+ code: string;
+}
diff --git a/domains-frontend/src/api/models/auth/getAuthVerifyEmailParams.ts b/domains-frontend/src/api/models/auth/getAuthVerifyEmailParams.ts
new file mode 100644
index 0000000..31ae68d
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/getAuthVerifyEmailParams.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Auth Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type GetAuthVerifyEmailParams = {
+ token: string;
+};
diff --git a/domains-frontend/src/api/models/auth/index.ts b/domains-frontend/src/api/models/auth/index.ts
new file mode 100644
index 0000000..d2db66a
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/index.ts
@@ -0,0 +1,25 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export * from './apiError';
+export * from './apiErrorDetails';
+export * from './apiResponseBoolean';
+export * from './apiResponseLoginResponse';
+export * from './apiResponseString';
+export * from './apiResponseTwoFactorSetupResponse';
+export * from './apiResponseUserResponse';
+export * from './enable2FAWithSecretRequest';
+export * from './getAuthVerifyEmailParams';
+export * from './loginRequest';
+export * from './loginResponse';
+export * from './postAuthResendVerificationParams';
+export * from './refreshTokenRequest';
+export * from './registerRequest';
+export * from './resendVerificationEmailParams';
+export * from './twoFactorSetupResponse';
+export * from './userResponse';
+export * from './verifyEmailParams';
diff --git a/domains-frontend/src/api/models/auth/loginRequest.ts b/domains-frontend/src/api/models/auth/loginRequest.ts
new file mode 100644
index 0000000..76a7c2c
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/loginRequest.ts
@@ -0,0 +1,12 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface LoginRequest {
+ email: string;
+ password: string;
+ totpCode?: string;
+}
diff --git a/domains-frontend/src/api/models/auth/loginResponse.ts b/domains-frontend/src/api/models/auth/loginResponse.ts
new file mode 100644
index 0000000..903e99b
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/loginResponse.ts
@@ -0,0 +1,13 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface LoginResponse {
+ userId?: string;
+ accessToken?: string;
+ refreshToken?: string;
+ email?: string;
+}
diff --git a/domains-frontend/src/api/models/auth/postAuthResendVerificationParams.ts b/domains-frontend/src/api/models/auth/postAuthResendVerificationParams.ts
new file mode 100644
index 0000000..e442f7d
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/postAuthResendVerificationParams.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Auth Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type PostAuthResendVerificationParams = {
+ email: string;
+};
diff --git a/domains-frontend/src/api/models/auth/refreshTokenRequest.ts b/domains-frontend/src/api/models/auth/refreshTokenRequest.ts
new file mode 100644
index 0000000..1998bb8
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/refreshTokenRequest.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface RefreshTokenRequest {
+ refreshToken: string;
+}
diff --git a/domains-frontend/src/api/models/auth/registerRequest.ts b/domains-frontend/src/api/models/auth/registerRequest.ts
new file mode 100644
index 0000000..1b06c09
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/registerRequest.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface RegisterRequest {
+ email: string;
+ /**
+ * @minLength 8
+ * @maxLength 2147483647
+ */
+ password: string;
+}
diff --git a/domains-frontend/src/api/models/auth/resendVerificationEmailParams.ts b/domains-frontend/src/api/models/auth/resendVerificationEmailParams.ts
new file mode 100644
index 0000000..e4d93cb
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/resendVerificationEmailParams.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type ResendVerificationEmailParams = {
+ email: string;
+};
diff --git a/domains-frontend/src/api/models/auth/twoFactorSetupResponse.ts b/domains-frontend/src/api/models/auth/twoFactorSetupResponse.ts
new file mode 100644
index 0000000..ce1b390
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/twoFactorSetupResponse.ts
@@ -0,0 +1,12 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface TwoFactorSetupResponse {
+ secret?: string;
+ qrCodeUrl?: string;
+ manualEntryKey?: string;
+}
diff --git a/domains-frontend/src/api/models/auth/userResponse.ts b/domains-frontend/src/api/models/auth/userResponse.ts
new file mode 100644
index 0000000..c1aa932
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/userResponse.ts
@@ -0,0 +1,13 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface UserResponse {
+ id?: string;
+ email?: string;
+ createdAt?: string;
+ updatedAt?: string;
+}
diff --git a/domains-frontend/src/api/models/auth/verifyEmailParams.ts b/domains-frontend/src/api/models/auth/verifyEmailParams.ts
new file mode 100644
index 0000000..c874c9a
--- /dev/null
+++ b/domains-frontend/src/api/models/auth/verifyEmailParams.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type VerifyEmailParams = {
+ token: string;
+};
diff --git a/domains-frontend/src/api/models/domain-order/addCartItemRequest.ts b/domains-frontend/src/api/models/domain-order/addCartItemRequest.ts
new file mode 100644
index 0000000..1a7b5b1
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/addCartItemRequest.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { AddCartItemRequestAction } from './addCartItemRequestAction';
+import type { AddCartItemRequestTerm } from './addCartItemRequestTerm';
+
+export interface AddCartItemRequest {
+ action: AddCartItemRequestAction;
+ term: AddCartItemRequestTerm;
+ fqdn: string;
+ price: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/addCartItemRequestAction.ts b/domains-frontend/src/api/models/domain-order/addCartItemRequestAction.ts
new file mode 100644
index 0000000..d927fd4
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/addCartItemRequestAction.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type AddCartItemRequestAction =
+ (typeof AddCartItemRequestAction)[keyof typeof AddCartItemRequestAction];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const AddCartItemRequestAction = {
+ register: 'register',
+ renew: 'renew',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/addCartItemRequestTerm.ts b/domains-frontend/src/api/models/domain-order/addCartItemRequestTerm.ts
new file mode 100644
index 0000000..fee623b
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/addCartItemRequestTerm.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type AddCartItemRequestTerm =
+ (typeof AddCartItemRequestTerm)[keyof typeof AddCartItemRequestTerm];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const AddCartItemRequestTerm = {
+ monthly: 'monthly',
+ yearly: 'yearly',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/apiError.ts b/domains-frontend/src/api/models/domain-order/apiError.ts
new file mode 100644
index 0000000..7e7c317
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiError.ts
@@ -0,0 +1,13 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { ApiErrorDetails } from './apiErrorDetails';
+
+export interface ApiError {
+ code?: string;
+ message?: string;
+ details?: ApiErrorDetails;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiErrorDetails.ts b/domains-frontend/src/api/models/domain-order/apiErrorDetails.ts
new file mode 100644
index 0000000..2cf3c49
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiErrorDetails.ts
@@ -0,0 +1,8 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type ApiErrorDetails = { [key: string]: { [key: string]: unknown } };
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseCartItemResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponseCartItemResponse.ts
new file mode 100644
index 0000000..607d999
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseCartItemResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { CartItemResponse } from './cartItemResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseCartItemResponse {
+ success?: boolean;
+ data?: CartItemResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseCartResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponseCartResponse.ts
new file mode 100644
index 0000000..50d9df7
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseCartResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { CartResponse } from './cartResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseCartResponse {
+ success?: boolean;
+ data?: CartResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseDnsRecordResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponseDnsRecordResponse.ts
new file mode 100644
index 0000000..88b2cd6
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseDnsRecordResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { DnsRecordResponse } from './dnsRecordResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseDnsRecordResponse {
+ success?: boolean;
+ data?: DnsRecordResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseDomainExpiryAlertResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponseDomainExpiryAlertResponse.ts
new file mode 100644
index 0000000..1bfd1cf
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseDomainExpiryAlertResponse.ts
@@ -0,0 +1,17 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { DomainExpiryAlertResponse } from './domainExpiryAlertResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseDomainExpiryAlertResponse {
+ success?: boolean;
+ data?: DomainExpiryAlertResponse;
+ /** @nullable */
+ message?: string | null;
+ /** @nullable */
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseDomainResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponseDomainResponse.ts
new file mode 100644
index 0000000..253799c
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseDomainResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { DomainResponse } from './domainResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseDomainResponse {
+ success?: boolean;
+ data?: DomainResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseListDnsRecordResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponseListDnsRecordResponse.ts
new file mode 100644
index 0000000..bff9172
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseListDnsRecordResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { DnsRecordResponse } from './dnsRecordResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseListDnsRecordResponse {
+ success?: boolean;
+ data?: DnsRecordResponse[];
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseListDomainSearchResult.ts b/domains-frontend/src/api/models/domain-order/apiResponseListDomainSearchResult.ts
new file mode 100644
index 0000000..00946da
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseListDomainSearchResult.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { DomainSearchResult } from './domainSearchResult';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseListDomainSearchResult {
+ success?: boolean;
+ data?: DomainSearchResult[];
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseMonitoringDashboardResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponseMonitoringDashboardResponse.ts
new file mode 100644
index 0000000..f48c2b3
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseMonitoringDashboardResponse.ts
@@ -0,0 +1,17 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { MonitoringDashboardResponse } from './monitoringDashboardResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseMonitoringDashboardResponse {
+ success?: boolean;
+ data?: MonitoringDashboardResponse;
+ /** @nullable */
+ message?: string | null;
+ /** @nullable */
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseNotificationPreferencesResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponseNotificationPreferencesResponse.ts
new file mode 100644
index 0000000..a4fc5b2
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseNotificationPreferencesResponse.ts
@@ -0,0 +1,17 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { NotificationPreferencesResponse } from './notificationPreferencesResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseNotificationPreferencesResponse {
+ success?: boolean;
+ data?: NotificationPreferencesResponse;
+ /** @nullable */
+ message?: string | null;
+ /** @nullable */
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseNsDelegationResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponseNsDelegationResponse.ts
new file mode 100644
index 0000000..15fe093
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseNsDelegationResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { NsDelegationResponse } from './nsDelegationResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseNsDelegationResponse {
+ success?: boolean;
+ data?: NsDelegationResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseOrderResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponseOrderResponse.ts
new file mode 100644
index 0000000..a02c50b
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseOrderResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { OrderResponse } from './orderResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseOrderResponse {
+ success?: boolean;
+ data?: OrderResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponsePageDomainExpiryMonitoringResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponsePageDomainExpiryMonitoringResponse.ts
new file mode 100644
index 0000000..e1f40ae
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponsePageDomainExpiryMonitoringResponse.ts
@@ -0,0 +1,17 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { PageDomainExpiryMonitoringResponse } from './pageDomainExpiryMonitoringResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponsePageDomainExpiryMonitoringResponse {
+ success?: boolean;
+ data?: PageDomainExpiryMonitoringResponse;
+ /** @nullable */
+ message?: string | null;
+ /** @nullable */
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponsePageDomainResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponsePageDomainResponse.ts
new file mode 100644
index 0000000..92f5534
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponsePageDomainResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { PageDomainResponse } from './pageDomainResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponsePageDomainResponse {
+ success?: boolean;
+ data?: PageDomainResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponsePageOrderResponse.ts b/domains-frontend/src/api/models/domain-order/apiResponsePageOrderResponse.ts
new file mode 100644
index 0000000..e80dba5
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponsePageOrderResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { PageOrderResponse } from './pageOrderResponse';
+import type { ApiError } from './apiError';
+
+export interface ApiResponsePageOrderResponse {
+ success?: boolean;
+ data?: PageOrderResponse;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponsePageZone.ts b/domains-frontend/src/api/models/domain-order/apiResponsePageZone.ts
new file mode 100644
index 0000000..bbec91c
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponsePageZone.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { PageZone } from './pageZone';
+import type { ApiError } from './apiError';
+
+export interface ApiResponsePageZone {
+ success?: boolean;
+ data?: PageZone;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseString.ts b/domains-frontend/src/api/models/domain-order/apiResponseString.ts
new file mode 100644
index 0000000..5a47115
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseString.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { ApiError } from './apiError';
+
+export interface ApiResponseString {
+ success?: boolean;
+ data?: string;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseVoid.ts b/domains-frontend/src/api/models/domain-order/apiResponseVoid.ts
new file mode 100644
index 0000000..8c8bf0e
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseVoid.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { ApiResponseVoidData } from './apiResponseVoidData';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseVoid {
+ success?: boolean;
+ data?: ApiResponseVoidData;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseVoidData.ts b/domains-frontend/src/api/models/domain-order/apiResponseVoidData.ts
new file mode 100644
index 0000000..2ddf191
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseVoidData.ts
@@ -0,0 +1,8 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type ApiResponseVoidData = { [key: string]: unknown };
diff --git a/domains-frontend/src/api/models/domain-order/apiResponseZone.ts b/domains-frontend/src/api/models/domain-order/apiResponseZone.ts
new file mode 100644
index 0000000..d4500ed
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/apiResponseZone.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { Zone } from './zone';
+import type { ApiError } from './apiError';
+
+export interface ApiResponseZone {
+ success?: boolean;
+ data?: Zone;
+ message?: string;
+ error?: ApiError;
+}
diff --git a/domains-frontend/src/api/models/domain-order/cartItemResponse.ts b/domains-frontend/src/api/models/domain-order/cartItemResponse.ts
new file mode 100644
index 0000000..0807ec0
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/cartItemResponse.ts
@@ -0,0 +1,18 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { CartItemResponseAction } from './cartItemResponseAction';
+import type { CartItemResponseTerm } from './cartItemResponseTerm';
+
+export interface CartItemResponse {
+ id?: string;
+ action?: CartItemResponseAction;
+ term?: CartItemResponseTerm;
+ fqdn?: string;
+ price?: number;
+ createdAt?: string;
+ updatedAt?: string;
+}
diff --git a/domains-frontend/src/api/models/domain-order/cartItemResponseAction.ts b/domains-frontend/src/api/models/domain-order/cartItemResponseAction.ts
new file mode 100644
index 0000000..d1497c3
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/cartItemResponseAction.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type CartItemResponseAction =
+ (typeof CartItemResponseAction)[keyof typeof CartItemResponseAction];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const CartItemResponseAction = {
+ register: 'register',
+ renew: 'renew',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/cartItemResponseTerm.ts b/domains-frontend/src/api/models/domain-order/cartItemResponseTerm.ts
new file mode 100644
index 0000000..84a16cc
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/cartItemResponseTerm.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type CartItemResponseTerm =
+ (typeof CartItemResponseTerm)[keyof typeof CartItemResponseTerm];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const CartItemResponseTerm = {
+ monthly: 'monthly',
+ yearly: 'yearly',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/cartResponse.ts b/domains-frontend/src/api/models/domain-order/cartResponse.ts
new file mode 100644
index 0000000..6b63ac2
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/cartResponse.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { CartItemResponse } from './cartItemResponse';
+
+export interface CartResponse {
+ id?: string;
+ userId?: string;
+ items?: CartItemResponse[];
+ createdAt?: string;
+ updatedAt?: string;
+}
diff --git a/domains-frontend/src/api/models/domain-order/createARecordRequest.ts b/domains-frontend/src/api/models/domain-order/createARecordRequest.ts
new file mode 100644
index 0000000..76fa31b
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/createARecordRequest.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface CreateARecordRequest {
+ domainId: string;
+ name: string;
+ /** @pattern ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ */
+ ipv4Address: string;
+ ttl: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/createAaaaRecordRequest.ts b/domains-frontend/src/api/models/domain-order/createAaaaRecordRequest.ts
new file mode 100644
index 0000000..ae0ac9a
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/createAaaaRecordRequest.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface CreateAaaaRecordRequest {
+ domainId: string;
+ name: string;
+ /** @pattern ^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::1$|^::$ */
+ ipv6Address: string;
+ ttl: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/createCaaRecordRequest.ts b/domains-frontend/src/api/models/domain-order/createCaaRecordRequest.ts
new file mode 100644
index 0000000..d6ad4b5
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/createCaaRecordRequest.ts
@@ -0,0 +1,17 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface CreateCaaRecordRequest {
+ domainId: string;
+ name: string;
+ /** @pattern ^[0-9]$ */
+ flags: string;
+ /** @pattern ^(issue|issuewild|iodef)$ */
+ tag: string;
+ value: string;
+ ttl: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/createCnameRecordRequest.ts b/domains-frontend/src/api/models/domain-order/createCnameRecordRequest.ts
new file mode 100644
index 0000000..7ff93ed
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/createCnameRecordRequest.ts
@@ -0,0 +1,13 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface CreateCnameRecordRequest {
+ domainId: string;
+ name: string;
+ canonicalName: string;
+ ttl: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/createDomainRequest.ts b/domains-frontend/src/api/models/domain-order/createDomainRequest.ts
new file mode 100644
index 0000000..4324565
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/createDomainRequest.ts
@@ -0,0 +1,12 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface CreateDomainRequest {
+ fqdn: string;
+ zoneId: string;
+ expiresAt: string;
+}
diff --git a/domains-frontend/src/api/models/domain-order/createMxRecordRequest.ts b/domains-frontend/src/api/models/domain-order/createMxRecordRequest.ts
new file mode 100644
index 0000000..09b2ed6
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/createMxRecordRequest.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface CreateMxRecordRequest {
+ domainId: string;
+ name: string;
+ mailExchange: string;
+ /** @minimum 0 */
+ priority: number;
+ ttl: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/createOrderRequest.ts b/domains-frontend/src/api/models/domain-order/createOrderRequest.ts
new file mode 100644
index 0000000..f42bb47
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/createOrderRequest.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface CreateOrderRequest {
+ cartItemIds: string[];
+}
diff --git a/domains-frontend/src/api/models/domain-order/createSrvRecordRequest.ts b/domains-frontend/src/api/models/domain-order/createSrvRecordRequest.ts
new file mode 100644
index 0000000..122107a
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/createSrvRecordRequest.ts
@@ -0,0 +1,25 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface CreateSrvRecordRequest {
+ domainId: string;
+ serviceName: string;
+ target: string;
+ /** @minimum 0 */
+ priority: number;
+ /**
+ * @minimum 0
+ * @maximum 65535
+ */
+ weight: number;
+ /**
+ * @minimum 1
+ * @maximum 65535
+ */
+ port: number;
+ ttl: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/createTxtRecordRequest.ts b/domains-frontend/src/api/models/domain-order/createTxtRecordRequest.ts
new file mode 100644
index 0000000..b2e97a3
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/createTxtRecordRequest.ts
@@ -0,0 +1,13 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface CreateTxtRecordRequest {
+ domainId: string;
+ name: string;
+ textValue: string;
+ ttl: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/createZoneRequest.ts b/domains-frontend/src/api/models/domain-order/createZoneRequest.ts
new file mode 100644
index 0000000..d4d4582
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/createZoneRequest.ts
@@ -0,0 +1,11 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface CreateZoneRequest {
+ name: string;
+ price: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/dnsRecordResponse.ts b/domains-frontend/src/api/models/domain-order/dnsRecordResponse.ts
new file mode 100644
index 0000000..6f4a351
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/dnsRecordResponse.ts
@@ -0,0 +1,20 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface DnsRecordResponse {
+ id?: string;
+ domainId?: string;
+ recordType?: string;
+ name?: string;
+ value?: string;
+ ttl?: number;
+ priority?: number;
+ weight?: number;
+ port?: number;
+ flags?: string;
+ tag?: string;
+}
diff --git a/domains-frontend/src/api/models/domain-order/domainExpiryAlertResponse.ts b/domains-frontend/src/api/models/domain-order/domainExpiryAlertResponse.ts
new file mode 100644
index 0000000..0b8daed
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/domainExpiryAlertResponse.ts
@@ -0,0 +1,11 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { ExpiryAlertPreference } from './expiryAlertPreference';
+
+export interface DomainExpiryAlertResponse {
+ alerts?: ExpiryAlertPreference[];
+}
diff --git a/domains-frontend/src/api/models/domain-order/domainExpiryMonitoringResponse.ts b/domains-frontend/src/api/models/domain-order/domainExpiryMonitoringResponse.ts
new file mode 100644
index 0000000..b94d588
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/domainExpiryMonitoringResponse.ts
@@ -0,0 +1,18 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export interface DomainExpiryMonitoringResponse {
+ domainId?: string;
+ fqdn?: string;
+ expiresAt?: string;
+ /** @nullable */
+ activatedAt?: string | null;
+ daysUntilExpiry?: number;
+ alertSent?: boolean;
+ /** @nullable */
+ lastAlertSentAt?: string | null;
+}
diff --git a/domains-frontend/src/api/models/domain-order/domainResponse.ts b/domains-frontend/src/api/models/domain-order/domainResponse.ts
new file mode 100644
index 0000000..af24df8
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/domainResponse.ts
@@ -0,0 +1,17 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface DomainResponse {
+ id?: string;
+ fqdn?: string;
+ zoneId?: string;
+ zoneName?: string;
+ activatedAt?: string;
+ expiresAt?: string;
+ createdAt?: string;
+ updatedAt?: string;
+}
diff --git a/domains-frontend/src/api/models/domain-order/domainSearchResult.ts b/domains-frontend/src/api/models/domain-order/domainSearchResult.ts
new file mode 100644
index 0000000..6f2c398
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/domainSearchResult.ts
@@ -0,0 +1,12 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface DomainSearchResult {
+ fqdn?: string;
+ free?: boolean;
+ price?: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/expiryAlertPreference.ts b/domains-frontend/src/api/models/domain-order/expiryAlertPreference.ts
new file mode 100644
index 0000000..2b36667
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/expiryAlertPreference.ts
@@ -0,0 +1,12 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export interface ExpiryAlertPreference {
+ id?: string;
+ daysBefore?: number;
+ enabled?: boolean;
+}
diff --git a/domains-frontend/src/api/models/domain-order/getAllDomainsParams.ts b/domains-frontend/src/api/models/domain-order/getAllDomainsParams.ts
new file mode 100644
index 0000000..adba2e1
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/getAllDomainsParams.ts
@@ -0,0 +1,11 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { Pageable } from './pageable';
+
+export type GetAllDomainsParams = {
+ pageable: Pageable;
+};
diff --git a/domains-frontend/src/api/models/domain-order/getAllZonesParams.ts b/domains-frontend/src/api/models/domain-order/getAllZonesParams.ts
new file mode 100644
index 0000000..0428fea
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/getAllZonesParams.ts
@@ -0,0 +1,11 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { Pageable } from './pageable';
+
+export type GetAllZonesParams = {
+ pageable: Pageable;
+};
diff --git a/domains-frontend/src/api/models/domain-order/getDomainsParams.ts b/domains-frontend/src/api/models/domain-order/getDomainsParams.ts
new file mode 100644
index 0000000..1d81410
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/getDomainsParams.ts
@@ -0,0 +1,18 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Domain Order Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type GetDomainsParams = {
+ /**
+ * @minimum 0
+ */
+ page?: number;
+ /**
+ * @minimum 1
+ */
+ size?: number;
+ sort?: string[];
+};
diff --git a/domains-frontend/src/api/models/domain-order/getDomainsSearchParams.ts b/domains-frontend/src/api/models/domain-order/getDomainsSearchParams.ts
new file mode 100644
index 0000000..0d3a1bd
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/getDomainsSearchParams.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Domain Order Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type GetDomainsSearchParams = {
+ query: string;
+};
diff --git a/domains-frontend/src/api/models/domain-order/getNotificationsExpiryMonitoringDomainsParams.ts b/domains-frontend/src/api/models/domain-order/getNotificationsExpiryMonitoringDomainsParams.ts
new file mode 100644
index 0000000..e055989
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/getNotificationsExpiryMonitoringDomainsParams.ts
@@ -0,0 +1,18 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type GetNotificationsExpiryMonitoringDomainsParams = {
+ /**
+ * @minimum 0
+ */
+ page?: number;
+ /**
+ * @minimum 1
+ */
+ size?: number;
+ sort?: string[];
+};
diff --git a/domains-frontend/src/api/models/domain-order/getOrdersParams.ts b/domains-frontend/src/api/models/domain-order/getOrdersParams.ts
new file mode 100644
index 0000000..754e025
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/getOrdersParams.ts
@@ -0,0 +1,11 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { Pageable } from './pageable';
+
+export type GetOrdersParams = {
+ pageable: Pageable;
+};
diff --git a/domains-frontend/src/api/models/domain-order/getZonesParams.ts b/domains-frontend/src/api/models/domain-order/getZonesParams.ts
new file mode 100644
index 0000000..069e97a
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/getZonesParams.ts
@@ -0,0 +1,18 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Domain Order Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type GetZonesParams = {
+ /**
+ * @minimum 0
+ */
+ page?: number;
+ /**
+ * @minimum 1
+ */
+ size?: number;
+ sort?: string[];
+};
diff --git a/domains-frontend/src/api/models/domain-order/index.ts b/domains-frontend/src/api/models/domain-order/index.ts
new file mode 100644
index 0000000..9a253b8
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/index.ts
@@ -0,0 +1,91 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export * from './addCartItemRequest';
+export * from './addCartItemRequestAction';
+export * from './addCartItemRequestTerm';
+export * from './apiError';
+export * from './apiErrorDetails';
+export * from './apiResponseCartItemResponse';
+export * from './apiResponseCartResponse';
+export * from './apiResponseDnsRecordResponse';
+export * from './apiResponseDomainExpiryAlertResponse';
+export * from './apiResponseDomainResponse';
+export * from './apiResponseListDnsRecordResponse';
+export * from './apiResponseListDomainSearchResult';
+export * from './apiResponseMonitoringDashboardResponse';
+export * from './apiResponseNotificationPreferencesResponse';
+export * from './apiResponseNsDelegationResponse';
+export * from './apiResponseOrderResponse';
+export * from './apiResponsePageDomainExpiryMonitoringResponse';
+export * from './apiResponsePageDomainResponse';
+export * from './apiResponsePageOrderResponse';
+export * from './apiResponsePageZone';
+export * from './apiResponseString';
+export * from './apiResponseVoid';
+export * from './apiResponseVoidData';
+export * from './apiResponseZone';
+export * from './cartItemResponse';
+export * from './cartItemResponseAction';
+export * from './cartItemResponseTerm';
+export * from './cartResponse';
+export * from './createARecordRequest';
+export * from './createAaaaRecordRequest';
+export * from './createCaaRecordRequest';
+export * from './createCnameRecordRequest';
+export * from './createDomainRequest';
+export * from './createMxRecordRequest';
+export * from './createOrderRequest';
+export * from './createSrvRecordRequest';
+export * from './createTxtRecordRequest';
+export * from './createZoneRequest';
+export * from './dnsRecordResponse';
+export * from './domainExpiryAlertResponse';
+export * from './domainExpiryMonitoringResponse';
+export * from './domainResponse';
+export * from './domainSearchResult';
+export * from './expiryAlertPreference';
+export * from './getAllDomainsParams';
+export * from './getAllZonesParams';
+export * from './getDomainsParams';
+export * from './getDomainsSearchParams';
+export * from './getNotificationsExpiryMonitoringDomainsParams';
+export * from './getOrdersParams';
+export * from './getZonesParams';
+export * from './itemAction';
+export * from './itemTerm';
+export * from './monitoringDashboardResponse';
+export * from './notificationPreferencesResponse';
+export * from './notificationType';
+export * from './nsDelegationRequest';
+export * from './nsDelegationResponse';
+export * from './orderItemResponse';
+export * from './orderItemResponseAction';
+export * from './orderItemResponseTerm';
+export * from './orderResponse';
+export * from './orderResponseStatus';
+export * from './orderStatus';
+export * from './pageDomainExpiryMonitoringResponse';
+export * from './pageDomainResponse';
+export * from './pageOrderResponse';
+export * from './pageZone';
+export * from './pageable';
+export * from './pageableObject';
+export * from './putOrdersIdStatusParams';
+export * from './searchDomainsParams';
+export * from './sendNotificationRequest';
+export * from './sendNotificationRequestParameters';
+export * from './sortObject';
+export * from './updateDnsRecordRequest';
+export * from './updateDomainRequest';
+export * from './updateExpiryAlertsRequest';
+export * from './updateNotificationPreferencesRequest';
+export * from './updateOrderStatusParams';
+export * from './updateOrderStatusStatus';
+export * from './updateZoneRequest';
+export * from './userIdHeaderParameter';
+export * from './zone';
diff --git a/domains-frontend/src/api/models/domain-order/itemAction.ts b/domains-frontend/src/api/models/domain-order/itemAction.ts
new file mode 100644
index 0000000..0f9d66f
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/itemAction.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Domain Order Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type ItemAction = (typeof ItemAction)[keyof typeof ItemAction];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const ItemAction = {
+ register: 'register',
+ renew: 'renew',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/itemTerm.ts b/domains-frontend/src/api/models/domain-order/itemTerm.ts
new file mode 100644
index 0000000..f35331f
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/itemTerm.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Domain Order Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type ItemTerm = (typeof ItemTerm)[keyof typeof ItemTerm];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const ItemTerm = {
+ monthly: 'monthly',
+ yearly: 'yearly',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/monitoringDashboardResponse.ts b/domains-frontend/src/api/models/domain-order/monitoringDashboardResponse.ts
new file mode 100644
index 0000000..4a79480
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/monitoringDashboardResponse.ts
@@ -0,0 +1,16 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export interface MonitoringDashboardResponse {
+ domainsExpiringIn30Days?: number;
+ domainsExpiringIn14Days?: number;
+ domainsExpiringIn7Days?: number;
+ domainsExpiringIn3Days?: number;
+ domainsExpiringIn1Day?: number;
+ expiredDomains?: number;
+ totalActiveDomains?: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/notificationPreferencesResponse.ts b/domains-frontend/src/api/models/domain-order/notificationPreferencesResponse.ts
new file mode 100644
index 0000000..034926a
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/notificationPreferencesResponse.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { ExpiryAlertPreference } from './expiryAlertPreference';
+
+export interface NotificationPreferencesResponse {
+ expiryAlerts?: ExpiryAlertPreference[];
+ orderNotificationsEnabled?: boolean;
+ paymentNotificationsEnabled?: boolean;
+ domainActivationNotificationsEnabled?: boolean;
+}
diff --git a/domains-frontend/src/api/models/domain-order/notificationType.ts b/domains-frontend/src/api/models/domain-order/notificationType.ts
new file mode 100644
index 0000000..c4b7cb7
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/notificationType.ts
@@ -0,0 +1,18 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type NotificationType =
+ (typeof NotificationType)[keyof typeof NotificationType];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const NotificationType = {
+ ORDER_CREATED: 'ORDER_CREATED',
+ PAYMENT_APPROVED: 'PAYMENT_APPROVED',
+ DOMAIN_ACTIVATED: 'DOMAIN_ACTIVATED',
+ DOMAIN_EXPIRING_SOON: 'DOMAIN_EXPIRING_SOON',
+ DOMAIN_EXPIRED: 'DOMAIN_EXPIRED',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/nsDelegationRequest.ts b/domains-frontend/src/api/models/domain-order/nsDelegationRequest.ts
new file mode 100644
index 0000000..fffb910
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/nsDelegationRequest.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface NsDelegationRequest {
+ /**
+ * @minItems 1
+ * @maxItems 10
+ */
+ nsServers: string[];
+}
diff --git a/domains-frontend/src/api/models/domain-order/nsDelegationResponse.ts b/domains-frontend/src/api/models/domain-order/nsDelegationResponse.ts
new file mode 100644
index 0000000..a2b8e3f
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/nsDelegationResponse.ts
@@ -0,0 +1,12 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface NsDelegationResponse {
+ domainId?: string;
+ isDelegated?: boolean;
+ nsServers?: string[];
+}
diff --git a/domains-frontend/src/api/models/domain-order/orderItemResponse.ts b/domains-frontend/src/api/models/domain-order/orderItemResponse.ts
new file mode 100644
index 0000000..e721d77
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/orderItemResponse.ts
@@ -0,0 +1,17 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { OrderItemResponseAction } from './orderItemResponseAction';
+import type { OrderItemResponseTerm } from './orderItemResponseTerm';
+
+export interface OrderItemResponse {
+ id?: string;
+ action?: OrderItemResponseAction;
+ term?: OrderItemResponseTerm;
+ domainId?: string;
+ createdAt?: string;
+ updatedAt?: string;
+}
diff --git a/domains-frontend/src/api/models/domain-order/orderItemResponseAction.ts b/domains-frontend/src/api/models/domain-order/orderItemResponseAction.ts
new file mode 100644
index 0000000..f47fe41
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/orderItemResponseAction.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type OrderItemResponseAction =
+ (typeof OrderItemResponseAction)[keyof typeof OrderItemResponseAction];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const OrderItemResponseAction = {
+ register: 'register',
+ renew: 'renew',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/orderItemResponseTerm.ts b/domains-frontend/src/api/models/domain-order/orderItemResponseTerm.ts
new file mode 100644
index 0000000..42d714c
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/orderItemResponseTerm.ts
@@ -0,0 +1,15 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type OrderItemResponseTerm =
+ (typeof OrderItemResponseTerm)[keyof typeof OrderItemResponseTerm];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const OrderItemResponseTerm = {
+ monthly: 'monthly',
+ yearly: 'yearly',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/orderResponse.ts b/domains-frontend/src/api/models/domain-order/orderResponse.ts
new file mode 100644
index 0000000..de9a94a
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/orderResponse.ts
@@ -0,0 +1,19 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { OrderResponseStatus } from './orderResponseStatus';
+import type { OrderItemResponse } from './orderItemResponse';
+
+export interface OrderResponse {
+ id?: string;
+ userId?: string;
+ status?: OrderResponseStatus;
+ totalAmount?: number;
+ items?: OrderItemResponse[];
+ createdAt?: string;
+ paidAt?: string;
+ updatedAt?: string;
+}
diff --git a/domains-frontend/src/api/models/domain-order/orderResponseStatus.ts b/domains-frontend/src/api/models/domain-order/orderResponseStatus.ts
new file mode 100644
index 0000000..91b0578
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/orderResponseStatus.ts
@@ -0,0 +1,18 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type OrderResponseStatus =
+ (typeof OrderResponseStatus)[keyof typeof OrderResponseStatus];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const OrderResponseStatus = {
+ created: 'created',
+ pending_payment: 'pending_payment',
+ paid: 'paid',
+ cancelled: 'cancelled',
+ failed: 'failed',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/orderStatus.ts b/domains-frontend/src/api/models/domain-order/orderStatus.ts
new file mode 100644
index 0000000..5c0e309
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/orderStatus.ts
@@ -0,0 +1,17 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Domain Order Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type OrderStatus = (typeof OrderStatus)[keyof typeof OrderStatus];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const OrderStatus = {
+ created: 'created',
+ pending_payment: 'pending_payment',
+ paid: 'paid',
+ cancelled: 'cancelled',
+ failed: 'failed',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/pageDomainExpiryMonitoringResponse.ts b/domains-frontend/src/api/models/domain-order/pageDomainExpiryMonitoringResponse.ts
new file mode 100644
index 0000000..741e934
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/pageDomainExpiryMonitoringResponse.ts
@@ -0,0 +1,19 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { DomainExpiryMonitoringResponse } from './domainExpiryMonitoringResponse';
+
+export interface PageDomainExpiryMonitoringResponse {
+ content?: DomainExpiryMonitoringResponse[];
+ totalElements?: number;
+ totalPages?: number;
+ size?: number;
+ number?: number;
+ first?: boolean;
+ last?: boolean;
+ numberOfElements?: number;
+ empty?: boolean;
+}
diff --git a/domains-frontend/src/api/models/domain-order/pageDomainResponse.ts b/domains-frontend/src/api/models/domain-order/pageDomainResponse.ts
new file mode 100644
index 0000000..38c8356
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/pageDomainResponse.ts
@@ -0,0 +1,23 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { DomainResponse } from './domainResponse';
+import type { SortObject } from './sortObject';
+import type { PageableObject } from './pageableObject';
+
+export interface PageDomainResponse {
+ totalPages?: number;
+ totalElements?: number;
+ first?: boolean;
+ size?: number;
+ content?: DomainResponse[];
+ number?: number;
+ sort?: SortObject[];
+ numberOfElements?: number;
+ pageable?: PageableObject;
+ last?: boolean;
+ empty?: boolean;
+}
diff --git a/domains-frontend/src/api/models/domain-order/pageOrderResponse.ts b/domains-frontend/src/api/models/domain-order/pageOrderResponse.ts
new file mode 100644
index 0000000..2349179
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/pageOrderResponse.ts
@@ -0,0 +1,23 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { OrderResponse } from './orderResponse';
+import type { SortObject } from './sortObject';
+import type { PageableObject } from './pageableObject';
+
+export interface PageOrderResponse {
+ totalPages?: number;
+ totalElements?: number;
+ first?: boolean;
+ size?: number;
+ content?: OrderResponse[];
+ number?: number;
+ sort?: SortObject[];
+ numberOfElements?: number;
+ pageable?: PageableObject;
+ last?: boolean;
+ empty?: boolean;
+}
diff --git a/domains-frontend/src/api/models/domain-order/pageZone.ts b/domains-frontend/src/api/models/domain-order/pageZone.ts
new file mode 100644
index 0000000..5ae9915
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/pageZone.ts
@@ -0,0 +1,23 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { Zone } from './zone';
+import type { SortObject } from './sortObject';
+import type { PageableObject } from './pageableObject';
+
+export interface PageZone {
+ totalPages?: number;
+ totalElements?: number;
+ first?: boolean;
+ size?: number;
+ content?: Zone[];
+ number?: number;
+ sort?: SortObject[];
+ numberOfElements?: number;
+ pageable?: PageableObject;
+ last?: boolean;
+ empty?: boolean;
+}
diff --git a/domains-frontend/src/api/models/domain-order/pageable.ts b/domains-frontend/src/api/models/domain-order/pageable.ts
new file mode 100644
index 0000000..c374db0
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/pageable.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface Pageable {
+ /** @minimum 0 */
+ page?: number;
+ /** @minimum 1 */
+ size?: number;
+ sort?: string[];
+}
diff --git a/domains-frontend/src/api/models/domain-order/pageableObject.ts b/domains-frontend/src/api/models/domain-order/pageableObject.ts
new file mode 100644
index 0000000..8fad0b6
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/pageableObject.ts
@@ -0,0 +1,16 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { SortObject } from './sortObject';
+
+export interface PageableObject {
+ offset?: number;
+ sort?: SortObject[];
+ pageNumber?: number;
+ pageSize?: number;
+ paged?: boolean;
+ unpaged?: boolean;
+}
diff --git a/domains-frontend/src/api/models/domain-order/putOrdersIdStatusParams.ts b/domains-frontend/src/api/models/domain-order/putOrdersIdStatusParams.ts
new file mode 100644
index 0000000..120adac
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/putOrdersIdStatusParams.ts
@@ -0,0 +1,11 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Domain Order Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { OrderStatus } from './orderStatus';
+
+export type PutOrdersIdStatusParams = {
+ status: OrderStatus;
+};
diff --git a/domains-frontend/src/api/models/domain-order/searchDomainsParams.ts b/domains-frontend/src/api/models/domain-order/searchDomainsParams.ts
new file mode 100644
index 0000000..e934bb1
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/searchDomainsParams.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type SearchDomainsParams = {
+ query: string;
+};
diff --git a/domains-frontend/src/api/models/domain-order/sendNotificationRequest.ts b/domains-frontend/src/api/models/domain-order/sendNotificationRequest.ts
new file mode 100644
index 0000000..92ca464
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/sendNotificationRequest.ts
@@ -0,0 +1,19 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { NotificationType } from './notificationType';
+import type { SendNotificationRequestParameters } from './sendNotificationRequestParameters';
+
+export interface SendNotificationRequest {
+ userId: string;
+ type: NotificationType;
+ /** @nullable */
+ subject?: string | null;
+ /** @nullable */
+ template?: string | null;
+ /** @nullable */
+ parameters?: SendNotificationRequestParameters;
+}
diff --git a/domains-frontend/src/api/models/domain-order/sendNotificationRequestParameters.ts b/domains-frontend/src/api/models/domain-order/sendNotificationRequestParameters.ts
new file mode 100644
index 0000000..8b74969
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/sendNotificationRequestParameters.ts
@@ -0,0 +1,13 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+/**
+ * @nullable
+ */
+export type SendNotificationRequestParameters = {
+ [key: string]: unknown;
+} | null;
diff --git a/domains-frontend/src/api/models/domain-order/sortObject.ts b/domains-frontend/src/api/models/domain-order/sortObject.ts
new file mode 100644
index 0000000..ae915c9
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/sortObject.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface SortObject {
+ direction?: string;
+ nullHandling?: string;
+ ascending?: boolean;
+ property?: string;
+ ignoreCase?: boolean;
+}
diff --git a/domains-frontend/src/api/models/domain-order/updateDnsRecordRequest.ts b/domains-frontend/src/api/models/domain-order/updateDnsRecordRequest.ts
new file mode 100644
index 0000000..e2a2650
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/updateDnsRecordRequest.ts
@@ -0,0 +1,16 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface UpdateDnsRecordRequest {
+ value: string;
+ ttl: number;
+ priority?: number;
+ weight?: number;
+ port?: number;
+ flags?: string;
+ tag?: string;
+}
diff --git a/domains-frontend/src/api/models/domain-order/updateDomainRequest.ts b/domains-frontend/src/api/models/domain-order/updateDomainRequest.ts
new file mode 100644
index 0000000..ccdc8aa
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/updateDomainRequest.ts
@@ -0,0 +1,11 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface UpdateDomainRequest {
+ expiresAt?: string;
+ activatedAt?: string;
+}
diff --git a/domains-frontend/src/api/models/domain-order/updateExpiryAlertsRequest.ts b/domains-frontend/src/api/models/domain-order/updateExpiryAlertsRequest.ts
new file mode 100644
index 0000000..c548bbf
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/updateExpiryAlertsRequest.ts
@@ -0,0 +1,11 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { ExpiryAlertPreference } from './expiryAlertPreference';
+
+export interface UpdateExpiryAlertsRequest {
+ alerts?: ExpiryAlertPreference[];
+}
diff --git a/domains-frontend/src/api/models/domain-order/updateNotificationPreferencesRequest.ts b/domains-frontend/src/api/models/domain-order/updateNotificationPreferencesRequest.ts
new file mode 100644
index 0000000..db34bfc
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/updateNotificationPreferencesRequest.ts
@@ -0,0 +1,17 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+import type { ExpiryAlertPreference } from './expiryAlertPreference';
+
+export interface UpdateNotificationPreferencesRequest {
+ expiryAlerts?: ExpiryAlertPreference[];
+ /** @nullable */
+ orderNotificationsEnabled?: boolean | null;
+ /** @nullable */
+ paymentNotificationsEnabled?: boolean | null;
+ /** @nullable */
+ domainActivationNotificationsEnabled?: boolean | null;
+}
diff --git a/domains-frontend/src/api/models/domain-order/updateOrderStatusParams.ts b/domains-frontend/src/api/models/domain-order/updateOrderStatusParams.ts
new file mode 100644
index 0000000..2af3747
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/updateOrderStatusParams.ts
@@ -0,0 +1,11 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type { UpdateOrderStatusStatus } from './updateOrderStatusStatus';
+
+export type UpdateOrderStatusParams = {
+ status: UpdateOrderStatusStatus;
+};
diff --git a/domains-frontend/src/api/models/domain-order/updateOrderStatusStatus.ts b/domains-frontend/src/api/models/domain-order/updateOrderStatusStatus.ts
new file mode 100644
index 0000000..d7198eb
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/updateOrderStatusStatus.ts
@@ -0,0 +1,18 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export type UpdateOrderStatusStatus =
+ (typeof UpdateOrderStatusStatus)[keyof typeof UpdateOrderStatusStatus];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const UpdateOrderStatusStatus = {
+ created: 'created',
+ pending_payment: 'pending_payment',
+ paid: 'paid',
+ cancelled: 'cancelled',
+ failed: 'failed',
+} as const;
diff --git a/domains-frontend/src/api/models/domain-order/updateZoneRequest.ts b/domains-frontend/src/api/models/domain-order/updateZoneRequest.ts
new file mode 100644
index 0000000..7cb67e7
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/updateZoneRequest.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface UpdateZoneRequest {
+ price?: number;
+}
diff --git a/domains-frontend/src/api/models/domain-order/userIdHeaderParameter.ts b/domains-frontend/src/api/models/domain-order/userIdHeaderParameter.ts
new file mode 100644
index 0000000..c431fc9
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/userIdHeaderParameter.ts
@@ -0,0 +1,8 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Notification Service API
+ * OpenAPI spec version: 1.0.0
+ */
+
+export type UserIdHeaderParameter = string;
diff --git a/domains-frontend/src/api/models/domain-order/zone.ts b/domains-frontend/src/api/models/domain-order/zone.ts
new file mode 100644
index 0000000..cc1b653
--- /dev/null
+++ b/domains-frontend/src/api/models/domain-order/zone.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+
+export interface Zone {
+ id?: string;
+ name?: string;
+ price?: number;
+ createdAt?: string;
+ updatedAt?: string;
+}
diff --git a/domains-frontend/src/api/models/exdns/deleteZonesDomain200.ts b/domains-frontend/src/api/models/exdns/deleteZonesDomain200.ts
new file mode 100644
index 0000000..7a44dc0
--- /dev/null
+++ b/domains-frontend/src/api/models/exdns/deleteZonesDomain200.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Exdns HTTP API
+ * OpenAPI spec version: 0.1.0
+ */
+
+export type DeleteZonesDomain200 = {
+ status?: string;
+};
diff --git a/domains-frontend/src/api/models/exdns/error.ts b/domains-frontend/src/api/models/exdns/error.ts
new file mode 100644
index 0000000..fdc0505
--- /dev/null
+++ b/domains-frontend/src/api/models/exdns/error.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Exdns HTTP API
+ * OpenAPI spec version: 0.1.0
+ */
+
+export interface Error {
+ error?: string;
+}
diff --git a/domains-frontend/src/api/models/exdns/index.ts b/domains-frontend/src/api/models/exdns/index.ts
new file mode 100644
index 0000000..1c978cd
--- /dev/null
+++ b/domains-frontend/src/api/models/exdns/index.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Exdns HTTP API
+ * OpenAPI spec version: 0.1.0
+ */
+
+export * from './deleteZonesDomain200';
+export * from './error';
+export * from './postZonesDomain201';
+export * from './putZonesDomain200';
+export * from './record';
+export * from './recordType';
+export * from './zone';
diff --git a/domains-frontend/src/api/models/exdns/postZonesDomain201.ts b/domains-frontend/src/api/models/exdns/postZonesDomain201.ts
new file mode 100644
index 0000000..6c3f442
--- /dev/null
+++ b/domains-frontend/src/api/models/exdns/postZonesDomain201.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Exdns HTTP API
+ * OpenAPI spec version: 0.1.0
+ */
+
+export type PostZonesDomain201 = {
+ status?: string;
+};
diff --git a/domains-frontend/src/api/models/exdns/putZonesDomain200.ts b/domains-frontend/src/api/models/exdns/putZonesDomain200.ts
new file mode 100644
index 0000000..8742319
--- /dev/null
+++ b/domains-frontend/src/api/models/exdns/putZonesDomain200.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Exdns HTTP API
+ * OpenAPI spec version: 0.1.0
+ */
+
+export type PutZonesDomain200 = {
+ status?: string;
+};
diff --git a/domains-frontend/src/api/models/exdns/record.ts b/domains-frontend/src/api/models/exdns/record.ts
new file mode 100644
index 0000000..9dc15c4
--- /dev/null
+++ b/domains-frontend/src/api/models/exdns/record.ts
@@ -0,0 +1,14 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Exdns HTTP API
+ * OpenAPI spec version: 0.1.0
+ */
+import type { RecordType } from './recordType';
+
+export interface Record {
+ name: string;
+ type: RecordType;
+ ttl: number;
+ data: unknown;
+}
diff --git a/domains-frontend/src/api/models/exdns/recordType.ts b/domains-frontend/src/api/models/exdns/recordType.ts
new file mode 100644
index 0000000..27e5694
--- /dev/null
+++ b/domains-frontend/src/api/models/exdns/recordType.ts
@@ -0,0 +1,20 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Exdns HTTP API
+ * OpenAPI spec version: 0.1.0
+ */
+
+export type RecordType = (typeof RecordType)[keyof typeof RecordType];
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export const RecordType = {
+ A: 'A',
+ AAAA: 'AAAA',
+ NS: 'NS',
+ PTR: 'PTR',
+ MX: 'MX',
+ TXT: 'TXT',
+ SOA: 'SOA',
+ CNAME: 'CNAME',
+} as const;
diff --git a/domains-frontend/src/api/models/exdns/zone.ts b/domains-frontend/src/api/models/exdns/zone.ts
new file mode 100644
index 0000000..3bf916a
--- /dev/null
+++ b/domains-frontend/src/api/models/exdns/zone.ts
@@ -0,0 +1,13 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Exdns HTTP API
+ * OpenAPI spec version: 0.1.0
+ */
+import type { Record } from './record';
+
+export interface Zone {
+ name: string;
+ version: number;
+ records: Record[];
+}
diff --git a/domains-frontend/src/api/services/auth.ts b/domains-frontend/src/api/services/auth.ts
new file mode 100644
index 0000000..473a7c9
--- /dev/null
+++ b/domains-frontend/src/api/services/auth.ts
@@ -0,0 +1,203 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type {
+ ApiResponseBoolean,
+ ApiResponseLoginResponse,
+ ApiResponseString,
+ ApiResponseTwoFactorSetupResponse,
+ ApiResponseUserResponse,
+ Enable2FAWithSecretRequest,
+ LoginRequest,
+ RefreshTokenRequest,
+ RegisterRequest,
+ ResendVerificationEmailParams,
+ VerifyEmailParams,
+} from '../models/auth';
+
+import { customInstance } from '../apiClient';
+type SecondParameter unknown> = Parameters[1];
+
+export const resendVerificationEmail = (
+ params: ResendVerificationEmailParams,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/auth/resend-verification`, method: 'POST', params },
+ options
+ );
+};
+
+export const register = (
+ registerRequest: RegisterRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/auth/register`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: registerRequest,
+ },
+ options
+ );
+};
+
+export const refreshToken = (
+ refreshTokenRequest: RefreshTokenRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/auth/refresh`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: refreshTokenRequest,
+ },
+ options
+ );
+};
+
+export const login = (
+ loginRequest: LoginRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/auth/login`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: loginRequest,
+ },
+ options
+ );
+};
+
+export const enable2FA = (
+ enable2FAWithSecretRequest: Enable2FAWithSecretRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/auth/2fa/enable`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: enable2FAWithSecretRequest,
+ },
+ options
+ );
+};
+
+export const disable2FA = (
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/auth/2fa/disable`, method: 'POST' },
+ options
+ );
+};
+
+export const getUserById = (
+ id: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/users/${id}`, method: 'GET' },
+ options
+ );
+};
+
+export const getUserEmail = (
+ id: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/users/${id}/email`, method: 'GET' },
+ options
+ );
+};
+
+export const getCurrentUser = (
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/users/me`, method: 'GET' },
+ options
+ );
+};
+
+export const verifyEmail = (
+ params: VerifyEmailParams,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/auth/verify-email`, method: 'GET', params },
+ options
+ );
+};
+
+export const health = (
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/auth/health`, method: 'GET' },
+ options
+ );
+};
+
+export const get2FAStatus = (
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/auth/2fa/status`, method: 'GET' },
+ options
+ );
+};
+
+export const generateSetup = (
+ options?: SecondParameter<
+ typeof customInstance
+ >
+) => {
+ return customInstance(
+ { url: `/auth/2fa/setup`, method: 'GET' },
+ options
+ );
+};
+
+export type ResendVerificationEmailResult = NonNullable<
+ Awaited>
+>;
+export type RegisterResult = NonNullable>>;
+export type RefreshTokenResult = NonNullable<
+ Awaited>
+>;
+export type LoginResult = NonNullable>>;
+export type Enable2FAResult = NonNullable<
+ Awaited>
+>;
+export type Disable2FAResult = NonNullable<
+ Awaited>
+>;
+export type GetUserByIdResult = NonNullable<
+ Awaited>
+>;
+export type GetUserEmailResult = NonNullable<
+ Awaited>
+>;
+export type GetCurrentUserResult = NonNullable<
+ Awaited>
+>;
+export type VerifyEmailResult = NonNullable<
+ Awaited>
+>;
+export type HealthResult = NonNullable>>;
+export type Get2FAStatusResult = NonNullable<
+ Awaited>
+>;
+export type GenerateSetupResult = NonNullable<
+ Awaited>
+>;
diff --git a/domains-frontend/src/api/services/domain-order.ts b/domains-frontend/src/api/services/domain-order.ts
new file mode 100644
index 0000000..64bfef6
--- /dev/null
+++ b/domains-frontend/src/api/services/domain-order.ts
@@ -0,0 +1,631 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * OpenAPI definition
+ * OpenAPI spec version: v0
+ */
+import type {
+ AddCartItemRequest,
+ ApiResponseCartItemResponse,
+ ApiResponseCartResponse,
+ ApiResponseDnsRecordResponse,
+ ApiResponseDomainResponse,
+ ApiResponseListDnsRecordResponse,
+ ApiResponseListDomainSearchResult,
+ ApiResponseNsDelegationResponse,
+ ApiResponseOrderResponse,
+ ApiResponsePageDomainResponse,
+ ApiResponsePageOrderResponse,
+ ApiResponsePageZone,
+ ApiResponseString,
+ ApiResponseVoid,
+ ApiResponseZone,
+ CreateARecordRequest,
+ CreateAaaaRecordRequest,
+ CreateCaaRecordRequest,
+ CreateCnameRecordRequest,
+ CreateDomainRequest,
+ CreateMxRecordRequest,
+ CreateOrderRequest,
+ CreateSrvRecordRequest,
+ CreateTxtRecordRequest,
+ CreateZoneRequest,
+ GetAllDomainsParams,
+ GetAllZonesParams,
+ GetOrdersParams,
+ NsDelegationRequest,
+ SearchDomainsParams,
+ UpdateDnsRecordRequest,
+ UpdateDomainRequest,
+ UpdateOrderStatusParams,
+ UpdateZoneRequest,
+} from '../models/domain-order';
+
+import { customInstance } from '../apiClientDomains';
+type SecondParameter unknown> = Parameters[1];
+
+export const getZoneById = (
+ id: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/zones/${id}`, method: 'GET' },
+ options
+ );
+};
+
+export const updateZone = (
+ id: string,
+ updateZoneRequest: UpdateZoneRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/zones/${id}`,
+ method: 'PUT',
+ headers: { 'Content-Type': 'application/json' },
+ data: updateZoneRequest,
+ },
+ options
+ );
+};
+
+export const deleteZone = (
+ id: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/zones/${id}`, method: 'DELETE' },
+ options
+ );
+};
+
+export const updateOrderStatus = (
+ id: string,
+ params: UpdateOrderStatusParams,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/orders/${id}/status`, method: 'PUT', params },
+ options
+ );
+};
+
+export const getDomainById = (
+ id: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/domains/${id}`, method: 'GET' },
+ options
+ );
+};
+
+export const updateDomain = (
+ id: string,
+ updateDomainRequest: UpdateDomainRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/domains/${id}`,
+ method: 'PUT',
+ headers: { 'Content-Type': 'application/json' },
+ data: updateDomainRequest,
+ },
+ options
+ );
+};
+
+export const deleteDomain = (
+ id: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/domains/${id}`, method: 'DELETE' },
+ options
+ );
+};
+
+export const getRecordById = (
+ recordId: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/dns/records/${recordId}`, method: 'GET' },
+ options
+ );
+};
+
+export const updateRecord = (
+ recordId: string,
+ updateDnsRecordRequest: UpdateDnsRecordRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/dns/records/${recordId}`,
+ method: 'PUT',
+ headers: { 'Content-Type': 'application/json' },
+ data: updateDnsRecordRequest,
+ },
+ options
+ );
+};
+
+export const deleteRecord = (
+ recordId: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/dns/records/${recordId}`, method: 'DELETE' },
+ options
+ );
+};
+
+export const getDelegation = (
+ domainId: string,
+ options?: SecondParameter<
+ typeof customInstance
+ >
+) => {
+ return customInstance(
+ { url: `/dns/delegation/domain/${domainId}`, method: 'GET' },
+ options
+ );
+};
+
+export const setDelegation = (
+ domainId: string,
+ nsDelegationRequest: NsDelegationRequest,
+ options?: SecondParameter<
+ typeof customInstance
+ >
+) => {
+ return customInstance(
+ {
+ url: `/dns/delegation/domain/${domainId}`,
+ method: 'PUT',
+ headers: { 'Content-Type': 'application/json' },
+ data: nsDelegationRequest,
+ },
+ options
+ );
+};
+
+export const removeDelegation = (
+ domainId: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/dns/delegation/domain/${domainId}`, method: 'DELETE' },
+ options
+ );
+};
+
+export const getAllZones = (
+ params: GetAllZonesParams,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/zones`, method: 'GET', params },
+ options
+ );
+};
+
+export const createZone = (
+ createZoneRequest: CreateZoneRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/zones`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: createZoneRequest,
+ },
+ options
+ );
+};
+
+export const getOrders = (
+ params: GetOrdersParams,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/orders`, method: 'GET', params },
+ options
+ );
+};
+
+export const createOrder = (
+ createOrderRequest: CreateOrderRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/orders`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: createOrderRequest,
+ },
+ options
+ );
+};
+
+export const cancelOrder = (
+ id: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/orders/${id}/cancel`, method: 'POST' },
+ options
+ );
+};
+
+export const getAllDomains = (
+ params: GetAllDomainsParams,
+ options?: SecondParameter<
+ typeof customInstance
+ >
+) => {
+ return customInstance(
+ { url: `/domains`, method: 'GET', params },
+ options
+ );
+};
+
+export const createDomain = (
+ createDomainRequest: CreateDomainRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/domains`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: createDomainRequest,
+ },
+ options
+ );
+};
+
+export const activateDomain = (
+ id: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/domains/${id}/activate`, method: 'POST' },
+ options
+ );
+};
+
+export const createTxtRecord = (
+ createTxtRecordRequest: CreateTxtRecordRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/dns/records/txt`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: createTxtRecordRequest,
+ },
+ options
+ );
+};
+
+export const createSrvRecord = (
+ createSrvRecordRequest: CreateSrvRecordRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/dns/records/srv`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: createSrvRecordRequest,
+ },
+ options
+ );
+};
+
+export const createMxRecord = (
+ createMxRecordRequest: CreateMxRecordRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/dns/records/mx`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: createMxRecordRequest,
+ },
+ options
+ );
+};
+
+export const createCnameRecord = (
+ createCnameRecordRequest: CreateCnameRecordRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/dns/records/cname`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: createCnameRecordRequest,
+ },
+ options
+ );
+};
+
+export const createCaaRecord = (
+ createCaaRecordRequest: CreateCaaRecordRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/dns/records/caa`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: createCaaRecordRequest,
+ },
+ options
+ );
+};
+
+export const createAaaaRecord = (
+ createAaaaRecordRequest: CreateAaaaRecordRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/dns/records/aaaa`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: createAaaaRecordRequest,
+ },
+ options
+ );
+};
+
+export const createARecord = (
+ createARecordRequest: CreateARecordRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/dns/records/a`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: createARecordRequest,
+ },
+ options
+ );
+};
+
+export const addItem = (
+ addCartItemRequest: AddCartItemRequest,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/cart/items`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: addCartItemRequest,
+ },
+ options
+ );
+};
+
+export const getZoneByName = (
+ name: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/zones/name/${name}`, method: 'GET' },
+ options
+ );
+};
+
+export const getOrderById = (
+ id: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/orders/${id}`, method: 'GET' },
+ options
+ );
+};
+
+export const searchDomains = (
+ params: SearchDomainsParams,
+ options?: SecondParameter<
+ typeof customInstance
+ >
+) => {
+ return customInstance(
+ { url: `/domains/search`, method: 'GET', params },
+ options
+ );
+};
+
+export const getDomainByFqdn = (
+ fqdn: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/domains/fqdn/${fqdn}`, method: 'GET' },
+ options
+ );
+};
+
+export const health = (
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/dns/records/health`, method: 'GET' },
+ options
+ );
+};
+
+export const getRecordsByDomain = (
+ domainId: string,
+ options?: SecondParameter<
+ typeof customInstance
+ >
+) => {
+ return customInstance(
+ { url: `/dns/records/domain/${domainId}`, method: 'GET' },
+ options
+ );
+};
+
+export const health1 = (
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/dns/delegation/health`, method: 'GET' },
+ options
+ );
+};
+
+export const getCart = (
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/cart`, method: 'GET' },
+ options
+ );
+};
+
+export const clearCart = (
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/cart`, method: 'DELETE' },
+ options
+ );
+};
+
+export const removeItem = (
+ itemId: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/cart/items/${itemId}`, method: 'DELETE' },
+ options
+ );
+};
+
+export type GetZoneByIdResult = NonNullable<
+ Awaited>
+>;
+export type UpdateZoneResult = NonNullable<
+ Awaited>
+>;
+export type DeleteZoneResult = NonNullable<
+ Awaited>
+>;
+export type UpdateOrderStatusResult = NonNullable<
+ Awaited>
+>;
+export type GetDomainByIdResult = NonNullable<
+ Awaited>
+>;
+export type UpdateDomainResult = NonNullable<
+ Awaited>
+>;
+export type DeleteDomainResult = NonNullable<
+ Awaited>
+>;
+export type GetRecordByIdResult = NonNullable<
+ Awaited>
+>;
+export type UpdateRecordResult = NonNullable<
+ Awaited>
+>;
+export type DeleteRecordResult = NonNullable<
+ Awaited>
+>;
+export type GetDelegationResult = NonNullable<
+ Awaited>
+>;
+export type SetDelegationResult = NonNullable<
+ Awaited>
+>;
+export type RemoveDelegationResult = NonNullable<
+ Awaited>
+>;
+export type GetAllZonesResult = NonNullable<
+ Awaited>
+>;
+export type CreateZoneResult = NonNullable<
+ Awaited>
+>;
+export type GetOrdersResult = NonNullable<
+ Awaited>
+>;
+export type CreateOrderResult = NonNullable<
+ Awaited>
+>;
+export type CancelOrderResult = NonNullable<
+ Awaited>
+>;
+export type GetAllDomainsResult = NonNullable<
+ Awaited>
+>;
+export type CreateDomainResult = NonNullable<
+ Awaited>
+>;
+export type ActivateDomainResult = NonNullable<
+ Awaited>
+>;
+export type CreateTxtRecordResult = NonNullable<
+ Awaited>
+>;
+export type CreateSrvRecordResult = NonNullable<
+ Awaited>
+>;
+export type CreateMxRecordResult = NonNullable<
+ Awaited>
+>;
+export type CreateCnameRecordResult = NonNullable<
+ Awaited>
+>;
+export type CreateCaaRecordResult = NonNullable<
+ Awaited>
+>;
+export type CreateAaaaRecordResult = NonNullable<
+ Awaited>
+>;
+export type CreateARecordResult = NonNullable<
+ Awaited>
+>;
+export type AddItemResult = NonNullable>>;
+export type GetZoneByNameResult = NonNullable<
+ Awaited>
+>;
+export type GetOrderByIdResult = NonNullable<
+ Awaited>
+>;
+export type SearchDomainsResult = NonNullable<
+ Awaited>
+>;
+export type GetDomainByFqdnResult = NonNullable<
+ Awaited>
+>;
+export type HealthResult = NonNullable>>;
+export type GetRecordsByDomainResult = NonNullable<
+ Awaited>
+>;
+export type Health1Result = NonNullable>>;
+export type GetCartResult = NonNullable>>;
+export type ClearCartResult = NonNullable<
+ Awaited>
+>;
+export type RemoveItemResult = NonNullable<
+ Awaited>
+>;
diff --git a/domains-frontend/src/api/services/exdns.ts b/domains-frontend/src/api/services/exdns.ts
new file mode 100644
index 0000000..ba08f15
--- /dev/null
+++ b/domains-frontend/src/api/services/exdns.ts
@@ -0,0 +1,92 @@
+/**
+ * Generated by orval v7.17.2 🍺
+ * Do not edit manually.
+ * Exdns HTTP API
+ * OpenAPI spec version: 0.1.0
+ */
+import type {
+ DeleteZonesDomain200,
+ PostZonesDomain201,
+ PutZonesDomain200,
+ Zone,
+} from '../models/exdns';
+
+import { customInstance } from '../apiClientExdns';
+type SecondParameter unknown> = Parameters[1];
+
+/**
+ * @summary Get zone
+ */
+export const getZonesDomain = (
+ domain: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/zones/${domain}`, method: 'GET' },
+ options
+ );
+};
+
+/**
+ * @summary Create zone
+ */
+export const postZonesDomain = (
+ domain: string,
+ zone: Zone,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/zones/${domain}`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ data: zone,
+ },
+ options
+ );
+};
+
+/**
+ * @summary Update zone
+ */
+export const putZonesDomain = (
+ domain: string,
+ zone: Zone,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ {
+ url: `/zones/${domain}`,
+ method: 'PUT',
+ headers: { 'Content-Type': 'application/json' },
+ data: zone,
+ },
+ options
+ );
+};
+
+/**
+ * @summary Delete zone
+ */
+export const deleteZonesDomain = (
+ domain: string,
+ options?: SecondParameter>
+) => {
+ return customInstance(
+ { url: `/zones/${domain}`, method: 'DELETE' },
+ options
+ );
+};
+
+export type GetZonesDomainResult = NonNullable<
+ Awaited>
+>;
+export type PostZonesDomainResult = NonNullable<
+ Awaited>
+>;
+export type PutZonesDomainResult = NonNullable<
+ Awaited>
+>;
+export type DeleteZonesDomainResult = NonNullable<
+ Awaited>
+>;
diff --git a/domains-frontend/src/api/specs/exdns.json b/domains-frontend/src/api/specs/exdns.json
new file mode 100644
index 0000000..b98db6d
--- /dev/null
+++ b/domains-frontend/src/api/specs/exdns.json
@@ -0,0 +1,244 @@
+{
+ "openapi": "3.0.3",
+ "info": {
+ "title": "Exdns HTTP API",
+ "version": "0.1.0"
+ },
+ "servers": [
+ {
+ "url": "http://localhost:8080"
+ }
+ ],
+ "components": {
+ "securitySchemes": {
+ "bearerAuth": {
+ "type": "http",
+ "scheme": "bearer",
+ "bearerFormat": "JWT"
+ }
+ },
+ "schemas": {
+ "Zone": {
+ "type": "object",
+ "required": ["name", "version", "records"],
+ "properties": {
+ "name": { "type": "string" },
+ "version": { "type": "integer" },
+ "records": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/Record" }
+ }
+ }
+ },
+ "Record": {
+ "type": "object",
+ "required": ["name", "type", "ttl", "data"],
+ "properties": {
+ "name": { "type": "string" },
+ "type": {
+ "type": "string",
+ "enum": ["A", "AAAA", "NS", "PTR", "MX", "TXT", "SOA", "CNAME"]
+ },
+ "ttl": { "type": "integer" },
+ "data": {}
+ }
+ },
+ "Error": {
+ "type": "object",
+ "properties": {
+ "error": { "type": "string" }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
+ "paths": {
+ "/zones/{domain}": {
+ "get": {
+ "summary": "Get zone",
+ "parameters": [
+ {
+ "name": "domain",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Zone data",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Zone" }
+ }
+ }
+ },
+ "404": {
+ "description": "Zone not found",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Error" }
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Error" }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "summary": "Create zone",
+ "parameters": [
+ {
+ "name": "domain",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string" }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Zone" }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": { "status": { "type": "string" } }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Error" }
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Error" }
+ }
+ }
+ }
+ }
+ },
+ "put": {
+ "summary": "Update zone",
+ "parameters": [
+ {
+ "name": "domain",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string" }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Zone" }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Updated",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": { "status": { "type": "string" } }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Zone not found",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Error" }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Error" }
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Error" }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "summary": "Delete zone",
+ "parameters": [
+ {
+ "name": "domain",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Deleted",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": { "status": { "type": "string" } }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Zone not found",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Error" }
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/Error" }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/domains-frontend/src/assets/bg.png b/domains-frontend/src/assets/bg.png
new file mode 100644
index 0000000..7596e31
Binary files /dev/null and b/domains-frontend/src/assets/bg.png differ
diff --git a/domains-frontend/src/assets/bg.webp b/domains-frontend/src/assets/bg.webp
new file mode 100644
index 0000000..231b1ef
Binary files /dev/null and b/domains-frontend/src/assets/bg.webp differ
diff --git a/domains-frontend/src/common/atoms.ts b/domains-frontend/src/common/atoms.ts
new file mode 100644
index 0000000..4593bda
--- /dev/null
+++ b/domains-frontend/src/common/atoms.ts
@@ -0,0 +1,2 @@
+export const $ok = Symbol('Ok');
+export const $error = Symbol('Error');
diff --git a/domains-frontend/src/components/AppLink.tsx b/domains-frontend/src/components/AppLink.tsx
new file mode 100644
index 0000000..a9f44a4
--- /dev/null
+++ b/domains-frontend/src/components/AppLink.tsx
@@ -0,0 +1,22 @@
+import { Link } from '@chakra-ui/react';
+import React, { type MouseEvent, type ReactNode } from 'react';
+import { useNavigate, type NavigateOptions } from 'react-router';
+
+type Props = {
+ children: ReactNode;
+ to: string;
+ options?: NavigateOptions;
+};
+
+const AppLink = (props: Props) => {
+ const navigate = useNavigate();
+ const handleClick = (e: MouseEvent) => {
+ e.preventDefault();
+
+ navigate(props.to, props.options);
+ };
+
+ return {props.children};
+};
+
+export default AppLink;
diff --git a/domains-frontend/src/components/DateText.tsx b/domains-frontend/src/components/DateText.tsx
new file mode 100644
index 0000000..30afb5b
--- /dev/null
+++ b/domains-frontend/src/components/DateText.tsx
@@ -0,0 +1,23 @@
+import { Text } from '@chakra-ui/react';
+import type { Dayjs } from 'dayjs';
+import dayjs from 'dayjs';
+import React, { type JSX } from 'react';
+
+type Props = {
+ children: string | Date | Dayjs;
+ as?: string | (() => JSX.Element);
+};
+
+const DateText = (props: Props) => {
+ const date = dayjs(props.children);
+ const format = dayjs().year() === date.year() ? 'DD MMMM' : 'DD MMM YYYY';
+ const dateText = date.locale('ru').format(format);
+
+ if (props.as) {
+ return React.createElement(props.as, null, dateText);
+ }
+
+ return {dateText};
+};
+
+export default DateText;
diff --git a/domains-frontend/src/components/admin/zones/CreateZoneDialog.tsx b/domains-frontend/src/components/admin/zones/CreateZoneDialog.tsx
new file mode 100644
index 0000000..534526e
--- /dev/null
+++ b/domains-frontend/src/components/admin/zones/CreateZoneDialog.tsx
@@ -0,0 +1,122 @@
+import { Button, Field, Input, Stack, Text } from '@chakra-ui/react';
+import {
+ DialogBackdrop,
+ DialogBody,
+ DialogCloseTrigger,
+ DialogContent,
+ DialogFooter,
+ DialogHeader,
+ DialogPositioner,
+ DialogRoot,
+ DialogTitle,
+ DialogTrigger,
+} from '@chakra-ui/react';
+import { useState, type FormEvent } from 'react';
+import { createZone } from '~/api/services/domain-order';
+
+type Props = {
+ onCreated?: () => void | Promise;
+};
+
+const CreateZoneDialog = ({ onCreated }: Props) => {
+ const [isCreating, setIsCreating] = useState(false);
+ const [createError, setCreateError] = useState('');
+ const [zoneName, setZoneName] = useState('');
+ const [zonePrice, setZonePrice] = useState('');
+
+ const handleCreateZone = async (event: FormEvent) => {
+ event.preventDefault();
+ const name = zoneName.trim();
+ const price = Number(zonePrice);
+
+ if (!name || Number.isNaN(price)) {
+ setCreateError('Введие корректное имя и(или) цену.');
+ return;
+ }
+
+ setIsCreating(true);
+ setCreateError('');
+
+ try {
+ await createZone({ name, price });
+ setZoneName('');
+ setZonePrice('');
+ if (onCreated) {
+ await onCreated();
+ }
+ } catch {
+ setCreateError('Не удалось создать зону. Попробуйте снова');
+ } finally {
+ setIsCreating(false);
+ }
+ };
+
+ const isSubmitDisabled =
+ isCreating ||
+ !zoneName.trim() ||
+ !zonePrice.trim() ||
+ Number.isNaN(Number(zonePrice));
+
+ return (
+
+
+
+
+
+
+
+
+ Создать зону
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default CreateZoneDialog;
diff --git a/domains-frontend/src/components/admin/zones/ManageZoneDialog.tsx b/domains-frontend/src/components/admin/zones/ManageZoneDialog.tsx
new file mode 100644
index 0000000..326ebce
--- /dev/null
+++ b/domains-frontend/src/components/admin/zones/ManageZoneDialog.tsx
@@ -0,0 +1,154 @@
+import { Button, Field, Input, Stack, Text } from '@chakra-ui/react';
+import {
+ DialogBackdrop,
+ DialogBody,
+ DialogCloseTrigger,
+ DialogContent,
+ DialogFooter,
+ DialogHeader,
+ DialogPositioner,
+ DialogRoot,
+ DialogTitle,
+ DialogTrigger,
+} from '@chakra-ui/react';
+import { useEffect, useState, type FormEvent } from 'react';
+import type { Zone } from '~/api/models/domain-order';
+import { deleteZone, updateZone } from '~/api/services/domain-order';
+
+type Props = {
+ zone: Zone;
+ onUpdated?: () => void | Promise;
+};
+
+const ManageZoneDialog = ({ zone, onUpdated }: Props) => {
+ const [price, setPrice] = useState('');
+ const [isSaving, setIsSaving] = useState(false);
+ const [isDeleting, setIsDeleting] = useState(false);
+ const [error, setError] = useState('');
+
+ useEffect(() => {
+ setPrice(zone.price === undefined ? '' : String(zone.price));
+ setError('');
+ }, [zone.id, zone.price]);
+
+ const handleSave = async (event: FormEvent) => {
+ event.preventDefault();
+
+ if (!zone.id) {
+ setError('Зона не найдена.');
+ return;
+ }
+
+ const nextPrice = Number(price);
+ if (Number.isNaN(nextPrice)) {
+ setError('Введите корректную цену.');
+ return;
+ }
+
+ setIsSaving(true);
+ setError('');
+
+ try {
+ await updateZone(zone.id, { price: nextPrice });
+ if (onUpdated) {
+ await onUpdated();
+ }
+ } catch {
+ setError('Не удалось обновить зону. Попробуйте снова.');
+ } finally {
+ setIsSaving(false);
+ }
+ };
+
+ const handleDelete = async () => {
+ if (!zone.id) {
+ setError('Зона не найдена.');
+ return;
+ }
+
+ setIsDeleting(true);
+ setError('');
+
+ try {
+ await deleteZone(zone.id);
+ if (onUpdated) {
+ await onUpdated();
+ }
+ } catch {
+ setError('Не удалось удалить зону. Попробуйте снова.');
+ } finally {
+ setIsDeleting(false);
+ }
+ };
+
+ const isSubmitDisabled =
+ isSaving || isDeleting || !price.trim() || Number.isNaN(Number(price));
+ const formId = `manage-zone-form-${zone.id ?? zone.name ?? 'zone'}`;
+
+ return (
+
+
+
+
+
+
+
+
+ Управление зоной
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default ManageZoneDialog;
diff --git a/domains-frontend/src/components/app/profile/ChangePassword.tsx b/domains-frontend/src/components/app/profile/ChangePassword.tsx
new file mode 100644
index 0000000..8884d39
--- /dev/null
+++ b/domains-frontend/src/components/app/profile/ChangePassword.tsx
@@ -0,0 +1,103 @@
+import { Button, Field, Input, Stack, Text } from '@chakra-ui/react';
+import {
+ DialogActionTrigger,
+ DialogBackdrop,
+ DialogBody,
+ DialogCloseTrigger,
+ DialogContent,
+ DialogFooter,
+ DialogHeader,
+ DialogPositioner,
+ DialogRoot,
+ DialogTitle,
+ DialogTrigger,
+} from '@chakra-ui/react';
+import { useState, type FormEvent } from 'react';
+
+const ChangePassword = () => {
+ const [currentPassword, setCurrentPassword] = useState('');
+ const [newPassword, setNewPassword] = useState('');
+ const [confirmPassword, setConfirmPassword] = useState('');
+
+ const isMismatch =
+ newPassword.length > 0 &&
+ confirmPassword.length > 0 &&
+ newPassword !== confirmPassword;
+
+ const isSubmitDisabled =
+ !currentPassword || !newPassword || !confirmPassword || isMismatch;
+
+ const handleSubmit = (e: FormEvent) => {
+ e.preventDefault();
+ };
+
+ return (
+
+
+
+
+
+
+
+
+ Смена пароля
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default ChangePassword;
diff --git a/domains-frontend/src/components/app/profile/EnableTwoFactorDialog.tsx b/domains-frontend/src/components/app/profile/EnableTwoFactorDialog.tsx
new file mode 100644
index 0000000..6dfd630
--- /dev/null
+++ b/domains-frontend/src/components/app/profile/EnableTwoFactorDialog.tsx
@@ -0,0 +1,152 @@
+import { Button, Field, Input, Stack, Text } from '@chakra-ui/react';
+import {
+ DialogBackdrop,
+ DialogBody,
+ DialogCloseTrigger,
+ DialogContent,
+ DialogFooter,
+ DialogHeader,
+ DialogPositioner,
+ DialogRoot,
+ DialogTitle,
+ DialogTrigger,
+} from '@chakra-ui/react';
+import { useState, type FormEvent } from 'react';
+import type { TwoFactorSetupResponse } from '~/api/models/auth';
+import { enable2FA, generateSetup } from '~/api/services/auth';
+
+type Props = {
+ onEnabled?: () => void | Promise;
+};
+
+const EnableTwoFactorDialog = ({ onEnabled }: Props) => {
+ const [setup, setSetup] = useState(null);
+ const [code, setCode] = useState('');
+ const [isLoadingSetup, setIsLoadingSetup] = useState(false);
+ const [isEnabling, setIsEnabling] = useState(false);
+ const [error, setError] = useState('');
+ const [success, setSuccess] = useState('');
+
+ const handleOpen = async () => {
+ setError('');
+ setSuccess('');
+ if (setup || isLoadingSetup) return;
+
+ setIsLoadingSetup(true);
+ try {
+ const response = await generateSetup();
+ setSetup(response?.data ?? null);
+ } catch {
+ setError('Не удалось получить настройки 2FA. Попробуйте еще раз.');
+ } finally {
+ setIsLoadingSetup(false);
+ }
+ };
+
+ const handleEnable = async (event: FormEvent) => {
+ event.preventDefault();
+ setError('');
+ setSuccess('');
+
+ const secret = setup?.secret ?? setup?.manualEntryKey;
+ if (!secret) {
+ setError('Настройки 2FA не найдены. Попробуйте еще раз.');
+ return;
+ }
+
+ if (!code.trim()) {
+ setError('Введите корректный код.');
+ return;
+ }
+
+ setIsEnabling(true);
+ try {
+ await enable2FA({ secret, code: code.trim() });
+ setSuccess('Двухфакторная аутентификация включена.');
+ setCode('');
+ if (onEnabled) {
+ await onEnabled();
+ }
+ } catch {
+ setError('Не удалось включить 2FA. Попробуйте еще раз.');
+ } finally {
+ setIsEnabling(false);
+ }
+ };
+
+ const isSubmitDisabled = isEnabling || !code.trim() || isLoadingSetup;
+
+ return (
+
+
+
+
+
+
+
+
+ Включить 2FA
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default EnableTwoFactorDialog;
diff --git a/domains-frontend/src/components/dashboard/DomainList.tsx b/domains-frontend/src/components/dashboard/DomainList.tsx
new file mode 100644
index 0000000..a0ed656
--- /dev/null
+++ b/domains-frontend/src/components/dashboard/DomainList.tsx
@@ -0,0 +1,48 @@
+import React from 'react';
+import type { DomainResponse } from '../../api/models';
+import { Button, Grid, GridItem, HStack, Stack, Text } from '@chakra-ui/react';
+import DateText from '../DateText';
+import { ArrowRight } from 'lucide-react';
+
+type Props = {
+ domains: DomainResponse[];
+};
+
+const DomainList = (props: Props) => {
+ return (
+
+ {props.domains.map((domain) => (
+
+
+ {domain.fqdn}
+
+
+
+ до {domain.expiresAt}
+
+
+
+
+
+
+
+
+
+ ))}
+
+ );
+};
+
+export default DomainList;
diff --git a/domains-frontend/src/components/dashboard/EventList.tsx b/domains-frontend/src/components/dashboard/EventList.tsx
new file mode 100644
index 0000000..0c015aa
--- /dev/null
+++ b/domains-frontend/src/components/dashboard/EventList.tsx
@@ -0,0 +1,53 @@
+import React from 'react';
+import type { DomainResponse } from '../../api/models';
+import {
+ Badge,
+ Button,
+ Grid,
+ GridItem,
+ HStack,
+ Stack,
+ Text,
+} from '@chakra-ui/react';
+import DateText from '../DateText';
+import { ArrowRight, Proportions } from 'lucide-react';
+import type { Dayjs } from 'dayjs';
+
+type Props = {
+ events: {
+ id: string;
+ type: 'SYSTEM' | 'USER';
+ message: string;
+ at: string | Date | Dayjs;
+ }[];
+};
+
+const EventList = (props: Props) => {
+ return (
+
+ {props.events.map((event) => (
+
+
+
+ {event.type === 'SYSTEM' ? 'Система' : 'Пользователь'}
+
+
+ {event.message}
+
+ {event.at}
+
+
+ ))}
+
+ );
+};
+
+export default EventList;
diff --git a/domains-frontend/src/components/domainsTable/DomainRow.tsx b/domains-frontend/src/components/domainsTable/DomainRow.tsx
new file mode 100644
index 0000000..45adbff
--- /dev/null
+++ b/domains-frontend/src/components/domainsTable/DomainRow.tsx
@@ -0,0 +1,29 @@
+import type { ReactNode } from 'react';
+import type { DomainQuery } from '../../api/models/DomainQuery';
+import { Button, Table, Text } from '@chakra-ui/react';
+
+type Props = {
+ domain: DomainQuery;
+ buttonsFunction?: (domain: DomainQuery) => ReactNode;
+};
+
+const DomainRow = (props: Props) => {
+ const { domain, buttonsFunction } = props;
+ return (
+
+ {domain.fqdn}
+ {domain.price}₽ / месяц
+
+ {buttonsFunction ? (
+ buttonsFunction(domain)
+ ) : domain.free ? (
+
+ ) : (
+ Домен занят
+ )}
+
+
+ );
+};
+
+export default DomainRow;
diff --git a/domains-frontend/src/components/domainsTable/DomainsTable.tsx b/domains-frontend/src/components/domainsTable/DomainsTable.tsx
new file mode 100644
index 0000000..3901c0c
--- /dev/null
+++ b/domains-frontend/src/components/domainsTable/DomainsTable.tsx
@@ -0,0 +1,39 @@
+import { Table } from '@chakra-ui/react';
+import React, { type ReactNode } from 'react';
+import type { DomainQuery } from '~/api/models/DomainQuery';
+import DomainRow from './DomainRow';
+
+type Props = {
+ domains: DomainQuery[];
+ buttonsFunction?: (domain: DomainQuery) => ReactNode;
+};
+
+const DomainsTable = (props: Props) => {
+ return (
+
+
+
+
+
+ Домен
+
+
+ Цена
+
+
+
+
+
+ {props.domains.map((domain) => (
+
+ ))}
+
+
+ );
+};
+
+export default DomainsTable;
diff --git a/domains-frontend/src/components/layouts/AdminLayout.tsx b/domains-frontend/src/components/layouts/AdminLayout.tsx
new file mode 100644
index 0000000..093904f
--- /dev/null
+++ b/domains-frontend/src/components/layouts/AdminLayout.tsx
@@ -0,0 +1,123 @@
+import {
+ Box,
+ Grid,
+ GridItem,
+ Heading,
+ HStack,
+ Spinner,
+ Stack,
+} from '@chakra-ui/react';
+import { useEffect, useLayoutEffect, useRef, useState } from 'react';
+import AppLink from '../AppLink';
+import { Outlet, useNavigate } from 'react-router';
+import { refreshToken as apiRefreshToken } from '~/api/services/auth';
+import { getAccessToken, getRefreshToken, setTokens } from '~/utils/authTokens';
+
+const AdminLayout = () => {
+ const navigate = useNavigate();
+ const [isAuthReady, setIsAuthReady] = useState(false);
+ const headerRef = useRef(null);
+ const navRef = useRef(null);
+
+ useEffect(() => {
+ let isActive = true;
+
+ const ensureAuth = async () => {
+ const accessToken = getAccessToken();
+ if (accessToken) {
+ setIsAuthReady(true);
+ return;
+ }
+
+ const refreshToken = getRefreshToken();
+ if (!refreshToken) {
+ navigate('/');
+ setIsAuthReady(true);
+ return;
+ }
+
+ try {
+ const response = await apiRefreshToken({ refreshToken });
+ const nextAccessToken = response?.data?.accessToken;
+ const nextRefreshToken = response?.data?.refreshToken ?? refreshToken;
+
+ if (!nextAccessToken) {
+ navigate('/');
+ setIsAuthReady(true);
+ return;
+ }
+
+ setTokens({ access: nextAccessToken, refresh: nextRefreshToken });
+ setIsAuthReady(true);
+ } catch {
+ if (isActive) {
+ navigate('/');
+ }
+ setIsAuthReady(true);
+ }
+ };
+
+ ensureAuth();
+
+ return () => {
+ isActive = false;
+ };
+ }, [navigate]);
+
+ useLayoutEffect(() => {
+ if (navRef.current?.style.width)
+ navRef.current.style.width = headerRef.current?.offsetWidth
+ ? `${headerRef.current?.offsetWidth}px`
+ : 'auto';
+ }, []);
+
+ if (!isAuthReady) {
+ return (
+
+
+
+ );
+ }
+
+ return (
+
+
+
+ Хрофорс Домены
+
+
+
+
+ администратор
+
+
+
+
+ Домены
+ Пользователи
+ Финансы
+ События
+ Зоны
+
+
+
+
+
+
+
+
+ );
+};
+
+export default AdminLayout;
diff --git a/domains-frontend/src/components/layouts/AppLayout.tsx b/domains-frontend/src/components/layouts/AppLayout.tsx
new file mode 100644
index 0000000..1dac9a3
--- /dev/null
+++ b/domains-frontend/src/components/layouts/AppLayout.tsx
@@ -0,0 +1,118 @@
+import {
+ Box,
+ Grid,
+ GridItem,
+ Heading,
+ HStack,
+ Spinner,
+ Stack,
+ Text,
+} from '@chakra-ui/react';
+import { useEffect, useState } from 'react';
+import AppLink from '../AppLink';
+import { Outlet, useNavigate } from 'react-router';
+import { getAccessToken, getRefreshToken, setTokens } from '~/utils/authTokens';
+import { refreshToken as apiRefreshToken } from '~/api/services/auth';
+import { useStores } from '~/store';
+
+const AppLayout = () => {
+ const navigate = useNavigate();
+ const [isAuthReady, setIsAuthReady] = useState(false);
+ const { userStore } = useStores();
+ const { fetchMe } = userStore;
+
+ useEffect(() => {
+ let isActive = true;
+
+ const ensureAuth = async () => {
+ const accessToken = getAccessToken();
+ if (accessToken) {
+ setIsAuthReady(true);
+ return;
+ }
+
+ const refreshToken = getRefreshToken();
+ if (!refreshToken) {
+ navigate('/');
+ setIsAuthReady(true);
+ return;
+ }
+
+ try {
+ const response = await apiRefreshToken({ refreshToken });
+ const nextAccessToken = response?.data?.accessToken;
+ const nextRefreshToken = response?.data?.refreshToken ?? refreshToken;
+
+ if (!nextAccessToken) {
+ navigate('/');
+ setIsAuthReady(true);
+ return;
+ }
+
+ setTokens({ access: nextAccessToken, refresh: nextRefreshToken });
+ fetchMe();
+ setIsAuthReady(true);
+ } catch {
+ if (isActive) {
+ navigate('/');
+ }
+ setIsAuthReady(true);
+ }
+ };
+
+ ensureAuth();
+
+ return () => {
+ isActive = false;
+ };
+ }, [navigate]);
+
+ if (!isAuthReady) {
+ return (
+
+
+
+ );
+ }
+
+ return (
+
+
+
+ Хрофорс Домены
+
+
+
+
+ пользователь
+
+
+
+
+ Домены
+ DNS
+ Корзина
+ События
+
+
+
+
+
+
+
+
+ );
+};
+
+export default AppLayout;
diff --git a/domains-frontend/src/components/layouts/AuthLayout.tsx b/domains-frontend/src/components/layouts/AuthLayout.tsx
new file mode 100644
index 0000000..3ae4831
--- /dev/null
+++ b/domains-frontend/src/components/layouts/AuthLayout.tsx
@@ -0,0 +1,19 @@
+import { Stack } from '@chakra-ui/react';
+import { Outlet } from 'react-router';
+
+const AuthLayout = () => {
+ return (
+
+
+
+
+
+ );
+};
+
+export default AuthLayout;
diff --git a/domains-frontend/src/components/layouts/Layout.tsx b/domains-frontend/src/components/layouts/Layout.tsx
new file mode 100644
index 0000000..2f8d2ee
--- /dev/null
+++ b/domains-frontend/src/components/layouts/Layout.tsx
@@ -0,0 +1,18 @@
+import { Provider } from '../ui/provider.tsx';
+import { Outlet } from 'react-router';
+import { Toaster } from '../ui/toaster.tsx';
+import 'dayjs/locale/ru';
+import { StoreProvider } from '~/store/index.tsx';
+
+const Layout = () => {
+ return (
+
+
+
+
+
+
+ );
+};
+
+export default Layout;
diff --git a/domains-frontend/src/components/layouts/PublicLayout.tsx b/domains-frontend/src/components/layouts/PublicLayout.tsx
new file mode 100644
index 0000000..30bbfac
--- /dev/null
+++ b/domains-frontend/src/components/layouts/PublicLayout.tsx
@@ -0,0 +1,37 @@
+import { Button, Heading, HStack, Stack } from '@chakra-ui/react';
+import { Outlet, useNavigate } from 'react-router';
+import AppLink from '../AppLink';
+
+const PublicLayout = () => {
+ const navigate = useNavigate();
+
+ return (
+
+
+
+ Хрофорс Домены
+
+
+
+
+
+ Контакты
+ Политика конфиденциальности
+ Правила использования
+
+
+ );
+};
+
+export default PublicLayout;
diff --git a/domains-frontend/src/components/ui/color-mode.tsx b/domains-frontend/src/components/ui/color-mode.tsx
new file mode 100644
index 0000000..b1dd9f5
--- /dev/null
+++ b/domains-frontend/src/components/ui/color-mode.tsx
@@ -0,0 +1,108 @@
+'use client';
+
+import type { IconButtonProps, SpanProps } from '@chakra-ui/react';
+import { ClientOnly, IconButton, Skeleton, Span } from '@chakra-ui/react';
+import { ThemeProvider, useTheme } from 'next-themes';
+import type { ThemeProviderProps } from 'next-themes';
+import * as React from 'react';
+import { LuMoon, LuSun } from 'react-icons/lu';
+
+export interface ColorModeProviderProps extends ThemeProviderProps {}
+
+export function ColorModeProvider(props: ColorModeProviderProps) {
+ return (
+
+ );
+}
+
+export type ColorMode = 'light' | 'dark';
+
+export interface UseColorModeReturn {
+ colorMode: ColorMode;
+ setColorMode: (colorMode: ColorMode) => void;
+ toggleColorMode: () => void;
+}
+
+export function useColorMode(): UseColorModeReturn {
+ const { resolvedTheme, setTheme, forcedTheme } = useTheme();
+ const colorMode = forcedTheme || resolvedTheme;
+ const toggleColorMode = () => {
+ setTheme(resolvedTheme === 'dark' ? 'light' : 'dark');
+ };
+ return {
+ colorMode: colorMode as ColorMode,
+ setColorMode: setTheme,
+ toggleColorMode,
+ };
+}
+
+export function useColorModeValue(light: T, dark: T) {
+ const { colorMode } = useColorMode();
+ return colorMode === 'dark' ? dark : light;
+}
+
+export function ColorModeIcon() {
+ const { colorMode } = useColorMode();
+ return colorMode === 'dark' ? : ;
+}
+
+interface ColorModeButtonProps extends Omit {}
+
+export const ColorModeButton = React.forwardRef<
+ HTMLButtonElement,
+ ColorModeButtonProps
+>(function ColorModeButton(props, ref) {
+ const { toggleColorMode } = useColorMode();
+ return (
+ }>
+
+
+
+
+ );
+});
+
+export const LightMode = React.forwardRef(
+ function LightMode(props, ref) {
+ return (
+
+ );
+ }
+);
+
+export const DarkMode = React.forwardRef(
+ function DarkMode(props, ref) {
+ return (
+
+ );
+ }
+);
diff --git a/domains-frontend/src/components/ui/provider.tsx b/domains-frontend/src/components/ui/provider.tsx
new file mode 100644
index 0000000..e3e4f2c
--- /dev/null
+++ b/domains-frontend/src/components/ui/provider.tsx
@@ -0,0 +1,13 @@
+'use client';
+
+import { ChakraProvider } from '@chakra-ui/react';
+import { ColorModeProvider, type ColorModeProviderProps } from './color-mode';
+import { system } from '../../theme';
+
+export function Provider(props: ColorModeProviderProps) {
+ return (
+
+
+
+ );
+}
diff --git a/domains-frontend/src/components/ui/toaster.tsx b/domains-frontend/src/components/ui/toaster.tsx
new file mode 100644
index 0000000..8032ce7
--- /dev/null
+++ b/domains-frontend/src/components/ui/toaster.tsx
@@ -0,0 +1,43 @@
+'use client';
+
+import {
+ Toaster as ChakraToaster,
+ Portal,
+ Spinner,
+ Stack,
+ Toast,
+ createToaster,
+} from '@chakra-ui/react';
+
+export const toaster = createToaster({
+ placement: 'bottom-end',
+ pauseOnPageIdle: true,
+});
+
+export const Toaster = () => {
+ return (
+
+
+ {(toast) => (
+
+ {toast.type === 'loading' ? (
+
+ ) : (
+
+ )}
+
+ {toast.title && {toast.title}}
+ {toast.description && (
+ {toast.description}
+ )}
+
+ {toast.action && (
+ {toast.action.label}
+ )}
+ {toast.closable && }
+
+ )}
+
+
+ );
+};
diff --git a/domains-frontend/src/components/ui/tooltip.tsx b/domains-frontend/src/components/ui/tooltip.tsx
new file mode 100644
index 0000000..e92d201
--- /dev/null
+++ b/domains-frontend/src/components/ui/tooltip.tsx
@@ -0,0 +1,46 @@
+import { Tooltip as ChakraTooltip, Portal } from '@chakra-ui/react';
+import * as React from 'react';
+
+export interface TooltipProps extends ChakraTooltip.RootProps {
+ showArrow?: boolean;
+ portalled?: boolean;
+ portalRef?: React.RefObject;
+ content: React.ReactNode;
+ contentProps?: ChakraTooltip.ContentProps;
+ disabled?: boolean;
+}
+
+export const Tooltip = React.forwardRef(
+ function Tooltip(props, ref) {
+ const {
+ showArrow,
+ children,
+ disabled,
+ portalled = true,
+ content,
+ contentProps,
+ portalRef,
+ ...rest
+ } = props;
+
+ if (disabled) return children;
+
+ return (
+
+ {children}
+
+
+
+ {showArrow && (
+
+
+
+ )}
+ {content}
+
+
+
+
+ );
+ }
+);
diff --git a/domains-frontend/src/env.d.ts b/domains-frontend/src/env.d.ts
new file mode 100644
index 0000000..698ba8b
--- /dev/null
+++ b/domains-frontend/src/env.d.ts
@@ -0,0 +1,11 @@
+///
+
+/**
+ * Imports the SVG file as a React component.
+ * @requires [@rsbuild/plugin-svgr](https://npmjs.com/package/@rsbuild/plugin-svgr)
+ */
+declare module '*.svg?react' {
+ import type React from 'react';
+ const ReactComponent: React.FunctionComponent>;
+ export default ReactComponent;
+}
diff --git a/domains-frontend/src/index.tsx b/domains-frontend/src/index.tsx
new file mode 100644
index 0000000..9fe74fd
--- /dev/null
+++ b/domains-frontend/src/index.tsx
@@ -0,0 +1,15 @@
+import '@fontsource-variable/jost';
+import '@fontsource/golos-text';
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import App from './App';
+
+const rootEl = document.getElementById('root');
+if (rootEl) {
+ const root = ReactDOM.createRoot(rootEl);
+ root.render(
+ //
+
+ //
+ );
+}
diff --git a/domains-frontend/src/pages/CheckDomainPage.tsx b/domains-frontend/src/pages/CheckDomainPage.tsx
new file mode 100644
index 0000000..abca09b
--- /dev/null
+++ b/domains-frontend/src/pages/CheckDomainPage.tsx
@@ -0,0 +1,82 @@
+import { Button, HStack, Input, Stack, Table, Text } from '@chakra-ui/react';
+import { useCallback, useEffect, useState, type FormEvent } from 'react';
+import { useSearchParams } from 'react-router';
+import DomainRow from '../components/domainsTable/DomainRow';
+import { validateDomain } from '../utils/validateDomain';
+import { $ok } from '../common/atoms';
+import DomainsTable from '~/components/domainsTable/DomainsTable';
+
+const CheckDomainPage = () => {
+ const [searchParams, _] = useSearchParams();
+ const query = searchParams.get('q');
+ const [input, setInput] = useState(query ?? '');
+ const [error, setError] = useState('');
+
+ const [domains, setDomains] = useState(
+ query
+ ? ['.goip.pw', '.godns.pw', '.gofrom.pw'].map((domain) => ({
+ fqdn: `${query}${domain}`,
+ price: 50,
+ free: Math.random() > 0.5,
+ }))
+ : []
+ );
+
+ const fetchDomains = (domain: string) => {
+ console.log('Fetch Domains');
+
+ // TODO Fetch domains
+ };
+
+ const handleSubmit = useCallback(
+ (e: FormEvent) => {
+ e.preventDefault();
+
+ const domain = input.trim().toLocaleLowerCase();
+ const [result, reason] = validateDomain(domain);
+
+ if (result === $ok) {
+ fetchDomains(domain);
+ } else {
+ setError(reason);
+ }
+ },
+ [input]
+ );
+
+ useEffect(() => {
+ if (!query) return;
+
+ fetchDomains(query);
+ }, []);
+
+ return (
+
+
+
+
+ );
+};
+
+export default CheckDomainPage;
diff --git a/domains-frontend/src/pages/NotFound.tsx b/domains-frontend/src/pages/NotFound.tsx
new file mode 100644
index 0000000..43e8d76
--- /dev/null
+++ b/domains-frontend/src/pages/NotFound.tsx
@@ -0,0 +1,29 @@
+import { Heading, Link, Stack } from '@chakra-ui/react';
+import React from 'react';
+import { Link as RLink } from 'react-router';
+
+type Props = {
+ fullPage?: boolean;
+};
+
+const NotFound = (props: Props) => {
+ return (
+
+
+ 404
+
+ Такой страницы не существует
+ {/* @ts-ignore */}
+
+ Вернуться на главную
+
+
+ );
+};
+
+export default NotFound;
diff --git a/domains-frontend/src/pages/WelcomePage.tsx b/domains-frontend/src/pages/WelcomePage.tsx
new file mode 100644
index 0000000..20f06fc
--- /dev/null
+++ b/domains-frontend/src/pages/WelcomePage.tsx
@@ -0,0 +1,103 @@
+import { Box, Button, HStack, Input, Stack, Text } from '@chakra-ui/react';
+import { useCallback, useEffect, useState, type FormEvent } from 'react';
+import { useNavigate } from 'react-router';
+import { validateDomain } from '../utils/validateDomain';
+import { $ok } from '../common/atoms';
+
+const WelcomePage = () => {
+ const [input, setInput] = useState('');
+ const [error, setError] = useState('');
+ const domains = ['.goip.pw', '.godns.pw', '.gofrom.pw'];
+ const [domainIndex, setDomainIndex] = useState(0);
+ const [isFading, setIsFading] = useState(false);
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ const intervalId = setInterval(() => {
+ setIsFading(true);
+ const timeoutId = setTimeout(() => {
+ setDomainIndex((prev) => (prev + 1) % domains.length);
+ setIsFading(false);
+ }, 300);
+
+ return () => clearTimeout(timeoutId);
+ }, 4000);
+
+ return () => clearInterval(intervalId);
+ }, [domains.length]);
+
+ const handleSubmit = useCallback(
+ (e: FormEvent) => {
+ e.preventDefault();
+ const domain = input.trim().toLocaleLowerCase();
+ const [result, reason] = validateDomain(domain);
+ if (result === $ok) {
+ navigate(`/check-domain?q=${domain}`);
+ } else {
+ setError(reason);
+ }
+ },
+ [input]
+ );
+
+ return (
+
+
+
+ Проверьте доступность домена
+
+
+
+
+ );
+};
+
+export default WelcomePage;
diff --git a/domains-frontend/src/pages/admin/AdminDashboardPage.tsx b/domains-frontend/src/pages/admin/AdminDashboardPage.tsx
new file mode 100644
index 0000000..416990f
--- /dev/null
+++ b/domains-frontend/src/pages/admin/AdminDashboardPage.tsx
@@ -0,0 +1,83 @@
+import {
+ Box,
+ Button,
+ Heading,
+ HStack,
+ Input,
+ Stack,
+ Text,
+} from '@chakra-ui/react';
+
+const AdminDashboardPage = () => {
+ return (
+
+ Админ-панель
+
+
+ Кол-во пользователей
+
+ 1135
+
+
+
+
+ Кол-во доменов
+
+ 115
+
+
+
+
+ Оборот за неделю
+
+ 1555 рублей
+
+
+
+
+ Оборот за месяц
+
+ 15550 рублей
+
+
+
+
+
+ Отчёт
+
+ С
+
+ по
+
+
+
+
+
+ );
+};
+
+export default AdminDashboardPage;
diff --git a/domains-frontend/src/pages/admin/FinancesPage.tsx b/domains-frontend/src/pages/admin/FinancesPage.tsx
new file mode 100644
index 0000000..77fd225
--- /dev/null
+++ b/domains-frontend/src/pages/admin/FinancesPage.tsx
@@ -0,0 +1,85 @@
+import {
+ Button,
+ Grid,
+ GridItem,
+ Heading,
+ HStack,
+ Stack,
+ Text,
+} from '@chakra-ui/react';
+import React from 'react';
+import DateText from '~/components/DateText';
+
+const FinancesPage = () => {
+ return (
+
+ Финансы
+
+ Оборот за месяц: 18514 рублей
+ Оборот за неделю: 1321 рублей
+
+
+
+ Счета
+
+
+ пользователь
+
+
+ операция
+
+
+ статус
+
+
+ дата
+
+
+ сумма
+
+
+
+ ivain@zinch.me
+ поступление(карта)
+ совершена
+
+ {new Date()}
+
+ 1500 рублей
+
+
+
+
+
+
+ ivain@zinch.me
+ поступление(карта)
+ ожидание оплаты
+
+ {new Date()}
+
+ 1500 рублей
+
+
+
+
+
+
+
+
+ );
+};
+
+export default FinancesPage;
diff --git a/domains-frontend/src/pages/admin/SystemEventsPage.tsx b/domains-frontend/src/pages/admin/SystemEventsPage.tsx
new file mode 100644
index 0000000..021550e
--- /dev/null
+++ b/domains-frontend/src/pages/admin/SystemEventsPage.tsx
@@ -0,0 +1,37 @@
+import { Grid, GridItem, Heading, Stack, Text } from '@chakra-ui/react';
+import DateText from '~/components/DateText';
+
+const SystemEventsPage = () => {
+ return (
+
+ События
+
+
+ пользователь
+
+
+ действие
+
+
+ дата
+
+
+ ivan@zinch.me
+ покупка домена some.godns.pw
+
+ {new Date()}
+
+
+
+ );
+};
+
+export default SystemEventsPage;
diff --git a/domains-frontend/src/pages/admin/UsersDomainsPage.tsx b/domains-frontend/src/pages/admin/UsersDomainsPage.tsx
new file mode 100644
index 0000000..066c541
--- /dev/null
+++ b/domains-frontend/src/pages/admin/UsersDomainsPage.tsx
@@ -0,0 +1,79 @@
+import {
+ Button,
+ Grid,
+ GridItem,
+ Heading,
+ HStack,
+ Stack,
+ Text,
+} from '@chakra-ui/react';
+import React from 'react';
+import DateText from '~/components/DateText';
+
+const UsersDomainsPage = () => {
+ return (
+
+
+ Домены
+
+
+
+
+
+ домен
+
+
+ пользователь
+
+
+ истекает
+
+
+
+ hello.example.com
+ hello@zinch.com
+
+ {new Date(2026, 1, 3)}
+
+
+
+
+
+
+
+
+ omg.example.com
+ omg@zinch.com
+
+ {new Date(2026, 3, 3)}
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default UsersDomainsPage;
diff --git a/domains-frontend/src/pages/admin/UsersPage.tsx b/domains-frontend/src/pages/admin/UsersPage.tsx
new file mode 100644
index 0000000..0685feb
--- /dev/null
+++ b/domains-frontend/src/pages/admin/UsersPage.tsx
@@ -0,0 +1,61 @@
+import {
+ Button,
+ Grid,
+ GridItem,
+ Heading,
+ HStack,
+ Stack,
+ Text,
+} from '@chakra-ui/react';
+
+const UsersPage = () => {
+ return (
+
+ Пользователи
+
+
+
+ Email
+
+
+ кол-во доменов
+
+
+
+ some@email.com
+ 5
+
+
+
+
+
+
+
+ another@email.com
+ 7
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default UsersPage;
diff --git a/domains-frontend/src/pages/app/CartPage.tsx b/domains-frontend/src/pages/app/CartPage.tsx
new file mode 100644
index 0000000..c5b192d
--- /dev/null
+++ b/domains-frontend/src/pages/app/CartPage.tsx
@@ -0,0 +1,280 @@
+import {
+ Box,
+ Button,
+ Field,
+ Heading,
+ HStack,
+ Input,
+ Stack,
+ Text,
+} from '@chakra-ui/react';
+import { useCallback, useEffect, useMemo, useState, type FormEvent } from 'react';
+import type { DomainQuery } from '~/api/models/DomainQuery';
+import { RecordType, type Zone as ExdnsZone } from '~/api/models/exdns';
+import {
+ AddCartItemRequestAction,
+ AddCartItemRequestTerm,
+} from '~/api/models/domain-order';
+import {
+ addItem,
+ clearCart,
+ createDomain,
+ getCart,
+ getZoneByName,
+ removeItem,
+ searchDomains,
+} from '~/api/services/domain-order';
+import { postZonesDomain } from '~/api/services/exdns';
+import DomainsTable from '~/components/domainsTable/DomainsTable';
+
+type CartDomain = DomainQuery & { itemId?: string };
+
+type DomainSearchItem = {
+ fqdn?: string;
+ price?: number;
+ free?: boolean;
+};
+
+type CartItem = {
+ id?: string;
+ fqdn?: string;
+ price?: number;
+};
+
+const mapCartItems = (items: CartItem[]): CartDomain[] =>
+ items.map((item) => ({
+ itemId: item.id,
+ fqdn: item.fqdn ?? '',
+ price: item.price ?? 0,
+ free: false,
+ }));
+
+const mapSearchItems = (items: DomainSearchItem[]): DomainQuery[] =>
+ items.map((item) => ({
+ fqdn: item.fqdn ?? '',
+ price: item.price ?? 0,
+ free: Boolean(item.free),
+ }));
+
+const resolveZoneId = async (fqdn: string) => {
+ const parts = fqdn.split('.').filter(Boolean);
+ if (parts.length <= 2) return '';
+
+ const zoneName = `${parts[parts.length - 2]}.${parts[parts.length - 1]}`;
+ const zoneResponse = await getZoneByName(zoneName);
+ return zoneResponse?.data?.id ?? '';
+};
+
+const buildZonePayload = (fqdn: string): ExdnsZone => ({
+ name: fqdn,
+ version: 1,
+ records: [
+ {
+ name: '@',
+ type: RecordType.A,
+ ttl: 300,
+ data: '127.0.0.1',
+ },
+ ],
+});
+
+const CartPage = () => {
+ const [query, setQuery] = useState('');
+ const [cartDomains, setCartDomains] = useState([]);
+ const [domains, setDomains] = useState([]);
+ const [isCartLoading, setIsCartLoading] = useState(false);
+ const [isSearchLoading, setIsSearchLoading] = useState(false);
+ const [error, setError] = useState('');
+
+ const cartCount = useMemo(() => cartDomains.length, [cartDomains]);
+
+ const loadCart = useCallback(async () => {
+ setIsCartLoading(true);
+ setError('');
+
+ try {
+ const response = await getCart();
+ const items = response?.data?.items ?? [];
+ setCartDomains(mapCartItems(items));
+ } catch {
+ setError('Не удалось загрузить корзину. Попробуйте еще раз.');
+ } finally {
+ setIsCartLoading(false);
+ }
+ }, []);
+
+ useEffect(() => {
+ loadCart();
+ }, [loadCart]);
+
+ const handleSubmit = useCallback(
+ async (e: FormEvent) => {
+ e.preventDefault();
+ const search = query.trim();
+ if (!search) return;
+
+ setIsSearchLoading(true);
+ setError('');
+
+ try {
+ const response = await searchDomains({ query: search });
+ const items = response?.data ?? [];
+ setDomains(mapSearchItems(items));
+ } catch {
+ setError('Не удалось выполнить поиск доменов. Попробуйте еще раз.');
+ } finally {
+ setIsSearchLoading(false);
+ }
+ },
+ [query]
+ );
+
+ const handlePurchase = useCallback(async () => {
+ if (cartDomains.length === 0) return;
+
+ setIsCartLoading(true);
+ setError('');
+
+ try {
+ for (const domain of cartDomains) {
+ const fqdn = domain.fqdn.trim();
+ if (!fqdn) continue;
+
+ const zoneId = await resolveZoneId(fqdn);
+ if (!zoneId) {
+ throw new Error('zone');
+ }
+
+ const expiresAt = new Date();
+ expiresAt.setFullYear(expiresAt.getFullYear() + 1);
+
+ await createDomain({
+ fqdn,
+ zoneId,
+ expiresAt: expiresAt.toISOString(),
+ });
+ await postZonesDomain(fqdn, buildZonePayload(fqdn));
+ }
+
+ await clearCart();
+ setCartDomains([]);
+ } catch {
+ setError('Не удалось оформить покупку. Попробуйте еще раз.');
+ } finally {
+ setIsCartLoading(false);
+ }
+ }, [cartDomains]);
+
+ const handleAddToCart = useCallback(
+ async (domain: DomainQuery) => {
+ if (!domain.free) return;
+
+ setIsCartLoading(true);
+ setError('');
+
+ try {
+ await addItem({
+ action: AddCartItemRequestAction.register,
+ term: AddCartItemRequestTerm.yearly,
+ fqdn: domain.fqdn,
+ price: domain.price,
+ });
+ await loadCart();
+ } catch {
+ setError('Не удалось добавить домен в корзину. Попробуйте еще раз.');
+ } finally {
+ setIsCartLoading(false);
+ }
+ },
+ [loadCart]
+ );
+
+ const handleRemoveFromCart = useCallback(async (domain: CartDomain) => {
+ if (!domain.itemId) return;
+
+ setIsCartLoading(true);
+ setError('');
+
+ try {
+ await removeItem(domain.itemId);
+ setCartDomains((prev) => prev.filter((item) => item.itemId !== domain.itemId));
+ } catch {
+ setError('Не удалось удалить домен из корзины. Попробуйте еще раз.');
+ } finally {
+ setIsCartLoading(false);
+ }
+ }, []);
+
+ return (
+
+
+ Корзина
+
+ {cartCount} доменов
+
+
+
+
+ {error && (
+
+ {error}
+
+ )}
+ (
+
+ )}
+ />
+
+ Доступные домены
+
+ domain.free ? (
+
+ ) : (
+ Недоступен
+ )
+ }
+ />
+
+ );
+};
+
+export default CartPage;
diff --git a/domains-frontend/src/pages/app/DNSPage.tsx b/domains-frontend/src/pages/app/DNSPage.tsx
new file mode 100644
index 0000000..2332013
--- /dev/null
+++ b/domains-frontend/src/pages/app/DNSPage.tsx
@@ -0,0 +1,210 @@
+import {
+ Accordion,
+ Box,
+ Button,
+ createListCollection,
+ Field,
+ Grid,
+ GridItem,
+ Heading,
+ HStack,
+ Input,
+ InputGroup,
+ Portal,
+ Select,
+ Stack,
+ Text,
+} from '@chakra-ui/react';
+
+const DNSPage = () => {
+ const frameworks = createListCollection({
+ items: [
+ { label: 'hello.zom.com', value: 'hello.zom.com' },
+ { label: 'omg.com.com', value: 'omg.com.com' },
+ { label: 'why.me.co', value: 'why.me.co' },
+ { label: 'not.my.domain.com', value: 'not.my.domain.com' },
+ ],
+ });
+
+ const DNSTypes = createListCollection({
+ items: [
+ { label: 'A', value: 'a' },
+ { label: 'AAAA', value: 'aaaa' },
+ { label: 'SOA', value: 'soa' },
+ { label: 'CNAME', value: 'cname' },
+ { label: 'TXT', value: 'txt' },
+ { label: 'MX', value: 'mx' },
+ { label: 'SRV', value: 'srv' },
+ { label: 'CAA', value: 'caa' },
+ ],
+ });
+
+ return (
+
+ DNS
+
+
+ Выберите домен
+
+
+
+
+
+
+
+
+
+
+
+ {frameworks.items.map((framework) => (
+
+ {framework.label}
+
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+ Добавить запись
+
+
+
+
+
+
+
+ Название
+
+
+
+
+
+ Тип
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {DNSTypes.items.map((type) => (
+
+ {type.label}
+
+
+ ))}
+
+
+
+
+
+
+
+ Значение
+
+
+
+
+
+
+
+
+
+
+
+
+ Записи
+
+
+
+
+
+
+
+
+ @
+
+
+
+
+
+
+ A
+ 5.153.135.4
+
+
+
+
+ TXT
+ gasvfcda
+
+
+
+
+
+
+
+
+
+
+
+ www
+
+
+
+
+
+
+ A
+ 5.153.135.4
+
+
+
+
+ TXT
+ gasvfcda
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default DNSPage;
diff --git a/domains-frontend/src/pages/app/DashboardPage.tsx b/domains-frontend/src/pages/app/DashboardPage.tsx
new file mode 100644
index 0000000..1b176d5
--- /dev/null
+++ b/domains-frontend/src/pages/app/DashboardPage.tsx
@@ -0,0 +1,62 @@
+import { Stack } from '@chakra-ui/react';
+import React from 'react';
+import AppLink from '../../components/AppLink';
+import { ArrowRight, MoveRight } from 'lucide-react';
+import dayjs from 'dayjs';
+import DomainList from '../../components/dashboard/DomainList';
+import EventList from '../../components/dashboard/EventList';
+
+const DashboardPage = () => {
+ const domains = [
+ {
+ id: 'e29d0a63-1e74-4d44-b433-59524ecc67ae',
+ fqdn: 'hello.example.com',
+ expiresAt: dayjs(new Date(2026, 1, 3)),
+ },
+ {
+ id: '25c12320-addf-4a80-bce2-c10aa8be177f',
+ fqdn: 'hello.omg.com',
+ expiresAt: dayjs(new Date(2026, 2, 6)),
+ },
+ {
+ id: 'e9a0b6d3-a82e-412f-861e-a313c4f3d91b',
+ fqdn: 'goodbye.example.com',
+ expiresAt: dayjs(new Date(2026, 2, 12)),
+ },
+ ];
+
+ const events = [
+ {
+ id: 'e9a0b6d3-a82e-412f-861e-a313c4f3d91b',
+ type: 'SYSTEM',
+ message: 'Что-то произошло',
+ at: dayjs(new Date(2026, 2, 12)),
+ },
+ {
+ id: 'e9a0bvd3-a82e-412f-861e-a313c4f3d91b',
+ type: 'USER',
+ message: 'Выполнен вход в систему',
+ at: dayjs(new Date(2026, 2, 12)),
+ },
+ ];
+
+ return (
+
+
+
+ Мои домены {' '}
+
+
+
+
+
+
+ Мои события {' '}
+
+
+
+
+ );
+};
+
+export default DashboardPage;
diff --git a/domains-frontend/src/pages/app/DomainsPage.tsx b/domains-frontend/src/pages/app/DomainsPage.tsx
new file mode 100644
index 0000000..afad480
--- /dev/null
+++ b/domains-frontend/src/pages/app/DomainsPage.tsx
@@ -0,0 +1,54 @@
+import { Button, Heading, HStack, Stack, Text } from '@chakra-ui/react';
+import { useEffect, useState } from 'react';
+import type { DomainResponse } from '~/api/models/domain-order';
+import { getAllDomains } from '~/api/services/domain-order';
+import DomainList from '../../components/dashboard/DomainList';
+
+const DomainsPage = () => {
+ const [domains, setDomains] = useState([]);
+
+ useEffect(() => {
+ let isMounted = true;
+
+ const loadDomains = async () => {
+ try {
+ const response = await getAllDomains({
+ pageable: {
+ page: 0,
+ size: 50,
+ },
+ });
+ if (isMounted) {
+ setDomains(response?.data?.content ?? []);
+ }
+ } catch {
+ if (isMounted) {
+ setDomains([]);
+ }
+ }
+ };
+
+ loadDomains();
+
+ return () => {
+ isMounted = false;
+ };
+ }, []);
+
+ return (
+
+
+ Мои домены
+
+ 15 доменов
+
+
+
+
+
+ );
+};
+
+export default DomainsPage;
diff --git a/domains-frontend/src/pages/app/EventsPage.tsx b/domains-frontend/src/pages/app/EventsPage.tsx
new file mode 100644
index 0000000..5a31941
--- /dev/null
+++ b/domains-frontend/src/pages/app/EventsPage.tsx
@@ -0,0 +1,29 @@
+import { Heading, Stack } from '@chakra-ui/react';
+import dayjs from 'dayjs';
+import EventList from '~/components/dashboard/EventList';
+
+const EventsPage = () => {
+ const events = [
+ {
+ id: 'e9a0b6d3-a82e-412f-861e-a313c4f3d91b',
+ type: 'SYSTEM',
+ message: 'Что-то произошло',
+ at: dayjs(new Date(2026, 2, 12)),
+ },
+ {
+ id: 'e9a0bvd3-a82e-412f-861e-a313c4f3d91b',
+ type: 'USER',
+ message: 'Выполнен вход в систему',
+ at: dayjs(new Date(2026, 2, 12)),
+ },
+ ];
+
+ return (
+
+ События
+
+
+ );
+};
+
+export default EventsPage;
diff --git a/domains-frontend/src/pages/app/ProfilePage.tsx b/domains-frontend/src/pages/app/ProfilePage.tsx
new file mode 100644
index 0000000..4cd9ae5
--- /dev/null
+++ b/domains-frontend/src/pages/app/ProfilePage.tsx
@@ -0,0 +1,84 @@
+import {
+ Box,
+ Button,
+ Grid,
+ GridItem,
+ Heading,
+ HStack,
+ Spinner,
+ Stack,
+ Text,
+ VStack,
+} from '@chakra-ui/react';
+import { observer } from 'mobx-react-lite';
+import { useEffect, useState } from 'react';
+import { get2FAStatus } from '~/api/services/auth';
+import EnableTwoFactorDialog from '~/components/app/profile/EnableTwoFactorDialog';
+import { useStores } from '~/store';
+
+const ProfilePage = observer(() => {
+ const { userStore } = useStores();
+ const { user } = userStore;
+
+ const [tfaStatus, setTfaStatus] = useState(undefined);
+
+ useEffect(() => {
+ get2FAStatus().then((status) => setTfaStatus(Boolean(status.data)));
+ }, []);
+
+ return (
+
+ Профиль
+
+
+ Данные
+
+
+ Email
+ {user?.email ?? '??'}
+
+ {/*
+
+ */}
+
+
+
+ 2FA
+
+ {tfaStatus === undefined && (
+
+
+
+ )}
+ {tfaStatus === true && (
+ <>
+
+ Подключена 2FA по TOTP
+
+
+
+
+ >
+ )}
+ {tfaStatus === false && (
+ <>
+ 2FA не подключена
+ setTfaStatus(true)} />
+ >
+ )}
+
+
+
+
+ {/* */}
+ {/* */}
+
+
+
+
+ );
+});
+
+export default ProfilePage;
diff --git a/domains-frontend/src/pages/auth/CheckEmailPage.tsx b/domains-frontend/src/pages/auth/CheckEmailPage.tsx
new file mode 100644
index 0000000..8fba5a7
--- /dev/null
+++ b/domains-frontend/src/pages/auth/CheckEmailPage.tsx
@@ -0,0 +1,68 @@
+import { Heading, Stack, Text } from '@chakra-ui/react';
+import type { AxiosError } from 'axios';
+import { observer } from 'mobx-react-lite';
+import { useCallback, useEffect, useMemo, useState } from 'react';
+import { resendVerificationEmail } from '~/api/services/auth';
+import { toaster } from '~/components/ui/toaster';
+import { useStores } from '~/store';
+
+const CheckEmailPage = observer(() => {
+ const [wait, setWait] = useState(120);
+ const waitText = useMemo(() => `Через ${wait} секунд`, [wait]);
+ const { authStore: registrationStore } = useStores();
+
+ const handleClick = useCallback(() => {
+ if (wait > 0) return;
+ resendVerificationEmail({ email: registrationStore.email })
+ .then(() => {
+ toaster.create({
+ title: 'Отправлено подтверждающее письмо по электронной почте',
+ });
+ })
+ .catch((e: AxiosError<{ message: string }>) => {
+ toaster.create({
+ title: 'Не удалось повторно отправить подтверждающее письмо',
+ description: e?.response?.data?.message,
+ type: 'error',
+ });
+ });
+ }, [registrationStore.email, wait]);
+
+ useEffect(() => {
+ if (wait <= 0) return;
+ const intervalId = setInterval(() => {
+ setWait((prev) => (prev > 0 ? prev - 1 : 0));
+ }, 1000);
+
+ return () => clearInterval(intervalId);
+ }, [wait]);
+
+ return (
+
+ Проверьте свою электронную почту
+
+ Мы отправили подтверждающую ссылку на ваш адрес электронной почты.
+ Перейдите по ссылке, чтобы завершить регистрацию.
+
+
+ Если вы не получили электронное письмо, вы можете запросить новое.{' '}
+ 0 ? 'fg.subtle' : 'secondary.solid'}
+ >
+ Повторно отправить электронное письмо
+ {' '}
+ {waitText}.
+
+
+ Проверьте папку со спамом или попробуйте снова через несколько минут,
+ если письмо не пришло.
+
+
+ );
+});
+
+export default CheckEmailPage;
diff --git a/domains-frontend/src/pages/auth/ForgetPasswordPage.tsx b/domains-frontend/src/pages/auth/ForgetPasswordPage.tsx
new file mode 100644
index 0000000..18a5307
--- /dev/null
+++ b/domains-frontend/src/pages/auth/ForgetPasswordPage.tsx
@@ -0,0 +1,56 @@
+import {
+ Button,
+ Field,
+ Heading,
+ HStack,
+ Input,
+ Stack,
+ Text,
+} from '@chakra-ui/react';
+import AppLink from '../../components/AppLink';
+import { useCallback, useState, type FormEvent } from 'react';
+
+const ForgetPasswordPage = () => {
+ const [email, setEmail] = useState('');
+
+ const handleSubmit = useCallback(
+ (e: FormEvent) => {
+ e.preventDefault();
+ },
+ [email]
+ );
+
+ return (
+
+ Сбросить пароль
+
+ Введите свой адрес электронной почты, и мы вышлем вам ссылку для сброса
+ пароля.
+
+
+
+ Войти
+
+
+ );
+};
+
+export default ForgetPasswordPage;
diff --git a/domains-frontend/src/pages/auth/SignInPage.tsx b/domains-frontend/src/pages/auth/SignInPage.tsx
new file mode 100644
index 0000000..1f53ba7
--- /dev/null
+++ b/domains-frontend/src/pages/auth/SignInPage.tsx
@@ -0,0 +1,136 @@
+import {
+ Alert,
+ Button,
+ Field,
+ Heading,
+ HStack,
+ Input,
+ Stack,
+} from '@chakra-ui/react';
+import AppLink from '../../components/AppLink';
+import type { AxiosError } from 'axios';
+import { useNavigate, useSearchParams } from 'react-router';
+import { useForm } from 'react-hook-form';
+import { getUserById, login } from '~/api/services/auth';
+import { setTokens } from '~/utils/authTokens';
+import { useState } from 'react';
+import { useStores } from '~/store';
+
+const SignInPage = () => {
+ const [params, _] = useSearchParams();
+ const [error, setError] = useState('');
+ const [isSubmitting, setIsSubmitting] = useState(false);
+ const { userStore, authStore } = useStores();
+
+ const navigate = useNavigate();
+ const { register, handleSubmit } = useForm<{
+ email: string;
+ password: string;
+ }>();
+
+ const onSubmit = handleSubmit(async (formData) => {
+ setIsSubmitting(true);
+ setError('');
+
+ try {
+ const response = await login({
+ ...formData,
+ });
+ const accessToken = response?.data?.accessToken;
+ const refreshToken = response?.data?.refreshToken;
+ const userId = response?.data?.userId;
+
+ if (!accessToken || !refreshToken || !userId) {
+ setError(
+ response?.message ??
+ 'Не удалось войти в систему. Проверьте свои учетные данные и повторите попытку.'
+ );
+ return;
+ }
+
+ setTokens({ access: accessToken, refresh: refreshToken });
+ const user = await getUserById(userId);
+ if (user.data) userStore.setUser(user.data);
+ navigate('/app');
+ } catch (e) {
+ const apiError = e as AxiosError<{ error: { message?: string, code?: string } }>;
+ if (apiError.response?.data?.error?.code === 'TOTP_REQUIRED') {
+ authStore.setEmail(formData.email);
+ authStore.setPassword(formData.password);
+ navigate('/auth/2fa/totp');
+ return;
+ }
+ setError(
+ apiError?.response?.data?.error?.message ??
+ 'Не удалось войти в систему. Проверьте свои учетные данные и повторите попытку.'
+ );
+ } finally {
+ setIsSubmitting(false);
+ }
+ });
+
+ return (
+
+ Войти
+
+ {params.has('success') && (
+
+
+
+ Учетная запись подтверждена
+
+ Не удалось войти в систему. Проверьте свои учетные данные и
+ повторите попытку.
+
+
+
+ )}
+
+
+
+ Зарегистрироваться
+ Забыли пароль
+
+
+ );
+};
+
+export default SignInPage;
diff --git a/domains-frontend/src/pages/auth/SignUpPage.tsx b/domains-frontend/src/pages/auth/SignUpPage.tsx
new file mode 100644
index 0000000..788f8a0
--- /dev/null
+++ b/domains-frontend/src/pages/auth/SignUpPage.tsx
@@ -0,0 +1,145 @@
+import {
+ Alert,
+ Button,
+ Checkbox,
+ Field,
+ Heading,
+ HStack,
+ Input,
+ Link,
+ Stack,
+} from '@chakra-ui/react';
+import AppLink from '../../components/AppLink';
+import type { AxiosError } from 'axios';
+import { useNavigate } from 'react-router';
+import { useForm } from 'react-hook-form';
+import { register as apiRegister } from '~/api/services/auth';
+import { useState } from 'react';
+import { useStores } from '~/store';
+
+const SignUpPage = () => {
+ const navigate = useNavigate();
+ const [error, setError] = useState('');
+ const [isSubmitting, setIsSubmitting] = useState(false);
+ const { authStore: registrationStore } = useStores();
+
+ const { register, handleSubmit, getValues } = useForm<{
+ email: string;
+ password: string;
+ confirmPassword: string;
+ policyAccepted: boolean;
+ marketingAccepted: boolean;
+ }>();
+
+ const onSubmit = handleSubmit(async (data) => {
+ const email = data.email.trim().toLowerCase();
+ setIsSubmitting(true);
+ setError('');
+
+ try {
+ await apiRegister({
+ email,
+ password: data.password,
+ });
+ registrationStore.setEmail(email);
+ navigate('/auth/check-email', { state: { email } });
+ } catch (e) {
+ const apiError = e as AxiosError<{ message?: string }>;
+ setError(
+ apiError?.response?.data?.message ??
+ 'Не удалось зарегистрироваться. Проверьте данные и попробуйте снова.'
+ );
+ } finally {
+ setIsSubmitting(false);
+ }
+ });
+
+ return (
+
+ Регистрация
+
+
+ Вход
+
+
+ );
+};
+
+export default SignUpPage;
diff --git a/domains-frontend/src/pages/auth/TFAPage.tsx b/domains-frontend/src/pages/auth/TFAPage.tsx
new file mode 100644
index 0000000..182eba7
--- /dev/null
+++ b/domains-frontend/src/pages/auth/TFAPage.tsx
@@ -0,0 +1,23 @@
+import { Button, Heading, Stack } from '@chakra-ui/react';
+import { Clock, KeyRound } from 'lucide-react';
+import React from 'react';
+import { useNavigate } from 'react-router';
+
+const TFAPage = () => {
+ const navigate = useNavigate();
+
+ return (
+
+ Выберите метод двухфакторной аутентификации
+
+
+
+ );
+};
+
+export default TFAPage;
diff --git a/domains-frontend/src/pages/auth/TFATotpPage.tsx b/domains-frontend/src/pages/auth/TFATotpPage.tsx
new file mode 100644
index 0000000..e88fe0f
--- /dev/null
+++ b/domains-frontend/src/pages/auth/TFATotpPage.tsx
@@ -0,0 +1,104 @@
+import { Alert, Button, Heading, HStack, PinInput, Stack } from '@chakra-ui/react';
+import type { AxiosError } from 'axios';
+import { observer } from 'mobx-react-lite';
+import { useEffect, useState, type FormEvent } from 'react';
+import { useNavigate } from 'react-router';
+import { getUserById, login } from '~/api/services/auth';
+import { useStores } from '~/store';
+import { setTokens } from '~/utils/authTokens';
+
+const TFATotpPage = observer(() => {
+ const [value, setValue] = useState(['', '', '', '', '', '']);
+ const [error, setError] = useState('');
+ const [isSubmitting, setIsSubmitting] = useState(false);
+ const { authStore, userStore } = useStores();
+ const { email, password } = authStore;
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ if (!email || !password) {
+ navigate('/auth/sign-in');
+ }
+ }, [email, password, navigate]);
+
+ const handleSubmit = async (event: FormEvent) => {
+ event.preventDefault();
+
+ const totpCode = value.join('').trim();
+ if (totpCode.length !== 6) {
+ setError('Введите 6-значный код.');
+ return;
+ }
+
+ setIsSubmitting(true);
+ setError('');
+
+ try {
+ const response = await login({
+ email,
+ password,
+ totpCode,
+ });
+ const accessToken = response?.data?.accessToken;
+ const refreshToken = response?.data?.refreshToken;
+ const userId = response?.data?.userId;
+
+ if (!accessToken || !refreshToken || !userId) {
+ setError(response?.message ?? 'Не удалось войти в систему. Повторите попытку.');
+ return;
+ }
+
+ setTokens({ access: accessToken, refresh: refreshToken });
+ const user = await getUserById(userId);
+ if (user.data) userStore.setUser(user.data);
+ authStore.setEmail('');
+ authStore.setPassword('');
+ navigate('/app');
+ } catch (e) {
+ const apiError = e as AxiosError<{ message?: string }>;
+ setError(apiError?.response?.data?.message ?? 'Не удалось войти в систему. Повторите попытку.');
+ } finally {
+ setIsSubmitting(false);
+ }
+ };
+
+ return (
+
+ );
+});
+
+export default TFATotpPage;
diff --git a/domains-frontend/src/pages/auth/TFAWebAuthnPage.tsx b/domains-frontend/src/pages/auth/TFAWebAuthnPage.tsx
new file mode 100644
index 0000000..5c070c2
--- /dev/null
+++ b/domains-frontend/src/pages/auth/TFAWebAuthnPage.tsx
@@ -0,0 +1,16 @@
+import { Button, Heading, Stack } from '@chakra-ui/react';
+import { KeyRound } from 'lucide-react';
+import React from 'react';
+
+const TFAWebAuthnPage = () => {
+ return (
+
+ Пройдите аутентификацию при помощи PassKey
+
+
+ );
+};
+
+export default TFAWebAuthnPage;
diff --git a/domains-frontend/src/pages/auth/VerificateEmailPage.tsx b/domains-frontend/src/pages/auth/VerificateEmailPage.tsx
new file mode 100644
index 0000000..1b78048
--- /dev/null
+++ b/domains-frontend/src/pages/auth/VerificateEmailPage.tsx
@@ -0,0 +1,53 @@
+import { Stack, Heading, Spinner, VStack, Text } from '@chakra-ui/react';
+import type { AxiosError } from 'axios';
+import React, { useEffect, useState } from 'react';
+import { useNavigate, useSearchParams } from 'react-router';
+import { verifyEmail } from '~/api/services/auth';
+
+const VerificateEmailPage = () => {
+ const [param, _] = useSearchParams();
+ const token = param.get('token');
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState('');
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ if (!token) {
+ setError(
+ 'Проверка не удалась. Ссылка может быть недействительной или истекшим сроком действия.'
+ );
+ setLoading(false);
+ return;
+ }
+
+ verifyEmail({ token: token })
+ .then(() => {
+ navigate('/auth/sign-in?success');
+ })
+ .catch((e: AxiosError<{ message: string }>) => {
+ setError(
+ e?.response?.data?.message ??
+ 'Проверка не удалась. Ссылка может быть недействительной или истекшим сроком действия.'
+ );
+ setLoading(false);
+ });
+ }, [navigate, token]);
+
+ return (
+
+ Подтверждение адреса электронной почты
+ {loading ? (
+
+
+
+ ) : (
+ <>
+ Мы не смогли подтвердить ваш адрес электронной почты.
+ {error}
+ >
+ )}
+
+ );
+};
+
+export default VerificateEmailPage;
diff --git a/domains-frontend/src/pages/auth/ZonesPage.tsx b/domains-frontend/src/pages/auth/ZonesPage.tsx
new file mode 100644
index 0000000..45363c7
--- /dev/null
+++ b/domains-frontend/src/pages/auth/ZonesPage.tsx
@@ -0,0 +1,82 @@
+import { Grid, GridItem, Heading, HStack, Stack, Text } from '@chakra-ui/react';
+import { Fragment, useCallback, useEffect, useState } from 'react';
+import type { Zone } from '~/api/models/domain-order';
+import { getAllZones } from '~/api/services/domain-order';
+import CreateZoneDialog from '~/components/admin/zones/CreateZoneDialog';
+import ManageZoneDialog from '~/components/admin/zones/ManageZoneDialog';
+
+const ZonesPage = () => {
+ const [zones, setZones] = useState([]);
+ const [isLoading, setIsLoading] = useState(false);
+
+ const loadZones = useCallback(async () => {
+ setIsLoading(true);
+ try {
+ const response = await getAllZones({
+ pageable: {
+ page: 0,
+ size: 50,
+ },
+ });
+ setZones(response?.data?.content ?? []);
+ } catch {
+ setZones([]);
+ } finally {
+ setIsLoading(false);
+ }
+ }, []);
+
+ useEffect(() => {
+ loadZones();
+ }, [loadZones]);
+
+ return (
+
+
+ Зоны 2-го уровня
+
+ {zones.length} зон
+
+
+
+ {isLoading ? (
+ Загрузка...
+ ) : (
+
+
+ Зона
+
+
+ Цена
+
+
+ {zones.map((zone) => (
+
+
+ {zone.name ?? '-'}
+
+
+ {`${zone.price ?? '-'} рублей / месяц`}
+
+
+
+
+
+
+
+ ))}
+
+ )}
+
+ );
+};
+
+export default ZonesPage;
diff --git a/domains-frontend/src/router/index.tsx b/domains-frontend/src/router/index.tsx
new file mode 100644
index 0000000..7ef13b0
--- /dev/null
+++ b/domains-frontend/src/router/index.tsx
@@ -0,0 +1,73 @@
+import { Route, Routes } from 'react-router';
+import WelcomePage from '../pages/WelcomePage.tsx';
+import Layout from '../components/layouts/Layout.tsx';
+import PublicLayout from '../components/layouts/PublicLayout.tsx';
+import CheckDomainPage from '../pages/CheckDomainPage.tsx';
+import NotFound from '../pages/NotFound.tsx';
+import AuthLayout from '../components/layouts/AuthLayout.tsx';
+import SignInPage from '../pages/auth/SignInPage.tsx';
+import SignUpPage from '../pages/auth/SignUpPage.tsx';
+import ForgetPasswordPage from '../pages/auth/ForgetPasswordPage.tsx';
+import CheckEmailPage from '../pages/auth/CheckEmailPage.tsx';
+import TFAPage from '../pages/auth/TFAPage.tsx';
+import TFATotpPage from '../pages/auth/TFATotpPage.tsx';
+import TFAWebAuthnPage from '../pages/auth/TFAWebAuthnPage.tsx';
+import VerificateEmailPage from '../pages/auth/VerificateEmailPage.tsx';
+import AppLayout from '../components/layouts/AppLayout.tsx';
+import DashboardPage from '../pages/app/DashboardPage.tsx';
+import DomainsPage from '../pages/app/DomainsPage.tsx';
+import EventsPage from '../pages/app/EventsPage.tsx';
+import CartPage from '../pages/app/CartPage.tsx';
+import DNSPage from '../pages/app/DNSPage.tsx';
+import ProfilePage from '../pages/app/ProfilePage.tsx';
+import AdminLayout from '~/components/layouts/AdminLayout.tsx';
+import AdminDashboardPage from '~/pages/admin/AdminDashboardPage.tsx';
+import UsersDomainsPage from '~/pages/admin/UsersDomainsPage.tsx';
+import UsersPage from '~/pages/admin/UsersPage.tsx';
+import SystemEventsPage from '~/pages/admin/SystemEventsPage.tsx';
+import FinancesPage from '~/pages/admin/FinancesPage.tsx';
+import ZonesPage from '~/pages/auth/ZonesPage.tsx';
+
+const Index = () => {
+ return (
+
+ }>
+ } />
+ }>
+ } />
+ } />
+
+ }>
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+ }>
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+ }>
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+
+
+ );
+};
+
+export default Index;
diff --git a/domains-frontend/src/store/AutoStore.ts b/domains-frontend/src/store/AutoStore.ts
new file mode 100644
index 0000000..067c85c
--- /dev/null
+++ b/domains-frontend/src/store/AutoStore.ts
@@ -0,0 +1,18 @@
+import { makeAutoObservable } from 'mobx';
+
+export class AuthStore {
+ email: string = '';
+ password: string = '';
+
+ constructor() {
+ makeAutoObservable(this, {}, { autoBind: true });
+ }
+
+ setEmail(mail: string) {
+ this.email = mail;
+ }
+
+ setPassword(p: string) {
+ this.password = p;
+ }
+}
diff --git a/domains-frontend/src/store/RootStore.ts b/domains-frontend/src/store/RootStore.ts
new file mode 100644
index 0000000..a435a4c
--- /dev/null
+++ b/domains-frontend/src/store/RootStore.ts
@@ -0,0 +1,12 @@
+import { AuthStore } from './AutoStore';
+import { UserStore } from './UserStore';
+
+export class RootStore {
+ authStore: AuthStore;
+ userStore: UserStore;
+
+ constructor() {
+ this.authStore = new AuthStore();
+ this.userStore = new UserStore();
+ }
+}
diff --git a/domains-frontend/src/store/UserStore.ts b/domains-frontend/src/store/UserStore.ts
new file mode 100644
index 0000000..de62b5d
--- /dev/null
+++ b/domains-frontend/src/store/UserStore.ts
@@ -0,0 +1,22 @@
+import { makeAutoObservable, runInAction } from 'mobx';
+import type { UserResponse } from '~/api/models/auth';
+import { getCurrentUser } from '~/api/services/auth';
+
+export class UserStore {
+ user!: UserResponse;
+
+ constructor() {
+ makeAutoObservable(this, {}, { autoBind: true });
+ }
+
+ setUser(user: UserResponse) {
+ this.user = user;
+ }
+
+ async fetchMe() {
+ const user = await getCurrentUser();
+ runInAction(() => {
+ if (user.data) this.user = user.data;
+ });
+ }
+}
diff --git a/domains-frontend/src/store/index.tsx b/domains-frontend/src/store/index.tsx
new file mode 100644
index 0000000..dada06c
--- /dev/null
+++ b/domains-frontend/src/store/index.tsx
@@ -0,0 +1,11 @@
+import React, { createContext, useContext } from 'react';
+import { RootStore } from './RootStore';
+
+const rootStore = new RootStore();
+const StoreContext = createContext(rootStore);
+
+export const StoreProvider = ({ children }: { children: React.ReactNode }) => (
+ {children}
+);
+
+export const useStores = () => useContext(StoreContext);
diff --git a/domains-frontend/src/theme/index.ts b/domains-frontend/src/theme/index.ts
new file mode 100644
index 0000000..b42b037
--- /dev/null
+++ b/domains-frontend/src/theme/index.ts
@@ -0,0 +1,68 @@
+import { createSystem, defaultConfig, defineConfig } from '@chakra-ui/react';
+
+const config = defineConfig({
+ theme: {
+ tokens: {
+ colors: {
+ accent: {
+ 50: { value: '#fdf9e6' },
+ 100: { value: '#fbf1c8' },
+ 200: { value: '#f7e79c' },
+ 300: { value: '#f3dc6f' },
+ 400: { value: '#f0d45f' },
+ 500: { value: '#eed059' },
+ 600: { value: '#d8b84f' },
+ 700: { value: '#b3923f' },
+ 800: { value: '#8b6f30' },
+ 900: { value: '#6a5425' },
+ },
+ secondary: {
+ 50: { value: '#eef1ff' },
+ 100: { value: '#d6defe' },
+ 200: { value: '#b2c1fc' },
+ 300: { value: '#8da4f8' },
+ 400: { value: '#6f8cf3' },
+ 500: { value: '#5976ee' },
+ 600: { value: '#4e63d7' },
+ 700: { value: '#3f4eb6' },
+ 800: { value: '#323c8c' },
+ 900: { value: '#262d69' },
+ },
+ },
+ radii: {
+ sm: { value: '20px' },
+ md: { value: '20px' },
+ lg: { value: '20px' },
+ xl: { value: '20px' },
+ },
+ fonts: {
+ heading: { value: "'Jest', 'Jost Variable', sans-serif" },
+ body: { value: "'Golos Text', sans-serif" },
+ },
+ },
+ semanticTokens: {
+ colors: {
+ accent: {
+ solid: { value: '{colors.accent.500}' },
+ contrast: { value: '{colors.accent.900}' },
+ fg: { value: '{colors.accent.700}' },
+ muted: { value: '{colors.accent.100}' },
+ subtle: { value: '{colors.accent.200}' },
+ emphasized: { value: '{colors.accent.300}' },
+ focusRing: { value: '{colors.accent.500}' },
+ },
+ secondary: {
+ solid: { value: '{colors.secondary.500}' },
+ contrast: { value: 'white' },
+ fg: { value: '{colors.secondary.700}' },
+ muted: { value: '{colors.secondary.100}' },
+ subtle: { value: '{colors.secondary.200}' },
+ emphasized: { value: '{colors.secondary.300}' },
+ focusRing: { value: '{colors.secondary.500}' },
+ },
+ },
+ },
+ },
+});
+
+export const system = createSystem(defaultConfig, config);
diff --git a/domains-frontend/src/types.d.ts b/domains-frontend/src/types.d.ts
new file mode 100644
index 0000000..4ca5cd8
--- /dev/null
+++ b/domains-frontend/src/types.d.ts
@@ -0,0 +1,10 @@
+export {};
+
+declare global {
+ interface Window {
+ _hrofors?: {
+ access?: string;
+ refresh?: string;
+ };
+ }
+}
diff --git a/domains-frontend/src/utils/authTokens.ts b/domains-frontend/src/utils/authTokens.ts
new file mode 100644
index 0000000..44d6696
--- /dev/null
+++ b/domains-frontend/src/utils/authTokens.ts
@@ -0,0 +1,60 @@
+type TokenState = {
+ access?: string;
+ refresh?: string;
+};
+
+const STORAGE_KEY = 'hrofors_refresh';
+
+const getWindowStore = () => {
+ if (typeof window === 'undefined') {
+ return undefined;
+ }
+
+ if (!window._hrofors) {
+ window._hrofors = {};
+ }
+
+ return window._hrofors;
+};
+
+const readStoredRefresh = () => {
+ if (typeof window === 'undefined') {
+ return undefined;
+ }
+
+ return localStorage.getItem(STORAGE_KEY) || undefined;
+};
+
+export const getAccessToken = () => getWindowStore()?.access;
+
+export const getRefreshToken = () => {
+ const store = getWindowStore();
+ const stored = readStoredRefresh();
+
+ if (store && !store.refresh && stored) {
+ store.refresh = stored;
+ }
+
+ return store?.refresh ?? stored;
+};
+
+export const setTokens = ({ access, refresh }: TokenState) => {
+ const store = getWindowStore();
+
+ if (store) {
+ if (access !== undefined) {
+ store.access = access;
+ }
+ if (refresh !== undefined) {
+ store.refresh = refresh;
+ }
+ }
+
+ if (typeof window !== 'undefined' && refresh !== undefined) {
+ if (refresh) {
+ localStorage.setItem(STORAGE_KEY, refresh);
+ } else {
+ localStorage.removeItem(STORAGE_KEY);
+ }
+ }
+};
diff --git a/domains-frontend/src/utils/validateDomain.ts b/domains-frontend/src/utils/validateDomain.ts
new file mode 100644
index 0000000..d2057a6
--- /dev/null
+++ b/domains-frontend/src/utils/validateDomain.ts
@@ -0,0 +1,17 @@
+import { $error, $ok } from '../common/atoms';
+
+export const validateDomain = (
+ domain: string
+): [typeof $ok, string] | [typeof $error, string] => {
+ const regex = new RegExp(
+ '^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)(?:\\.(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?))*$',
+ 'i'
+ );
+ if (domain.length === 0)
+ return [$error, 'Домен должен содержать хотя бы одну букву'];
+ if (domain.length > 63)
+ return [$error, 'Домен не может быть больше 63 символов'];
+ if (!regex.test(domain))
+ return [$error, 'Домен содержит недопустимую последовательность символов'];
+ return [$ok, domain];
+};
diff --git a/domains-frontend/tsconfig.json b/domains-frontend/tsconfig.json
new file mode 100644
index 0000000..a095d49
--- /dev/null
+++ b/domains-frontend/tsconfig.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "lib": ["DOM", "ES2020"],
+ "jsx": "react-jsx",
+ "target": "ES2020",
+ "noEmit": true,
+ "skipLibCheck": true,
+ "useDefineForClassFields": true,
+
+ /* modules */
+ "module": "ESNext",
+ "moduleDetection": "force",
+ "moduleResolution": "bundler",
+ "verbatimModuleSyntax": true,
+ "resolveJsonModule": true,
+ "allowImportingTsExtensions": true,
+ "noUncheckedSideEffectImports": true,
+
+ /* type checking */
+ "strict": true,
+
+ "paths": {
+ "~/*": ["./src/*"]
+ }
+ },
+ "include": ["src"]
+}