From 98b913b59c14a158cfc08534df30d8990ac28915 Mon Sep 17 00:00:00 2001 From: Viktor Kulyabin Date: Sat, 28 Feb 2026 19:13:49 +0200 Subject: [PATCH 1/9] refactor(pathfinder): update dev mode --- CLAUDE.md | 102 ++ package.json | 4 + packages/pathfinder-web/example/index.html | 2 +- packages/pathfinder-web/example/index.tsx | 11 +- packages/pathfinder-web/example/package.json | 35 +- .../example/pathfinder/core.json | 230 ++- .../example/pathfinder/provider.tsx | 2 + .../example/try-form/try-form.tsx | 147 +- packages/pathfinder-web/example/tsconfig.json | 10 +- .../pathfinder-web/example/vite.config.ts | 15 + packages/pathfinder-web/package.json | 10 +- .../pathfinder-web/src/app/pathfinder.tsx | 3 +- .../src/{index.tsx => index.ts} | 2 +- packages/pathfinder-web/src/lib.ts | 5 +- .../processes/request-interception/hooks.ts | 11 +- packages/pathfinder-web/src/storage.ts | 2 +- packages/pathfinder-web/src/types.ts | 2 +- packages/pathfinder-web/tsconfig.json | 2 +- packages/pathfinder-web/tsup.config.ts | 2 +- pnpm-lock.yaml | 1537 +++++++++++++++-- pnpm-workspace.yaml | 1 + 21 files changed, 1924 insertions(+), 211 deletions(-) create mode 100644 CLAUDE.md create mode 100644 packages/pathfinder-web/example/vite.config.ts rename packages/pathfinder-web/src/{index.tsx => index.ts} (88%) diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..86eb4e4 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,102 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This is a **monorepo** managed with **Turborepo** and **pnpm** containing frontend utility packages from KODE. The repository includes: + +- **Shared configs**: ESLint, Prettier, Commitlint, TypeScript +- **Interceptors & utilities**: Session interceptor (JWT), Timeout interceptor, SVG transformer +- **React packages**: React Native push notifications, Feature toggle React, Pathfinder web + +## Environment & Commands + +**Package manager**: pnpm 9.15.0 (required, enforced in package.json engines) + +**Node version**: >=18 + +### Common Commands + +- **Development**: `pnpm dev` - Start dev mode for all packages (persistent turbo watch) +- **Build**: `pnpm build` - Build all packages with tsup +- **Lint**: `pnpm lint` - Run ESLint across packages +- **Type check**: `pnpm ts:check` - Check TypeScript errors +- **Format**: `pnpm format` - Format with Prettier +- **Clean**: `pnpm clean` - Remove turbo cache and dist folders +- **Package checks**: + - `pnpm lint:packages` - Check package.json dependency consistency (syncpack) + - `pnpm lint:fix:packages` - Fix dependency mismatches and formatting + +### Changesets & Publishing + +- **Add changeset**: `pnpm add-changeset` or `pnpm changeset add` + - For new packages: mark as "major" version, write "new package $name" in description + - Description follows Markdown; only first line is formatted with hyphen +- **Release cycle**: After merge to main, GitHub Actions creates a version PR +- **Publish**: Merge the version PR to publish all non-private packages to npm + +## Architecture & Build System + +### Turbo Configuration (turbo.json) + +Defines task pipelines with dependencies: + +- `build` depends on `^build` (upstream packages must build first), outputs to `dist/**` +- `lint` and `ts:check` are parallel tasks with upstream dependencies +- `dev` runs in persistent mode (no caching) +- `clean` removes build artifacts + +### Package Structure + +Each package in `packages/` follows this pattern: + +- **src/** - TypeScript source code +- **dist/** - Built output (generated by tsup) +- **tsconfig.json** - Extends from `@repo/config-typescript` +- **tsup.config.ts** - Build configuration (format: CJS, dts enabled, tree-shaking) +- **package.json** - Exports field points to `dist/index.js` + +### Internal Packages (internal/) + +- `@repo/config-typescript` - Provides base.json, nextjs.json, react-library.json tsconfigs +- `@repo/config-eslint` - Provides library.js ESLint config (uses Vercel style guide, prettier integration) + +Both are private workspace dependencies (referenced as `workspace:*` in other packages). + +### Root Configuration + +- Root ESLint ignores all workspace packages (each has own config) +- Root tsconfig extends from internal config (base) +- All workspaces use consistent ESLint from internal config + +## Key Development Patterns + +### When Working on a Package + +1. Run `pnpm dev` at repo root for continuous builds +2. Each package is independently buildable: changes in `src/` auto-build to `dist/` +3. Turbo handles dependency resolution (e.g., building internal configs before packages) +4. TypeScript checks are workspace-aware; use `pnpm ts:check` to catch cross-package issues + +### Testing & Validation + +- No Jest/Vitest configured at repo level; test patterns vary by package +- Always run `pnpm ts:check` and `pnpm lint` before committing +- Use `pnpm lint:fix:packages` if dependency versions become inconsistent + +### Adding or Modifying Packages + +- Keep dependencies synchronized across workspace with syncpack +- Use workspace protocol (`workspace:*`) for internal dependencies +- Update package versions only via changesets (not manual edits) + +## Dependency Management + +Syncpack ensures: + +- Consistent version ranges across packages +- Matching semver ranges for shared dependencies +- Proper formatting of package.json files + +Security overrides in root package.json prevent vulnerable versions of ws, braces (auto-enforced on install). diff --git a/package.json b/package.json index 925a5b9..d4aad85 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,9 @@ "build": "turbo build", "clean": "turbo clean", "dev": "turbo dev", + "dev:pathfinder": "turbo run dev --filter=@kode-frontend/pathfinder-web", + "dev:pathfinder-example": "turbo run dev --filter=@kode-frontend/pathfinder-web-example", + "dev:pathfinder-all": "turbo run dev --filter=@kode-frontend/pathfinder-web --filter=@kode-frontend/pathfinder-web-example --parallel", "format": "prettier --write \"**/*.{ts,tsx,js,jsx,md}\"", "lint": "turbo lint", "lint:fix:packages": "npm-run-all --parallel lint:fix:packages:*", @@ -47,6 +50,7 @@ }, "workspaces": [ "packages/*", + "packages/*/example", "internal/*" ] } diff --git a/packages/pathfinder-web/example/index.html b/packages/pathfinder-web/example/index.html index 41d7811..c8c2d20 100644 --- a/packages/pathfinder-web/example/index.html +++ b/packages/pathfinder-web/example/index.html @@ -9,6 +9,6 @@
- + diff --git a/packages/pathfinder-web/example/index.tsx b/packages/pathfinder-web/example/index.tsx index d7f0316..8f59ffb 100644 --- a/packages/pathfinder-web/example/index.tsx +++ b/packages/pathfinder-web/example/index.tsx @@ -1,6 +1,5 @@ -import 'react-app-polyfill/ie11' -import * as React from 'react' -import * as ReactDOM from 'react-dom' +import React from 'react' +import ReactDOM from 'react-dom/client' import { PathfinderProvider } from './pathfinder' import { TryForm } from './try-form' @@ -13,4 +12,8 @@ const App = () => { ) } -ReactDOM.render(, document.getElementById('root')) +ReactDOM.createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/packages/pathfinder-web/example/package.json b/packages/pathfinder-web/example/package.json index ac99d86..6338f4e 100644 --- a/packages/pathfinder-web/example/package.json +++ b/packages/pathfinder-web/example/package.json @@ -1,30 +1,25 @@ { - "name": "example", + "name": "@kode-frontend/pathfinder-web-example", "version": "1.0.0", - "main": "index.js", + "private": true, "license": "MIT", "scripts": { - "start": "yarn link @kode-frontend/pathfinder-web && parcel index.html", - "build": "parcel build index.html" + "dev": "concurrently \"vite\" \"prism mock ./pathfinder/core.json --port 3100\"", + "build": "vite build", + "preview": "vite preview" }, "dependencies": { - "@kode-frontend/pathfinder-web": "^0.2.0", - "react-app-polyfill": "^1.0.0" - }, - "alias": { - "react": "../node_modules/react", - "react-dom": "../node_modules/react-dom/profiling", - "scheduler/tracing": "../node_modules/scheduler/tracing-profiling" + "@kode-frontend/pathfinder-web": "workspace:*", + "react": "^18.2.0", + "react-dom": "^18.2.0" }, "devDependencies": { - "@babel/core": "^7.17.9", - "@types/react": "^16.9.11", - "@types/react-dom": "^16.8.4", - "parcel": "^1.12.3", - "postcss-modules": "^4.3.1", - "typescript": "^3.4.5" - }, - "resolutions": { - "@babel/preset-env": "7.13.8" + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "@stoplight/prism-cli": "^5.0.0", + "@vitejs/plugin-react": "^4.2.0", + "concurrently": "^9.0.0", + "typescript": "^5.3.0", + "vite": "^5.0.0" } } diff --git a/packages/pathfinder-web/example/pathfinder/core.json b/packages/pathfinder-web/example/pathfinder/core.json index c9abd1a..26079f3 100644 --- a/packages/pathfinder-web/example/pathfinder/core.json +++ b/packages/pathfinder-web/example/pathfinder/core.json @@ -1,3 +1,231 @@ { - "todo": "openapi 3.0.0 specification from stoplight" + "openapi": "3.0.0", + "info": { + "title": "Core API", + "version": "1.0.0" + }, + "servers": [ + { + "url": "http://127.0.0.1:3100", + "description": "Local" + }, + { + "url": "https://jsonplaceholder.typicode.com", + "description": "JSONPlaceholder" + } + ], + "paths": { + "/bo/backoffice/api/v1/customers/search/{id}": { + "get": { + "operationId": "getCustomerById", + "summary": "Get customer by ID", + "tags": ["Customers"], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string" } + }, + { + "name": "page", + "in": "query", + "schema": { "type": "integer" } + }, + { + "name": "pageSize", + "in": "query", + "schema": { "type": "integer" } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": "2323-22", + "firstName": "Ivan", + "lastName": "Petrov", + "email": "ivan.petrov@example.com", + "phone": "+7 999 123-45-67", + "status": "active", + "page": 22, + "pageSize": 2 + } + } + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": "Customer not found", + "code": 404 + } + } + } + } + } + } + } + } + }, + "/bo/backoffice/api/v1/customers": { + "get": { + "operationId": "getCustomers", + "summary": "List customers", + "tags": ["Customers"], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "items": [ + { + "id": "1111-11", + "firstName": "Ivan", + "lastName": "Petrov", + "email": "ivan.petrov@example.com", + "status": "active" + }, + { + "id": "2222-22", + "firstName": "Maria", + "lastName": "Sidorova", + "email": "maria.sidorova@example.com", + "status": "inactive" + } + ], + "total": 2, + "page": 1, + "pageSize": 20 + } + } + } + } + } + } + } + }, + "post": { + "operationId": "createCustomer", + "summary": "Create customer", + "tags": ["Customers"], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": "3333-33", + "firstName": "Alexey", + "lastName": "Novikov", + "email": "alexey.novikov@example.com", + "status": "active" + } + } + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": "Validation failed", + "details": ["email is required", "firstName is required"] + } + } + } + } + } + } + } + } + }, + "/posts/{id}": { + "get": { + "operationId": "getPost", + "summary": "Get post by ID", + "tags": ["Posts"], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "integer" } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "userId": 1, + "title": "sunt aut facere repellat provident", + "body": "quia et suscipit suscipit recusandae consequuntur" + } + } + } + } + } + } + } + } + }, + "/posts": { + "get": { + "operationId": "getPosts", + "summary": "List posts", + "tags": ["Posts"], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "examples": { + "default": { + "value": [ + { + "id": 1, + "userId": 1, + "title": "sunt aut facere repellat provident", + "body": "quia et suscipit suscipit recusandae consequuntur" + }, + { + "id": 2, + "userId": 1, + "title": "qui est esse", + "body": "est rerum tempore vitae sequi sint nihil" + } + ] + } + } + } + } + } + } + } + } + } } diff --git a/packages/pathfinder-web/example/pathfinder/provider.tsx b/packages/pathfinder-web/example/pathfinder/provider.tsx index fc6188e..67bc4b5 100644 --- a/packages/pathfinder-web/example/pathfinder/provider.tsx +++ b/packages/pathfinder-web/example/pathfinder/provider.tsx @@ -4,6 +4,7 @@ import { openApiResolver, storage, } from '@kode-frontend/pathfinder-web' +import coreSpec from './core.json' type Props = { children: React.ReactNode @@ -15,6 +16,7 @@ export const PathfinderProvider = ({ children }: Props) => { children={<>{children}} resolver={openApiResolver} storage={storage} + defaultSpecs={[coreSpec]} active={process.env.NODE_ENV !== 'production'} dataKey={'pathfinder-storage-key'} /> diff --git a/packages/pathfinder-web/example/try-form/try-form.tsx b/packages/pathfinder-web/example/try-form/try-form.tsx index 6ffe0b2..1aa475e 100644 --- a/packages/pathfinder-web/example/try-form/try-form.tsx +++ b/packages/pathfinder-web/example/try-form/try-form.tsx @@ -1,55 +1,128 @@ import * as React from 'react' import { useState } from 'react' +import coreSpec from '../pathfinder/core.json' -export const TryForm = () => { - const [value, setValue] = useState( - 'http://127.0.0.1:3100/bo/backoffice/api/v1/customers/search/2323-22?page=22&pageSize=2', - ) +type Endpoint = { + method: string + url: string + summary: string +} - const [result, setResult] = useState('') +const BASE_URL = coreSpec.servers[0].url - const onSubmitFetchHandler = async () => { - const data = await fetch(value, { - headers: { - 'Content-Type': 'application/json; charset=UTF-8', - Authorization: 'Bearer 12322', - }, - }) +function buildEndpoints(): Endpoint[] { + const endpoints: Endpoint[] = [] - const json = await data.json() + for (const [path, item] of Object.entries(coreSpec.paths)) { + for (const [method, operation] of Object.entries(item)) { + const url = BASE_URL + path.replace(/\{[^}]+\}/g, '1') + endpoints.push({ + method: method.toUpperCase(), + url, + summary: (operation as { summary: string }).summary, + }) + } + } - setResult(json) + return endpoints +} + +const ENDPOINTS = buildEndpoints() + +export const TryForm = () => { + const [result, setResult] = useState(null) + const [activeUrl, setActiveUrl] = useState('') + + const runFetch = async (method: string, url: string) => { + setActiveUrl(url) + setResult(null) + try { + const res = await fetch(url, { method }) + const json = await res.json() + setResult(json) + } catch (e) { + setResult({ error: String(e) }) + } } - const onSubmitXMLHttpRequestHandler = async () => { - function reqListener() { + const runXHR = (method: string, url: string) => { + setActiveUrl(url) + setResult(null) + const req = new XMLHttpRequest() + req.onload = function () { try { setResult(JSON.parse(this.responseText)) - } catch (e) { - console.error(onSubmitXMLHttpRequestHandler, e) + } catch { + setResult({ raw: this.responseText }) } } - - var oReq = new XMLHttpRequest() - oReq.onload = reqListener - oReq.open('get', value, true) - oReq.send() + req.onerror = () => setResult({ error: 'XHR error' }) + req.open(method, url, true) + req.send() } return ( - <> - setValue(e.target.value)} - /> - - - - -
{JSON.stringify(result, null, '\t')}
- +
+ + + + + + + + + + + + {ENDPOINTS.map((ep, i) => ( + + + + + + + + ))} + +
MethodURLSummaryFetchXHR
+ {ep.method} + + {ep.url} + {ep.summary} + + + +
+ + {result !== null && ( +
+          {JSON.stringify(result, null, 2)}
+        
+ )} +
) } + +const thStyle: React.CSSProperties = { + textAlign: 'left', + padding: '8px 12px', + borderBottom: '2px solid #ddd', +} + +const tdStyle: React.CSSProperties = { + padding: '6px 12px', + borderBottom: '1px solid #eee', +} diff --git a/packages/pathfinder-web/example/tsconfig.json b/packages/pathfinder-web/example/tsconfig.json index 1e2e4fd..b83bf3f 100644 --- a/packages/pathfinder-web/example/tsconfig.json +++ b/packages/pathfinder-web/example/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { - "allowSyntheticDefaultImports": false, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, "target": "es5", "module": "commonjs", "jsx": "react", @@ -13,6 +14,11 @@ "preserveConstEnums": true, "sourceMap": true, "lib": ["es2015", "es2016", "dom"], - "types": ["node"] + "types": ["node"], + "resolveJsonModule": true, + "baseUrl": ".", + "paths": { + "@kode-frontend/pathfinder-web": ["../src"] + } } } diff --git a/packages/pathfinder-web/example/vite.config.ts b/packages/pathfinder-web/example/vite.config.ts new file mode 100644 index 0000000..f66c74f --- /dev/null +++ b/packages/pathfinder-web/example/vite.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import path from 'path' + +export default defineConfig({ + plugins: [react()], + server: { + port: 3000, + }, + resolve: { + alias: { + '@kode-frontend/pathfinder-web': path.resolve(__dirname, '../src'), + }, + }, +}) diff --git a/packages/pathfinder-web/package.json b/packages/pathfinder-web/package.json index 9c728e2..6edbf6b 100644 --- a/packages/pathfinder-web/package.json +++ b/packages/pathfinder-web/package.json @@ -16,7 +16,6 @@ "directory": "packages/pathfinder-web" }, "bugs": "https://github.com/appKODE/frontend-depend/issues", - "typings": "dist/index.d.ts", "files": [ "dist", "src" @@ -27,8 +26,7 @@ "scripts": { "dev": "tsup --watch", "build": "tsup", - "test": "tsup test --passWithNoTests", - "lint": "tsup lint", + "test": "jest", "release": "release-it", "prepare": "tsup", "size": "size-limit", @@ -49,11 +47,11 @@ }, "size-limit": [ { - "path": "dist/mytslib.cjs.production.min.js", + "path": "dist/index.js", "limit": "10 KB" }, { - "path": "dist/mytslib.esm.js", + "path": "dist/index.mjs", "limit": "10 KB" } ], @@ -86,6 +84,7 @@ "prettier": "2.6.2", "react-is": "^18.0.0", "release-it": "^14.14.2", + "rollup-plugin-postcss": "3.1.6", "size-limit": "^7.0.8", "tailwindcss": "^3.0.24", "ts-loader": "8.0.14", @@ -97,7 +96,6 @@ }, "dependencies": { "fetch-intercept": "^2.4.0", - "rollup-plugin-postcss": "3.1.6", "styled-components": "^5.3.5", "url-pattern": "^1.0.3" }, diff --git a/packages/pathfinder-web/src/app/pathfinder.tsx b/packages/pathfinder-web/src/app/pathfinder.tsx index b30bcd4..2717871 100644 --- a/packages/pathfinder-web/src/app/pathfinder.tsx +++ b/packages/pathfinder-web/src/app/pathfinder.tsx @@ -23,7 +23,6 @@ import { DataStorage, EnvSpec, Header, - Schema, Spec, StrRecord, UrlSpec, @@ -43,7 +42,7 @@ type PathfinderProviderProps = { children: JSX.Element storage: DataStorage resolver: DataResolver - defaultSpecs?: Schema[] + defaultSpecs?: unknown[] dataKey: string active?: boolean buttonPosition?: ButtonPosition diff --git a/packages/pathfinder-web/src/index.tsx b/packages/pathfinder-web/src/index.ts similarity index 88% rename from packages/pathfinder-web/src/index.tsx rename to packages/pathfinder-web/src/index.ts index c9fdb8c..8b8ff40 100644 --- a/packages/pathfinder-web/src/index.tsx +++ b/packages/pathfinder-web/src/index.ts @@ -7,4 +7,4 @@ export { openApiResolver } from './lib' export { storage } from './features/storage' -export { Schema } from './types' +export type { Schema } from './types' diff --git a/packages/pathfinder-web/src/lib.ts b/packages/pathfinder-web/src/lib.ts index 9004853..b5a8fab 100644 --- a/packages/pathfinder-web/src/lib.ts +++ b/packages/pathfinder-web/src/lib.ts @@ -116,7 +116,10 @@ export const createPathFinder: PathfinderBuilder = ({ }) storage.setSpecs(storageSpec) } catch (e) { - console.log(e) + console.error('Failed to parse specs:', e) + throw new Error( + `Failed to parse specifications: ${e instanceof Error ? e.message : 'Unknown error'}`, + ) } } diff --git a/packages/pathfinder-web/src/processes/request-interception/hooks.ts b/packages/pathfinder-web/src/processes/request-interception/hooks.ts index 61a2184..1ed720e 100644 --- a/packages/pathfinder-web/src/processes/request-interception/hooks.ts +++ b/packages/pathfinder-web/src/processes/request-interception/hooks.ts @@ -116,12 +116,15 @@ export function useRequestInterception( XMLHttpRequest.prototype.open = function ( method: string, url: string | URL, + async?: boolean, + user?: string, + password?: string, ) { const urlString = typeof url === 'string' ? url : url.toString() const specs = pathfinder.getSpecs() if (!specs) { - open.apply(this, arguments as any) + open.apply(this, [method, url, async ?? true, user, password]) return } const origin = typeof url === 'string' ? new URL(url).origin : url.origin @@ -129,7 +132,7 @@ export function useRequestInterception( const spec = specs.find(spec => spec.id === specId) if (!spec) { - open.apply(this, arguments as any) + open.apply(this, [method, url, async ?? true, user, password]) return } const basePath = findBaseApi(specs, origin) @@ -164,14 +167,12 @@ export function useRequestInterception( }) : urlString - arguments[1] = newUrl - const newHeaders = mergeGlobalAndEndpointHeaders({ globalHeaders: globalHeaders[specId] || [], endpointHeaders, }) - open.apply(this, arguments as any) + open.apply(this, [method, newUrl, async ?? true, user, password]) Object.getOwnPropertyNames(newHeaders).forEach(header => { if (newHeaders[header]) { diff --git a/packages/pathfinder-web/src/storage.ts b/packages/pathfinder-web/src/storage.ts index f2f8ab2..fc9f32e 100644 --- a/packages/pathfinder-web/src/storage.ts +++ b/packages/pathfinder-web/src/storage.ts @@ -18,7 +18,7 @@ import { export const ENDPOINTS_KEY = 'endpoints' export const GLOBAL_ENV_KEY = 'global' export const SPEC_KEY = 'spec' -export const ENDPOINTS_HEADERS_KEY = 'edpoints-headers' +export const ENDPOINTS_HEADERS_KEY = 'endpoints-headers' export const GLOBAL_HEADERS_KEY = 'global-headers' export const getStorage: GetStorageFn = adapter => { diff --git a/packages/pathfinder-web/src/types.ts b/packages/pathfinder-web/src/types.ts index a712d97..3179da9 100644 --- a/packages/pathfinder-web/src/types.ts +++ b/packages/pathfinder-web/src/types.ts @@ -241,7 +241,7 @@ export interface PathItem extends PathItemOperations { } type OperationExample = { - [name: string]: any + [name: string]: unknown } type OperationResponseContent = { diff --git a/packages/pathfinder-web/tsconfig.json b/packages/pathfinder-web/tsconfig.json index 27e692f..953855d 100644 --- a/packages/pathfinder-web/tsconfig.json +++ b/packages/pathfinder-web/tsconfig.json @@ -30,7 +30,7 @@ "skipLibCheck": true, // error out if import and file system have a casing mismatch. Recommended by TS "forceConsistentCasingInFileNames": true, - // `tsdx build` ignores this option, but it is commonly used when type-checking separately with `tsc` + // tsup handles the actual build output, this is used for type-checking only "noEmit": true } } diff --git a/packages/pathfinder-web/tsup.config.ts b/packages/pathfinder-web/tsup.config.ts index 3bef199..70567bb 100644 --- a/packages/pathfinder-web/tsup.config.ts +++ b/packages/pathfinder-web/tsup.config.ts @@ -3,7 +3,7 @@ import { defineConfig, Options } from 'tsup' export default defineConfig((options: Options) => ({ treeshake: true, splitting: true, - entry: ['./src/index.tsx'], + entry: ['./src/index.ts'], format: ['cjs', 'esm'], dts: true, clean: true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a2f3f9d..e4aef07 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -167,9 +167,6 @@ importers: react-dom: specifier: '>=16' version: 18.3.1(react@16.14.0) - rollup-plugin-postcss: - specifier: 3.1.6 - version: 3.1.6 styled-components: specifier: ^5.3.5 version: 5.3.11(@babel/core@7.24.9)(react-dom@18.3.1(react@16.14.0))(react-is@18.3.1)(react@16.14.0) @@ -194,7 +191,7 @@ importers: version: 6.5.16(react-dom@18.3.1(react@16.14.0))(react@16.14.0) '@storybook/addon-storyshots': specifier: ^6.4.22 - version: 6.5.16(5xqo6tsir4vhqua4i5isrrjsge) + version: 6.5.16(pvyz464vugd6fkdsfbz43rg55q) '@storybook/addons': specifier: ^6.4.22 version: 6.5.16(react-dom@18.3.1(react@16.14.0))(react@16.14.0) @@ -261,6 +258,9 @@ importers: release-it: specifier: ^14.14.2 version: 14.14.3(encoding@0.1.13) + rollup-plugin-postcss: + specifier: 3.1.6 + version: 3.1.6 size-limit: specifier: ^7.0.8 version: 7.0.8 @@ -286,6 +286,40 @@ importers: specifier: 4.4.0 version: 4.4.0(webpack@5.97.1) + packages/pathfinder-web/example: + dependencies: + '@kode-frontend/pathfinder-web': + specifier: workspace:* + version: link:.. + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + devDependencies: + '@stoplight/prism-cli': + specifier: ^5.0.0 + version: 5.14.2(encoding@0.1.13) + '@types/react': + specifier: ^18.2.0 + version: 18.3.3 + '@types/react-dom': + specifier: ^18.2.0 + version: 18.3.0 + '@vitejs/plugin-react': + specifier: ^4.2.0 + version: 4.7.0(vite@5.4.21(@types/node@20.14.11)(terser@5.31.3)) + concurrently: + specifier: ^9.0.0 + version: 9.2.1 + typescript: + specifier: ^5.3.0 + version: 5.7.2 + vite: + specifier: ^5.0.0 + version: 5.4.21(@types/node@20.14.11)(terser@5.31.3) + packages/prettier-config: dependencies: prettier: @@ -408,12 +442,16 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.24.9': resolution: {integrity: sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.3': - resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} '@babel/core@7.12.9': @@ -424,6 +462,10 @@ packages: resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==} engines: {node: '>=6.9.0'} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + '@babel/eslint-parser@7.24.8': resolution: {integrity: sha512-nYAikI4XTGokU2QX7Jx+v4rxZKhKivaQaREZjuW3mrJrbdWJ5yUfohnoUULge+zEEaKjPYNxhoRgUKktjXtbwA==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -439,6 +481,10 @@ packages: resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} engines: {node: '>=6.9.0'} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} @@ -455,8 +501,8 @@ packages: resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} '@babel/helper-create-class-features-plugin@7.24.8': @@ -506,6 +552,10 @@ packages: resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.24.7': resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} @@ -526,14 +576,18 @@ packages: resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.24.9': resolution: {integrity: sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -557,6 +611,10 @@ packages: resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.24.7': resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} engines: {node: '>=6.9.0'} @@ -605,6 +663,10 @@ packages: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 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.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} @@ -613,6 +675,10 @@ packages: resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.24.8': resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} @@ -621,6 +687,10 @@ packages: resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.24.7': resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} engines: {node: '>=6.9.0'} @@ -633,6 +703,10 @@ packages: resolution: {integrity: sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} @@ -647,6 +721,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} engines: {node: '>=6.9.0'} @@ -1331,12 +1410,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.24.7': resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.24.7': resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} engines: {node: '>=6.9.0'} @@ -1555,6 +1646,10 @@ packages: resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.8': resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} engines: {node: '>=6.9.0'} @@ -1563,6 +1658,10 @@ packages: resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.24.9': resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} engines: {node: '>=6.9.0'} @@ -1571,6 +1670,10 @@ packages: resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@base2/pretty-print-object@1.0.1': resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -1718,6 +1821,7 @@ packages: '@effect/schema@0.66.5': resolution: {integrity: sha512-xfu5161JyrfAS1Ruwv0RXd4QFiCALbm3iu9nlW9N9K+52wbS0WdO6XUekPZ9V/O7LN+XmlIh5Y9xhJaIWCZ/gw==} + deprecated: this package has been merged into the main effect package peerDependencies: effect: ^3.0.3 fast-check: ^3.13.2 @@ -1778,6 +1882,12 @@ packages: '@emotion/weak-memoize@0.2.5': resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==} + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.23.0': resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} engines: {node: '>=18'} @@ -1790,6 +1900,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.23.0': resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} engines: {node: '>=18'} @@ -1802,6 +1918,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.23.0': resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} engines: {node: '>=18'} @@ -1814,6 +1936,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.23.0': resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} engines: {node: '>=18'} @@ -1826,6 +1954,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.23.0': resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} engines: {node: '>=18'} @@ -1838,6 +1972,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.23.0': resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} engines: {node: '>=18'} @@ -1850,6 +1990,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.23.0': resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} engines: {node: '>=18'} @@ -1862,6 +2008,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.23.0': resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} engines: {node: '>=18'} @@ -1874,6 +2026,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.23.0': resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} engines: {node: '>=18'} @@ -1886,6 +2044,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.23.0': resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} engines: {node: '>=18'} @@ -1898,6 +2062,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.23.0': resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} engines: {node: '>=18'} @@ -1916,6 +2086,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.23.0': resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} engines: {node: '>=18'} @@ -1928,6 +2104,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.23.0': resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} engines: {node: '>=18'} @@ -1940,6 +2122,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.23.0': resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} engines: {node: '>=18'} @@ -1952,6 +2140,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.23.0': resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} engines: {node: '>=18'} @@ -1964,6 +2158,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.23.0': resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} engines: {node: '>=18'} @@ -1976,6 +2176,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.23.0': resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} engines: {node: '>=18'} @@ -1988,6 +2194,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.23.0': resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} engines: {node: '>=18'} @@ -2012,6 +2224,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.23.0': resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} engines: {node: '>=18'} @@ -2024,6 +2242,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.23.0': resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} engines: {node: '>=18'} @@ -2036,6 +2260,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.23.0': resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} engines: {node: '>=18'} @@ -2048,6 +2278,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.23.0': resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} engines: {node: '>=18'} @@ -2060,6 +2296,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.23.0': resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} engines: {node: '>=18'} @@ -2096,9 +2338,18 @@ packages: '@evilmartians/lefthook@1.7.2': resolution: {integrity: sha512-h3oY73g8kwJ/W3mZdmwXW15htAyKFlUnfMDhS8JAUYzAW3MKqkw3LXCHP3BV06On8/PYUgN1NOJQjYeaEuRUeA==} + cpu: [x64, arm64, ia32] os: [darwin, linux, win32] hasBin: true + '@faker-js/faker@5.5.3': + resolution: {integrity: sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==} + deprecated: Please update to a newer version. + + '@faker-js/faker@6.3.1': + resolution: {integrity: sha512-8YXBE2ZcU/pImVOHX7MWrSR/X5up7t6rPWZlk34RwZEcdr3ua6X+32pSd6XuOQRN+vbuvYNfA6iey8NbrjuMFQ==} + engines: {node: '>=14.0.0', npm: '>=6.0.0'} + '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} @@ -2294,10 +2545,16 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -2315,6 +2572,24 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + + '@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 + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -2544,6 +2819,9 @@ packages: peerDependencies: release-it: ^14.12.1 + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rollup/rollup-android-arm-eabi@4.18.1': resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} cpu: [arm] @@ -2766,6 +3044,71 @@ packages: peerDependencies: size-limit: 7.0.8 + '@stoplight/http-spec@7.1.0': + resolution: {integrity: sha512-Z2XqKX2SV8a1rrgSzFqccX2TolfcblT+l4pNvUU+THaLl50tKDoeidwWWZTzYUzqU0+UV97ponvqEbWWN3PaXg==} + engines: {node: '>=14.13'} + + '@stoplight/json-schema-generator@1.0.2': + resolution: {integrity: sha512-FzSLFoIZc6Lmw3oRE7kU6YUrl5gBmUs//rY59jdFipBoSyTPv5NyqeyTg5mvT6rY1F3qTLU3xgzRi/9Pb9eZpA==} + hasBin: true + + '@stoplight/json-schema-merge-allof@0.7.8': + resolution: {integrity: sha512-JTDt6GYpCWQSb7+UW1P91IAp/pcLWis0mmEzWVFcLsrNgtUYK7JLtYYz0ZPSR4QVL0fJ0YQejM+MPq5iNDFO4g==} + + '@stoplight/json-schema-ref-parser@9.2.7': + resolution: {integrity: sha512-1vNzJ7iSrFTAFNbZHPyhI6GiJJw74+WaV61bARUQEDR4Jm80f9s0Tq9uCvGoMYwIFmWDJAoTiyegnUs6SvVxDw==} + + '@stoplight/json-schema-sampler@0.3.0': + resolution: {integrity: sha512-G7QImi2xr9+8iPEg0D9YUi1BWhIiiEm19aMb91oWBSdxuhezOAqqRP3XNY6wczHV9jLWW18f+KkghTy9AG0BQA==} + + '@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/prism-cli@5.14.2': + resolution: {integrity: sha512-S/x47zQa7NgoGAD0Q1JlijV7GRDd1zP/FcIpxSh+cJRUUImfALJJm1R3ONLweP97oG/b9BrwRyC+0GNYuzrviw==} + engines: {node: '>=18.20.1'} + hasBin: true + + '@stoplight/prism-core@5.8.0': + resolution: {integrity: sha512-fmH7n6e0thzOGcD5uZBu/Xx1iFNfpc9ACTxPie+lFD54SJ214M2FIFXD7kV+NCFlC+w5OFw+lJRaYM859uMnAg==} + engines: {node: '>=18.20.1'} + + '@stoplight/prism-http-server@5.12.2': + resolution: {integrity: sha512-h7MpOuv/WPvf4MhQmXw3CygAZp64Ts0SOM4BdoafcgAOJZyvRAOjUNJeelGJsHYdPK0aB9NZsqsaKBtNfkYj+A==} + engines: {node: '>=18.20.1'} + + '@stoplight/prism-http@5.12.0': + resolution: {integrity: sha512-H+B/SO4SgQ6DT3CHIDCMQFGOe48Yecj0Eu+6rXwrs5m1JFyA2nlDwz+r73QJLGQanN4Biod2s0V9pZRcs2JnPA==} + engines: {node: '>=18.20.1'} + + '@stoplight/types@13.20.0': + resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/types@14.1.0': + resolution: {integrity: sha512-fL8Nzw03+diALw91xHEHA5Q0WCGeW9WpPgZQjodNUWogAgJ56aJs03P9YzsQ1J6fT7/XjDqHMgn7/RlsBzB/SQ==} + 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'} + '@storybook/addon-actions@6.5.16': resolution: {integrity: sha512-aADjilFmuD6TNGz2CRPSupnyiA/IGkPJHDBTqMpsDXTUr8xnuD122xkIhg6UxmCM2y1c+ncwYXy3WPK2xXK57g==} peerDependencies: @@ -3345,6 +3688,10 @@ packages: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -3427,6 +3774,9 @@ packages: '@types/jest@26.0.24': resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==} + '@types/json-schema@7.0.11': + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -3526,12 +3876,18 @@ packages: '@types/styled-components@5.1.34': resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} + '@types/swagger-schema-official@2.0.25': + resolution: {integrity: sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg==} + '@types/tapable@1.0.12': resolution: {integrity: sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==} '@types/through@0.0.33': resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + '@types/type-is@1.6.7': + resolution: {integrity: sha512-gEsh7n8824nusZ2Sidh6POxNsIdTSvIAl5gXbeFj+TUaD1CO2r4i7MQYNMfEQkChU42s2bVWAda6x6BzIhtFbQ==} + '@types/uglify-js@3.17.5': resolution: {integrity: sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==} @@ -3747,6 +4103,12 @@ packages: typescript: optional: true + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -3884,6 +4246,9 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -4242,6 +4607,10 @@ packages: engines: {node: '>= 4.5.0'} hasBin: true + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + autoprefixer@9.8.8: resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==} hasBin: true @@ -4648,6 +5017,9 @@ packages: resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} engines: {node: '>= 0.8.0'} + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + ccount@1.1.0: resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} @@ -4690,6 +5062,10 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + charset@1.0.1: + resolution: {integrity: sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==} + engines: {node: '>=4.0.0'} + chokidar@2.1.8: resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} @@ -4921,6 +5297,12 @@ packages: resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} engines: {node: '>= 0.8.0'} + compute-gcd@1.2.1: + resolution: {integrity: sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==} + + compute-lcm@1.1.2: + resolution: {integrity: sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -4935,6 +5317,11 @@ packages: concat-with-sourcemaps@1.1.0: resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + concurrently@9.2.1: + resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==} + engines: {node: '>=18'} + hasBin: true + configstore@5.0.1: resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} engines: {node: '>=8'} @@ -5159,6 +5546,9 @@ packages: prop-types: ^15.0.0 react: ^0.14.0 || ^15.0.0 || ^16.0.0 + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} @@ -5942,6 +6332,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.23.0: resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==} engines: {node: '>=18'} @@ -5952,10 +6347,6 @@ packages: engines: {node: '>=18'} hasBin: true - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -6389,6 +6780,13 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@3.0.1: resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} @@ -6400,6 +6798,9 @@ packages: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + fastparse@1.1.2: resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} @@ -6433,6 +6834,10 @@ packages: resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} deprecated: This module is no longer supported. + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -6450,6 +6855,10 @@ packages: file-system-cache@1.1.0: resolution: {integrity: sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw==} + file-type@3.9.0: + resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==} + engines: {node: '>=0.10.0'} + file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -6527,6 +6936,9 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true + flatstr@1.0.12: + resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} + flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -6540,6 +6952,9 @@ packages: flush-write-stream@1.1.1: resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} + fnv-plus@1.3.1: + resolution: {integrity: sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==} + focus-lock@1.3.5: resolution: {integrity: sha512-QFaHbhv9WPUeLYBDe/PAuLKJ4Dd9OPvKs9xZBr3yLXnUrDNaVXKu2baDBXe3naPY30hgHYSsf2JW4jzas2mDEQ==} engines: {node: '>=10'} @@ -6568,6 +6983,9 @@ packages: resolution: {integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==} engines: {node: '>=0.10.0'} + foreach@2.0.6: + resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} + foreground-child@2.0.0: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} @@ -6612,6 +7030,9 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + format-util@1.0.5: + resolution: {integrity: sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==} + format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -6620,6 +7041,9 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} + fp-ts@2.16.11: + resolution: {integrity: sha512-LaI+KaX2NFkfn1ZGHoKCmcfv7yrZsC3b8NtWsTVQeHkq4F27vI5igUuO53sxqDEa2gNQMHFPmpojDw/1zmUK7w==} + fragment-cache@0.2.1: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} engines: {node: '>=0.10.0'} @@ -6815,11 +7239,12 @@ packages: glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} @@ -6903,6 +7328,9 @@ packages: engines: {node: '>=0.4.7'} hasBin: true + handler-agent@0.2.0: + resolution: {integrity: sha512-cUduQxa5p3TFtGmb55mrRbkk/3EJCsLSeFrCIuTakQHQlYVWXeW2L9IUQUHyoHLI4UgpBNaN2JrZ0He1jPu+vg==} + hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} @@ -7118,6 +7546,13 @@ packages: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-reasons@0.1.0: + resolution: {integrity: sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ==} + https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} @@ -7276,6 +7711,11 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + io-ts@2.2.22: + resolution: {integrity: sha512-FHCCztTkHoV9mdBsHpocLpdTAfh956ZQcIkWQxxS0U5HT53vtrcuYdQneEJKH6xILaLNzXVl2Cvwtoy8XNN0AA==} + peerDependencies: + fp-ts: ^2.5.0 + ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} @@ -7683,6 +8123,9 @@ packages: isomorphic-fetch@2.2.1: resolution: {integrity: sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==} + isomorphic-fetch@3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + isomorphic-unfetch@3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} @@ -7941,6 +8384,10 @@ packages: canvas: optional: true + jsep@1.4.0: + resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} + engines: {node: '>= 10.16.0'} + jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -7967,6 +8414,23 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-pointer@0.6.2: + resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} + + json-promise@1.1.8: + resolution: {integrity: sha512-rz31P/7VfYnjQFrF60zpPTT0egMPlc8ZvIQHWs4ZtNZNnAXRmXo6oS+6eyWr5sEMG03OVhklNrTXxiIRYzoUgQ==} + + json-schema-compare@0.2.2: + resolution: {integrity: sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==} + + json-schema-faker@0.5.8: + resolution: {integrity: sha512-sqzPEbEDlpiH8U1tfmJHScXHy52onvMxITPsHyhe/jhS83g8TX6ruvRqt/ot1bXUPRsh7Ps1sWqJiBxIXmW5Xw==} + hasBin: true + + json-schema-ref-parser@6.1.0: + resolution: {integrity: sha512-pXe9H1m6IgIpXmE5JSb8epilNTGsmTb2iPohAXpOdhqGFbQjNeHHsZxU+C8w6T81GZxSPFLeUoqDJmzxx5IGuw==} + deprecated: Please switch to @apidevtools/json-schema-ref-parser + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -7988,6 +8452,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonc-parser@2.2.1: + resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} + jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -7998,6 +8465,15 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} + jsonpath-plus@10.4.0: + resolution: {integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==} + engines: {node: '>=18.0.0'} + hasBin: true + + jsonrepair@3.13.2: + resolution: {integrity: sha512-Leuly0nbM4R+S5SVJk3VHfw1oxnlEK9KygdZvfUtEtTawNDyzB4qa1xWTmFt1aeoA7sXZkVTRuIixJ8bAvqVUg==} + hasBin: true + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -8091,6 +8567,10 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + liquid-json@0.3.1: + resolution: {integrity: sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ==} + engines: {node: '>=4'} + listr2@4.0.5: resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} engines: {node: '>=12'} @@ -8160,6 +8640,7 @@ packages: lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. lodash.isfunction@3.0.9: resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} @@ -8449,6 +8930,7 @@ packages: metro-react-native-babel-preset@0.76.9: resolution: {integrity: sha512-eCBtW/UkJPDr6HlMgFEGF+964DZsUEF9RGeJdZLKWE7d/0nY3ABZ9ZAGxzu9efQ35EWRox5bDMXUGaOwUe5ikQ==} engines: {node: '>=16'} + deprecated: Use @react-native/babel-preset instead peerDependencies: '@babel/core': '*' @@ -8488,6 +8970,10 @@ packages: engines: {node: '>=16'} hasBin: true + micri@4.5.1: + resolution: {integrity: sha512-AtvnSBGFglNr+iqs5gufpHT9xRXUabgu9vYEnQYPXSBs+nLSBvmUS5Mzg+3LJ9eQBrNA1o5M49WeqiX1f+d2sg==} + engines: {node: '>= 12.0.0'} + microevent.ts@0.1.1: resolution: {integrity: sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==} @@ -8515,6 +9001,9 @@ packages: resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} engines: {node: '>= 0.6'} + mime-format@2.0.1: + resolution: {integrity: sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -8573,6 +9062,9 @@ packages: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} + minimist@1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -8910,6 +9402,9 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + ono@4.0.11: + resolution: {integrity: sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==} + open@6.4.0: resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} engines: {node: '>=8'} @@ -8922,6 +9417,9 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + openapi3-ts@2.0.2: + resolution: {integrity: sha512-TxhYBMoqx9frXyOgnRHufjQfPXomTIHYKhSKJ6jHfj13kS8OEIhvmE8CTuQyKtjjWttAjX5DPxM1vmalEpo8Qw==} + opencollective-postinstall@2.0.3: resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} hasBin: true @@ -9102,6 +9600,9 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-multipart-data@1.5.0: + resolution: {integrity: sha512-ck5zaMF0ydjGfejNMnlo5YU2oJ+pT+80Jb1y4ybanT27j+zbVP/jkYmCrUGsEln0Ox/hZmuvgy8Ra7AxbXP2Mw==} + parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} @@ -9109,6 +9610,9 @@ packages: parse-path@4.0.4: resolution: {integrity: sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw==} + parse-prefer-header@1.0.0: + resolution: {integrity: sha512-+WJ3ncCrKOExuxF06XyKWS8bLkLttnlm6YPMZIFIUXNd09Xy0N2JISudxCaY+luDm43yTnHMHVU3zte4G2gN4g==} + parse-url@6.0.5: resolution: {integrity: sha512-e35AeLTSIlkw/5GFq70IN7po8fmDUjpDPY1rIK+VubRfsUvBonjQ+PBZG+vWMACnQSmNlvl524IucoDmcioMxA==} @@ -9255,10 +9759,21 @@ packages: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} + pino-std-serializers@3.2.0: + resolution: {integrity: sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==} + + pino@6.14.0: + resolution: {integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==} + hasBin: true + pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pkg-conf@2.1.0: + resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} + engines: {node: '>=4'} + pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} @@ -9557,6 +10072,14 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} + postman-collection@4.5.0: + resolution: {integrity: sha512-152JSW9pdbaoJihwjc7Q8lc3nPg/PC9lPTHdMk7SHnHhu/GBJB7b2yb9zG7Qua578+3PxkQ/HYBuXpDSvsf7GQ==} + engines: {node: '>=10'} + + postman-url-encoder@3.0.5: + resolution: {integrity: sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==} + engines: {node: '>=10'} + preact-render-to-string@5.2.6: resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: @@ -9609,6 +10132,9 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-data@0.40.0: + resolution: {integrity: sha512-YFLnEdDEDnkt/GEhet5CYZHCvALw6+Elyb/tp8kQG03ZSIuzeaDWpZYndCXwgqu4NAjh1PI534dhDS1mHarRnQ==} + pretty-error@2.1.2: resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==} @@ -9644,6 +10170,9 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -9777,6 +10306,9 @@ packages: queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} @@ -9897,6 +10429,10 @@ packages: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} engines: {node: '>=0.10.0'} + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + react-refresh@0.4.3: resolution: {integrity: sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==} engines: {node: '>=0.10.0'} @@ -10291,6 +10827,9 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -10314,6 +10853,9 @@ packages: safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + safe-stable-stringify@1.1.1: + resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -10359,6 +10901,9 @@ packages: resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} engines: {node: '>= 10.13.0'} + seedrandom@3.0.5: + resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} + select@1.1.2: resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} @@ -10483,6 +11028,10 @@ packages: shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} @@ -10502,6 +11051,10 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + signale@1.4.0: + resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} + engines: {node: '>=6'} + simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -10573,6 +11126,9 @@ packages: resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + sonic-boom@1.4.1: + resolution: {integrity: sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==} + sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} @@ -10613,6 +11169,7 @@ packages: source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} @@ -10971,6 +11528,7 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me telejson@3.3.0: resolution: {integrity: sha512-er08AylQ+LEbDLp1GRezORZu5wKOHaBczF6oYJtgC3Idv10qZ8A3p6ffT+J5BzDKkV9MqBvu8HAKiIIOp6KJ2w==} @@ -11530,6 +12088,12 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-template-lite@22.9.0: + resolution: {integrity: sha512-cmGZaykSWEQ5UXKaGKnUS8zFvfp8j1Jvn7dlq3P7tGd5XeybXcfo0xnVBRWiNEp80nO1GYgCLwoaRJ8WMmmk3Q==} + + urijs@1.19.11: + resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} + urix@0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated @@ -11609,6 +12173,10 @@ packages: utila@0.4.0: resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} + engines: {node: '>= 4'} + utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -11652,6 +12220,21 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + validate.io-array@1.0.6: + resolution: {integrity: sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==} + + validate.io-function@1.0.2: + resolution: {integrity: sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==} + + validate.io-integer-array@1.0.0: + resolution: {integrity: sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==} + + validate.io-integer@1.0.5: + resolution: {integrity: sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==} + + validate.io-number@1.0.3: + resolution: {integrity: sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -11668,6 +12251,37 @@ packages: vfile@4.2.1: resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} @@ -11814,6 +12428,7 @@ packages: whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} @@ -11821,6 +12436,10 @@ packages: whatwg-mimetype@2.3.0: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -12026,9 +12645,15 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.24.9': {} - '@babel/compat-data@7.26.3': {} + '@babel/compat-data@7.29.0': {} '@babel/core@7.12.9': dependencies: @@ -12041,7 +12666,7 @@ snapshots: '@babel/traverse': 7.24.8 '@babel/types': 7.24.9 convert-source-map: 1.9.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 lodash: 4.17.21 @@ -12071,6 +12696,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/eslint-parser@7.24.8(@babel/core@7.24.9)(eslint@8.57.0)': dependencies: '@babel/core': 7.24.9 @@ -12094,6 +12739,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.0.2 + '@babel/helper-annotate-as-pure@7.24.7': dependencies: '@babel/types': 7.24.9 @@ -12117,10 +12770,10 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-compilation-targets@7.25.9': + '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/compat-data': 7.26.3 - '@babel/helper-validator-option': 7.25.9 + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -12174,7 +12827,7 @@ snapshots: '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 '@babel/traverse': 7.24.8 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0 lodash.debounce: 4.0.8 resolve: 1.22.8 semver: 6.3.1 @@ -12186,7 +12839,7 @@ snapshots: '@babel/core': 7.24.9 '@babel/helper-compilation-targets': 7.24.8 '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -12195,8 +12848,8 @@ snapshots: '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.0 lodash.debounce: 4.0.8 resolve: 1.22.10 @@ -12212,6 +12865,8 @@ snapshots: '@babel/template': 7.24.7 '@babel/types': 7.24.9 + '@babel/helper-globals@7.28.0': {} + '@babel/helper-hoist-variables@7.24.7': dependencies: '@babel/types': 7.24.9 @@ -12251,6 +12906,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.24.9(@babel/core@7.12.9)': dependencies: '@babel/core': 7.12.9 @@ -12273,12 +12935,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.24.9)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -12296,6 +12967,8 @@ snapshots: '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 @@ -12310,7 +12983,7 @@ snapshots: '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -12361,14 +13034,20 @@ snapshots: '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.24.7': {} '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-option@7.24.8': {} '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-wrap-function@7.24.7': dependencies: '@babel/helper-function-name': 7.24.7 @@ -12380,9 +13059,9 @@ snapshots: '@babel/helper-wrap-function@7.25.9': dependencies: - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -12391,6 +13070,11 @@ snapshots: '@babel/template': 7.24.7 '@babel/types': 7.24.9 + '@babel/helpers@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + '@babel/highlight@7.24.7': dependencies: '@babel/helper-validator-identifier': 7.24.7 @@ -12406,23 +13090,27 @@ snapshots: dependencies: '@babel/types': 7.26.3 + '@babel/parser@7.29.0': + dependencies: + '@babel/types': 7.29.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.24.9) transitivePeerDependencies: @@ -12431,8 +13119,8 @@ snapshots: '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -12612,7 +13300,7 @@ snapshots: '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.9)': dependencies: @@ -12622,7 +13310,7 @@ snapshots: '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.9)': dependencies: @@ -12703,7 +13391,7 @@ snapshots: dependencies: '@babel/core': 7.24.9 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.9)': dependencies: @@ -12713,14 +13401,14 @@ snapshots: '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.24.9) - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -12736,8 +13424,8 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.24.9) transitivePeerDependencies: - supports-color @@ -12750,7 +13438,7 @@ snapshots: '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.9)': dependencies: @@ -12760,13 +13448,13 @@ snapshots: '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -12774,7 +13462,7 @@ snapshots: dependencies: '@babel/core': 7.24.9 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -12796,10 +13484,10 @@ snapshots: dependencies: '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.24.9) - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.29.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -12813,8 +13501,8 @@ snapshots: '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/template': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/template': 7.28.6 '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.9)': dependencies: @@ -12824,7 +13512,7 @@ snapshots: '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.9)': dependencies: @@ -12836,7 +13524,7 @@ snapshots: dependencies: '@babel/core': 7.24.9 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.9)': dependencies: @@ -12846,12 +13534,12 @@ snapshots: '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.9)': dependencies: @@ -12864,12 +13552,12 @@ snapshots: '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-flow-strip-types@7.24.7(@babel/core@7.24.9)': dependencies: @@ -12888,7 +13576,7 @@ snapshots: '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color @@ -12903,16 +13591,16 @@ snapshots: '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.9)': dependencies: @@ -12922,12 +13610,12 @@ snapshots: '@babel/plugin-transform-literals@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.9)': dependencies: @@ -12937,7 +13625,7 @@ snapshots: '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.9)': dependencies: @@ -12950,8 +13638,8 @@ snapshots: '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -12967,8 +13655,8 @@ snapshots: '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -12985,10 +13673,10 @@ snapshots: '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -13003,8 +13691,8 @@ snapshots: '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -13018,7 +13706,7 @@ snapshots: dependencies: '@babel/core': 7.24.9 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.9)': dependencies: @@ -13028,23 +13716,23 @@ snapshots: '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.24.9) '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.9)': @@ -13058,7 +13746,7 @@ snapshots: '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.24.9) transitivePeerDependencies: - supports-color @@ -13066,12 +13754,12 @@ snapshots: '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color @@ -13089,13 +13777,13 @@ snapshots: '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -13104,7 +13792,7 @@ snapshots: '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -13116,7 +13804,7 @@ snapshots: '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.24.9)': dependencies: @@ -13140,11 +13828,21 @@ snapshots: '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 @@ -13182,7 +13880,7 @@ snapshots: '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 regenerator-transform: 0.15.2 '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.9)': @@ -13193,7 +13891,7 @@ snapshots: '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-runtime@7.24.7(@babel/core@7.24.9)': dependencies: @@ -13215,7 +13913,7 @@ snapshots: '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.9)': dependencies: @@ -13228,7 +13926,7 @@ snapshots: '@babel/plugin-transform-spread@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color @@ -13241,7 +13939,7 @@ snapshots: '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.9)': dependencies: @@ -13251,7 +13949,7 @@ snapshots: '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.9)': dependencies: @@ -13261,7 +13959,7 @@ snapshots: '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-typescript@7.24.8(@babel/core@7.24.9)': dependencies: @@ -13281,13 +13979,13 @@ snapshots: '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.9)': dependencies: @@ -13299,13 +13997,13 @@ snapshots: dependencies: '@babel/core': 7.24.9 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.28.6 '@babel/preset-env@7.12.11(@babel/core@7.24.9)': dependencies: @@ -13381,11 +14079,11 @@ snapshots: '@babel/preset-env@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/compat-data': 7.26.3 + '@babel/compat-data': 7.29.0 '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-option': 7.25.9 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.24.9) '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.24.9) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.24.9) @@ -13485,8 +14183,8 @@ snapshots: '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/types': 7.26.3 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/types': 7.29.0 esutils: 2.0.3 '@babel/preset-react@7.26.3(@babel/core@7.24.9)': @@ -13546,6 +14244,12 @@ snapshots: '@babel/parser': 7.26.3 '@babel/types': 7.26.3 + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@babel/traverse@7.24.8': dependencies: '@babel/code-frame': 7.24.7 @@ -13583,11 +14287,23 @@ snapshots: '@babel/parser': 7.26.3 '@babel/template': 7.25.9 '@babel/types': 7.26.3 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.24.9': dependencies: '@babel/helper-string-parser': 7.24.8 @@ -13599,6 +14315,11 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@base2/pretty-print-object@1.0.1': {} '@bcoe/v8-coverage@0.2.3': {} @@ -13974,66 +14695,99 @@ snapshots: '@emotion/weak-memoize@0.2.5': {} + '@esbuild/aix-ppc64@0.21.5': + optional: true + '@esbuild/aix-ppc64@0.23.0': optional: true '@esbuild/aix-ppc64@0.24.0': optional: true + '@esbuild/android-arm64@0.21.5': + optional: true + '@esbuild/android-arm64@0.23.0': optional: true '@esbuild/android-arm64@0.24.0': optional: true + '@esbuild/android-arm@0.21.5': + optional: true + '@esbuild/android-arm@0.23.0': optional: true '@esbuild/android-arm@0.24.0': optional: true + '@esbuild/android-x64@0.21.5': + optional: true + '@esbuild/android-x64@0.23.0': optional: true '@esbuild/android-x64@0.24.0': optional: true + '@esbuild/darwin-arm64@0.21.5': + optional: true + '@esbuild/darwin-arm64@0.23.0': optional: true '@esbuild/darwin-arm64@0.24.0': optional: true + '@esbuild/darwin-x64@0.21.5': + optional: true + '@esbuild/darwin-x64@0.23.0': optional: true '@esbuild/darwin-x64@0.24.0': optional: true + '@esbuild/freebsd-arm64@0.21.5': + optional: true + '@esbuild/freebsd-arm64@0.23.0': optional: true '@esbuild/freebsd-arm64@0.24.0': optional: true + '@esbuild/freebsd-x64@0.21.5': + optional: true + '@esbuild/freebsd-x64@0.23.0': optional: true '@esbuild/freebsd-x64@0.24.0': optional: true + '@esbuild/linux-arm64@0.21.5': + optional: true + '@esbuild/linux-arm64@0.23.0': optional: true '@esbuild/linux-arm64@0.24.0': optional: true + '@esbuild/linux-arm@0.21.5': + optional: true + '@esbuild/linux-arm@0.23.0': optional: true '@esbuild/linux-arm@0.24.0': optional: true + '@esbuild/linux-ia32@0.21.5': + optional: true + '@esbuild/linux-ia32@0.23.0': optional: true @@ -14043,42 +14797,63 @@ snapshots: '@esbuild/linux-loong64@0.14.54': optional: true + '@esbuild/linux-loong64@0.21.5': + optional: true + '@esbuild/linux-loong64@0.23.0': optional: true '@esbuild/linux-loong64@0.24.0': optional: true + '@esbuild/linux-mips64el@0.21.5': + optional: true + '@esbuild/linux-mips64el@0.23.0': optional: true '@esbuild/linux-mips64el@0.24.0': optional: true + '@esbuild/linux-ppc64@0.21.5': + optional: true + '@esbuild/linux-ppc64@0.23.0': optional: true '@esbuild/linux-ppc64@0.24.0': optional: true + '@esbuild/linux-riscv64@0.21.5': + optional: true + '@esbuild/linux-riscv64@0.23.0': optional: true '@esbuild/linux-riscv64@0.24.0': optional: true + '@esbuild/linux-s390x@0.21.5': + optional: true + '@esbuild/linux-s390x@0.23.0': optional: true '@esbuild/linux-s390x@0.24.0': optional: true + '@esbuild/linux-x64@0.21.5': + optional: true + '@esbuild/linux-x64@0.23.0': optional: true '@esbuild/linux-x64@0.24.0': optional: true + '@esbuild/netbsd-x64@0.21.5': + optional: true + '@esbuild/netbsd-x64@0.23.0': optional: true @@ -14091,30 +14866,45 @@ snapshots: '@esbuild/openbsd-arm64@0.24.0': optional: true + '@esbuild/openbsd-x64@0.21.5': + optional: true + '@esbuild/openbsd-x64@0.23.0': optional: true '@esbuild/openbsd-x64@0.24.0': optional: true + '@esbuild/sunos-x64@0.21.5': + optional: true + '@esbuild/sunos-x64@0.23.0': optional: true '@esbuild/sunos-x64@0.24.0': optional: true + '@esbuild/win32-arm64@0.21.5': + optional: true + '@esbuild/win32-arm64@0.23.0': optional: true '@esbuild/win32-arm64@0.24.0': optional: true + '@esbuild/win32-ia32@0.21.5': + optional: true + '@esbuild/win32-ia32@0.23.0': optional: true '@esbuild/win32-ia32@0.24.0': optional: true + '@esbuild/win32-x64@0.21.5': + optional: true + '@esbuild/win32-x64@0.23.0': optional: true @@ -14161,6 +14951,10 @@ snapshots: '@evilmartians/lefthook@1.7.2': {} + '@faker-js/faker@5.5.3': {} + + '@faker-js/faker@6.3.1': {} + '@gar/promisify@1.1.3': {} '@hapi/hoek@9.3.0': {} @@ -14512,12 +15306,22 @@ snapshots: '@types/yargs': 17.0.32 chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} @@ -14534,6 +15338,21 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jsdevtools/ono@7.1.3': {} + + '@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 + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.24.8 @@ -14939,6 +15758,8 @@ snapshots: conventional-recommended-bump: 6.1.0 release-it: 14.14.3(encoding@0.1.13) + '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rollup/rollup-android-arm-eabi@4.18.1': optional: true @@ -15090,6 +15911,179 @@ snapshots: '@size-limit/file': 7.0.8(size-limit@7.0.8) size-limit: 7.0.8 + '@stoplight/http-spec@7.1.0(encoding@0.1.13)': + dependencies: + '@stoplight/json': 3.21.7 + '@stoplight/json-schema-generator': 1.0.2(encoding@0.1.13) + '@stoplight/types': 14.1.0 + '@types/json-schema': 7.0.11 + '@types/swagger-schema-official': 2.0.25 + '@types/type-is': 1.6.7 + fnv-plus: 1.3.1 + lodash: 4.17.21 + openapi3-ts: 2.0.2 + postman-collection: 4.5.0 + tslib: 2.6.3 + type-is: 1.6.18 + transitivePeerDependencies: + - encoding + + '@stoplight/json-schema-generator@1.0.2(encoding@0.1.13)': + dependencies: + cross-fetch: 3.2.0(encoding@0.1.13) + json-promise: 1.1.8 + minimist: 1.2.6 + mkdirp: 0.5.6 + pretty-data: 0.40.0 + transitivePeerDependencies: + - encoding + + '@stoplight/json-schema-merge-allof@0.7.8': + dependencies: + compute-lcm: 1.1.2 + json-schema-compare: 0.2.2 + lodash: 4.17.21 + + '@stoplight/json-schema-ref-parser@9.2.7(encoding@0.1.13)': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@stoplight/path': 1.3.2 + '@stoplight/yaml': 4.3.0 + call-me-maybe: 1.0.2 + fastestsmallesttextencoderdecoder: 1.0.22 + isomorphic-fetch: 3.0.0(encoding@0.1.13) + node-abort-controller: 3.1.1 + transitivePeerDependencies: + - encoding + + '@stoplight/json-schema-sampler@0.3.0': + dependencies: + '@types/json-schema': 7.0.15 + json-pointer: 0.6.2 + + '@stoplight/json@3.21.7': + dependencies: + '@stoplight/ordered-object-literal': 1.0.5 + '@stoplight/path': 1.3.2 + '@stoplight/types': 13.20.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/prism-cli@5.14.2(encoding@0.1.13)': + dependencies: + '@stoplight/json': 3.21.7 + '@stoplight/json-schema-ref-parser': 9.2.7(encoding@0.1.13) + '@stoplight/prism-core': 5.8.0 + '@stoplight/prism-http': 5.12.0(encoding@0.1.13) + '@stoplight/prism-http-server': 5.12.2(encoding@0.1.13) + '@stoplight/types': 14.1.1 + chalk: 4.1.2 + chokidar: 3.6.0 + fp-ts: 2.16.11 + json-schema-faker: 0.5.8 + jsonrepair: 3.13.2 + lodash: 4.17.21 + node-fetch: 2.7.0(encoding@0.1.13) + pino: 6.14.0 + signale: 1.4.0 + split2: 4.2.0 + tslib: 2.6.3 + uri-template-lite: 22.9.0 + urijs: 1.19.11 + yargs: 16.2.0 + transitivePeerDependencies: + - encoding + - supports-color + + '@stoplight/prism-core@5.8.0': + dependencies: + fp-ts: 2.16.11 + lodash: 4.17.21 + pino: 6.14.0 + tslib: 2.6.3 + + '@stoplight/prism-http-server@5.12.2(encoding@0.1.13)': + dependencies: + '@stoplight/prism-core': 5.8.0 + '@stoplight/prism-http': 5.12.0(encoding@0.1.13) + '@stoplight/types': 14.1.1 + fast-xml-parser: 4.4.0 + fp-ts: 2.16.11 + io-ts: 2.2.22(fp-ts@2.16.11) + lodash: 4.17.21 + micri: 4.5.1 + node-fetch: 2.7.0(encoding@0.1.13) + parse-prefer-header: 1.0.0 + tslib: 2.6.3 + type-is: 1.6.18 + transitivePeerDependencies: + - encoding + - supports-color + + '@stoplight/prism-http@5.12.0(encoding@0.1.13)': + dependencies: + '@faker-js/faker': 6.3.1 + '@stoplight/http-spec': 7.1.0(encoding@0.1.13) + '@stoplight/json': 3.21.7 + '@stoplight/json-schema-merge-allof': 0.7.8 + '@stoplight/json-schema-ref-parser': 9.2.7(encoding@0.1.13) + '@stoplight/json-schema-sampler': 0.3.0 + '@stoplight/prism-core': 5.8.0 + '@stoplight/types': 14.1.1 + '@stoplight/yaml': 4.3.0 + abstract-logging: 2.0.1 + accepts: 1.3.8 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + caseless: 0.12.0 + chalk: 4.1.2 + content-type: 1.0.5 + fp-ts: 2.16.11 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + json-schema-faker: 0.5.8 + lodash: 4.17.21 + node-fetch: 2.7.0(encoding@0.1.13) + parse-multipart-data: 1.5.0 + pino: 6.14.0 + seedrandom: 3.0.5 + tslib: 2.6.3 + type-is: 1.6.18 + uri-template-lite: 22.9.0 + whatwg-mimetype: 3.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + '@stoplight/types@13.20.0': + dependencies: + '@types/json-schema': 7.0.15 + utility-types: 3.11.0 + + '@stoplight/types@14.1.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.6.3 + '@storybook/addon-actions@6.5.16(react-dom@18.3.1(react@16.14.0))(react@16.14.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.3.1(react@16.14.0))(react@16.14.0) @@ -15305,7 +16299,7 @@ snapshots: react: 16.14.0 react-dom: 18.3.1(react@16.14.0) - '@storybook/addon-storyshots@6.5.16(5xqo6tsir4vhqua4i5isrrjsge)': + '@storybook/addon-storyshots@6.5.16(pvyz464vugd6fkdsfbz43rg55q)': dependencies: '@jest/transform': 26.6.2 '@storybook/addons': 6.5.16(react-dom@18.3.1(react@16.14.0))(react@16.14.0) @@ -15334,7 +16328,7 @@ snapshots: preact: 10.25.2 react: 16.14.0 react-dom: 18.3.1(react@16.14.0) - rxjs: 7.8.1 + rxjs: 7.8.2 transitivePeerDependencies: - '@storybook/builder-webpack5' - '@storybook/manager-webpack5' @@ -16393,24 +17387,26 @@ snapshots: '@tootallnate/once@1.1.2': {} + '@tootallnate/once@2.0.0': {} + '@trysound/sax@0.2.0': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.26.3 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 '@types/babel__traverse@7.20.6': dependencies: @@ -16497,6 +17493,8 @@ snapshots: jest-diff: 26.6.2 pretty-format: 26.6.2 + '@types/json-schema@7.0.11': {} + '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} @@ -16601,12 +17599,18 @@ snapshots: '@types/react': 18.3.3 csstype: 3.1.3 + '@types/swagger-schema-official@2.0.25': {} + '@types/tapable@1.0.12': {} '@types/through@0.0.33': dependencies: '@types/node': 20.14.11 + '@types/type-is@1.6.7': + dependencies: + '@types/node': 20.14.11 + '@types/uglify-js@3.17.5': dependencies: source-map: 0.6.1 @@ -16914,6 +17918,18 @@ snapshots: - jest - supports-color + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@20.14.11)(terser@5.31.3))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 5.4.21(@types/node@20.14.11)(terser@5.31.3) + transitivePeerDependencies: + - supports-color + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -17110,6 +18126,8 @@ snapshots: dependencies: event-target-shim: 5.0.1 + abstract-logging@2.0.1: {} + accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -17474,6 +18492,8 @@ snapshots: atob@2.1.2: {} + atomic-sleep@1.0.0: {} + autoprefixer@9.8.8: dependencies: browserslist: 4.23.2 @@ -17609,7 +18629,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.24.9): dependencies: - '@babel/compat-data': 7.26.3 + '@babel/compat-data': 7.29.0 '@babel/core': 7.24.9 '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.24.9) semver: 6.3.1 @@ -18127,6 +19147,8 @@ snapshots: case@1.6.3: {} + caseless@0.12.0: {} + ccount@1.1.0: {} chalk-template@1.1.0: @@ -18179,6 +19201,8 @@ snapshots: chardet@0.7.0: {} + charset@1.0.1: {} + chokidar@2.1.8: dependencies: anymatch: 2.0.0 @@ -18426,6 +19450,19 @@ snapshots: transitivePeerDependencies: - supports-color + compute-gcd@1.2.1: + dependencies: + validate.io-array: 1.0.6 + validate.io-function: 1.0.2 + validate.io-integer-array: 1.0.0 + + compute-lcm@1.1.2: + dependencies: + compute-gcd: 1.2.1 + validate.io-array: 1.0.6 + validate.io-function: 1.0.2 + validate.io-integer-array: 1.0.0 + concat-map@0.0.1: {} concat-stream@1.6.2: @@ -18446,6 +19483,15 @@ snapshots: dependencies: source-map: 0.6.1 + concurrently@9.2.1: + dependencies: + chalk: 4.1.2 + rxjs: 7.8.2 + shell-quote: 1.8.3 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + configstore@5.0.1: dependencies: dot-prop: 5.3.0 @@ -18754,6 +19800,12 @@ snapshots: react: 16.14.0 warning: 4.0.3 + cross-fetch@3.2.0(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 @@ -19209,7 +20261,7 @@ snapshots: detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -19638,6 +20690,32 @@ snapshots: esbuild-windows-64: 0.14.54 esbuild-windows-arm64: 0.14.54 + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + esbuild@0.23.0: optionalDependencies: '@esbuild/aix-ppc64': 0.23.0 @@ -19692,8 +20770,6 @@ snapshots: '@esbuild/win32-ia32': 0.24.0 '@esbuild/win32-x64': 0.24.0 - escalade@3.1.2: {} - escalade@3.2.0: {} escape-goat@2.1.1: {} @@ -20368,6 +21444,10 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-redact@3.5.0: {} + + fast-safe-stringify@2.1.1: {} + fast-uri@3.0.1: {} fast-xml-parser@4.4.0: @@ -20376,6 +21456,8 @@ snapshots: fastest-levenshtein@1.0.16: {} + fastestsmallesttextencoderdecoder@1.0.22: {} + fastparse@1.1.2: {} fastq@1.17.1: @@ -20410,6 +21492,10 @@ snapshots: figgy-pudding@3.5.2: {} + figures@2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -20436,6 +21522,8 @@ snapshots: fs-extra: 10.1.0 ramda: 0.28.0 + file-type@3.9.0: {} + file-uri-to-path@1.0.0: optional: true @@ -20539,6 +21627,8 @@ snapshots: flat@5.0.2: {} + flatstr@1.0.12: {} + flatted@3.3.1: {} flow-enums-runtime@0.0.5: {} @@ -20550,6 +21640,8 @@ snapshots: inherits: 2.0.4 readable-stream: 2.3.8 + fnv-plus@1.3.1: {} + focus-lock@1.3.5: dependencies: tslib: 2.6.3 @@ -20568,6 +21660,8 @@ snapshots: dependencies: for-in: 1.0.2 + foreach@2.0.6: {} + foreground-child@2.0.0: dependencies: cross-spawn: 7.0.3 @@ -20646,10 +21740,14 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + format-util@1.0.5: {} + format@0.2.2: {} forwarded@0.2.0: {} + fp-ts@2.16.11: {} + fragment-cache@0.2.1: dependencies: map-cache: 0.2.2 @@ -20802,7 +21900,7 @@ snapshots: dependencies: '@tootallnate/once': 1.1.2 data-uri-to-buffer: 3.0.1 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0 file-uri-to-path: 2.0.0 fs-extra: 8.1.0 ftp: 0.3.10 @@ -21019,6 +22117,8 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 + handler-agent@0.2.0: {} + hard-rejection@2.1.0: {} has-ansi@2.0.0: @@ -21276,12 +22376,22 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + http-reasons@0.1.0: {} + https-browserify@1.0.0: {} https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -21442,6 +22552,10 @@ snapshots: dependencies: loose-envify: 1.4.0 + io-ts@2.2.22(fp-ts@2.16.11): + dependencies: + fp-ts: 2.16.11 + ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -21777,6 +22891,13 @@ snapshots: node-fetch: 1.7.3 whatwg-fetch: 3.6.20 + isomorphic-fetch@3.0.0(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + whatwg-fetch: 3.6.20 + transitivePeerDependencies: + - encoding + isomorphic-unfetch@3.1.0(encoding@0.1.13): dependencies: node-fetch: 2.7.0(encoding@0.1.13) @@ -21813,7 +22934,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -21996,7 +23117,11 @@ snapshots: pretty-format: 26.6.2 throat: 5.0.0 transitivePeerDependencies: + - bufferutil + - canvas - supports-color + - ts-node + - utf-8-validate jest-leak-detector@26.6.2: dependencies: @@ -22341,6 +23466,8 @@ snapshots: - supports-color - utf-8-validate + jsep@1.4.0: {} + jsesc@0.5.0: {} jsesc@2.5.2: {} @@ -22355,6 +23482,29 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-pointer@0.6.2: + dependencies: + foreach: 2.0.6 + + json-promise@1.1.8: + dependencies: + bluebird: 3.7.2 + + json-schema-compare@0.2.2: + dependencies: + lodash: 4.17.21 + + json-schema-faker@0.5.8: + dependencies: + json-schema-ref-parser: 6.1.0 + jsonpath-plus: 10.4.0 + + json-schema-ref-parser@6.1.0: + dependencies: + call-me-maybe: 1.0.2 + js-yaml: 3.14.1 + ono: 4.0.11 + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -22369,6 +23519,8 @@ snapshots: json5@2.2.3: {} + jsonc-parser@2.2.1: {} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -22381,6 +23533,14 @@ snapshots: jsonparse@1.3.1: {} + jsonpath-plus@10.4.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 + + jsonrepair@3.13.2: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -22484,6 +23644,8 @@ snapshots: transitivePeerDependencies: - enquirer + liquid-json@0.3.1: {} + listr2@4.0.5(enquirer@2.4.1): dependencies: cli-truncate: 2.1.0 @@ -23070,6 +24232,10 @@ snapshots: - supports-color - utf-8-validate + micri@4.5.1: + dependencies: + handler-agent: 0.2.0 + microevent.ts@0.1.1: {} micromatch@3.1.10: @@ -23109,6 +24275,10 @@ snapshots: mime-db@1.53.0: {} + mime-format@2.0.1: + dependencies: + charset: 1.0.1 + mime-types@2.1.35: dependencies: mime-db: 1.52.0 @@ -23155,6 +24325,8 @@ snapshots: is-plain-obj: 1.1.0 kind-of: 6.0.3 + minimist@1.2.6: {} + minimist@1.2.8: {} minipass-collect@1.0.2: @@ -23550,6 +24722,10 @@ snapshots: dependencies: mimic-fn: 2.1.0 + ono@4.0.11: + dependencies: + format-util: 1.0.5 + open@6.4.0: dependencies: is-wsl: 1.1.0 @@ -23565,6 +24741,10 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + openapi3-ts@2.0.2: + dependencies: + yaml: 1.10.2 + opencollective-postinstall@2.0.3: {} optionator@0.8.3: @@ -23801,6 +24981,8 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-multipart-data@1.5.0: {} + parse-passwd@1.0.0: {} parse-path@4.0.4: @@ -23810,6 +24992,10 @@ snapshots: qs: 6.13.1 query-string: 6.14.1 + parse-prefer-header@1.0.0: + dependencies: + lodash.camelcase: 4.3.0 + parse-url@6.0.5: dependencies: is-ssh: 1.4.0 @@ -23926,8 +25112,25 @@ snapshots: pinkie@2.0.4: optional: true + pino-std-serializers@3.2.0: {} + + pino@6.14.0: + dependencies: + fast-redact: 3.5.0 + fast-safe-stringify: 2.1.1 + flatstr: 1.0.12 + pino-std-serializers: 3.2.0 + process-warning: 1.0.0 + quick-format-unescaped: 4.0.4 + sonic-boom: 1.4.1 + pirates@4.0.6: {} + pkg-conf@2.1.0: + dependencies: + find-up: 2.1.0 + load-json-file: 4.0.0 + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 @@ -24295,6 +25498,24 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postman-collection@4.5.0: + dependencies: + '@faker-js/faker': 5.5.3 + file-type: 3.9.0 + http-reasons: 0.1.0 + iconv-lite: 0.6.3 + liquid-json: 0.3.1 + lodash: 4.17.21 + mime-format: 2.0.1 + mime-types: 2.1.35 + postman-url-encoder: 3.0.5 + semver: 7.6.3 + uuid: 8.3.2 + + postman-url-encoder@3.0.5: + dependencies: + punycode: 2.3.1 + preact-render-to-string@5.2.6(preact@10.25.2): dependencies: preact: 10.25.2 @@ -24330,6 +25551,8 @@ snapshots: prettier@3.3.3: {} + pretty-data@0.40.0: {} + pretty-error@2.1.2: dependencies: lodash: 4.17.21 @@ -24367,6 +25590,8 @@ snapshots: process-nextick-args@2.0.1: {} + process-warning@1.0.0: {} + process@0.11.10: {} progress@2.0.3: {} @@ -24520,6 +25745,8 @@ snapshots: dependencies: inherits: 2.0.4 + quick-format-unescaped@4.0.4: {} + quick-lru@4.0.1: {} ramda@0.28.0: {} @@ -24720,6 +25947,8 @@ snapshots: react-refresh@0.11.0: {} + react-refresh@0.17.0: {} + react-refresh@0.4.3: {} react-shallow-renderer@16.15.0(react@16.14.0): @@ -25291,6 +26520,10 @@ snapshots: dependencies: tslib: 2.6.3 + rxjs@7.8.2: + dependencies: + tslib: 2.6.3 + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -25316,6 +26549,8 @@ snapshots: dependencies: ret: 0.1.15 + safe-stable-stringify@1.1.1: {} + safer-buffer@2.1.2: {} sane@4.1.0: @@ -25382,6 +26617,8 @@ snapshots: ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) + seedrandom@3.0.5: {} + select@1.1.2: optional: true @@ -25547,6 +26784,8 @@ snapshots: shell-quote@1.8.1: {} + shell-quote@1.8.3: {} + shelljs@0.8.5: dependencies: glob: 7.2.3 @@ -25567,6 +26806,12 @@ snapshots: signal-exit@4.1.0: {} + signale@1.4.0: + dependencies: + chalk: 2.4.2 + figures: 2.0.0 + pkg-conf: 2.1.0 + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 @@ -25664,6 +26909,11 @@ snapshots: ip-address: 9.0.5 smart-buffer: 4.2.0 + sonic-boom@1.4.1: + dependencies: + atomic-sleep: 1.0.0 + flatstr: 1.0.12 + sort-object-keys@1.1.3: {} sort-package-json@2.10.0: @@ -26720,7 +27970,7 @@ snapshots: update-browserslist-db@1.1.0(browserslist@4.23.2): dependencies: browserslist: 4.23.2 - escalade: 3.1.2 + escalade: 3.2.0 picocolors: 1.1.1 update-browserslist-db@1.1.1(browserslist@4.24.2): @@ -26758,6 +28008,10 @@ snapshots: dependencies: punycode: 2.3.1 + uri-template-lite@22.9.0: {} + + urijs@1.19.11: {} + urix@0.1.0: {} url-join@4.0.1: {} @@ -26832,6 +28086,8 @@ snapshots: utila@0.4.0: {} + utility-types@3.11.0: {} + utils-merge@1.0.1: {} uuid-browser@3.1.0: {} @@ -26865,6 +28121,21 @@ snapshots: validate-npm-package-name@5.0.1: {} + validate.io-array@1.0.6: {} + + validate.io-function@1.0.2: {} + + validate.io-integer-array@1.0.0: + dependencies: + validate.io-array: 1.0.6 + validate.io-integer: 1.0.5 + + validate.io-integer@1.0.5: + dependencies: + validate.io-number: 1.0.3 + + validate.io-number@1.0.3: {} + vary@1.1.2: {} vendors@1.0.4: {} @@ -26883,6 +28154,16 @@ snapshots: unist-util-stringify-position: 2.0.3 vfile-message: 2.0.4 + vite@5.4.21(@types/node@20.14.11)(terser@5.31.3): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.49 + rollup: 4.27.4 + optionalDependencies: + '@types/node': 20.14.11 + fsevents: 2.3.3 + terser: 5.31.3 + vlq@1.0.1: {} vm-browserify@1.1.2: {} @@ -27087,6 +28368,8 @@ snapshots: whatwg-mimetype@2.3.0: {} + whatwg-mimetype@3.0.0: {} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -27274,7 +28557,7 @@ snapshots: yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -27284,7 +28567,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index cd28971..1a26b9a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - 'packages/*' + - 'packages/*/example' - 'internal/*' From 06d760ffbd836f8ec6ebaa239ee3aea54cbd4b2b Mon Sep 17 00:00:00 2001 From: Viktor Kulyabin Date: Sun, 1 Mar 2026 15:10:35 +0200 Subject: [PATCH 2/9] fix(pathfinder): update ui styles --- .../pathfinder-web/src/app/pathfinder.tsx | 239 +++++++++++++----- .../pathfinder-web/src/shared/hooks/index.ts | 2 + .../src/shared/hooks/use-drag-position.ts | 70 +++++ .../src/shared/hooks/use-panel-resize.ts | 78 ++++++ .../pathfinder-web/src/shared/theme/theme.ts | 10 + .../ui/atoms/panel-button/panel-button.tsx | 36 ++- .../atoms/scroll-wrapper/scroll-wrapper.tsx | 14 +- .../src/shared/ui/icons/gears-icon.tsx | 6 +- .../src/shared/ui/icons/index.ts | 6 + .../shared/ui/icons/panel-position-icons.tsx | 89 +++++++ .../src/shared/ui/molecules/header/header.tsx | 147 +++++++++-- .../ui/molecules/radio-group/radio-group.tsx | 11 +- .../endpoints-list/endpoints-list.tsx | 150 ++++++----- .../src/shared/ui/organisms/panel/panel.tsx | 18 +- 14 files changed, 698 insertions(+), 178 deletions(-) create mode 100644 packages/pathfinder-web/src/shared/hooks/use-drag-position.ts create mode 100644 packages/pathfinder-web/src/shared/hooks/use-panel-resize.ts create mode 100644 packages/pathfinder-web/src/shared/ui/icons/panel-position-icons.tsx diff --git a/packages/pathfinder-web/src/app/pathfinder.tsx b/packages/pathfinder-web/src/app/pathfinder.tsx index 2717871..a3d34ff 100644 --- a/packages/pathfinder-web/src/app/pathfinder.tsx +++ b/packages/pathfinder-web/src/app/pathfinder.tsx @@ -5,6 +5,7 @@ import React, { useMemo, useState, } from 'react' +import ReactDOM from 'react-dom' import styled, { css, ThemeProvider } from 'styled-components' import { theme } from '../shared/theme' @@ -18,6 +19,7 @@ import { import { addConsoleActivation } from '../features/hidden-activation' import { useRequestInterception } from '../processes' import { parseHeaders } from '../shared/lib' +import { usePanelResize, useDragPosition } from '../shared/hooks' import { DataResolver, DataStorage, @@ -31,12 +33,9 @@ import { createPathFinder } from '../lib' import { TUrlHeaders } from '../shared/ui/organisms/endpoints-list/types' import { getEndpointsHeaders } from '../shared/lib/helpers' -type ButtonPosition = { - left?: string - right?: string - top?: string - bottom?: string -} +export type PanelPosition = 'bottom' | 'top' | 'left' | 'right' + +const POSITION_KEY = 'pathfinder-panel-position' type PathfinderProviderProps = { children: JSX.Element @@ -45,59 +44,119 @@ type PathfinderProviderProps = { defaultSpecs?: unknown[] dataKey: string active?: boolean - buttonPosition?: ButtonPosition } -const ActionWrapper = styled.div` +const ActionWrapper = styled.div<{ $x: number; $y: number; hidden?: boolean }>` position: fixed; - right: ${({ right }) => right || '9px'}; - bottom: ${({ bottom }) => bottom || '9px'}; - ${({ left }) => - left - ? css` - left: ${left}; - ` - : undefined} - ${({ top }) => - top - ? css` - top: ${top}; - ` - : undefined} + left: ${({ $x }) => $x}px; + top: ${({ $y }) => $y}px; z-index: 9999999; + touch-action: none; + user-select: none; display: ${({ hidden }) => (hidden ? 'none' : 'block')}; ` -const Container = styled.div` +const PanelShell = styled.div<{ $position: PanelPosition; $size: number }>` position: fixed; z-index: 9999; - left: 0; - top: 0; - width: 100%; - height: 100%; -` - -const Content = styled.div` - position: relative; - z-index: 25; - margin: 24px; - height: 90%; + background-color: ${({ theme }) => theme.colors.panel.bg}; + display: flex; + flex-direction: column; + overflow: hidden; * { box-sizing: border-box; font-family: sans-serif; } + + ${({ $position, $size }) => { + switch ($position) { + case 'bottom': + return css` + bottom: 0; + left: 0; + right: 0; + height: min(${$size}px, 85vh); + border-top: 1px solid; + padding-bottom: env(safe-area-inset-bottom, 0px); + ` + case 'top': + return css` + top: 0; + left: 0; + right: 0; + height: min(${$size}px, 85vh); + border-bottom: 1px solid; + ` + case 'left': + return css` + top: 0; + left: 0; + bottom: 0; + width: min(${$size}px, 85vw); + border-right: 1px solid; + ` + case 'right': + return css` + top: 0; + right: 0; + bottom: 0; + width: min(${$size}px, 85vw); + border-left: 1px solid; + ` + } + }} + border-color: ${({ theme }) => theme.colors.panel.border}; ` -const Overlay = styled.div` +const ResizeHandle = styled.div<{ $position: PanelPosition }>` position: absolute; - left: 0; - top: 0; - z-index: 20; - width: 100dvw; - height: 100dvh; - background-color: ${({ theme }) => theme.colors.decorative.dark.translucent}; - backdrop-filter: blur(3px); + background: ${({ theme }) => theme.colors.panel.handleBg}; + touch-action: none; + transition: background 0.15s; + z-index: 1; + flex-shrink: 0; + + &:hover { + background: ${({ theme }) => theme.colors.panel.handleHover}; + } + + ${({ $position }) => { + switch ($position) { + case 'bottom': + return css` + top: 0; + left: 0; + right: 0; + height: 4px; + cursor: ns-resize; + ` + case 'top': + return css` + bottom: 0; + left: 0; + right: 0; + height: 4px; + cursor: ns-resize; + ` + case 'left': + return css` + top: 0; + right: 0; + bottom: 0; + width: 4px; + cursor: ew-resize; + ` + case 'right': + return css` + top: 0; + left: 0; + bottom: 0; + width: 4px; + cursor: ew-resize; + ` + } + }} ` const toPanelUrl = (url: UrlSpec): TPanelUrl => ({ @@ -119,7 +178,6 @@ export const Pathfinder = ({ storage, dataKey, defaultSpecs, - buttonPosition, active, }: PathfinderProviderProps) => { const module = useMemo(() => { @@ -141,6 +199,34 @@ export const Pathfinder = ({ const [isOpen, setOpen] = useState(false) const [isActive, setActive] = useState(active) + const [panelPosition, setPanelPosition] = useState(() => { + if (typeof localStorage === 'undefined') return 'bottom' + const stored = localStorage.getItem(POSITION_KEY) + return (stored as PanelPosition) || 'bottom' + }) + + const [portalRoot] = useState(() => { + const el = document.createElement('div') + el.setAttribute('id', 'pathfinder-portal-root') + return el + }) + + useEffect(() => { + document.body.appendChild(portalRoot) + return () => { + document.body.removeChild(portalRoot) + } + }, [portalRoot]) + + const { size: panelSize, onPointerDown: onDragPointerDown } = + usePanelResize(panelPosition) + + const { + pos: buttonPos, + didDrag, + onPointerDown: onButtonPointerDown, + } = useDragPosition() + useEffect(() => { addConsoleActivation(setActive) }, [setActive]) @@ -151,6 +237,15 @@ export const Pathfinder = ({ setOpen(prevState => !prevState) }, []) + const handleToggleIfNotDragged = useCallback(() => { + if (!didDrag.current) handleToggle() + }, [handleToggle, didDrag]) + + const handleChangePosition = useCallback((pos: PanelPosition) => { + setPanelPosition(pos) + localStorage.setItem(POSITION_KEY, pos) + }, []) + const handleChangeDefaultEnv = (envId: string | null, specId: string) => { module.setGlobalEnv(envId, specId) } @@ -171,6 +266,7 @@ export const Pathfinder = ({ const endpoints = getEndpointsHeaders(getLocalEndpointHeader, specs) setEndpointsHeaders(endpoints) } + useEffect(() => { if (defaultSpecs) { loadSpec(defaultSpecs) @@ -221,7 +317,6 @@ export const Pathfinder = ({ specId: string, ) => { const headers = parseHeaders(value) - module.setEndpointHeaders(id, headers, specId) setEndpointsHeaders(prev => ({ ...prev, [specId]: { [id]: value } })) } @@ -229,28 +324,42 @@ export const Pathfinder = ({ return (
{children}
-
) } diff --git a/packages/pathfinder-web/src/shared/hooks/index.ts b/packages/pathfinder-web/src/shared/hooks/index.ts index 015932c..9b9677c 100644 --- a/packages/pathfinder-web/src/shared/hooks/index.ts +++ b/packages/pathfinder-web/src/shared/hooks/index.ts @@ -1,2 +1,4 @@ export { useClickOutside } from './use-click-outside' export { useClipboard } from './use-clipboard' +export { usePanelResize } from './use-panel-resize' +export { useDragPosition } from './use-drag-position' diff --git a/packages/pathfinder-web/src/shared/hooks/use-drag-position.ts b/packages/pathfinder-web/src/shared/hooks/use-drag-position.ts new file mode 100644 index 0000000..b297390 --- /dev/null +++ b/packages/pathfinder-web/src/shared/hooks/use-drag-position.ts @@ -0,0 +1,70 @@ +import { useCallback, useRef, useState } from 'react' +import React from 'react' + +const BUTTON_POSITION_KEY = 'pathfinder-button-position' +const DRAG_THRESHOLD = 5 +const BUTTON_SIZE = 40 + +type Position = { x: number; y: number } + +const getInitialPosition = (): Position => { + if (typeof localStorage !== 'undefined') { + const stored = localStorage.getItem(BUTTON_POSITION_KEY) + if (stored) { + try { + return JSON.parse(stored) as Position + } catch { + // ignore + } + } + } + return { + x: window.innerWidth - BUTTON_SIZE - 9, + y: window.innerHeight - BUTTON_SIZE - 9, + } +} + +export const useDragPosition = () => { + const [pos, setPos] = useState(() => getInitialPosition()) + const didDrag = useRef(false) + + const onPointerDown = useCallback( + (e: React.PointerEvent) => { + didDrag.current = false + const offsetX = e.clientX - pos.x + const offsetY = e.clientY - pos.y + const startPointerX = e.clientX + const startPointerY = e.clientY + + const clamp = (x: number, y: number): Position => ({ + x: Math.max(0, Math.min(window.innerWidth - BUTTON_SIZE, x)), + y: Math.max(0, Math.min(window.innerHeight - BUTTON_SIZE, y)), + }) + + const onMove = (ev: PointerEvent) => { + const dx = ev.clientX - startPointerX + const dy = ev.clientY - startPointerY + if (Math.abs(dx) > DRAG_THRESHOLD || Math.abs(dy) > DRAG_THRESHOLD) { + didDrag.current = true + } + setPos(clamp(ev.clientX - offsetX, ev.clientY - offsetY)) + } + + const onUp = (ev: PointerEvent) => { + if (didDrag.current) { + const finalPos = clamp(ev.clientX - offsetX, ev.clientY - offsetY) + setPos(finalPos) + localStorage.setItem(BUTTON_POSITION_KEY, JSON.stringify(finalPos)) + } + document.removeEventListener('pointermove', onMove) + document.removeEventListener('pointerup', onUp) + } + + document.addEventListener('pointermove', onMove) + document.addEventListener('pointerup', onUp) + }, + [pos], + ) + + return { pos, didDrag, onPointerDown } +} diff --git a/packages/pathfinder-web/src/shared/hooks/use-panel-resize.ts b/packages/pathfinder-web/src/shared/hooks/use-panel-resize.ts new file mode 100644 index 0000000..1d17c62 --- /dev/null +++ b/packages/pathfinder-web/src/shared/hooks/use-panel-resize.ts @@ -0,0 +1,78 @@ +import React, { useCallback, useEffect, useState } from 'react' + +import { PanelPosition } from '../../app/pathfinder' + +const HEIGHT_KEY = 'pathfinder-panel-height' +const WIDTH_KEY = 'pathfinder-panel-width' +const MIN_SIZE = 200 + +const getInitialSize = (position: PanelPosition): number => { + const isVertical = position === 'bottom' || position === 'top' + const key = isVertical ? HEIGHT_KEY : WIDTH_KEY + + if (typeof localStorage === 'undefined') { + return isVertical + ? Math.round(window.innerHeight * 0.45) + : Math.min(360, Math.round(window.innerWidth * 0.8)) + } + + const stored = localStorage.getItem(key) + if (stored) return Number(stored) + + return isVertical + ? Math.round(window.innerHeight * 0.45) + : Math.min(360, Math.round(window.innerWidth * 0.8)) +} + +export const usePanelResize = (position: PanelPosition) => { + const [size, setSize] = useState(() => getInitialSize(position)) + + useEffect(() => { + setSize(getInitialSize(position)) + }, [position]) + + const onPointerDown = useCallback( + (e: React.PointerEvent) => { + e.preventDefault() + const startX = e.clientX + const startY = e.clientY + const startSize = size + const isVertical = position === 'bottom' || position === 'top' + + const calcDelta = (ev: PointerEvent): number => { + switch (position) { + case 'bottom': + return startY - ev.clientY + case 'top': + return ev.clientY - startY + case 'left': + return ev.clientX - startX + case 'right': + return startX - ev.clientX + } + } + + const clamp = (delta: number): number => { + const max = isVertical ? window.innerHeight : window.innerWidth + return Math.min(max - 48, Math.max(MIN_SIZE, startSize + delta)) + } + + const onMove = (ev: PointerEvent) => { + setSize(clamp(calcDelta(ev))) + } + + const onUp = (ev: PointerEvent) => { + const final = clamp(calcDelta(ev)) + localStorage.setItem(isVertical ? HEIGHT_KEY : WIDTH_KEY, String(final)) + document.removeEventListener('pointermove', onMove) + document.removeEventListener('pointerup', onUp) + } + + document.addEventListener('pointermove', onMove) + document.addEventListener('pointerup', onUp) + }, + [size, position], + ) + + return { size, onPointerDown } +} diff --git a/packages/pathfinder-web/src/shared/theme/theme.ts b/packages/pathfinder-web/src/shared/theme/theme.ts index d1169fd..095f586 100644 --- a/packages/pathfinder-web/src/shared/theme/theme.ts +++ b/packages/pathfinder-web/src/shared/theme/theme.ts @@ -22,6 +22,16 @@ export const theme = { blue: { normal: '#6699CC', translucent: 'rgba(102, 153, 204, 0.5)' }, red: { normal: '#E15A60', translucent: 'rgba(225, 90, 96, 0.5)' }, }, + panel: { + bg: '#141414', + surface: '#1f1f1f', + border: '#2e2e2e', + text: '#e0e0e0', + textMuted: '#888888', + accent: '#6699cc', + handleBg: 'rgba(255,255,255,0.12)', + handleHover: 'rgba(255,255,255,0.25)', + }, }, } diff --git a/packages/pathfinder-web/src/shared/ui/atoms/panel-button/panel-button.tsx b/packages/pathfinder-web/src/shared/ui/atoms/panel-button/panel-button.tsx index ce84e11..0905c60 100644 --- a/packages/pathfinder-web/src/shared/ui/atoms/panel-button/panel-button.tsx +++ b/packages/pathfinder-web/src/shared/ui/atoms/panel-button/panel-button.tsx @@ -1,23 +1,31 @@ import React from 'react' import styled from 'styled-components' +import { GearsIcon } from '../../icons' + const Button = styled.button` appearance: none; - width: 32px; - height: 32px; - background-color: transparent; - border-radius: 8px; - border-color: #fff5f5; - transition: 0.2s linear; + width: 40px; + height: 40px; + border-radius: 50%; + border: none; + background: #1f1f1f; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5); cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: + background 0.15s, + transform 0.15s; - svg path { - transition: 0.2s linear; + &:hover { + background: #2a2a2a; + transform: scale(1.05); } - &:focus, - &:hover { - background-color: #f5f4f4; + &:active { + transform: scale(0.95); } ` @@ -26,7 +34,11 @@ type Props = { } export const PanelButton = ({ onClick }: Props) => { - return + return ( + + ) } export default PanelButton diff --git a/packages/pathfinder-web/src/shared/ui/atoms/scroll-wrapper/scroll-wrapper.tsx b/packages/pathfinder-web/src/shared/ui/atoms/scroll-wrapper/scroll-wrapper.tsx index 215480a..aa9c7cb 100644 --- a/packages/pathfinder-web/src/shared/ui/atoms/scroll-wrapper/scroll-wrapper.tsx +++ b/packages/pathfinder-web/src/shared/ui/atoms/scroll-wrapper/scroll-wrapper.tsx @@ -1,16 +1,17 @@ import React, { ReactNode } from 'react' import styled from 'styled-components' -const Wrapper = styled.div<{ $height?: string }>` +const Wrapper = styled.div` display: flex; flex-direction: column; align-items: stretch; justify-content: start; width: 100%; - height: 100%; - max-height: ${({ $height }) => ($height ? $height : '75vh')}; + flex: 1; + min-height: 0; padding: 8px; - overflow: scroll; + overflow: auto; + -webkit-overflow-scrolling: touch; scrollbar-width: thin; scrollbar-color: ${({ theme }) => theme.colors.decorative.medium.translucent} transparent; @@ -29,9 +30,8 @@ const Wrapper = styled.div<{ $height?: string }>` type Props = { children: ReactNode - height?: string } -export const ScrollWrapper = ({ children, height }: Props) => { - return {children} +export const ScrollWrapper = ({ children }: Props) => { + return {children} } diff --git a/packages/pathfinder-web/src/shared/ui/icons/gears-icon.tsx b/packages/pathfinder-web/src/shared/ui/icons/gears-icon.tsx index 586625f..a8f597d 100644 --- a/packages/pathfinder-web/src/shared/ui/icons/gears-icon.tsx +++ b/packages/pathfinder-web/src/shared/ui/icons/gears-icon.tsx @@ -2,15 +2,17 @@ import React from 'react' type Props = { size?: number + fill?: string } -export const GearsIcon = ({ size = 16 }: Props) => { +export const GearsIcon = ({ size = 16, fill = 'currentColor' }: Props) => { return ( + height={size} + fill={fill}> diff --git a/packages/pathfinder-web/src/shared/ui/icons/index.ts b/packages/pathfinder-web/src/shared/ui/icons/index.ts index 47bf2e9..882f2ce 100644 --- a/packages/pathfinder-web/src/shared/ui/icons/index.ts +++ b/packages/pathfinder-web/src/shared/ui/icons/index.ts @@ -6,3 +6,9 @@ export { SearchIcon } from './search-icon' export { ThinCloseIcon } from './thin-close-icon' export { ArrowDownIcon } from './arrow-down-icon' export { BoldCloseIcon } from './bold-close-icon' +export { + PanelBottomIcon, + PanelTopIcon, + PanelLeftIcon, + PanelRightIcon, +} from './panel-position-icons' diff --git a/packages/pathfinder-web/src/shared/ui/icons/panel-position-icons.tsx b/packages/pathfinder-web/src/shared/ui/icons/panel-position-icons.tsx new file mode 100644 index 0000000..08f70b4 --- /dev/null +++ b/packages/pathfinder-web/src/shared/ui/icons/panel-position-icons.tsx @@ -0,0 +1,89 @@ +import React from 'react' + +type Props = { + size?: number + fill?: string +} + +export const PanelBottomIcon = ({ + size = 16, + fill = 'currentColor', +}: Props) => ( + + + + +) + +export const PanelTopIcon = ({ size = 16, fill = 'currentColor' }: Props) => ( + + + + +) + +export const PanelLeftIcon = ({ size = 16, fill = 'currentColor' }: Props) => ( + + + + +) + +export const PanelRightIcon = ({ size = 16, fill = 'currentColor' }: Props) => ( + + + + +) diff --git a/packages/pathfinder-web/src/shared/ui/molecules/header/header.tsx b/packages/pathfinder-web/src/shared/ui/molecules/header/header.tsx index 9c938b9..81686b8 100644 --- a/packages/pathfinder-web/src/shared/ui/molecules/header/header.tsx +++ b/packages/pathfinder-web/src/shared/ui/molecules/header/header.tsx @@ -1,50 +1,145 @@ import React, { memo, MouseEventHandler, ReactNode } from 'react' import styled, { useTheme } from 'styled-components' +import { PanelPosition } from '../../../../app/pathfinder' import { CloseIcon } from '../../icons' -import { Button } from '../../atoms' +import { + PanelBottomIcon, + PanelLeftIcon, + PanelRightIcon, + PanelTopIcon, +} from '../../icons/panel-position-icons' const Wrapper = styled.div` display: flex; - padding: 18px 8px; + padding: 10px 12px; align-items: center; - justify-content: center; + justify-content: space-between; + gap: 8px; + flex-shrink: 0; + border-bottom: 1px solid ${({ theme }) => theme.colors.panel.border}; ` const Title = styled.h1` flex: 1 1 auto; margin: 0; + font-size: 14px; + font-weight: 600; + letter-spacing: 0.5px; + color: ${({ theme }) => theme.colors.panel.text}; ` -const ActionWrapper = styled.div` - flex: 0 0 auto; - align-self: flex-start; - margin-top: 0; - margin-right: 0; +const Controls = styled.div` + display: flex; + align-items: center; + gap: 4px; + flex-shrink: 0; ` +const PositionButton = styled.button<{ $active: boolean }>` + appearance: none; + border: none; + background: ${({ $active, theme }) => + $active ? theme.colors.panel.surface : 'transparent'}; + border-radius: 6px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + min-width: 44px; + min-height: 44px; + transition: background 0.15s; + + &:hover { + background: ${({ theme }) => theme.colors.panel.surface}; + } + + @media (min-width: 480px) { + min-width: 32px; + min-height: 32px; + } +` + +const CloseButton = styled.button` + appearance: none; + border: none; + background: transparent; + border-radius: 6px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + min-width: 44px; + min-height: 44px; + transition: background 0.15s; + margin-left: 4px; + + &:hover { + background: ${({ theme }) => theme.colors.panel.surface}; + } + + @media (min-width: 480px) { + min-width: 32px; + min-height: 32px; + } +` + +type PositionEntry = { + value: PanelPosition + Icon: React.ComponentType<{ size?: number; fill?: string }> +} + +const POSITIONS: PositionEntry[] = [ + { value: 'bottom', Icon: PanelBottomIcon }, + { value: 'top', Icon: PanelTopIcon }, + { value: 'left', Icon: PanelLeftIcon }, + { value: 'right', Icon: PanelRightIcon }, +] + type Props = { children: ReactNode onClose: MouseEventHandler + position: PanelPosition + onChangePosition: (pos: PanelPosition) => void } -export const Header = memo(({ children, onClose }: Props) => { - const theme = useTheme() - - return ( - - {children} - - - - - ) -}) +export const Header = memo( + ({ children, onClose, position, onChangePosition }: Props) => { + const theme = useTheme() + + return ( + + {children} + + {POSITIONS.map(({ value, Icon }) => ( + onChangePosition(value)} + title={`Dock to ${value}`}> + + + ))} + + + + + + ) + }, +) export default Header diff --git a/packages/pathfinder-web/src/shared/ui/molecules/radio-group/radio-group.tsx b/packages/pathfinder-web/src/shared/ui/molecules/radio-group/radio-group.tsx index 6ef8987..6951f75 100644 --- a/packages/pathfinder-web/src/shared/ui/molecules/radio-group/radio-group.tsx +++ b/packages/pathfinder-web/src/shared/ui/molecules/radio-group/radio-group.tsx @@ -21,9 +21,11 @@ type TRadiogroupProps = { color?: TDigitalColors } -const Item = styled.div` +type TItemProps = { $compact?: boolean } + +const Item = styled.div` display: flex; - width: 100%; + width: ${({ $compact }) => ($compact ? 'auto' : '100%')}; justify-content: space-between; flex-direction: row; ` @@ -35,10 +37,11 @@ export const RadioGroup = ({ color, slot, onChange, -}: TRadiogroupProps) => ( + compact, +}: TRadiogroupProps & { compact?: boolean }) => ( {items.map((item, index) => ( - + void } -const Table = styled.table` +const List = styled.div` + display: flex; + flex-direction: column; width: 100%; - border-collapse: collapse; +` - tr { - transition: 0.2s linear; +const Row = styled.div` + display: flex; + flex-direction: column; + gap: 6px; + padding: 8px; + border-bottom: 1px solid ${({ theme }) => theme.colors.panel.border}; + transition: background 0.15s; - &:hover { - background: ${({ theme }) => theme.colors.decorative.light.normal}; - } + &:hover { + background: ${({ theme }) => theme.colors.panel.surface}; } +` - tr td { - padding: 8px; - border: 1px solid - ${({ theme }) => theme.colors.decorative.medium.translucent}; - } +const TopRow = styled.div` + display: flex; + align-items: flex-start; + gap: 8px; + min-width: 0; +` + +const MethodCell = styled.div` + flex-shrink: 0; + padding-top: 2px; +` + +const PathCell = styled.div` + flex: 1; + min-width: 0; ` -const EndpointName = styled.span` +const PathTemplate = styled.span` display: block; - font-size: 14px; - color: ${({ theme }) => theme.colors.decorative.medium.normal}; + font-family: monospace; + font-size: 12px; + color: ${({ theme }) => theme.colors.panel.text}; + word-break: break-all; +` + +const PathName = styled.span` + display: block; + font-size: 11px; + color: ${({ theme }) => theme.colors.panel.textMuted}; + margin-top: 2px; +` + +const ActionsRow = styled.div` + display: flex; + align-items: center; + justify-content: flex-end; + gap: 8px; + flex-wrap: wrap; ` export const EndpointsList = ({ @@ -54,52 +88,52 @@ export const EndpointsList = ({ useEffect(() => { setValues(initialValues) }, [initialValues]) + return ( - - - {items.map(item => ( - - - - - - - ))} - -
+ + {items.map(item => ( + + + - - {item.template} - {item.name} - - { - onHeadersChange(value, item.id) - }} - initialValue={headers[item.id]} - responses={item.responses} - /> - - { - onBasePathChange(id, value || undefined) - setValues(prev => ({ ...prev, [id]: value })) - }} - items={[ - ...environments, - { - label: 'Global', - value: '', - }, - ]} - /> -
+ + + {item.template} + {item.name && {item.name}} + + + + { + onHeadersChange(value, item.id) + }} + initialValue={headers[item.id]} + responses={item.responses} + /> + { + onBasePathChange(id, value || undefined) + setValues(prev => ({ ...prev, [id]: value })) + }} + items={[ + ...environments, + { + label: 'Global', + value: '', + }, + ]} + /> + + + ))} + ) } diff --git a/packages/pathfinder-web/src/shared/ui/organisms/panel/panel.tsx b/packages/pathfinder-web/src/shared/ui/organisms/panel/panel.tsx index 3bc494f..4590c92 100644 --- a/packages/pathfinder-web/src/shared/ui/organisms/panel/panel.tsx +++ b/packages/pathfinder-web/src/shared/ui/organisms/panel/panel.tsx @@ -14,14 +14,15 @@ import { Header as THeader, StrRecord, UrlMethod } from '../../../../types' import { SpecPanel } from '../spec-panel' import { stringifyHeaders } from '../../../lib/stringify-headers' import { filterPath, getData } from './helpers' +import { PanelPosition } from '../../../../app/pathfinder' const Wrapper = styled.div` - background-color: ${({ theme }) => theme.colors.main.light.normal}; - border-radius: 16px; - padding: 0 12px; + background-color: ${({ theme }) => theme.colors.panel.bg}; + color: ${({ theme }) => theme.colors.panel.text}; height: 100%; display: flex; flex-direction: column; + overflow: hidden; ` export type Path = { @@ -42,6 +43,8 @@ type Props = { onChangeDefaultHeaders: (headers: string, specId: string) => void onChangeEndpointHeaders: THeadersChangeHandler onResetOptions: () => void + position: PanelPosition + onChangePosition: (pos: PanelPosition) => void } export const Panel = ({ @@ -57,6 +60,8 @@ export const Panel = ({ onChangeDefaultHeaders, onChangeEndpointHeaders, onResetOptions, + position, + onChangePosition, }: Props) => { const [defaultEnv, setDefaultValue] = useState>(defaultEnvId) @@ -142,7 +147,12 @@ export const Panel = ({ return ( -
PathFinder
+
+ PathFinder +
Date: Sun, 1 Mar 2026 16:57:10 +0200 Subject: [PATCH 3/9] fix(pathfinder): update panel ui --- .../example/pathfinder/core.json | 12 + .../pathfinder-web/src/app/pathfinder.tsx | 19 ++ .../src/shared/ui/atoms/tab/tab.tsx | 31 +- .../atoms/method-select/method-select.tsx | 46 ++- .../molecules/search-input/search-input.tsx | 26 +- .../ui/molecules/env-select/env-select.tsx | 46 +++ .../shared/ui/molecules/env-select/index.ts | 1 + .../src/shared/ui/molecules/index.ts | 1 + .../key-value-field/key-value-field.tsx | 323 +++++++++++++----- .../src/shared/ui/molecules/tabs/tabs.tsx | 30 +- .../endpoints-list/endpoints-list.tsx | 9 +- .../ui/organisms/panel/helpers/index.ts | 19 +- .../src/shared/ui/organisms/panel/panel.tsx | 32 +- .../ui/organisms/spec-panel/spec-panel.tsx | 39 +-- 14 files changed, 487 insertions(+), 147 deletions(-) create mode 100644 packages/pathfinder-web/src/shared/ui/molecules/env-select/env-select.tsx create mode 100644 packages/pathfinder-web/src/shared/ui/molecules/env-select/index.ts diff --git a/packages/pathfinder-web/example/pathfinder/core.json b/packages/pathfinder-web/example/pathfinder/core.json index 26079f3..8c48430 100644 --- a/packages/pathfinder-web/example/pathfinder/core.json +++ b/packages/pathfinder-web/example/pathfinder/core.json @@ -55,6 +55,18 @@ "page": 22, "pageSize": 2 } + }, + "happy": { + "value": { + "id": "2323-22", + "firstName": "Happy", + "lastName": "Path", + "email": "ivan.petrov@example.com", + "phone": "+7 999 123-45-67", + "status": "active", + "page": 22, + "pageSize": 2 + } } } } diff --git a/packages/pathfinder-web/src/app/pathfinder.tsx b/packages/pathfinder-web/src/app/pathfinder.tsx index a3d34ff..81f5835 100644 --- a/packages/pathfinder-web/src/app/pathfinder.tsx +++ b/packages/pathfinder-web/src/app/pathfinder.tsx @@ -185,6 +185,7 @@ export const Pathfinder = ({ }, [resolver, storage]) const [spec, setSpec] = useState(module.getSpecs()) + const [defaultSpecIds, setDefaultSpecIds] = useState>(new Set()) const [globalHeaders, setGlobalHeaders] = useState>( module.getGlobalHeaders(), ) @@ -270,6 +271,10 @@ export const Pathfinder = ({ useEffect(() => { if (defaultSpecs) { loadSpec(defaultSpecs) + const specs = module.getSpecs() + if (specs) { + setDefaultSpecIds(new Set(specs.map(s => s.id))) + } } }, []) @@ -286,6 +291,18 @@ export const Pathfinder = ({ setSpec(module.getSpecs()) } + const handleRemoveSpec = (specId: string) => { + // Don't allow removing default specs + if (defaultSpecIds.has(specId)) { + return + } + const updatedSpecs = spec?.filter(s => s.id !== specId) || [] + setSpec(updatedSpecs) + const getLocalEndpointHeader = module.getEndpointHeaders + const endpoints = getEndpointsHeaders(getLocalEndpointHeader, updatedSpecs) + setEndpointsHeaders(endpoints) + } + const configs: TConfigs[] = [] const initialUrlValues: StrRecord = {} @@ -354,6 +371,8 @@ export const Pathfinder = ({ onResetOptions={handleOnResetOptions} position={panelPosition} onChangePosition={handleChangePosition} + onRemoveSpec={handleRemoveSpec} + defaultSpecIds={defaultSpecIds} /> diff --git a/packages/pathfinder-web/src/shared/ui/atoms/tab/tab.tsx b/packages/pathfinder-web/src/shared/ui/atoms/tab/tab.tsx index ac9aeea..3151b3a 100644 --- a/packages/pathfinder-web/src/shared/ui/atoms/tab/tab.tsx +++ b/packages/pathfinder-web/src/shared/ui/atoms/tab/tab.tsx @@ -7,6 +7,7 @@ type Props = { count?: number isSelected?: boolean onClick?: () => void + onClose?: (e: React.MouseEvent) => void } const StyledButton = styled.button<{ isSelected?: boolean }>` @@ -38,7 +39,30 @@ const StyledButton = styled.button<{ isSelected?: boolean }>` cursor: pointer; ` -export const Tab = ({ children, count, onClick, isSelected }: Props) => { +const CloseButton = styled.button` + background: none; + border: none; + padding: 0; + margin-left: 4px; + cursor: pointer; + font-size: 14px; + line-height: 1; + color: inherit; + opacity: 0.6; + transition: opacity 0.2s; + + &:hover { + opacity: 1; + } +` + +export const Tab = ({ + children, + count, + onClick, + isSelected, + onClose, +}: Props) => { return ( {children} @@ -47,6 +71,11 @@ export const Tab = ({ children, count, onClick, isSelected }: Props) => { )} + {onClose && ( + + x + + )} ) } diff --git a/packages/pathfinder-web/src/shared/ui/flows/search-input/atoms/method-select/method-select.tsx b/packages/pathfinder-web/src/shared/ui/flows/search-input/atoms/method-select/method-select.tsx index d884bc5..241cf5f 100644 --- a/packages/pathfinder-web/src/shared/ui/flows/search-input/atoms/method-select/method-select.tsx +++ b/packages/pathfinder-web/src/shared/ui/flows/search-input/atoms/method-select/method-select.tsx @@ -1,9 +1,10 @@ -import React, { useState } from 'react' +import React, { useState, useRef } from 'react' import styled, { css } from 'styled-components' import { ArrowDownIcon } from '../../../../icons' import { Method } from '../../../../atoms' import { UrlMethod } from '../../../../../../types' +import { useClickOutside } from '../../../../../hooks' const Wrapper = styled.div` position: relative; @@ -32,6 +33,7 @@ const StyledText = styled.p` padding: 0; margin: 0; white-space: nowrap; + color: ${({ theme }) => theme.colors.panel.text}; ` const IconWrap = styled.div<{ isDropped: boolean }>` @@ -46,7 +48,7 @@ const IconWrap = styled.div<{ isDropped: boolean }>` const DropDown = styled.div` position: absolute; - background-color: #f5f5f7; + background-color: ${({ theme }) => theme.colors.panel.surface}; top: 43px; border-radius: 0 0 6px 6px; left: -12px; @@ -54,9 +56,11 @@ const DropDown = styled.div` width: 124px; z-index: 10; box-shadow: 0 5px 20px 0 rgba(12, 32, 62, 0.15); + border: 1px solid ${({ theme }) => theme.colors.panel.border}; + border-top: none; ` -const DropDownItem = styled.div` +const DropDownItem = styled.div<{ $active?: boolean }>` height: 40px; padding: 0 10px; width: 100%; @@ -64,35 +68,45 @@ const DropDownItem = styled.div` align-items: center; transition: background-color 0.2s; cursor: pointer; + background-color: ${({ theme, $active }) => + $active ? (theme.colors.panel.accent ?? '#4f8ef7') : 'transparent'}; + color: ${({ theme, $active }) => + $active ? '#fff' : theme.colors.panel.text}; &:hover { - background-color: rgba(255, 255, 255, 0.7); + background-color: ${({ theme }) => theme.colors.panel.bg}; } ` type Props = { methods?: UrlMethod[] + value: UrlMethod | null onSelectMethod: (method: UrlMethod | null) => void } -export const MethodSelect = ({ methods, onSelectMethod }: Props) => { - const [selectedMethod, setSelectedMethod] = useState(null) +export const MethodSelect = ({ methods, value, onSelectMethod }: Props) => { const [isDropped, setIsDropped] = useState(false) + const wrapperRef = useRef(null) + + useClickOutside({ + ref: wrapperRef, + handler: () => setIsDropped(false), + flag: isDropped, + }) const onHandleSelect = (method: UrlMethod | null) => { onSelectMethod(method) - setSelectedMethod(method) setIsDropped(false) } return ( - + { setIsDropped(prevState => !prevState) }}> - {selectedMethod ?? 'All'} + {value ? : All} @@ -100,16 +114,16 @@ export const MethodSelect = ({ methods, onSelectMethod }: Props) => { {isDropped && ( { - onSelectMethod(null) - setSelectedMethod(null) - setIsDropped(false) - }}> + $active={value === null} + onClick={() => onHandleSelect(null)}> All {methods && - methods.map((method, index) => ( - onHandleSelect(method)} key={index}> + methods.map(method => ( + onHandleSelect(method)} + key={method}> ))} diff --git a/packages/pathfinder-web/src/shared/ui/flows/search-input/molecules/search-input/search-input.tsx b/packages/pathfinder-web/src/shared/ui/flows/search-input/molecules/search-input/search-input.tsx index d425e14..134121e 100644 --- a/packages/pathfinder-web/src/shared/ui/flows/search-input/molecules/search-input/search-input.tsx +++ b/packages/pathfinder-web/src/shared/ui/flows/search-input/molecules/search-input/search-input.tsx @@ -10,7 +10,7 @@ const Wrapper = styled.div` position: relative; flex-direction: row; height: 48px; - background-color: ${({}) => '#F5F5F7'}; + background-color: ${({ theme }) => theme.colors.panel.surface}; border-radius: 8px; padding: 0 12px; margin: 8px; @@ -21,11 +21,16 @@ const StyledInput = styled.input` background-color: transparent; border: none; outline: none; - width: 300px; - margin-right: 50px; + flex: 1; + min-width: 100px; height: 25px; font-size: 16px; user-select: none; + color: ${({ theme }) => theme.colors.panel.text}; + + &::placeholder { + color: ${({ theme }) => theme.colors.panel.textMuted}; + } ` const CloseIconWrap = styled.div` @@ -34,10 +39,15 @@ const CloseIconWrap = styled.div` height: 24px; right: 10px; cursor: pointer; + color: ${({ theme }) => theme.colors.panel.textMuted}; + + &:hover { + color: ${({ theme }) => theme.colors.panel.text}; + } ` const Divider = styled.div` - background-color: #8e8e90; + background-color: ${({ theme }) => theme.colors.panel.border}; width: 1px; height: 100%; margin: 0 8px; @@ -47,6 +57,7 @@ const Divider = styled.div` type Props = { value: string methods: UrlMethod[] + selectedMethod: UrlMethod | null onClearHandler: () => void onSelectMethod: (method: UrlMethod | null) => void onHandleChange: (value: string) => void @@ -55,13 +66,18 @@ type Props = { export const SearchInput = ({ value, methods, + selectedMethod, onClearHandler, onSelectMethod, onHandleChange, }: Props) => { return ( - + onHandleChange(e.target.value)} diff --git a/packages/pathfinder-web/src/shared/ui/molecules/env-select/env-select.tsx b/packages/pathfinder-web/src/shared/ui/molecules/env-select/env-select.tsx new file mode 100644 index 0000000..dbfc37f --- /dev/null +++ b/packages/pathfinder-web/src/shared/ui/molecules/env-select/env-select.tsx @@ -0,0 +1,46 @@ +import React from 'react' +import styled from 'styled-components' + +type TOption = { + label: string + value: string +} + +type Props = { + id: string + value: string + options: TOption[] + onChange: (id: string, value: string) => void +} + +const Select = styled.select<{ $isActive: boolean }>` + font-size: 11px; + padding: 4px 8px; + border-radius: 6px; + border: 1px solid + ${({ theme, $isActive }) => + $isActive ? '#f5a623' : theme.colors.panel.border}; + background: ${({ theme }) => theme.colors.panel.bg}; + color: ${({ theme, $isActive }) => + $isActive ? '#f5a623' : theme.colors.panel.text}; + cursor: pointer; + outline: none; + transition: border-color 0.15s; + + &:hover { + border-color: ${({ theme }) => theme.colors.panel.accent}; + } +` + +export const EnvSelect = ({ id, value, options, onChange }: Props) => ( + +) diff --git a/packages/pathfinder-web/src/shared/ui/molecules/env-select/index.ts b/packages/pathfinder-web/src/shared/ui/molecules/env-select/index.ts new file mode 100644 index 0000000..9e88850 --- /dev/null +++ b/packages/pathfinder-web/src/shared/ui/molecules/env-select/index.ts @@ -0,0 +1 @@ +export { EnvSelect } from './env-select' diff --git a/packages/pathfinder-web/src/shared/ui/molecules/index.ts b/packages/pathfinder-web/src/shared/ui/molecules/index.ts index e217f75..39a3fc1 100644 --- a/packages/pathfinder-web/src/shared/ui/molecules/index.ts +++ b/packages/pathfinder-web/src/shared/ui/molecules/index.ts @@ -2,3 +2,4 @@ export { Header } from './header' export { RadioGroup } from './radio-group' export { UploadSpec } from './upload-spec' export { Tabs } from './tabs' +export { EnvSelect } from './env-select' diff --git a/packages/pathfinder-web/src/shared/ui/molecules/key-value-field/key-value-field.tsx b/packages/pathfinder-web/src/shared/ui/molecules/key-value-field/key-value-field.tsx index 3c504d8..a24c69c 100644 --- a/packages/pathfinder-web/src/shared/ui/molecules/key-value-field/key-value-field.tsx +++ b/packages/pathfinder-web/src/shared/ui/molecules/key-value-field/key-value-field.tsx @@ -2,14 +2,18 @@ import React, { useRef, useState } from 'react' import styled from 'styled-components' import { useClickOutside } from '../../../hooks' -import { Button, Box, Badge } from '../../atoms' -import { RadioGroup } from '../radio-group' +import { Button, Box } from '../../atoms' type TResponse = { code: string examples: string[] } +type THeader = { + key: string + value: string +} + type Props = { title: string id: string @@ -19,6 +23,27 @@ type Props = { onApply: (value: string) => void } +const parseHeadersString = (str?: string): THeader[] => { + if (!str || !str.trim()) return [] + return str + .split('\n') + .map(line => { + const idx = line.indexOf(': ') + if (idx === -1) return null + return { + key: line.slice(0, idx).trim(), + value: line.slice(idx + 2).trim(), + } + }) + .filter((h): h is THeader => h !== null && h.key !== '') +} + +const serializeHeaders = (headers: THeader[]): string => + headers + .filter(h => h.key.trim() !== '') + .map(h => `${h.key}: ${h.value}`) + .join('\n') + const BackGround = styled.div<{ isVisible: boolean }>` position: fixed; height: 100dvh; @@ -26,14 +51,17 @@ const BackGround = styled.div<{ isVisible: boolean }>` left: 0; top: 0; z-index: 1; - background-color: #1c1c1e; - opacity: 0.7; + background-color: rgba(0, 0, 0, 0.7); display: ${({ isVisible }) => (isVisible ? 'flex' : 'none')}; ` const Wrapper = styled.div` position: relative; + display: flex; + align-items: center; + gap: 4px; ` + const DropArea = styled.div` position: fixed; top: 50%; @@ -41,33 +69,115 @@ const DropArea = styled.div` z-index: 100; padding: 16px; box-shadow: 3px 3px 5px rgb(0 0 0 / 21%); - background-color: rgb(255 255 255); + background-color: ${({ theme }) => theme.colors.panel.bg}; + color: ${({ theme }) => theme.colors.panel.text}; transform: translate(-50%, -50%); max-width: 80dvw; max-height: 80dvh; - min-height: 40dvh; - min-width: 40dvh; + min-width: 360px; overflow: auto; border-radius: 16px; + border: 1px solid ${({ theme }) => theme.colors.panel.border}; ` -const RadioWrapper = styled.div` +const ModalTitle = styled.div` + font-size: 16px; + font-weight: 600; + margin-bottom: 12px; + color: ${({ theme }) => theme.colors.panel.text}; +` + +const HeaderRow = styled.div` display: flex; - flex-direction: column; - align-items: flex-start; - width: 100%; - gap: 8px; - margin: 8px 0px; + gap: 6px; + align-items: center; + margin-bottom: 6px; +` + +const KeyInput = styled.input` + flex: 1; + padding: 5px 8px; + border: 1px solid ${({ theme }) => theme.colors.panel.border}; + border-radius: 6px; + background: ${({ theme }) => theme.colors.panel.surface}; + color: ${({ theme }) => theme.colors.panel.text}; + font-size: 12px; + font-family: monospace; + outline: none; +` + +const ValueInput = styled(KeyInput)` + flex: 2; +` + +const DeleteBtn = styled.button` + background: none; + border: none; + cursor: pointer; + color: ${({ theme }) => theme.colors.panel.textMuted}; + font-size: 14px; + padding: 2px 4px; + border-radius: 4px; + &:hover { + color: ${({ theme }) => theme.colors.panel.text}; + } ` -const TextArea = styled.textarea` +const AddBtn = styled.button` + background: none; + border: 1px dashed ${({ theme }) => theme.colors.panel.border}; + border-radius: 6px; + color: ${({ theme }) => theme.colors.panel.textMuted}; + font-size: 12px; + padding: 5px 12px; + cursor: pointer; width: 100%; - min-height: 300px; - min-width: 200px; - margin: 8px 0; - padding: 8px; - border: 1px solid black; - border-radius: 8px; + margin-bottom: 12px; + &:hover { + color: ${({ theme }) => theme.colors.panel.text}; + } +` + +const QuickFillSection = styled.div` + margin-bottom: 12px; +` + +const QuickFillLabel = styled.div` + font-size: 11px; + color: ${({ theme }) => theme.colors.panel.textMuted}; + margin-bottom: 6px; +` + +const QuickFillRow = styled.div` + display: flex; + flex-wrap: wrap; + gap: 4px; + align-items: center; +` + +const QuickFillBtn = styled.button<{ $active?: boolean }>` + padding: 3px 8px; + border-radius: 6px; + border: 1px solid + ${({ theme, $active }) => + $active + ? (theme.colors.panel.accent ?? '#4f8ef7') + : theme.colors.panel.border}; + background: ${({ theme, $active }) => + $active ? (theme.colors.panel.accent ?? '#4f8ef7') : 'none'}; + color: ${({ theme, $active }) => + $active ? '#fff' : theme.colors.panel.text}; + font-size: 11px; + cursor: pointer; +` + +const ExampleSelect = styled.select` + font-size: 11px; + padding: 3px 6px; + border-radius: 6px; + border: 1px solid ${({ theme }) => theme.colors.panel.border}; + background: ${({ theme }) => theme.colors.panel.bg}; + color: ${({ theme }) => theme.colors.panel.text}; ` const ButtonWrapper = styled.div` @@ -79,19 +189,30 @@ const ButtonWrapper = styled.div` } ` -const headersString = (value: string, example?: string) => - `Prefer: code=${value} ${example ? `, example=${example}` : ''}` +const CountBadge = styled.span` + display: inline-flex; + align-items: center; + justify-content: center; + background: ${({ theme }) => theme.colors.digital?.green ?? '#22c55e'}; + color: #fff; + border-radius: 10px; + font-size: 10px; + font-weight: 600; + padding: 1px 6px; + min-width: 18px; +` export const KeyValueField = ({ initialValue, responses, id, title, - placeholder, onApply, }: Props) => { const [isOpen, setIsOpen] = useState(false) - const [value, setValue] = useState(initialValue) + const [headers, setHeaders] = useState(() => + parseHeadersString(initialValue), + ) const [currCode, setCurrCode] = useState(undefined) const wrapperRef = useRef(null) @@ -103,72 +224,114 @@ export const KeyValueField = ({ flag: isOpen, }) - const onApplyHandler = () => { - onApply(value) - setIsOpen(false) + const handleOpen = () => { + setHeaders(parseHeadersString(initialValue)) + setCurrCode(undefined) + setIsOpen(true) } - const renderExamplesBlock = (responses: TResponse[]) => { - return ( - <> - {responses.map(response => { - const selectOption = response.examples.map(item => ( - - )) - const preferCode = response.code - return ( - - { - setValue(headersString(value)) - setCurrCode(preferCode) - }} - value={currCode} - slot={ - response.examples.length > 0 && - currCode === preferCode && ( - <> - - - ) - } - /> - - ) - })} - + + const updateHeader = (index: number, field: 'key' | 'value', val: string) => { + setHeaders(prev => + prev.map((h, i) => (i === index ? { ...h, [field]: val } : h)), ) } + const removeHeader = (index: number) => { + setHeaders(prev => prev.filter((_, i) => i !== index)) + } + + const addHeader = () => { + setHeaders(prev => [...prev, { key: '', value: '' }]) + } + + const setPreferHeader = (code: string, example?: string) => { + const preferValue = example + ? `code=${code}, example=${example}` + : `code=${code}` + setHeaders(prev => { + const idx = prev.findIndex(h => h.key.toLowerCase() === 'prefer') + if (idx !== -1) { + return prev.map((h, i) => + i === idx ? { ...h, value: preferValue } : h, + ) + } + return [...prev, { key: 'Prefer', value: preferValue }] + }) + } + + const onApplyHandler = () => { + onApply(serializeHeaders(headers)) + setIsOpen(false) + } + + const activeCount = headers.filter(h => h.key.trim() !== '').length + return ( - - {value && } + + {activeCount > 0 && {activeCount}} {isOpen && ( -
Headers definition
- {responses && renderExamplesBlock(responses)} -