diff --git a/.changeset/red-gifts-call.md b/.changeset/red-gifts-call.md
new file mode 100644
index 00000000..0ab12e8f
--- /dev/null
+++ b/.changeset/red-gifts-call.md
@@ -0,0 +1,8 @@
+---
+'stocked': patch
+'@reactive-forms/core': patch
+'pxth': patch
+'@reactive-forms/dom': patch
+---
+
+Moved stocked into monorepo
diff --git a/package.json b/package.json
index 7b4a5e59..4e065e0b 100644
--- a/package.json
+++ b/package.json
@@ -39,11 +39,11 @@
 	},
 	"size-limit": [
 		{
-			"path": "packages/core/dist/core.cjs.production.min.js",
+			"path": "packages/core/dist/index.js",
 			"limit": "30 KB"
 		},
 		{
-			"path": "packages/core/dist/core.esm.js",
+			"path": "packages/core/dist/index.mjs",
 			"limit": "30 KB"
 		}
 	]
diff --git a/packages/autosave/aqu.config.json b/packages/autosave/aqu.config.json
deleted file mode 100644
index bbb45584..00000000
--- a/packages/autosave/aqu.config.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-	"buildOptions": {
-		"target": ["es2019", "chrome58", "firefox57", "safari11", "edge18", "node12"],
-		"preserveSymlinks": false
-	},
-	"dtsBundleGeneratorOptions": {
-		"output": {
-			"inlineDeclareExternals": true
-		},
-		"libraries": {
-			"importedLibraries": ["stocked", "yup", "react", "@reactive-forms/core", "pxth"],
-			"allowedTypesLibraries": []
-		}
-	}
-}
diff --git a/packages/autosave/eslint.config.mjs b/packages/autosave/eslint.config.mjs
index cba6dd58..612edb90 100644
--- a/packages/autosave/eslint.config.mjs
+++ b/packages/autosave/eslint.config.mjs
@@ -2,7 +2,7 @@ import baseConfig from '@reactive-tools/eslint-config';
 
 export default [
 	{
-		ignores: ['**/dist', '**/node_modules', '**/*.config.js'],
+		ignores: ['**/dist', '**/node_modules', '**/*.config.js', '**/.tsup'],
 	},
 	...baseConfig,
 ];
diff --git a/packages/autosave/package.json b/packages/autosave/package.json
index c730dec9..2647541e 100644
--- a/packages/autosave/package.json
+++ b/packages/autosave/package.json
@@ -2,9 +2,19 @@
 	"name": "@reactive-forms/autosave",
 	"description": "> TODO: description",
 	"version": "0.11.1",
-	"main": "dist/index.js",
-	"module": "dist/autosave.esm.js",
-	"types": "dist/autosave.d.ts",
+	"main": "./dist/index.js",
+	"module": "./dist/index.mjs",
+	"types": "./dist/index.d.ts",
+	"exports": {
+		"import": {
+			"types": "./dist/index.d.mts",
+			"import": "./dist/index.mjs"
+		},
+		"require": {
+			"types": "./dist/index.d.ts",
+			"require": "./dist/index.js"
+		}
+	},
 	"homepage": "https://github.com/fracht/reactive-forms#readme",
 	"repository": "fracht/reactive-forms.git",
 	"author": "ReactiveForms team",
@@ -15,10 +25,10 @@
 		"directory": "prepared-package"
 	},
 	"scripts": {
-		"build": "aqu build && rimraf ./prepared-package && clean-publish",
-		"dev": "aqu watch",
-		"lint": "eslint .",
-		"lint:fix": "npm run lint --fix",
+		"build": "tsup && rimraf ./prepared-package && clean-publish",
+		"dev": "tsup --watch",
+		"lint": "eslint . && attw --pack .",
+		"lint:fix": "eslint . --fix",
 		"test": "jest --passWithNoTests",
 		"test:log-coverage": "jest --passWithNoTests --coverage --silent --ci --coverageReporters=text",
 		"test:watch": "jest --passWithNoTests --watch"
@@ -28,16 +38,19 @@
 		"tiny-invariant": "1.2.0"
 	},
 	"devDependencies": {
+		"@arethetypeswrong/cli": "^0.16.4",
 		"@babel/core": "7.19.6",
+		"@microsoft/api-extractor": "^7.47.11",
 		"@reactive-forms/core": "workspace:*",
 		"@reactive-tools/eslint-config": "workspace:*",
-		"@types/react": "18.0.23",
+		"@types/react": "18.3.12",
 		"aqu": "0.4.3",
 		"eslint": "^9.13.0",
 		"jest": "29.2.2",
-		"react": "18.2.0",
+		"react": "18.3.1",
 		"rimraf": "3.0.2",
 		"tslib": "2.3.1",
+		"tsup": "^8.3.5",
 		"typescript": "4.8.4"
 	},
 	"peerDependencies": {
diff --git a/packages/autosave/src/localSaveService.ts b/packages/autosave/src/localSaveService.ts
index 0caac041..6baf0248 100644
--- a/packages/autosave/src/localSaveService.ts
+++ b/packages/autosave/src/localSaveService.ts
@@ -4,7 +4,7 @@ import { AutoSaveService } from './AutoSaveService';
 
 const prefix = 'reactiveForms.';
 
-const isServer = () => typeof global.window === 'undefined';
+const isServer = () => !(typeof window !== 'undefined' && window.document);
 
 export const localSaveService: AutoSaveService<unknown> = {
 	save: (key, value) => {
diff --git a/packages/autosave/tsup.config.ts b/packages/autosave/tsup.config.ts
new file mode 100644
index 00000000..a4cb69aa
--- /dev/null
+++ b/packages/autosave/tsup.config.ts
@@ -0,0 +1,13 @@
+import { defineConfig } from 'tsup';
+
+export default defineConfig({
+	entry: ['./src/index.ts'],
+	experimentalDts: true,
+	bundle: true,
+	format: ['cjs', 'esm'],
+	treeshake: 'smallest',
+	tsconfig: './tsconfig.json',
+	define: {
+		'import.meta.vitest': 'undefined',
+	},
+});
diff --git a/packages/core/aqu.config.json b/packages/core/aqu.config.json
deleted file mode 100644
index cd4658b7..00000000
--- a/packages/core/aqu.config.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-	"buildOptions": {
-		"target": ["es2019", "chrome58", "firefox57", "safari11", "edge18", "node12"],
-		"preserveSymlinks": false
-	},
-	"dtsBundleGeneratorOptions": {
-		"libraries": {
-			"importedLibraries": ["stocked", "yup", "react", "pxth"],
-			"allowedTypesLibraries": []
-		}
-	}
-}
diff --git a/packages/core/eslint.config.mjs b/packages/core/eslint.config.mjs
index 313bf9db..192901f1 100644
--- a/packages/core/eslint.config.mjs
+++ b/packages/core/eslint.config.mjs
@@ -2,7 +2,7 @@ import baseConfig from '@reactive-tools/eslint-config';
 
 export default [
 	{
-		ignores: ['**/dist', '**/node_modules', '**/*.config.js'],
+		ignores: ['**/dist', '**/node_modules', '**/*.config.js', '**/prepared-package', '**/.tsup'],
 	},
 	...baseConfig,
 	{
diff --git a/packages/core/package.json b/packages/core/package.json
index c3d24b78..4eb9156c 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -2,23 +2,34 @@
 	"name": "@reactive-forms/core",
 	"description": "Core package of Reactive Forms framework",
 	"version": "0.11.1",
-	"main": "dist/index.js",
-	"module": "dist/core.esm.js",
-	"types": "dist/core.d.ts",
+	"type": "commonjs",
 	"bugs": "https://github.com/fracht/reactive-forms/issues",
 	"homepage": "https://github.com/fracht/reactive-forms#readme",
 	"repository": "fracht/reactive-forms.git",
 	"author": "ReactiveForms team",
 	"license": "MIT",
+	"main": "./dist/index.js",
+	"module": "./dist/index.mjs",
+	"types": "./dist/index.d.ts",
+	"exports": {
+		"import": {
+			"types": "./dist/index.d.mts",
+			"import": "./dist/index.mjs"
+		},
+		"require": {
+			"types": "./dist/index.d.ts",
+			"require": "./dist/index.js"
+		}
+	},
 	"publishConfig": {
 		"access": "public",
 		"directory": "prepared-package"
 	},
 	"scripts": {
-		"build": "aqu build && rimraf ./prepared-package && clean-publish",
-		"dev": "aqu watch --no-cleanup",
-		"lint": "eslint .",
-		"lint:fix": "npm run lint --fix",
+		"build": "tsup && rimraf ./prepared-package && clean-publish",
+		"dev": "tsup --watch",
+		"lint": "eslint . && attw --pack .",
+		"lint:fix": "eslint . --fix",
 		"test": "jest --passWithNoTests",
 		"test:log-coverage": "jest --passWithNoTests --coverage --silent --ci --coverageReporters=text",
 		"test:watch": "jest --passWithNoTests --watch"
@@ -26,26 +37,29 @@
 	"dependencies": {
 		"lodash": "4.17.21",
 		"lodash-es": "4.17.15",
-		"pxth": "0.7.0",
-		"stocked": "1.0.0-beta.33",
+		"pxth": "workspace:*",
+		"stocked": "workspace:*",
 		"tiny-invariant": "1.2.0"
 	},
 	"devDependencies": {
+		"@arethetypeswrong/cli": "^0.16.4",
 		"@babel/core": "7.19.6",
+		"@microsoft/api-extractor": "^7.47.11",
 		"@reactive-tools/eslint-config": "workspace:*",
 		"@testing-library/react": "13.4.0",
 		"@types/jest": "26.0.24",
 		"@types/lodash": "4.14.161",
 		"@types/node": "^18.11.18",
-		"@types/react": "18.0.23",
+		"@types/react": "18.3.12",
 		"aqu": "0.4.3",
 		"eslint": "^9.13.0",
 		"jest": "29.2.2",
-		"react": "18.2.0",
-		"react-dom": "18.2.0",
+		"react": "18.3.1",
+		"react-dom": "18.3.1",
 		"rimraf": "3.0.2",
 		"ts-jest": "29.0.3",
 		"tslib": "2.3.1",
+		"tsup": "^8.3.5",
 		"typescript": "4.8.4",
 		"yup": "0.32.9"
 	},
@@ -54,6 +68,5 @@
 	},
 	"files": [
 		"dist"
-	],
-	"source": "src/index.ts"
+	]
 }
diff --git a/packages/core/src/components/Field.tsx b/packages/core/src/components/Field.tsx
index 77715c2b..b1d13669 100644
--- a/packages/core/src/components/Field.tsx
+++ b/packages/core/src/components/Field.tsx
@@ -1,14 +1,14 @@
-import React from 'react';
+import React, { Fragment, ReactNode } from 'react';
 
 import { FieldConfig, useField } from '../hooks/useField';
 import { FieldContext } from '../typings/FieldContext';
 
 export type FieldProps<V> = FieldConfig<V> & {
-	children: (ctx: FieldContext<V>) => React.ReactNode;
+	children: (ctx: FieldContext<V>) => ReactNode;
 };
 
 export const Field = <V,>({ children, ...config }: FieldProps<V>) => {
 	const bag = useField(config);
 
-	return <React.Fragment>{children(bag)}</React.Fragment>;
+	return <Fragment>{children(bag)}</Fragment>;
 };
diff --git a/packages/core/src/hooks/useFieldValidator.ts b/packages/core/src/hooks/useFieldValidator.ts
index 7aea9c98..4a0591fc 100644
--- a/packages/core/src/hooks/useFieldValidator.ts
+++ b/packages/core/src/hooks/useFieldValidator.ts
@@ -1,7 +1,7 @@
 import { useEffect, useRef } from 'react';
 import merge from 'lodash/merge';
 import { Pxth } from 'pxth';
-import type { Schema } from 'yup';
+import type { BaseSchema } from 'yup';
 
 import { useFormContext } from './useFormContext';
 import { FieldValidator } from '../typings/FieldValidator';
@@ -12,7 +12,7 @@ export type UseFieldValidatorConfig<V> = FieldValidationProps<V> & { name: Pxth<
 
 export type FieldValidationProps<V> = {
 	validator?: FieldValidator<V>;
-	schema?: Schema<Partial<V> | V | undefined>;
+	schema?: BaseSchema<Partial<V> | V | undefined>;
 };
 
 export const useFieldValidator = <V>({ name, validator: validatorFn, schema }: UseFieldValidatorConfig<V>) => {
diff --git a/packages/core/src/hooks/useForm.ts b/packages/core/src/hooks/useForm.ts
index de7fee87..3139b847 100644
--- a/packages/core/src/hooks/useForm.ts
+++ b/packages/core/src/hooks/useForm.ts
@@ -6,7 +6,7 @@ import mergeWith from 'lodash/mergeWith';
 import { createPxth, deepGet, deepSet, Pxth } from 'pxth';
 import { BatchUpdate } from 'stocked';
 import invariant from 'tiny-invariant';
-import type { Schema } from 'yup';
+import type { BaseSchema } from 'yup';
 
 import { useFormControl } from './useFormControl';
 import { usePluginBagDecorators, usePluginConfigDecorators } from './usePlugins';
@@ -34,7 +34,7 @@ export type InitialFormStateConfig<Values extends object> = {
 };
 
 export interface ExtendableFormConfig<Values extends object> {
-	schema?: Schema<Partial<Values> | undefined>;
+	schema?: BaseSchema<Partial<Values> | undefined>;
 	onSubmit?: SubmitAction<Values>;
 	validateForm?: FieldValidator<Values>;
 	onValidationFailed?: (errors: FieldError<Values>) => void;
diff --git a/packages/core/src/utils/runYupSchema.ts b/packages/core/src/utils/runYupSchema.ts
index f7f36333..bc3afa9e 100644
--- a/packages/core/src/utils/runYupSchema.ts
+++ b/packages/core/src/utils/runYupSchema.ts
@@ -1,11 +1,12 @@
-import type { Schema, ValidateOptions } from 'yup';
+import type { BaseSchema } from 'yup';
+import { ValidateOptions } from 'yup/lib/types';
 
 import { isYupError } from './isYupError';
 import { yupToFormErrors } from './yupToFormErrors';
 import { FieldError } from '../typings/FieldError';
 
 export const runYupSchema = async <V>(
-	schema: Schema<Partial<V> | undefined>,
+	schema: BaseSchema<Partial<V> | undefined>,
 	value: V,
 	options?: ValidateOptions,
 ): Promise<FieldError<V> | undefined> => {
diff --git a/packages/core/tests/utils/runYupSchema.test.ts b/packages/core/tests/utils/runYupSchema.test.ts
index f848a2af..45846964 100644
--- a/packages/core/tests/utils/runYupSchema.test.ts
+++ b/packages/core/tests/utils/runYupSchema.test.ts
@@ -1,4 +1,4 @@
-import { array, number, object, Schema, string } from 'yup';
+import { array, BaseSchema, number, object, string } from 'yup';
 
 import { runYupSchema } from '../../src/utils/runYupSchema';
 
@@ -101,7 +101,7 @@ describe('array schema', () => {
 
 describe('throw not yup error', () => {
 	it('should throw unexpected error', async () => {
-		await expect(() => runYupSchema(null as unknown as Schema<string>, 'a')).rejects.toBeTruthy();
+		await expect(() => runYupSchema(null as unknown as BaseSchema<string>, 'a')).rejects.toBeTruthy();
 	});
 });
 
diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json
index b82f09dd..003225b7 100644
--- a/packages/core/tsconfig.json
+++ b/packages/core/tsconfig.json
@@ -1,24 +1,6 @@
 {
-	"compilerOptions": {
-		"outDir": "dist",
-		"module": "esnext",
-		"lib": ["dom", "esnext"],
-		"moduleResolution": "node",
-		"jsx": "react",
-		"sourceMap": true,
-		"declaration": true,
-		"esModuleInterop": true,
-		"noImplicitReturns": false,
-		"noImplicitThis": true,
-		"noImplicitAny": true,
-		"strictNullChecks": true,
-		"noUnusedLocals": true,
-		"noUnusedParameters": true,
-		"allowSyntheticDefaultImports": true,
-		"noFallthroughCasesInSwitch": true,
-		"strict": true,
-		"importHelpers": true,
-		"skipLibCheck": true
-	},
-	"include": ["src", "tests"]
-}
+    "references": [
+        { "path": "./tsconfig.lib.json" },
+        { "path": "./tsconfig.test.json" }
+    ]
+}
\ No newline at end of file
diff --git a/packages/core/tsconfig.lib.json b/packages/core/tsconfig.lib.json
new file mode 100644
index 00000000..09e51b58
--- /dev/null
+++ b/packages/core/tsconfig.lib.json
@@ -0,0 +1,25 @@
+{
+	"compilerOptions": {
+		"outDir": "dist",
+		"module": "esnext",
+		"lib": ["dom", "esnext"],
+		"moduleResolution": "node",
+		"jsx": "react",
+		"sourceMap": true,
+		"declaration": true,
+		"esModuleInterop": true,
+		"noImplicitReturns": false,
+		"noImplicitThis": true,
+		"noImplicitAny": true,
+		"strictNullChecks": true,
+		"noUnusedLocals": true,
+		"noUnusedParameters": true,
+		"allowSyntheticDefaultImports": true,
+		"noFallthroughCasesInSwitch": true,
+		"strict": true,
+		"importHelpers": true,
+		"skipLibCheck": true,
+		"composite": true
+	},
+	"include": ["src"]
+}
diff --git a/packages/core/tsconfig.test.json b/packages/core/tsconfig.test.json
index db81a272..db38d1c3 100644
--- a/packages/core/tsconfig.test.json
+++ b/packages/core/tsconfig.test.json
@@ -10,6 +10,9 @@
 		"alwaysStrict": false,
 		"jsx": "react",
 		"esModuleInterop": true,
-		"skipLibCheck": true
-	}
+		"skipLibCheck": true,
+		"composite": true
+	},
+	"include": ["tests"],
+	"references": [{ "path": "./tsconfig.lib.json" }]
 }
diff --git a/packages/core/tsup.config.ts b/packages/core/tsup.config.ts
new file mode 100644
index 00000000..7ddf5f27
--- /dev/null
+++ b/packages/core/tsup.config.ts
@@ -0,0 +1,13 @@
+import { defineConfig } from 'tsup';
+
+export default defineConfig({
+	entry: ['./src/index.ts'],
+	experimentalDts: true,
+	bundle: true,
+	format: ['cjs', 'esm'],
+	treeshake: 'smallest',
+	tsconfig: './tsconfig.lib.json',
+	define: {
+		'import.meta.vitest': 'undefined',
+	},
+});
diff --git a/packages/dom/aqu.config.json b/packages/dom/aqu.config.json
deleted file mode 100644
index bbb45584..00000000
--- a/packages/dom/aqu.config.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-	"buildOptions": {
-		"target": ["es2019", "chrome58", "firefox57", "safari11", "edge18", "node12"],
-		"preserveSymlinks": false
-	},
-	"dtsBundleGeneratorOptions": {
-		"output": {
-			"inlineDeclareExternals": true
-		},
-		"libraries": {
-			"importedLibraries": ["stocked", "yup", "react", "@reactive-forms/core", "pxth"],
-			"allowedTypesLibraries": []
-		}
-	}
-}
diff --git a/packages/dom/package.json b/packages/dom/package.json
index 00d3d779..f567350d 100644
--- a/packages/dom/package.json
+++ b/packages/dom/package.json
@@ -24,8 +24,8 @@
 		"test:watch": "jest --passWithNoTests --watch"
 	},
 	"dependencies": {
-		"pxth": "0.7.0",
-		"stocked": "1.0.0-beta.33",
+		"pxth": "workspace:*",
+		"stocked": "workspace:*",
 		"tiny-invariant": "1.2.0"
 	},
 	"devDependencies": {
@@ -34,15 +34,15 @@
 		"@reactive-tools/eslint-config": "workspace:*",
 		"@testing-library/react": "13.4.0",
 		"@types/jest": "26.0.24",
-		"@types/react": "18.0.23",
-		"@types/react-dom": "18.0.6",
+		"@types/react": "18.3.12",
+		"@types/react-dom": "18.3.1",
 		"aqu": "0.4.3",
 		"cpy-cli": "^5.0.0",
 		"eslint": "^9.13.0",
 		"jest": "29.2.2",
 		"jest-environment-jsdom": "29.2.1",
-		"react": "18.2.0",
-		"react-dom": "18.2.0",
+		"react": "18.3.1",
+		"react-dom": "18.3.1",
 		"rimraf": "3.0.2",
 		"ts-jest": "29.0.3",
 		"tslib": "2.3.1",
diff --git a/packages/pxth/package.json b/packages/pxth/package.json
index 84c15ed2..0825716f 100644
--- a/packages/pxth/package.json
+++ b/packages/pxth/package.json
@@ -52,7 +52,7 @@
 		"@arethetypeswrong/cli": "^0.16.4",
 		"@microsoft/api-extractor": "^7.47.11",
 		"@types/lodash": "^4.17.12",
-		"@types/node": "^14.14.31",
+		"@types/node": "^20.17.2",
 		"eslint": "^9.13.0",
 		"np": "^10.0.7",
 		"tsup": "^8.3.5",
diff --git a/packages/stocked/.prettierignore b/packages/stocked/.prettierignore
new file mode 100644
index 00000000..913dcda0
--- /dev/null
+++ b/packages/stocked/.prettierignore
@@ -0,0 +1,3 @@
+.docusaurus
+dist
+pnpm-lock.yaml
\ No newline at end of file
diff --git a/packages/stocked/eslint.config.mjs b/packages/stocked/eslint.config.mjs
new file mode 100644
index 00000000..612edb90
--- /dev/null
+++ b/packages/stocked/eslint.config.mjs
@@ -0,0 +1,8 @@
+import baseConfig from '@reactive-tools/eslint-config';
+
+export default [
+	{
+		ignores: ['**/dist', '**/node_modules', '**/*.config.js', '**/.tsup'],
+	},
+	...baseConfig,
+];
diff --git a/packages/stocked/package.json b/packages/stocked/package.json
new file mode 100644
index 00000000..e52c6e68
--- /dev/null
+++ b/packages/stocked/package.json
@@ -0,0 +1,73 @@
+{
+	"name": "stocked",
+	"description": "Tiny state management library for react.",
+	"version": "1.0.0-beta.33",
+	"type": "module",
+	"main": "./dist/index.cjs",
+	"module": "./dist/index.js",
+	"types": "./dist/index.d.ts",
+	"exports": {
+		"import": {
+			"types": "./dist/index.d.ts",
+			"import": "./dist/index.js"
+		},
+		"require": {
+			"types": "./dist/index.d.cts",
+			"require": "./dist/index.cjs"
+		}
+	},
+	"repository": {
+		"type": "git",
+		"url": "git+https://github.com/fracht/reactive-forms.git",
+		"directory": "packages/stocked"
+	},
+	"author": "Artiom Tretjakovas",
+	"license": "MIT",
+	"scripts": {
+		"analyze": "size-limit --why",
+		"build": "tsup",
+		"build:docs": "vitepress build new-docs",
+		"dev:docs": "vitepress dev new-docs",
+		"format": "syncpack format && prettier --write \"**/*.{ts,tsx,cjs,mjs,js,jsx,json,yml,yaml,clean-publish}\"",
+		"lint": "eslint . && attw --pack .",
+		"lint:fix": "eslint . --fix",
+		"prepublishOnly": "tsup",
+		"serve:docs": "vitepress serve new-docs",
+		"size": "size-limit",
+		"start": "aqu watch",
+		"test": "vitest run",
+		"test:watch": "pnpm run test --watch"
+	},
+	"dependencies": {
+		"lodash": "^4.17.21",
+		"pxth": "workspace:*",
+		"tiny-invariant": "^1.3.3"
+	},
+	"devDependencies": {
+		"@testing-library/dom": "^10.4.0",
+		"@testing-library/react": "^16.0.1",
+		"@types/lodash": "^4.17.12",
+		"@types/react": "18.3.12",
+		"@types/react-dom": "18.3.1",
+		"configs": "github:fracht/configs",
+		"jsdom": "^25.0.1",
+		"react": "^18.3.1",
+		"react-dom": "^18.3.1",
+		"tslib": "2.3.1",
+		"@microsoft/api-extractor": "^7.47.11",
+		"@arethetypeswrong/cli": "^0.16.4",
+		"tsup": "^8.3.5",
+		"typescript": "^5.6.3",
+		"vitepress": "^1.4.1",
+		"vitest": "^2.1.3"
+	},
+	"peerDependencies": {
+		"react": ">=16"
+	},
+	"engines": {
+		"node": ">=10"
+	},
+	"files": [
+		"dist"
+	]
+}
diff --git a/packages/stocked/src/components/ProxyContext.ts b/packages/stocked/src/components/ProxyContext.ts
new file mode 100644
index 00000000..a9b26ab7
--- /dev/null
+++ b/packages/stocked/src/components/ProxyContext.ts
@@ -0,0 +1,5 @@
+import { createContext } from 'react';
+
+import { StockProxy } from '../typings/StockProxy';
+
+export const ProxyContext = createContext<StockProxy<unknown> | undefined>(undefined);
diff --git a/packages/stocked/src/components/ProxyProvider.tsx b/packages/stocked/src/components/ProxyProvider.tsx
new file mode 100644
index 00000000..981eb8d7
--- /dev/null
+++ b/packages/stocked/src/components/ProxyProvider.tsx
@@ -0,0 +1,24 @@
+import React from 'react';
+import { Pxth } from 'pxth';
+
+import { ProxyContext } from './ProxyContext';
+import { StockContext } from './StockContext';
+import { useStockContext } from '../hooks';
+import { StockProxy } from '../typings';
+
+export type ProxyProviderProps<V> = {
+	proxy: StockProxy<V>;
+	children: React.ReactNode | ((path: Pxth<V>) => React.ReactNode);
+};
+
+export const ProxyProvider = <V,>({ proxy, children }: ProxyProviderProps<V>) => {
+	const stock = useStockContext();
+
+	return (
+		<StockContext.Provider value={stock}>
+			<ProxyContext.Provider value={proxy as StockProxy<unknown>}>
+				{typeof children === 'function' ? children(proxy.path) : children}
+			</ProxyContext.Provider>
+		</StockContext.Provider>
+	);
+};
diff --git a/packages/stocked/src/components/StockContext.ts b/packages/stocked/src/components/StockContext.ts
new file mode 100644
index 00000000..61b48c7c
--- /dev/null
+++ b/packages/stocked/src/components/StockContext.ts
@@ -0,0 +1,5 @@
+import { createContext } from 'react';
+
+import { Stock } from '../hooks/useStock';
+
+export const StockContext = createContext<Stock<object> | undefined>(undefined);
diff --git a/packages/stocked/src/components/StockRoot.tsx b/packages/stocked/src/components/StockRoot.tsx
new file mode 100644
index 00000000..ba4eaef7
--- /dev/null
+++ b/packages/stocked/src/components/StockRoot.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+
+import { StockContext } from './StockContext';
+import { Stock, StockConfig, useStock } from '../hooks/useStock';
+
+export type StockRootProps<Values extends object> = StockConfig<Values> & {
+	children: React.ReactNode;
+};
+
+/**
+ * The main component, which should wrap all code, which uses stock values.
+ * Creates stock and puts it in `StockContext`.
+ */
+export const StockRoot = <Values extends object>({ children, ...stockConfig }: StockRootProps<Values>) => {
+	const stock = useStock(stockConfig);
+
+	return <StockContext.Provider value={stock as unknown as Stock<object>}>{children}</StockContext.Provider>;
+};
diff --git a/packages/stocked/src/components/index.ts b/packages/stocked/src/components/index.ts
new file mode 100644
index 00000000..0df70f7f
--- /dev/null
+++ b/packages/stocked/src/components/index.ts
@@ -0,0 +1,4 @@
+export * from './StockContext';
+export * from './StockRoot';
+export * from './ProxyContext';
+export * from './ProxyProvider';
diff --git a/packages/stocked/src/hooks/index.ts b/packages/stocked/src/hooks/index.ts
new file mode 100644
index 00000000..aa362315
--- /dev/null
+++ b/packages/stocked/src/hooks/index.ts
@@ -0,0 +1,7 @@
+export * from './useStock';
+export * from './useStockContext';
+export * from './useStockValue';
+export * from './useStockState';
+export * from './useObservers';
+export * from './useAllStockValues';
+export * from './useMappingProxy';
diff --git a/packages/stocked/src/hooks/useAllStockValues.ts b/packages/stocked/src/hooks/useAllStockValues.ts
new file mode 100644
index 00000000..a4386805
--- /dev/null
+++ b/packages/stocked/src/hooks/useAllStockValues.ts
@@ -0,0 +1,14 @@
+import { createPxth, Pxth } from 'pxth';
+
+import { Stock } from './useStock';
+import { useStockValue } from './useStockValue';
+import { StockProxy } from '../typings/StockProxy';
+
+const rootPxth = createPxth([]);
+
+export const useAllStockValues = <T extends object = object>(
+	customStock?: Stock<T>,
+	proxy?: StockProxy<unknown>,
+): T => {
+	return useStockValue<T, T>(rootPxth as unknown as Pxth<T>, customStock, proxy);
+};
diff --git a/packages/stocked/src/hooks/useDebugStock.ts b/packages/stocked/src/hooks/useDebugStock.ts
new file mode 100644
index 00000000..8960e615
--- /dev/null
+++ b/packages/stocked/src/hooks/useDebugStock.ts
@@ -0,0 +1,47 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
+import { useEffect } from 'react';
+import { getPxthSegments } from 'pxth';
+
+import { Stock } from './useStock';
+
+declare global {
+	interface Window {
+		__STOCKED_DEVTOOLS_HOOK?: {
+			raiseEvent: (event: string, data: any) => void;
+		};
+	}
+}
+
+enum StockedEvent {
+	NEW = 'new',
+	BATCH_UPDATE = 'update',
+}
+
+let stockIndex = -1;
+
+export const useDebugStock = <T extends object>(stock: Stock<T>) => {
+	useEffect(() => {
+		if (window.__STOCKED_DEVTOOLS_HOOK) {
+			const currentStockId = ++stockIndex;
+			window.__STOCKED_DEVTOOLS_HOOK!.raiseEvent(StockedEvent.NEW, {
+				data: stock.getValues(),
+				id: currentStockId,
+			});
+
+			return stock.watchBatchUpdates((data) =>
+				window.__STOCKED_DEVTOOLS_HOOK!.raiseEvent(StockedEvent.BATCH_UPDATE, {
+					data: {
+						...data,
+						origin: getPxthSegments(data.origin),
+					},
+					id: currentStockId,
+				}),
+			);
+		}
+
+		return () => {
+			/** empty fn */
+		};
+	}, [stock]);
+};
diff --git a/packages/stocked/src/hooks/useMappingProxy.ts b/packages/stocked/src/hooks/useMappingProxy.ts
new file mode 100644
index 00000000..f201d8e5
--- /dev/null
+++ b/packages/stocked/src/hooks/useMappingProxy.ts
@@ -0,0 +1,29 @@
+import { useEffect, useMemo, useRef } from 'react';
+import { Pxth } from 'pxth';
+
+import { MappingProxy, ProxyMapSource } from '../typings';
+import { areProxyMapsEqual } from '../utils/areProxyMapsEqual';
+import { hashPxth } from '../utils/hashPxth';
+
+const useMapMemo = <V>(map: ProxyMapSource<V>): ProxyMapSource<V> => {
+	const mapRef = useRef(map);
+
+	useEffect(() => {
+		if (!areProxyMapsEqual(mapRef.current, map)) {
+			mapRef.current = map;
+		}
+	}, [map]);
+
+	return areProxyMapsEqual(mapRef.current, map) ? mapRef.current : map;
+};
+
+export const useMappingProxy = <V>(mapSource: ProxyMapSource<V>, path: Pxth<V>) => {
+	const realMap = useMapMemo(mapSource);
+
+	return useMemo(() => {
+		const proxy = new MappingProxy(realMap, path);
+		proxy.activate();
+		return proxy;
+		// eslint-disable-next-line react-hooks/exhaustive-deps
+	}, [hashPxth(path), realMap]);
+};
diff --git a/packages/stocked/src/hooks/useObservers.ts b/packages/stocked/src/hooks/useObservers.ts
new file mode 100644
index 00000000..b386f262
--- /dev/null
+++ b/packages/stocked/src/hooks/useObservers.ts
@@ -0,0 +1,149 @@
+import { MutableRefObject, useCallback, useRef } from 'react';
+import { createPxth, deepGet, isInnerPxth, Pxth, samePxth } from 'pxth';
+import invariant from 'tiny-invariant';
+
+import { BatchUpdate, Observer } from '../typings';
+import { PxthMap } from '../typings/PxthMap';
+import { ObserverArray, ObserverKey } from '../utils/ObserverArray';
+import { useLazyRef } from '../utils/useLazyRef';
+
+export type ObserversControl<T> = {
+	/**
+	 * Watch stock value. Returns cleanup function.
+	 * @deprecated - use watchEffect instead
+	 */
+	watch: <V>(path: Pxth<V>, observer: Observer<V>) => () => void;
+	/**
+	 * Watch all stock values. Returns cleanup function.
+	 * @deprecated - use watchEffect instead
+	 */
+	watchAll: (observer: Observer<T>) => () => void;
+	/** Watch stock value. Returns cleanup function. Calls observer instantly. */
+	watchEffect: <V>(path: Pxth<V>, observer: Observer<V>) => () => void;
+	/** Check if value is observed or not. */
+	isObserved: <V>(path: Pxth<V>) => boolean;
+	/** Notify all observers, which are children of specified path */
+	notifySubTree: <V>(path: Pxth<V>, values: T) => void;
+	/** Notify all observers */
+	notifyAll: (values: T) => void;
+	/** "stocked" updates values in batches, so you can subscribe to batch updates. Returns cleanup. */
+	watchBatchUpdates: (observer: Observer<BatchUpdate<T>>) => () => void;
+};
+
+/** Hook, wraps functionality of observers storage (add, remove, notify tree of observers, etc.) */
+export const useObservers = <T>(values: MutableRefObject<T>): ObserversControl<T> => {
+	const observersMap = useRef<PxthMap<ObserverArray<unknown>>>(new PxthMap());
+	const batchUpdateObservers = useLazyRef<ObserverArray<BatchUpdate<T>>>(() => new ObserverArray());
+
+	const batchUpdate = useCallback(
+		(update: BatchUpdate<T>) => {
+			batchUpdateObservers.current.call(update);
+		},
+		[batchUpdateObservers],
+	);
+
+	const observeBatchUpdates = useCallback(
+		(observer: Observer<BatchUpdate<T>>) => batchUpdateObservers.current.add(observer),
+		[batchUpdateObservers],
+	);
+
+	const stopObservingBatchUpdates = useCallback(
+		(key: ObserverKey) => batchUpdateObservers.current.remove(key),
+		[batchUpdateObservers],
+	);
+
+	const observe = useCallback(<V>(path: Pxth<V>, observer: Observer<V>) => {
+		if (!observersMap.current.has(path)) {
+			observersMap.current.set(path, new ObserverArray());
+		}
+
+		return observersMap.current.get(path)!.add(observer as Observer<unknown>);
+	}, []);
+
+	const stopObserving = useCallback(<V>(path: Pxth<V>, observerKey: ObserverKey) => {
+		const currentObservers = observersMap.current.get(path);
+
+		invariant(currentObservers, 'Cannot remove observer from value, which is not observing');
+
+		currentObservers.remove(observerKey);
+
+		if (currentObservers.isEmpty()) {
+			observersMap.current.remove(path);
+		}
+	}, []);
+
+	const watch = useCallback(
+		<V>(path: Pxth<V>, observer: Observer<V>) => {
+			const key = observe(path, observer);
+			return () => stopObserving(path, key);
+		},
+		[observe, stopObserving],
+	);
+
+	const watchAll = useCallback((observer: Observer<T>) => watch(createPxth<T>([]), observer), [watch]);
+
+	const watchEffect = useCallback(
+		<V>(path: Pxth<V>, observer: Observer<V>) => {
+			observer(deepGet(values.current, path));
+			const key = observe(path, observer);
+			return () => stopObserving(path, key);
+		},
+		[observe, stopObserving, values],
+	);
+
+	const watchBatchUpdates = useCallback(
+		(observer: Observer<BatchUpdate<T>>) => {
+			const key = observeBatchUpdates(observer);
+
+			return () => stopObservingBatchUpdates(key);
+		},
+		[observeBatchUpdates, stopObservingBatchUpdates],
+	);
+
+	const isObserved = useCallback(<V>(path: Pxth<V>) => observersMap.current.has(path), []);
+
+	const notifyPaths = useCallback(
+		(origin: Pxth<unknown>, paths: Pxth<unknown>[], values: T) => {
+			batchUpdate({ paths, origin, values });
+			paths.forEach((path) => {
+				const observer = observersMap.current.get(path);
+				if (observer) {
+					const subValue = deepGet(values, path);
+					observer.call(subValue);
+				}
+			});
+		},
+		[batchUpdate],
+	);
+
+	const notifySubTree = useCallback(
+		<V>(path: Pxth<V>, values: T) => {
+			const subPaths = observersMap.current
+				.keys()
+				.filter(
+					(tempPath) =>
+						isInnerPxth(path as Pxth<unknown>, tempPath) ||
+						samePxth(path as Pxth<unknown>, tempPath) ||
+						isInnerPxth(tempPath, path as Pxth<unknown>),
+				);
+
+			notifyPaths(path as Pxth<unknown>, subPaths, values);
+		},
+		[notifyPaths],
+	);
+
+	const notifyAll = useCallback(
+		(values: T) => notifyPaths(createPxth([]), observersMap.current.keys(), values),
+		[notifyPaths],
+	);
+
+	return {
+		watch,
+		watchAll,
+		watchEffect,
+		watchBatchUpdates,
+		isObserved,
+		notifySubTree,
+		notifyAll,
+	};
+};
diff --git a/packages/stocked/src/hooks/useStock.ts b/packages/stocked/src/hooks/useStock.ts
new file mode 100644
index 00000000..0df86f5d
--- /dev/null
+++ b/packages/stocked/src/hooks/useStock.ts
@@ -0,0 +1,106 @@
+import { SetStateAction, useCallback, useMemo } from 'react';
+import cloneDeep from 'lodash/cloneDeep';
+import isFunction from 'lodash/isFunction';
+import { createPxth, deepGet, deepSet, Pxth } from 'pxth';
+
+import { useDebugStock } from './useDebugStock';
+import { ObserversControl, useObservers } from './useObservers';
+import { useLazyRef } from '../utils/useLazyRef';
+
+export type Stock<T extends object> = {
+	/** Function for setting value. Deeply sets value, using path to variable. @see https://lodash.com/docs/4.17.15#set */
+	setValue: <V>(path: Pxth<V>, value: SetStateAction<V>) => void;
+	/** Function for setting all values. */
+	setValues: (values: T) => void;
+	/** Get actual value from stock. */
+	getValue: <V>(path: Pxth<V>) => V;
+	/** Get all values from stock */
+	getValues: () => T;
+	/** Function for resetting values to initial state */
+	resetValues: () => void;
+	/** Paths to all variables */
+	paths: Pxth<T>;
+	/** Name, which appears in stocked devtools */
+	debugName?: string;
+} & Omit<ObserversControl<T>, 'notifyAll' | 'notifySubTree'>;
+
+export type StockConfig<T extends object> = {
+	initialValues: T;
+	debugName?: string;
+};
+
+/**
+ * Creates stock.
+ *
+ * Use it only if you want to use several Stock's at the same time.
+ *
+ * Instead, use `<StockRoot>` component
+ *
+ * @param config - configuration of Stock.
+ */
+export const useStock = <T extends object>({ initialValues, debugName }: StockConfig<T>): Stock<T> => {
+	const values = useLazyRef<T>(() => cloneDeep(initialValues));
+	const { notifySubTree, notifyAll, watch, watchAll, watchEffect, watchBatchUpdates, isObserved } =
+		useObservers<T>(values);
+
+	const setValue = useCallback(
+		<V>(path: Pxth<V>, action: SetStateAction<V>) => {
+			// path = normalizePath(path as string);
+
+			const value = isFunction(action) ? action(deepGet(values.current, path)) : action;
+
+			values.current = deepSet(values.current, path, value) as T;
+
+			notifySubTree(path, values.current);
+		},
+		[values, notifySubTree],
+	);
+
+	const setValues = useCallback(
+		(newValues: T) => {
+			values.current = newValues;
+			notifyAll(newValues);
+		},
+		[values, notifyAll],
+	);
+
+	const getValue = useCallback(<V>(path: Pxth<V>) => deepGet(values.current, path) as V, [values]);
+
+	const getValues = useCallback(() => values.current, [values]);
+
+	const resetValues = useCallback(() => setValues(cloneDeep(initialValues)), [initialValues, setValues]);
+
+	const stock: Stock<T> = useMemo(
+		() => ({
+			getValue,
+			getValues,
+			setValue,
+			setValues,
+			resetValues,
+			watch,
+			watchAll,
+			watchEffect,
+			watchBatchUpdates,
+			isObserved,
+			debugName,
+			paths: createPxth<T>([]),
+		}),
+		[
+			getValue,
+			getValues,
+			setValue,
+			setValues,
+			resetValues,
+			watch,
+			watchAll,
+			watchEffect,
+			watchBatchUpdates,
+			isObserved,
+			debugName,
+		],
+	);
+
+	useDebugStock(stock);
+
+	return stock;
+};
diff --git a/packages/stocked/src/hooks/useStockContext.ts b/packages/stocked/src/hooks/useStockContext.ts
new file mode 100644
index 00000000..291dcab5
--- /dev/null
+++ b/packages/stocked/src/hooks/useStockContext.ts
@@ -0,0 +1,25 @@
+import { useContext } from 'react';
+import invariant from 'tiny-invariant';
+
+import { Stock } from './useStock';
+import { StockContext } from '../components';
+import { ProxyContext } from '../components/ProxyContext';
+import { StockProxy } from '../typings';
+import { useInterceptors } from '../utils/useInterceptors';
+
+/**
+ * Function to access stock, with automatically applying proxy. By default, will pick stock and proxy from context.
+ * @param stock - optional argument. Pass it if you don't want to use stock from context.
+ * @param proxy - optional argument. Pass it if you don't want to use proxy from context.
+ */
+export const useStockContext = <T extends object>(stock?: Stock<T>, proxy?: StockProxy<unknown>): Stock<T> => {
+	const contextStock = useContext(StockContext) as Stock<T> | undefined;
+	const contextProxy = useContext(ProxyContext);
+
+	stock = stock ?? contextStock;
+	proxy = proxy ?? contextProxy;
+
+	invariant(stock, "You're trying to access stock outside StockContext and without providing custom stock.");
+
+	return useInterceptors(stock, proxy);
+};
diff --git a/packages/stocked/src/hooks/useStockState.ts b/packages/stocked/src/hooks/useStockState.ts
new file mode 100644
index 00000000..81cfdbaa
--- /dev/null
+++ b/packages/stocked/src/hooks/useStockState.ts
@@ -0,0 +1,32 @@
+import { Dispatch, SetStateAction, useCallback } from 'react';
+import { Pxth } from 'pxth';
+
+import { Stock } from './useStock';
+import { useStockContext } from './useStockContext';
+import { useStockValue } from './useStockValue';
+import { StockProxy } from '../typings';
+
+/**
+ * Hook, returns tuple of value and value set action.
+ * Returns *actual* value.
+ * This means, this hook fires re-render each time value in stock was changed.
+ * Similar to standard React's `useState` hook.
+ * @param path  - path to variable in stock, deeply gets value. @see https://lodash.com/docs/4.17.15#get
+ * @param customStock - optional parameter, if you want to work with custom stock, not received from context. @see useStockContext
+ * @param proxy       - optional parameter, if you want to pass custom proxy, not receive it from context. @see useStockContext
+ */
+export const useStockState = <V, T extends object = object>(
+	path: Pxth<V>,
+	customStock?: Stock<T>,
+	proxy?: StockProxy<unknown>,
+): [V, Dispatch<SetStateAction<V>>] => {
+	const stock = useStockContext(customStock, proxy);
+
+	const value = useStockValue<V, T>(path, customStock, proxy);
+
+	const { setValue } = stock;
+
+	const set = useCallback((action: SetStateAction<V>) => setValue(path, action), [path, setValue]);
+
+	return [value, set];
+};
diff --git a/packages/stocked/src/hooks/useStockValue.ts b/packages/stocked/src/hooks/useStockValue.ts
new file mode 100644
index 00000000..856fa85c
--- /dev/null
+++ b/packages/stocked/src/hooks/useStockValue.ts
@@ -0,0 +1,39 @@
+import { useEffect, useReducer } from 'react';
+import { Pxth } from 'pxth';
+
+import { Stock } from './useStock';
+import { useStockContext } from './useStockContext';
+import { StockProxy } from '../typings';
+import { useLazyRef } from '../utils/useLazyRef';
+
+/**
+ * Hook, which returns *actual* stock value.
+ * This means, it will update component each time when value in stock changes.
+ * @param path        - path to variable in stock, deeply gets value. @see https://lodash.com/docs/4.17.15#get
+ * @param customStock - optional parameter, if you want to work with custom stock, not received from context. @see useStockContext
+ * @param proxy       - optional parameter, if you want to pass custom proxy, not receive it from context. @see useStockContext
+ */
+export const useStockValue = <V, T extends object = object>(
+	path: Pxth<V>,
+	customStock?: Stock<T>,
+	proxy?: StockProxy<unknown>,
+): V => {
+	const stock = useStockContext(customStock, proxy);
+
+	const { watchEffect, getValue } = stock;
+
+	const [, forceUpdate] = useReducer((val) => val + 1, 0);
+
+	const value = useLazyRef<V>(() => getValue(path));
+
+	useEffect(
+		() =>
+			watchEffect(path, (newValue) => {
+				value.current = newValue;
+				forceUpdate();
+			}),
+		[path, watchEffect, value],
+	);
+
+	return value.current;
+};
diff --git a/packages/stocked/src/index.ts b/packages/stocked/src/index.ts
new file mode 100644
index 00000000..71f0cbdc
--- /dev/null
+++ b/packages/stocked/src/index.ts
@@ -0,0 +1,6 @@
+export * from './hooks';
+export * from './typings';
+export * from './components';
+export * from './utils/ObserverArray';
+
+export { intercept } from './utils/useInterceptors';
diff --git a/packages/stocked/src/typings/BatchUpdate.ts b/packages/stocked/src/typings/BatchUpdate.ts
new file mode 100644
index 00000000..ac12f6ef
--- /dev/null
+++ b/packages/stocked/src/typings/BatchUpdate.ts
@@ -0,0 +1,11 @@
+import { Pxth } from 'pxth';
+
+/** Object, in which "stocked" calls observers */
+export type BatchUpdate<T> = {
+	/** which paths should be updated */
+	paths: Pxth<unknown>[];
+	/** path, which triggered subtree update */
+	origin: Pxth<unknown>;
+	/** all values, which should be sent to observers */
+	values: T;
+};
diff --git a/packages/stocked/src/typings/MappingProxy.ts b/packages/stocked/src/typings/MappingProxy.ts
new file mode 100644
index 00000000..1f72e8bb
--- /dev/null
+++ b/packages/stocked/src/typings/MappingProxy.ts
@@ -0,0 +1,143 @@
+import { SetStateAction } from 'react';
+import isFunction from 'lodash/isFunction';
+import isNil from 'lodash/isNil';
+import { deepGet, deepSet, isInnerPxth, joinPxths, longestCommonPxth, Pxth, relativePxth, samePxth } from 'pxth';
+import invariant from 'tiny-invariant';
+
+import { Observer } from './Observer';
+import { PxthMap } from './PxthMap';
+import { StockProxy } from './StockProxy';
+import { ProxyMapSource } from '.';
+import { createProxyMap } from '../utils/createProxyMap';
+import { getInnerPaths, hasMappedParentPaths } from '../utils/mappingProxyUtils';
+
+/**
+ * Simple example of StockProxy.
+ * Proxies values by map. Map is built by this method:
+ * {
+ *      a: {
+ *          b: {
+ *              c: "<path to real value, in stock>"
+ *          },
+ *      }
+ * }
+ */
+export class MappingProxy<T> extends StockProxy<T> {
+	private readonly proxyMap: PxthMap<Pxth<unknown>>;
+
+	public constructor(mapSource: ProxyMapSource<T>, path: Pxth<T>) {
+		super(path);
+		this.proxyMap = createProxyMap(mapSource);
+	}
+
+	public setValue = <V>(
+		path: Pxth<V>,
+		value: SetStateAction<V>,
+		defaultSetValue: <U>(path: Pxth<U>, value: SetStateAction<U>) => void,
+		defaultGetValue: <U>(path: Pxth<U>) => U,
+	) => {
+		const relativeValuePath = relativePxth(this.path as Pxth<unknown>, path as Pxth<unknown>);
+		const normalPath = this.getNormalPath(path);
+
+		if (hasMappedParentPaths(relativeValuePath, this.proxyMap)) {
+			defaultSetValue(normalPath, value);
+			return;
+		}
+
+		const innerPaths = getInnerPaths(relativeValuePath, this.proxyMap);
+
+		const oldValue = defaultGetValue(normalPath);
+
+		innerPaths.forEach(
+			([to, from]) =>
+				from !== undefined &&
+				defaultSetValue(
+					from,
+					deepGet(isFunction(value) ? value(oldValue) : value, relativePxth(relativeValuePath, to)),
+				),
+		);
+	};
+
+	public watch = <V>(
+		path: Pxth<V>,
+		observer: Observer<V>,
+		defaultWatch: <U>(path: Pxth<U>, observer: Observer<U>) => () => void,
+	) => {
+		const normalPath = this.getNormalPath(path);
+		return defaultWatch(normalPath, (value) => observer(this.mapValue(value, path, normalPath) as V));
+	};
+
+	public watchEffect = <V>(
+		path: Pxth<V>,
+		observer: Observer<V>,
+		defaultWatchEffect: <U>(path: Pxth<U>, observer: Observer<U>) => () => void,
+	) => {
+		const normalPath = this.getNormalPath(path);
+		return defaultWatchEffect(normalPath, (value) => observer(this.mapValue(value, path, normalPath) as V));
+	};
+
+	public getValue = <V>(path: Pxth<V>, defaultGetValue: <U>(path: Pxth<U>) => U): V => {
+		const normalPath = this.getNormalPath(path);
+		return this.mapValue(defaultGetValue(normalPath), path, normalPath) as V;
+	};
+
+	private mapValue = <V>(value: V, path: Pxth<V>, normalPath: Pxth<V>): V => {
+		path = relativePxth(this.path as Pxth<unknown>, path as Pxth<unknown>) as Pxth<V>;
+
+		if (hasMappedParentPaths(path, this.proxyMap)) {
+			return value;
+		}
+
+		const innerPaths = getInnerPaths(path, this.proxyMap);
+
+		return innerPaths.reduce<V>(
+			(acc, [to, from]) =>
+				deepSet(
+					acc as unknown as object,
+					relativePxth(path as Pxth<unknown>, to),
+					deepGet(value, relativePxth(normalPath as Pxth<unknown>, from!)),
+				) as V,
+			{} as V,
+		);
+	};
+
+	public getProxiedPath = <V>(path: Pxth<V>): Pxth<V> => {
+		const normalPath = this.proxyMap.entries().find(([, from]) => samePxth(from, path as Pxth<unknown>))?.[0];
+
+		invariant(
+			!isNil(normalPath),
+			'Mapping proxy error: trying to get normal path of proxied path, which is not defined in proxy map',
+		);
+
+		return joinPxths(this.path as Pxth<unknown>, normalPath) as Pxth<V>;
+	};
+
+	public getNormalPath = <V>(path: Pxth<V>): Pxth<V> => {
+		const normalPath = relativePxth(this.path as Pxth<unknown>, path as Pxth<unknown>);
+
+		const isIndependent = this.proxyMap.has(normalPath);
+
+		if (isIndependent) {
+			return this.proxyMap.get(normalPath) as Pxth<V>;
+		}
+
+		const hasMappedChildrenPaths = this.proxyMap.keys().some((mappedPath) => isInnerPxth(normalPath, mappedPath));
+
+		if (hasMappedChildrenPaths) {
+			return longestCommonPxth(
+				this.proxyMap
+					.entries()
+					.filter(([to]) => isInnerPxth(normalPath, to))
+					.map(([, from]) => from),
+			) as Pxth<V>;
+		}
+
+		if (hasMappedParentPaths(normalPath, this.proxyMap)) {
+			const [to, from] = this.proxyMap.entries().find(([mappedPath]) => isInnerPxth(mappedPath, normalPath))!;
+
+			return joinPxths(from!, relativePxth(to, normalPath)) as Pxth<V>;
+		}
+
+		invariant(false, 'Mapping proxy error: trying to proxy value, which is not defined in proxy map.');
+	};
+}
diff --git a/packages/stocked/src/typings/Observer.ts b/packages/stocked/src/typings/Observer.ts
new file mode 100644
index 00000000..20f689f4
--- /dev/null
+++ b/packages/stocked/src/typings/Observer.ts
@@ -0,0 +1 @@
+export type Observer<V> = (message: V) => void;
diff --git a/packages/stocked/src/typings/ProxyMapSource.ts b/packages/stocked/src/typings/ProxyMapSource.ts
new file mode 100644
index 00000000..77f92137
--- /dev/null
+++ b/packages/stocked/src/typings/ProxyMapSource.ts
@@ -0,0 +1,9 @@
+import { Pxth } from 'pxth';
+
+type Primitive = string | number | boolean | bigint | symbol | null | undefined;
+
+type ObjectMappingType<T> = {
+	[P in keyof T]: ProxyMapSource<T[P]>;
+};
+
+export type ProxyMapSource<T> = T extends Primitive ? Pxth<T> : ObjectMappingType<T> | Pxth<T>;
diff --git a/packages/stocked/src/typings/PxthMap.ts b/packages/stocked/src/typings/PxthMap.ts
new file mode 100644
index 00000000..f7a7078f
--- /dev/null
+++ b/packages/stocked/src/typings/PxthMap.ts
@@ -0,0 +1,33 @@
+import { Pxth } from 'pxth';
+
+import { hashPxth } from '../utils/hashPxth';
+
+export class PxthMap<Value> {
+	private _values: Record<string, Value> = {};
+	private _keys: Record<string, Pxth<unknown>> = {};
+
+	public get = <V>(key: Pxth<V>): Value | undefined => {
+		return this._values[hashPxth(key)];
+	};
+
+	public set = <V>(key: Pxth<V>, value: Value) => {
+		const stingifiedKey = hashPxth(key);
+		this._values[stingifiedKey] = value;
+		this._keys[stingifiedKey] = key as Pxth<unknown>;
+	};
+
+	public remove = <V>(key: Pxth<V>) => {
+		const stingifiedKey = hashPxth(key);
+		delete this._values[stingifiedKey];
+		delete this._keys[stingifiedKey];
+	};
+
+	public has = <V>(key: Pxth<V>) => {
+		return hashPxth(key) in this._values;
+	};
+
+	public keys = (): Pxth<unknown>[] => Object.values(this._keys);
+
+	public entries = (): Array<[key: Pxth<unknown>, value: Value]> =>
+		Object.entries(this._keys).map(([key, value]) => [value, this._values[key]]);
+}
diff --git a/packages/stocked/src/typings/StockProxy.ts b/packages/stocked/src/typings/StockProxy.ts
new file mode 100644
index 00000000..01196b32
--- /dev/null
+++ b/packages/stocked/src/typings/StockProxy.ts
@@ -0,0 +1,57 @@
+import { SetStateAction } from 'react';
+import { Pxth } from 'pxth';
+
+import { Observer } from './Observer';
+
+/**
+ * Abstract class of "stocked" proxy
+ * By inheriting this class, you can provide custom logic for proxing (casting) values.
+ */
+export abstract class StockProxy<T> {
+	/** Path to variable, where proxy is attached. */
+	public readonly path: Pxth<T>;
+
+	public constructor(path: Pxth<T>) {
+		this.path = path;
+	}
+
+	/** Function, which sets proxied value. It will be callen only if proxied value is changing. */
+	public abstract setValue: <V>(
+		path: Pxth<V>,
+		value: SetStateAction<V>,
+		defaultSetValue: <U>(path: Pxth<U>, value: SetStateAction<U>) => void,
+		defaultGetValue: <U>(path: Pxth<U>) => U,
+	) => void;
+
+	/**
+	 * Function for watching proxied value. Should return cleanup.
+	 * @deprecated
+	 */
+	public abstract watch: <V>(
+		path: Pxth<V>,
+		observer: Observer<V>,
+		defaultWatch: <U>(path: Pxth<U>, observer: Observer<U>) => () => void,
+	) => () => void;
+
+	/** Function for watching proxied value. Should return cleanup. Calls observer instantly. */
+	public abstract watchEffect: <V>(
+		path: Pxth<V>,
+		observer: Observer<V>,
+		defaultWatchEffect: <U>(path: Pxth<U>, observer: Observer<U>) => () => void,
+	) => () => void;
+
+	/** Function to access proxied value. */
+	public abstract getValue: <V>(path: Pxth<V>, defaultGetValue: <U>(path: Pxth<U>) => U) => V;
+
+	/** Function for getting proxied path from normal path. */
+	public abstract getProxiedPath: <V>(path: Pxth<V>) => Pxth<V>;
+
+	/** Function for getting normal path from proxied path */
+	public abstract getNormalPath: <V>(path: Pxth<V>) => Pxth<V>;
+
+	/** Activate proxy. After activation, you cannot modify proxy. */
+	public activate = () => Object.freeze(this);
+
+	/** Returns boolean, is proxy active and ready for use or not. */
+	public isActive = () => Object.isFrozen(this);
+}
diff --git a/packages/stocked/src/typings/index.ts b/packages/stocked/src/typings/index.ts
new file mode 100644
index 00000000..7492d791
--- /dev/null
+++ b/packages/stocked/src/typings/index.ts
@@ -0,0 +1,6 @@
+export * from './BatchUpdate';
+export * from './Observer';
+export * from './MappingProxy';
+export * from './StockProxy';
+export * from './ProxyMapSource';
+export * from './PxthMap';
diff --git a/packages/stocked/src/utils/ObserverArray.ts b/packages/stocked/src/utils/ObserverArray.ts
new file mode 100644
index 00000000..8381e191
--- /dev/null
+++ b/packages/stocked/src/utils/ObserverArray.ts
@@ -0,0 +1,45 @@
+import invariant from 'tiny-invariant';
+
+import { Observer } from '../typings/Observer';
+
+export type ObserverKey = number;
+
+export class ObserverArray<V> {
+	private readonly observers: Record<ObserverKey, Observer<V>> = {};
+	private counter = 0;
+
+	/**
+	 * Calls all observers in the array.
+	 * @param message - message, which would be sent to all observers
+	 */
+	public call(message: V) {
+		Object.values(this.observers).forEach((observer) => observer(message));
+	}
+
+	/**
+	 * Registers new observer and returns key, which will be used for removing observer.
+	 * @param observer - registers new observer
+	 */
+	public add(observer: Observer<V>): ObserverKey {
+		const key = this.counter++;
+		this.observers[key] = observer;
+		return key;
+	}
+
+	/**
+	 * Removes observer from array. Throws an error, if observer with that key not exists.
+	 * @param key - key to observer
+	 */
+	public remove(key: ObserverKey) {
+		invariant(
+			Object.prototype.hasOwnProperty.call(this.observers, key),
+			`Could not remove observer: observer with key ${key} not exists`,
+		);
+		delete this.observers[key];
+	}
+
+	/**
+	 * Does array include at least one observer or not.
+	 */
+	public isEmpty = () => Object.values(this.observers).length === 0;
+}
diff --git a/packages/stocked/src/utils/areProxyMapsEqual.ts b/packages/stocked/src/utils/areProxyMapsEqual.ts
new file mode 100644
index 00000000..37eec298
--- /dev/null
+++ b/packages/stocked/src/utils/areProxyMapsEqual.ts
@@ -0,0 +1,22 @@
+import { samePxth } from 'pxth';
+
+import { createProxyMap } from './createProxyMap';
+import { ProxyMapSource } from '../typings/ProxyMapSource';
+
+export const areProxyMapsEqual = (map1: ProxyMapSource<unknown>, map2: ProxyMapSource<unknown>) => {
+	const proxyMap1 = createProxyMap(map1);
+	const proxyMap2 = createProxyMap(map2);
+
+	if (proxyMap1.entries().length !== proxyMap2.entries().length) {
+		return false;
+	}
+
+	for (const [key, value] of proxyMap1.entries()) {
+		const value2 = proxyMap2.get(key);
+		if (!proxyMap2.has(key) || !samePxth(value, value2!)) {
+			return false;
+		}
+	}
+
+	return true;
+};
diff --git a/packages/stocked/src/utils/createProxyMap.ts b/packages/stocked/src/utils/createProxyMap.ts
new file mode 100644
index 00000000..73a27486
--- /dev/null
+++ b/packages/stocked/src/utils/createProxyMap.ts
@@ -0,0 +1,44 @@
+import { createPxth, isPxth, joinPxths, Pxth } from 'pxth';
+import invariant from 'tiny-invariant';
+
+import { ProxyMapSource } from '../typings/ProxyMapSource';
+import { PxthMap } from '../typings/PxthMap';
+
+const getAllObjectKeys = (obj: object) => {
+	if (Array.isArray(obj)) {
+		return Object.keys(obj);
+	}
+
+	return [...Object.getOwnPropertyNames(obj), ...Object.getOwnPropertySymbols(obj)];
+};
+
+export const createProxyMap = <T>(mapSource: ProxyMapSource<T>) => {
+	const proxyMap = new PxthMap<Pxth<unknown>>();
+
+	if (isPxth(mapSource)) {
+		proxyMap.set(createPxth([]), mapSource);
+		return proxyMap;
+	}
+
+	const queue: Array<[key: Pxth<unknown>, value: Record<string | symbol, unknown>]> = [[createPxth([]), mapSource]];
+
+	while (queue.length) {
+		const [pathToObject, innerObject] = queue.shift()!;
+
+		for (const key of getAllObjectKeys(innerObject)) {
+			const item = innerObject[key] as Pxth<unknown> | ProxyMapSource<unknown>;
+
+			const pathToItem = joinPxths(pathToObject, createPxth([key]));
+
+			if (isPxth(item)) {
+				proxyMap.set(pathToItem, item);
+			} else if (typeof item === 'object' && item !== null) {
+				queue.push([pathToItem, item as Record<string | symbol, unknown>]);
+			} else {
+				invariant(false, 'Invalid proxy map passed.');
+			}
+		}
+	}
+
+	return proxyMap;
+};
diff --git a/packages/stocked/src/utils/hashPxth.ts b/packages/stocked/src/utils/hashPxth.ts
new file mode 100644
index 00000000..9af6d108
--- /dev/null
+++ b/packages/stocked/src/utils/hashPxth.ts
@@ -0,0 +1,3 @@
+import { getPxthSegments, Pxth } from 'pxth';
+
+export const hashPxth = <V>(pxth: Pxth<V>) => JSON.stringify(getPxthSegments(pxth));
diff --git a/packages/stocked/src/utils/mappingProxyUtils.ts b/packages/stocked/src/utils/mappingProxyUtils.ts
new file mode 100644
index 00000000..685dcf95
--- /dev/null
+++ b/packages/stocked/src/utils/mappingProxyUtils.ts
@@ -0,0 +1,13 @@
+import { isInnerPxth, Pxth, samePxth } from 'pxth';
+
+import { PxthMap } from '../typings/PxthMap';
+
+export const getInnerPaths = <V>(path: Pxth<V>, proxyMap: PxthMap<Pxth<unknown>>) => {
+	return proxyMap.entries().filter(([to]) => {
+		return isInnerPxth(path as Pxth<unknown>, to) || samePxth(path as Pxth<unknown>, to);
+	});
+};
+
+export const hasMappedParentPaths = <V>(path: Pxth<V>, proxyMap: PxthMap<Pxth<unknown>>) => {
+	return proxyMap.entries().some(([mappedPath]) => isInnerPxth(mappedPath, path as Pxth<unknown>));
+};
diff --git a/packages/stocked/src/utils/useInterceptors.ts b/packages/stocked/src/utils/useInterceptors.ts
new file mode 100644
index 00000000..bd4bd254
--- /dev/null
+++ b/packages/stocked/src/utils/useInterceptors.ts
@@ -0,0 +1,135 @@
+import { SetStateAction, useCallback, useEffect } from 'react';
+import cloneDeep from 'lodash/cloneDeep';
+import isFunction from 'lodash/isFunction';
+import unset from 'lodash/unset';
+import { deepGet, deepSet, getPxthSegments, isInnerPxth, Pxth, samePxth } from 'pxth';
+import invariant from 'tiny-invariant';
+
+import { Stock } from '../hooks/useStock';
+import { Observer } from '../typings';
+import { StockProxy } from '../typings/StockProxy';
+
+const shouldUseProxy = (proxy: StockProxy<unknown> | undefined, path: Pxth<unknown>) =>
+	proxy && (isInnerPxth(proxy.path, path) || samePxth(proxy.path, path));
+
+/**
+ * Helper function. Calls `standardCallback` if `proxy` is undefined, or if `path` isn't inner path of `proxy.path` variable.
+ * Otherwise, calls `proxiedCallback`.
+ * Passes args into function.
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export const intercept = <T extends (...args: any[]) => any>(
+	proxy: StockProxy<unknown> | undefined,
+	path: Pxth<unknown>,
+	standardCallback: T,
+	proxiedCallback: T,
+	args: Parameters<T>,
+): ReturnType<T> => {
+	if (!shouldUseProxy(proxy, path)) {
+		return standardCallback(...args);
+	} else {
+		return proxiedCallback(...args);
+	}
+};
+
+/** Intercepts stock's `observe`, `stopObserving` and `setValue` functions, if proxy is provided. */
+export const useInterceptors = <T extends object>(stock: Stock<T>, proxy?: StockProxy<unknown>): Stock<T> => {
+	const { watch, watchEffect, setValue, getValue, setValues, getValues } = stock;
+
+	useEffect(
+		() =>
+			invariant(
+				!proxy || proxy.isActive(),
+				'Cannot use not activated proxy. Maybe you forgot to call proxy.activate()?',
+			),
+		[proxy],
+	);
+
+	const interceptedWatch = useCallback(
+		<V>(path: Pxth<V>, observer: Observer<V>) =>
+			intercept(
+				proxy,
+				path as Pxth<unknown>,
+				watch,
+				(path: Pxth<V>, observer: Observer<V>) => proxy!.watch<V>(path, observer, watch),
+				[path, observer],
+			),
+		[watch, proxy],
+	);
+
+	const interceptedWatchEffect = useCallback(
+		<V>(path: Pxth<V>, observer: Observer<V>) =>
+			intercept(
+				proxy,
+				path as Pxth<unknown>,
+				watchEffect,
+				(path: Pxth<V>, observer: Observer<V>) => proxy!.watchEffect<V>(path, observer, watchEffect),
+				[path, observer],
+			),
+		[watchEffect, proxy],
+	);
+
+	const interceptedSetValue = useCallback(
+		<V>(path: Pxth<V>, value: SetStateAction<V>) =>
+			intercept(
+				proxy,
+				path as Pxth<unknown>,
+				setValue,
+				<V>(path: Pxth<V>, value: SetStateAction<V>) => proxy!.setValue(path, value, setValue, getValue),
+				[path as Pxth<unknown>, value],
+			),
+		[getValue, proxy, setValue],
+	);
+
+	const interceptedGetValue = useCallback(
+		<V>(path: Pxth<V>) =>
+			intercept(proxy, path as Pxth<unknown>, getValue, (path: Pxth<V>) => proxy!.getValue<V>(path, getValue), [
+				path,
+			]),
+		[proxy, getValue],
+	);
+
+	const interceptedGetValues = useCallback(() => {
+		let allValues = cloneDeep(getValues());
+
+		const proxiedValue = proxy!.getValue(proxy!.path, getValue);
+
+		allValues = deepSet(allValues, proxy!.path, proxiedValue) as T;
+
+		return allValues;
+	}, [proxy, getValues, getValue]);
+
+	const interceptedSetValues = useCallback(
+		(values: T) => {
+			const proxiedValue = deepGet(values, proxy!.path);
+
+			unset(values, getPxthSegments(proxy!.path));
+
+			proxy!.setValue(
+				proxy!.path,
+				proxiedValue,
+				(path, value) => {
+					values = deepSet(values, path, isFunction(value) ? value(deepGet(values, path)) : value) as T;
+				},
+				getValue,
+			);
+
+			setValues(values);
+		},
+		[getValue, proxy, setValues],
+	);
+
+	if (!proxy) {
+		return stock;
+	}
+
+	return {
+		...stock,
+		watch: interceptedWatch,
+		watchEffect: interceptedWatchEffect,
+		setValue: interceptedSetValue,
+		getValue: interceptedGetValue,
+		getValues: interceptedGetValues,
+		setValues: interceptedSetValues,
+	};
+};
diff --git a/packages/stocked/src/utils/useLazyRef.ts b/packages/stocked/src/utils/useLazyRef.ts
new file mode 100644
index 00000000..0054507a
--- /dev/null
+++ b/packages/stocked/src/utils/useLazyRef.ts
@@ -0,0 +1,15 @@
+import { MutableRefObject, useRef } from 'react';
+
+/**
+ * Same as `React.useRef` but with lazy initialization.
+ * @param initializer - function, which initializes value. Called once.
+ */
+export const useLazyRef = <T>(initializer: () => T): MutableRefObject<T> => {
+	const ref = useRef<T | null>(null);
+
+	if (ref.current === null) {
+		ref.current = initializer();
+	}
+
+	return ref as MutableRefObject<T>;
+};
diff --git a/packages/stocked/test/.eslintrc b/packages/stocked/test/.eslintrc
new file mode 100644
index 00000000..e34fb1f8
--- /dev/null
+++ b/packages/stocked/test/.eslintrc
@@ -0,0 +1,9 @@
+{
+    "env": {
+        "jest": true
+    },
+    "rules": {
+        "@typescript-eslint/no-empty-function": "off",
+        "@typescript-eslint/no-explicit-any": "off"
+    }
+}
diff --git a/packages/stocked/test/DummyProxy.ts b/packages/stocked/test/DummyProxy.ts
new file mode 100644
index 00000000..47efc015
--- /dev/null
+++ b/packages/stocked/test/DummyProxy.ts
@@ -0,0 +1,12 @@
+import { Pxth } from 'pxth';
+
+import { StockProxy } from '../src/typings/StockProxy';
+
+export class DummyProxy extends StockProxy<unknown> {
+	public getProxiedPath = <V>(path: Pxth<V>) => path;
+	public getNormalPath = <V>(path: Pxth<V>) => path;
+	public setValue = () => {};
+	public watch = () => () => {};
+	public watchEffect = () => () => {};
+	public getValue = <V>(path: Pxth<V>, defaultGetValue: <U>(path: Pxth<U>) => U) => defaultGetValue(path) as V;
+}
diff --git a/packages/stocked/test/components/ProxyProvider.test.tsx b/packages/stocked/test/components/ProxyProvider.test.tsx
new file mode 100644
index 00000000..19874ec0
--- /dev/null
+++ b/packages/stocked/test/components/ProxyProvider.test.tsx
@@ -0,0 +1,80 @@
+import React from 'react';
+import { render } from '@testing-library/react';
+import { createPxth } from 'pxth';
+import { describe, expect, it } from 'vitest';
+
+import { MappingProxy, ProxyProvider, Stock, StockRoot, useStockContext } from '../../src';
+
+const StockExtractor = ({ extract }: { extract: (stock: Stock<object>) => void }) => {
+	const stock = useStockContext();
+
+	extract(stock);
+
+	return <div />;
+};
+
+describe('ProxyProvider', () => {
+	it('should provide proxy', () => {
+		const proxy = new MappingProxy(
+			{
+				surname: createPxth(['user', 'name']),
+			},
+			createPxth(['user']),
+		);
+
+		proxy.activate();
+
+		let stock: Stock<object> | undefined = undefined;
+
+		render(
+			<StockRoot initialValues={{ user: { name: 'hello' } }}>
+				<ProxyProvider proxy={proxy}>
+					<StockExtractor extract={(value) => (stock = value)} />
+				</ProxyProvider>
+			</StockRoot>,
+		);
+
+		expect(stock!.getValue(createPxth(['user']))).toStrictEqual({
+			surname: 'hello',
+		});
+	});
+
+	it('should handle nested proxies', () => {
+		const proxy = new MappingProxy(
+			{
+				surname: createPxth(['user', 'name']),
+			},
+			createPxth(['user']),
+		);
+
+		const proxy2 = new MappingProxy(
+			{
+				name: {
+					surname: createPxth(['user', 'surname']),
+				},
+			},
+			createPxth(['user']),
+		);
+
+		proxy.activate();
+		proxy2.activate();
+
+		let stock: Stock<object> | undefined = undefined;
+
+		render(
+			<StockRoot initialValues={{ user: { name: 'hello' } }}>
+				<ProxyProvider proxy={proxy}>
+					<ProxyProvider proxy={proxy2}>
+						<StockExtractor extract={(value) => (stock = value)} />
+					</ProxyProvider>
+				</ProxyProvider>
+			</StockRoot>,
+		);
+
+		expect(stock!.getValue(createPxth(['user']))).toStrictEqual({
+			name: {
+				surname: 'hello',
+			},
+		});
+	});
+});
diff --git a/packages/stocked/test/components/StockRoot.test.tsx b/packages/stocked/test/components/StockRoot.test.tsx
new file mode 100644
index 00000000..25fe83cf
--- /dev/null
+++ b/packages/stocked/test/components/StockRoot.test.tsx
@@ -0,0 +1,80 @@
+import React from 'react';
+import { render } from '@testing-library/react';
+import { createPxth } from 'pxth';
+import { describe, expect, it, vi } from 'vitest';
+
+import { Stock, StockRoot, useStockContext } from '../../src';
+
+const StockExtractor = ({
+	children,
+	logStock,
+}: {
+	children?: React.ReactNode;
+	// eslint-disable-next-line @typescript-eslint/no-explicit-any
+	logStock: (stock: Stock<any>) => void;
+}) => {
+	const stock = useStockContext();
+
+	logStock(stock);
+
+	return <div>{children}</div>;
+};
+
+describe('StockRoot context testing', () => {
+	it('should pass clone of initialValues into context', () => {
+		const initialValues = {
+			hello: 'asdf',
+			parent: {
+				child: {
+					value: 'test',
+				},
+			},
+			array: [
+				0,
+				{
+					nested: 'value',
+				},
+			],
+		};
+
+		let realValues: object | undefined = undefined;
+
+		render(
+			<StockRoot initialValues={initialValues}>
+				<div>
+					<h2>Test component</h2>
+					<p>other component</p>
+					<StockExtractor logStock={(stock) => (realValues = stock.getValues())} />
+				</div>
+			</StockRoot>,
+		);
+
+		expect(realValues).toStrictEqual(initialValues);
+	});
+});
+
+describe('StockRoot performance testing', () => {
+	it('should never rerender StockRoot', () => {
+		const RerenderCounter: React.FC = vi.fn(() => <div />);
+
+		// eslint-disable-next-line @typescript-eslint/no-explicit-any
+		let stock: Stock<any> | undefined = undefined;
+
+		render(
+			<StockRoot initialValues={{}}>
+				<RerenderCounter />
+				<StockExtractor logStock={(_stock) => (stock = _stock)} />
+			</StockRoot>,
+		);
+
+		if (stock) {
+			// eslint-disable-next-line @typescript-eslint/no-explicit-any
+			const _stock = stock as any;
+			_stock.setValue(createPxth(['hello']), 'asdf');
+			_stock.setValue(createPxth(['nested', 'value']), 3);
+			_stock.setValue(createPxth(['asdfasd', 'asdf', 'asdf']), 'asdf');
+		}
+
+		expect(RerenderCounter).toBeCalledTimes(1);
+	});
+});
diff --git a/packages/stocked/test/hooks/useAllStockValues.test.tsx b/packages/stocked/test/hooks/useAllStockValues.test.tsx
new file mode 100644
index 00000000..d56036ac
--- /dev/null
+++ b/packages/stocked/test/hooks/useAllStockValues.test.tsx
@@ -0,0 +1,83 @@
+import React, { PropsWithChildren } from 'react';
+import { act, renderHook, waitFor } from '@testing-library/react';
+import { createPxth } from 'pxth';
+import { beforeEach, describe, expect, it } from 'vitest';
+
+import { Stock, StockContext, useAllStockValues, useStock } from '../../src';
+
+const initialValues = {
+	hello: 'test',
+	parent: {
+		child: 'value',
+	},
+	array: [
+		1,
+		{
+			value: 'second',
+		},
+	],
+};
+
+let stock: Stock<typeof initialValues>;
+
+const wrapper = ({ children }: PropsWithChildren) => (
+	<StockContext.Provider value={stock as unknown as Stock<object>}>{children}</StockContext.Provider>
+);
+
+const renderUseStockValues = () =>
+	renderHook(() => useAllStockValues(stock), {
+		wrapper,
+	});
+
+beforeEach(() => {
+	const { result } = renderHook(() => useStock({ initialValues }), { wrapper });
+	stock = result.current;
+});
+
+describe('Testing "useStockValues" with context stock', () => {
+	it('Should return new values after update using setValues', async () => {
+		const { result } = renderUseStockValues();
+
+		expect(result.current).toStrictEqual(initialValues);
+
+		const newValue = {
+			hello: 'changed',
+			parent: {
+				child: 'changed',
+			},
+			array: [
+				42,
+				{
+					value: 'changed',
+				},
+			],
+		};
+
+		act(() => {
+			stock.setValues(newValue);
+		});
+
+		await waitFor(() => expect(result.current).toStrictEqual(newValue));
+	});
+
+	it('Should return new values after update using setValue', async () => {
+		const { result } = renderUseStockValues();
+		expect(result.current).toStrictEqual(initialValues);
+
+		const newValue = [1, 42];
+
+		act(() => {
+			stock.setValue(createPxth(['array']), newValue);
+		});
+
+		await waitFor(() =>
+			expect(result.current).toStrictEqual({
+				hello: 'test',
+				parent: {
+					child: 'value',
+				},
+				array: [1, 42],
+			}),
+		);
+	});
+});
diff --git a/packages/stocked/test/hooks/useMappingProxy.test.ts b/packages/stocked/test/hooks/useMappingProxy.test.ts
new file mode 100644
index 00000000..2e4b6e4a
--- /dev/null
+++ b/packages/stocked/test/hooks/useMappingProxy.test.ts
@@ -0,0 +1,54 @@
+import { renderHook } from '@testing-library/react';
+import { createPxth, Pxth } from 'pxth';
+import { describe, expect, it } from 'vitest';
+
+import { ProxyMapSource, useMappingProxy } from '../../src';
+
+const renderUseMappingProxyHook = <T>(path: Pxth<unknown>, map: ProxyMapSource<T>) =>
+	renderHook(({ path, map }) => useMappingProxy(map, path), {
+		initialProps: {
+			path,
+			map,
+		},
+	});
+
+describe('useMappingProxy', () => {
+	it('should return activated proxy', () => {
+		const { result } = renderUseMappingProxyHook(createPxth([]), {});
+
+		expect(result.current.isActive()).toBeTruthy();
+	});
+
+	it('should return same mapping proxy, if argument values not changed', () => {
+		const { result, rerender } = renderUseMappingProxyHook(createPxth([]), { b: createPxth(['c']) });
+
+		const savedResult = result.current;
+
+		rerender({ path: createPxth([]), map: { b: createPxth(['c']) } });
+
+		expect(savedResult).toBe(result.current);
+	});
+
+	it('should return new mapping proxy, when map changes', () => {
+		const { result, rerender } = renderUseMappingProxyHook(createPxth([]), { b: createPxth(['c']) });
+
+		const savedResult = result.current;
+		rerender({ path: createPxth([]), map: { b: createPxth(['d']) } });
+
+		expect(savedResult).not.toBe(result.current);
+
+		const savedResult2 = result.current;
+		rerender({ path: createPxth([]), map: { b: createPxth(['d']) } });
+
+		expect(savedResult2).toBe(result.current);
+	});
+
+	it('should return new mapping proxy, when path changes', () => {
+		const { result, rerender } = renderUseMappingProxyHook(createPxth([]), { b: createPxth(['c']) });
+
+		const savedResult = result.current;
+		rerender({ path: createPxth(['a']), map: { b: createPxth(['c']) } });
+
+		expect(savedResult).not.toBe(result.current);
+	});
+});
diff --git a/packages/stocked/test/hooks/useObservers.test.ts b/packages/stocked/test/hooks/useObservers.test.ts
new file mode 100644
index 00000000..37628b7b
--- /dev/null
+++ b/packages/stocked/test/hooks/useObservers.test.ts
@@ -0,0 +1,311 @@
+import { act, renderHook } from '@testing-library/react';
+import { createPxth, getPxthSegments } from 'pxth';
+import { describe, expect, it, vi } from 'vitest';
+
+import { useObservers } from '../../src';
+
+const renderUseObserversHook = (values: object = {}) =>
+	renderHook(() =>
+		useObservers({
+			current: values,
+		}),
+	);
+
+describe('Observer tests', () => {
+	it('should call value observer', () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+
+		act(() => {
+			result.current.watch(createPxth(['b']), observer);
+			result.current.notifySubTree(createPxth(['b']), {
+				b: 0,
+			});
+		});
+
+		expect(observer).toBeCalled();
+	});
+
+	it('should call observer instantly with "watchEffect"', () => {
+		const { result } = renderUseObserversHook({
+			b: 'hello',
+		});
+
+		const observer = vi.fn();
+
+		act(() => {
+			result.current.watchEffect(createPxth(['b']), observer);
+		});
+
+		expect(observer).toBeCalled();
+	});
+
+	it('Should call all values observer', async () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+		let cleanup: () => void = () => {};
+
+		act(() => {
+			cleanup = result.current.watchAll(observer);
+			result.current.notifySubTree(createPxth(['b']), { b: 0 });
+		});
+
+		expect(observer).toBeCalled();
+		expect(result.current.isObserved(createPxth([]))).toBe(true);
+		cleanup();
+		expect(result.current.isObserved(createPxth([]))).toBe(false);
+	});
+
+	it('should call parent observer', () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+
+		act(() => {
+			result.current.watch(createPxth(['parent']), observer);
+			result.current.notifySubTree(createPxth(['parent', 'child']), {
+				parent: {
+					child: 0,
+				},
+			});
+		});
+
+		expect(observer).toBeCalled();
+	});
+
+	it('should call child observer', () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+
+		act(() => {
+			result.current.watch(createPxth(['parent', 'child']), observer);
+			result.current.notifySubTree(createPxth(['parent']), { parent: { child: 'b' } });
+		});
+
+		expect(observer).toBeCalled();
+	});
+
+	it('should call tree branch of observers', () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+
+		act(() => {
+			result.current.watch(createPxth(['parent']), observer);
+			result.current.watch(createPxth(['parent', 'child']), observer);
+			result.current.watch(createPxth(['parent', 'child', 'value']), observer);
+			result.current.notifySubTree(createPxth(['parent', 'child', 'value']), {
+				parent: {
+					child: {
+						value: 'b',
+					},
+				},
+			});
+		});
+
+		expect(observer).toBeCalledTimes(3);
+	});
+
+	it('should call all observers', () => {
+		const { result } = renderUseObserversHook();
+
+		const oberver = vi.fn();
+
+		act(() => {
+			result.current.watch(createPxth(['parent']), oberver);
+			result.current.watch(createPxth(['parent', 'child']), oberver);
+			result.current.watch(createPxth(['parent', 'child', 'value']), oberver);
+			result.current.notifyAll({ parent: { child: { value: 'b' } } });
+		});
+
+		expect(oberver).toBeCalledTimes(3);
+	});
+
+	it("shouldn't call observer", () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+
+		act(() => {
+			result.current.watch(createPxth(['parent', 'notInBranch']), observer);
+			result.current.notifySubTree(createPxth(['parent', 'child', 'value']), {
+				parent: {
+					child: {
+						value: 'newValue',
+					},
+					notInBranch: {
+						value: 'asdf',
+					},
+				},
+			});
+		});
+
+		expect(observer).not.toBeCalled();
+	});
+
+	it('should receive correct value', () => {
+		const { result } = renderUseObserversHook();
+
+		const value = 'hello';
+
+		const parentObserver = vi.fn();
+		const childObserver = vi.fn();
+
+		act(() => {
+			result.current.watch(createPxth(['parent']), parentObserver);
+			result.current.watch(createPxth(['parent', 'child']), childObserver);
+			result.current.notifySubTree(createPxth(['parent', 'child']), {
+				parent: {
+					child: value,
+				},
+			});
+		});
+
+		expect(childObserver).toBeCalledWith(value);
+		expect(parentObserver).toBeCalledWith({ child: value });
+	});
+});
+
+describe('Is observed test', () => {
+	it('should be observed', () => {
+		const { result } = renderUseObserversHook();
+
+		act(() => {
+			result.current.watch(createPxth(['value']), vi.fn());
+		});
+
+		expect(result.current.isObserved(createPxth(['value']))).toBeTruthy();
+		expect(result.current.isObserved(createPxth(['asdf']))).toBeFalsy();
+	});
+	it('should be observed denormalized path', () => {
+		const { result } = renderUseObserversHook();
+
+		act(() => {
+			result.current.watch(createPxth(['arr', '0']), vi.fn());
+		});
+
+		expect(result.current.isObserved(createPxth(['arr', '0']))).toBeTruthy();
+		expect(result.current.isObserved(createPxth(['arr', '3']))).toBeFalsy();
+	});
+});
+
+describe('Removing observers test', () => {
+	it('should remove observer', () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+
+		act(() => {
+			const cleanup = result.current.watch(createPxth(['value']), observer);
+
+			result.current.notifySubTree(createPxth(['value']), { value: '2' });
+
+			cleanup();
+
+			result.current.notifySubTree(createPxth(['value']), { value: '3' });
+		});
+
+		expect(observer).toBeCalledTimes(1);
+	});
+
+	it('should remove denormalized path observer', () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+
+		act(() => {
+			const cleanup = result.current.watch(createPxth(['arr', '0']), observer);
+
+			result.current.notifySubTree(createPxth(['arr', '0']), { arr: [0] });
+			result.current.notifySubTree(createPxth(['arr', '0']), { arr: [1] });
+
+			cleanup();
+
+			result.current.notifySubTree(createPxth(['arr', '0']), { arr: [2] });
+			result.current.notifySubTree(createPxth(['arr', '0']), { arr: [3] });
+		});
+
+		expect(observer).toBeCalledTimes(2);
+	});
+});
+
+describe('Batch observers tests', () => {
+	it('should call observer', () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+
+		act(() => {
+			result.current.watchBatchUpdates(observer);
+
+			result.current.notifySubTree(createPxth(['value']), {
+				value: '2',
+			});
+		});
+
+		expect(observer).toBeCalled();
+	});
+
+	it('should call observer on any update with arguments', () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+
+		act(() => {
+			result.current.watchBatchUpdates(observer);
+			result.current.watch(createPxth(['parent', 'child']), vi.fn());
+			result.current.watch(createPxth(['parent']), vi.fn());
+			result.current.watch(createPxth(['value']), vi.fn());
+
+			result.current.notifySubTree(createPxth(['parent', 'child', 'hello']), {
+				value: 'asdf',
+				parent: {
+					child: {
+						hello: '2',
+					},
+				},
+			});
+		});
+
+		expect(observer).toBeCalled();
+		expect(getPxthSegments(observer.mock.calls[0][0].origin)).toStrictEqual(['parent', 'child', 'hello']);
+		expect(observer.mock.calls[0][0].paths.map(getPxthSegments)).toStrictEqual([['parent', 'child'], ['parent']]);
+		expect(observer).toBeCalledWith({
+			origin: expect.anything(),
+			paths: expect.anything(),
+			values: {
+				value: 'asdf',
+				parent: {
+					child: {
+						hello: '2',
+					},
+				},
+			},
+		});
+	});
+
+	it('should remove observer', () => {
+		const { result } = renderUseObserversHook();
+
+		const observer = vi.fn();
+
+		act(() => {
+			const cleanup = result.current.watchBatchUpdates(observer);
+
+			result.current.notifySubTree(createPxth(['value']), {
+				value: '2',
+			});
+
+			cleanup();
+
+			result.current.notifySubTree(createPxth(['value']), {
+				value: 'h',
+			});
+		});
+
+		expect(observer).toBeCalledTimes(1);
+	});
+});
diff --git a/packages/stocked/test/hooks/useStock.test.ts b/packages/stocked/test/hooks/useStock.test.ts
new file mode 100644
index 00000000..66b47445
--- /dev/null
+++ b/packages/stocked/test/hooks/useStock.test.ts
@@ -0,0 +1,294 @@
+import { act, renderHook } from '@testing-library/react';
+import { createPxth } from 'pxth';
+import { describe, expect, it, vi } from 'vitest';
+
+import { StockConfig, useStock } from '../../src';
+
+const renderUseStockHook = (initialValues: object) =>
+	renderHook((props: StockConfig<object>) => useStock(props), {
+		initialProps: { initialValues },
+	});
+
+describe('Value setting and getting', () => {
+	it('should not mutate initial values', () => {
+		const testDateValue = new Date();
+		const initialValues = {
+			first: 'a',
+			second: 'b',
+			nested: {
+				value: 'c',
+			},
+			array: [
+				{
+					prop1: 15,
+				},
+				{
+					prop2: testDateValue,
+				},
+			],
+		};
+
+		const { result } = renderUseStockHook(initialValues);
+
+		act(() => {
+			result.current.setValue(createPxth(['first']), 'b');
+			result.current.setValue(createPxth(['nested.value']), 'b');
+			result.current.setValue(createPxth(['array[0].prop1']), 'b');
+		});
+
+		expect(initialValues).toStrictEqual({
+			first: 'a',
+			second: 'b',
+			nested: {
+				value: 'c',
+			},
+			array: [
+				{
+					prop1: 15,
+				},
+				{
+					prop2: testDateValue,
+				},
+			],
+		});
+	});
+
+	it('should set value', () => {
+		const { result } = renderUseStockHook({
+			first: 'a',
+			second: 'b',
+		});
+
+		act(() => {
+			result.current.setValue(createPxth(['first']), 'test');
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			first: 'test',
+			second: 'b',
+		});
+
+		act(() => {
+			result.current.setValue(createPxth(['second']), 0);
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			first: 'test',
+			second: 0,
+		});
+	});
+
+	it('should set value via updater function', () => {
+		const { result } = renderUseStockHook({
+			first: 'a',
+			second: {
+				third: 'b',
+			},
+		});
+
+		act(() => {
+			result.current.setValue(createPxth<string>(['first']), (prevValue: string) => prevValue + 'b');
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			first: 'ab',
+			second: {
+				third: 'b',
+			},
+		});
+
+		act(() => {
+			result.current.setValue(createPxth<object>(['second']), (prevValue: object) => ({ ...prevValue, new: 5 }));
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			first: 'ab',
+			second: {
+				third: 'b',
+				new: 5,
+			},
+		});
+	});
+
+	it('should set nested value', () => {
+		const { result } = renderUseStockHook({
+			nested: {
+				value: 'a',
+				second: {
+					value: 'b',
+					third: {
+						fourth: 'c',
+					},
+				},
+			},
+		});
+
+		act(() => {
+			result.current.setValue(createPxth(['nested', 'value']), 'b');
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			nested: {
+				value: 'b',
+				second: {
+					value: 'b',
+					third: {
+						fourth: 'c',
+					},
+				},
+			},
+		});
+
+		act(() => {
+			result.current.setValue(createPxth(['nested', 'second', 'value']), 'c');
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			nested: {
+				value: 'b',
+				second: {
+					value: 'c',
+					third: {
+						fourth: 'c',
+					},
+				},
+			},
+		});
+
+		act(() => {
+			result.current.setValue(createPxth(['nested', 'second', 'third', 'fourth']), 'd');
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			nested: {
+				value: 'b',
+				second: {
+					value: 'c',
+					third: {
+						fourth: 'd',
+					},
+				},
+			},
+		});
+
+		act(() => {
+			result.current.setValue(createPxth(['nested', 'second']), { value: 'd', third: { fourth: 'e' } });
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			nested: {
+				value: 'b',
+				second: {
+					value: 'd',
+					third: {
+						fourth: 'e',
+					},
+				},
+			},
+		});
+	});
+
+	it('should set array value', () => {
+		const { result } = renderUseStockHook({
+			arr: [
+				{
+					p1: 'a',
+				},
+				{
+					p2: 'b',
+				},
+			],
+		});
+
+		act(() => {
+			result.current.setValue(createPxth(['arr', '0', 'p1']), 0);
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			arr: [
+				{
+					p1: 0,
+				},
+				{
+					p2: 'b',
+				},
+			],
+		});
+
+		act(() => {
+			result.current.setValue(createPxth(['arr', '1', 'p2']), null);
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			arr: [
+				{
+					p1: 0,
+				},
+				{
+					p2: null,
+				},
+			],
+		});
+	});
+
+	it('should send array to observers', () => {
+		const { result } = renderUseStockHook({
+			arr: ['val1', 'val2'],
+		});
+
+		const observer = vi.fn();
+
+		const newValues = ['val3', 'val4'];
+
+		act(() => {
+			result.current.watch(createPxth(['arr']), observer);
+			result.current.setValue(createPxth(['arr']), newValues);
+		});
+
+		expect(observer.mock.calls[0][0]).toStrictEqual(newValues);
+	});
+
+	it('should set all values', () => {
+		const { result } = renderUseStockHook({});
+
+		act(() => {
+			result.current.setValues({
+				hello: 'asdf',
+				b: {
+					c: 0,
+				},
+			});
+		});
+
+		expect(result.current.getValues()).toStrictEqual({
+			hello: 'asdf',
+			b: {
+				c: 0,
+			},
+		});
+	});
+
+	it('should reset values to initial', () => {
+		const initialValues = {
+			first: 'a',
+			second: {
+				third: 'b',
+			},
+		};
+
+		const observer = vi.fn();
+
+		const { result } = renderUseStockHook(initialValues);
+
+		act(() => {
+			result.current.watch(createPxth(['second']), observer);
+			result.current.setValue(createPxth(['second']), { third: 'new' });
+			result.current.resetValues();
+		});
+
+		expect(result.current.getValues()).toStrictEqual(initialValues);
+		expect(observer.mock.calls[1][0]).toStrictEqual({
+			third: 'b',
+		});
+	});
+});
diff --git a/packages/stocked/test/hooks/useStockContext.test.tsx b/packages/stocked/test/hooks/useStockContext.test.tsx
new file mode 100644
index 00000000..8f34b95c
--- /dev/null
+++ b/packages/stocked/test/hooks/useStockContext.test.tsx
@@ -0,0 +1,99 @@
+import React, { PropsWithChildren } from 'react';
+import { act, renderHook } from '@testing-library/react';
+import { createPxth, getPxthSegments } from 'pxth';
+import { describe, expect, it, vi } from 'vitest';
+
+import { StockContext, useStock, useStockContext } from '../../src';
+import { ProxyContext } from '../../src/components/ProxyContext';
+import { DummyProxy } from '../DummyProxy';
+
+describe('Test "useStockContext" hook', () => {
+	it('should throw error', () => {
+		expect(() => renderHook(() => useStockContext())).toThrow();
+	});
+
+	it('should return stock from context', () => {
+		const {
+			result: { current: stock },
+		} = renderHook(() => useStock({ initialValues: {} }));
+
+		const wrapper = ({ children }: PropsWithChildren) => (
+			<StockContext.Provider value={stock}>{children}</StockContext.Provider>
+		);
+
+		const { result } = renderHook(() => useStockContext(), { wrapper });
+
+		expect(result.current).toBe(stock);
+	});
+
+	it('should return stock from arguments', () => {
+		const {
+			result: { current: stock },
+		} = renderHook(() => useStock({ initialValues: {} }));
+
+		const { result } = renderHook(() => useStockContext(stock));
+
+		expect(result.current).toBe(stock);
+	});
+
+	it('should take proxy from context', () => {
+		const {
+			result: { current: stock },
+		} = renderHook(() => useStock({ initialValues: {} }));
+
+		const proxy = new DummyProxy(createPxth(['asdf']));
+
+		const watch = vi.fn();
+
+		proxy.watch = watch;
+
+		proxy.activate();
+
+		const wrapper = ({ children }: PropsWithChildren) => (
+			<ProxyContext.Provider value={proxy}>{children}</ProxyContext.Provider>
+		);
+
+		const { result } = renderHook(() => useStockContext(stock), { wrapper });
+
+		expect(result.current === stock).toBeFalsy();
+
+		const observer = vi.fn();
+
+		act(() => {
+			result.current.watch(createPxth(['asdf']), observer);
+			result.current.watch(createPxth(['aaaa']), () => {});
+		});
+
+		expect(getPxthSegments(watch.mock.calls[watch.mock.calls.length - 1][0])).toStrictEqual(['asdf']);
+
+		expect(watch).lastCalledWith(expect.anything(), observer, expect.any(Function));
+	});
+
+	it('should take proxy from arguments', () => {
+		const {
+			result: { current: stock },
+		} = renderHook(() => useStock({ initialValues: {} }));
+
+		const proxy = new DummyProxy(createPxth(['asdf']));
+
+		const watch = vi.fn();
+
+		proxy.watch = watch;
+
+		proxy.activate();
+
+		const { result } = renderHook(() => useStockContext(stock, proxy));
+
+		expect(result.current == stock).toBeFalsy();
+
+		const observer = vi.fn();
+
+		act(() => {
+			result.current.watch(createPxth(['asdf']), observer);
+			result.current.watch(createPxth(['aaaa']), () => {});
+		});
+
+		expect(getPxthSegments(watch.mock.calls[watch.mock.calls.length - 1][0])).toStrictEqual(['asdf']);
+		expect(watch).lastCalledWith(expect.anything(), observer, expect.any(Function));
+	});
+});
diff --git a/packages/stocked/test/hooks/useStockState.test.tsx b/packages/stocked/test/hooks/useStockState.test.tsx
new file mode 100644
index 00000000..9c0f7ddb
--- /dev/null
+++ b/packages/stocked/test/hooks/useStockState.test.tsx
@@ -0,0 +1,97 @@
+import React, { PropsWithChildren } from 'react';
+import { act, renderHook, waitFor } from '@testing-library/react';
+import { createPxth, Pxth } from 'pxth';
+import { beforeEach, describe, expect, it } from 'vitest';
+
+import { Stock, StockContext, useStock, useStockState } from '../../src';
+
+const initialValues = {
+	hello: 'test',
+	parent: {
+		child: 'value',
+	},
+	value: 0,
+	array: [
+		1,
+		{
+			value: 'second',
+		},
+	],
+};
+
+let stock: Stock<typeof initialValues>;
+
+const wrapper = ({ children }: PropsWithChildren) => (
+	<StockContext.Provider value={stock as unknown as Stock<object>}>{children}</StockContext.Provider>
+);
+
+const renderUseStockState = (path: Pxth<unknown>, useContext = true) =>
+	renderHook(() => useStockState(path, useContext ? undefined : stock), {
+		wrapper: useContext ? wrapper : undefined,
+	});
+
+beforeEach(() => {
+	const { result } = renderHook(() => useStock({ initialValues }), { wrapper });
+	stock = result.current;
+});
+
+const testWrapper = (testName: string, useContext: boolean) => {
+	describe(testName, () => {
+		it('Should set value via setter', async () => {
+			const { result } = renderUseStockState(createPxth(['parent', 'child']), useContext);
+
+			const [, setValue] = result.current;
+			const newValue = 'newValue';
+
+			act(() => {
+				setValue(newValue);
+			});
+
+			await waitFor(() => expect(result.current[0]).toBe(newValue));
+		});
+
+		it('Should set value via updater function', async () => {
+			const { result } = renderUseStockState(createPxth(['parent', 'child']), useContext);
+
+			const [, setValue] = result.current;
+
+			act(() => {
+				setValue(() => 'value_changed_via_updater');
+			});
+
+			await waitFor(() => expect(result.current[0]).toBe('value_changed_via_updater'));
+		});
+
+		it('Value updater should receive actual value', async () => {
+			const { result } = renderUseStockState(createPxth(['value']), useContext);
+
+			const [, setValue] = result.current;
+			const updater = (value: number) => ++value;
+
+			act(() => {
+				setValue(updater);
+				setValue(updater);
+				setValue(updater);
+			});
+
+			await waitFor(() => expect(result.current[0]).toBe(3));
+		});
+
+		it('Should update when externally set value', async () => {
+			const { result } = renderUseStockState(createPxth(['hello']), useContext);
+
+			expect(result.current[0]).toBe(initialValues.hello);
+
+			const newValue = 'newValue';
+
+			act(() => {
+				stock.setValue(createPxth(['hello']), newValue);
+			});
+
+			await waitFor(() => expect(result.current[0]).toBe(newValue));
+		});
+	});
+};
+
+testWrapper('Testing "useStockState" with context stock', true);
+testWrapper('Testing "useStockState" with provided into arguments stock', false);
diff --git a/packages/stocked/test/hooks/useStockValue.test.tsx b/packages/stocked/test/hooks/useStockValue.test.tsx
new file mode 100644
index 00000000..806258d1
--- /dev/null
+++ b/packages/stocked/test/hooks/useStockValue.test.tsx
@@ -0,0 +1,82 @@
+import React, { PropsWithChildren } from 'react';
+import { act, renderHook, waitFor } from '@testing-library/react';
+import { createPxth, Pxth } from 'pxth';
+import { beforeEach, describe, expect, it } from 'vitest';
+
+import { Stock, StockContext, useStock, useStockValue } from '../../src';
+
+const initialValues = {
+	hello: 'test',
+	parent: {
+		child: 'value',
+	},
+	array: [
+		1,
+		{
+			value: 'second',
+		},
+	],
+};
+
+let stock: Stock<typeof initialValues>;
+
+const wrapper = ({ children }: PropsWithChildren) => (
+	<StockContext.Provider value={stock as unknown as Stock<object>}>{children}</StockContext.Provider>
+);
+
+const renderUseStockValue = (path: Pxth<unknown>, useContext = true) =>
+	renderHook(({ path }: { path: Pxth<unknown> }) => useStockValue(path, useContext ? undefined : stock), {
+		wrapper: useContext ? wrapper : undefined,
+		initialProps: {
+			path,
+		},
+	});
+
+beforeEach(() => {
+	const { result } = renderHook(() => useStock({ initialValues }), { wrapper });
+	stock = result.current;
+});
+
+describe('Testing "useStockValue" with context stock', () => {
+	it('Should return new value after update', async () => {
+		const { result } = renderUseStockValue(createPxth(['hello']));
+
+		expect(result.current).toBe(initialValues.hello);
+
+		const newValue = 'newValue';
+
+		act(() => {
+			stock.setValue(createPxth(['hello']), newValue);
+		});
+
+		await waitFor(() => expect(result.current).toBe(newValue));
+	});
+
+	// TODO decide on the behavior when path changes
+	it.skip('should return new value when path changes', async () => {
+		const initialPath = createPxth(['hello']);
+		const otherPath = createPxth(['parent', 'child']);
+
+		const { result, rerender } = renderUseStockValue(initialPath);
+
+		rerender({ path: otherPath });
+
+		expect(result.current).toBe('value');
+	});
+});
+
+describe('Testing "useStockValue" with provided stock', () => {
+	it('Should return new value after update', async () => {
+		const { result } = renderUseStockValue(createPxth(['hello']), false);
+
+		expect(result.current).toBe(initialValues.hello);
+
+		const newValue = 'newValue';
+
+		act(() => {
+			stock.setValue(createPxth(['hello']), newValue);
+		});
+
+		await waitFor(() => expect(result.current).toBe(newValue));
+	});
+});
diff --git a/packages/stocked/test/typings/MappingProxy.test.ts b/packages/stocked/test/typings/MappingProxy.test.ts
new file mode 100644
index 00000000..7aad25e0
--- /dev/null
+++ b/packages/stocked/test/typings/MappingProxy.test.ts
@@ -0,0 +1,651 @@
+import { SetStateAction } from 'react';
+import isFunction from 'lodash/isFunction';
+import { createPxth, deepGet, deepSet, getPxthSegments, Pxth, samePxth } from 'pxth';
+import { describe, expect, it, Mock, vi } from 'vitest';
+
+import { MappingProxy, Observer, ProxyMapSource } from '../../src/typings';
+
+type RegisteredUser = {
+	registrationDate: Date;
+	personalData: {
+		name: {
+			firstName: string;
+			lastName: string;
+		};
+		birthday: Date;
+	};
+};
+
+const getUserMapSource = (): ProxyMapSource<RegisteredUser> => {
+	return {
+		registrationDate: createPxth<Date>(['registeredUser', 'dates', 'registration']),
+		personalData: {
+			name: {
+				firstName: createPxth(['registeredUser', 'name']),
+				lastName: createPxth(['registeredUser', 'surname']),
+			},
+			birthday: createPxth<Date>(['dateOfBirth']),
+		},
+	};
+};
+
+describe('Mapping proxy', () => {
+	it('should instantiate', () => {
+		expect(() => new MappingProxy({}, createPxth(['']))).not.toThrowError();
+	});
+
+	it('observe/stopObserving value', () => {
+		const proxy = new MappingProxy(
+			{ hello: createPxth(['a', 'b', 'c']), bye: createPxth(['a', 'b', 'd']) },
+			createPxth(['asdf']),
+		);
+
+		const defaultObserve = vi.fn();
+		const observer = vi.fn();
+
+		defaultObserve.mockReturnValue(0);
+
+		proxy.watch(createPxth(['asdf', 'hello']), observer, defaultObserve);
+
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['a', 'b', 'c']);
+
+		defaultObserve.mockClear();
+
+		proxy.watch(createPxth(['asdf', 'bye']), observer, defaultObserve);
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['a', 'b', 'd']);
+	});
+
+	it('observe/stopObserving value - with "watchEffect"', () => {
+		const proxy = new MappingProxy(
+			{ hello: createPxth(['a', 'b', 'c']), bye: createPxth(['a', 'b', 'd']) },
+			createPxth(['asdf']),
+		);
+
+		const defaultObserve = vi.fn();
+		const observer = vi.fn();
+
+		defaultObserve.mockReturnValue(0);
+
+		proxy.watchEffect(createPxth(['asdf', 'hello']), observer, defaultObserve);
+
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['a', 'b', 'c']);
+
+		defaultObserve.mockClear();
+
+		proxy.watchEffect(createPxth(['asdf', 'bye']), observer, defaultObserve);
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['a', 'b', 'd']);
+	});
+
+	it('observe/stopObserving (empty mapping path)', () => {
+		const proxy = new MappingProxy(createPxth(['a', 'd', 'c']), createPxth(['asdf']));
+
+		const defaultObserve = vi.fn();
+		const observer = vi.fn();
+
+		defaultObserve.mockReturnValue(0);
+
+		proxy.watch(createPxth(['asdf']), observer, defaultObserve);
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['a', 'd', 'c']);
+
+		defaultObserve.mockClear();
+	});
+
+	it('observe/stopObserving value (empty parent path)', () => {
+		const proxy = new MappingProxy(
+			{ hello: createPxth(['a', 'd', 'c']), bye: createPxth(['b', 'b', 'd']) },
+			createPxth([]),
+		);
+
+		const defaultObserve = vi.fn();
+		const observer = vi.fn();
+
+		defaultObserve.mockReturnValue(0);
+
+		proxy.watch(createPxth(['hello']), observer, defaultObserve);
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['a', 'd', 'c']);
+
+		defaultObserve.mockClear();
+
+		proxy.watch(createPxth(['bye']), observer, defaultObserve);
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['b', 'b', 'd']);
+	});
+
+	it('calling observer fns', () => {
+		const fullUser = {
+			personalData: {
+				name: {
+					firstName: 'Hello',
+					lastName: 'World',
+				},
+				birthday: new Date('2020.12.26'),
+			},
+			registrationDate: new Date('2020.12.31'),
+			notify: true,
+		};
+		const rawData = {
+			registeredUser: {
+				name: fullUser.personalData.name.firstName,
+				surname: fullUser.personalData.name.lastName,
+				dates: {
+					registration: fullUser.registrationDate,
+				},
+			},
+			dateOfBirth: fullUser.personalData.birthday,
+		};
+
+		const proxy = new MappingProxy<RegisteredUser>(getUserMapSource(), createPxth(['registeredUser']));
+
+		const observers: Observer<unknown>[] = [];
+
+		const defaultObserve = vi.fn((_, observer) => {
+			observers.push(observer);
+			return () => observers.splice(observers.indexOf(observer), 1);
+		});
+		const observer = vi.fn();
+
+		proxy.watch(createPxth(['registeredUser', 'personalData', 'name', 'firstName']), observer, defaultObserve);
+
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['registeredUser', 'name']);
+
+		defaultObserve.mockClear();
+
+		proxy.watch(createPxth(['registeredUser', 'personalData', 'name']), observer, defaultObserve);
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['registeredUser']);
+
+		defaultObserve.mockClear();
+
+		proxy.watch(createPxth(['registeredUser', 'personalData']), observer, defaultObserve);
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual([]);
+
+		observers[0](rawData.registeredUser.name);
+
+		expect(observer).toBeCalledWith(fullUser.personalData.name.firstName);
+
+		observer.mockClear();
+
+		observers[1](rawData.registeredUser);
+		expect(observer).toBeCalledWith(fullUser.personalData.name);
+
+		observer.mockClear();
+
+		observers[2](rawData);
+		expect(observer).toBeCalledWith(fullUser.personalData);
+	});
+
+	it('calling observer fns - with watchEffect', () => {
+		const fullUser = {
+			personalData: {
+				name: {
+					firstName: 'Hello',
+					lastName: 'World',
+				},
+				birthday: new Date('2020.12.26'),
+			},
+			registrationDate: new Date('2020.12.31'),
+			notify: true,
+		};
+		const rawData = {
+			registeredUser: {
+				name: fullUser.personalData.name.firstName,
+				surname: fullUser.personalData.name.lastName,
+				dates: {
+					registration: fullUser.registrationDate,
+				},
+			},
+			dateOfBirth: fullUser.personalData.birthday,
+		};
+
+		const proxy = new MappingProxy<RegisteredUser>(getUserMapSource(), createPxth(['registeredUser']));
+
+		const observers: Observer<unknown>[] = [];
+
+		const defaultObserve = vi.fn((path, observer) => {
+			observer(deepGet(rawData, path));
+			observers.push(observer);
+			return () => observers.splice(observers.indexOf(observer), 1);
+		});
+		const observer = vi.fn();
+
+		proxy.watchEffect(
+			createPxth(['registeredUser', 'personalData', 'name', 'firstName']),
+			observer,
+			defaultObserve,
+		);
+
+		expect(observer).toBeCalledWith(fullUser.personalData.name.firstName);
+		observer.mockClear();
+
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['registeredUser', 'name']);
+
+		defaultObserve.mockClear();
+
+		proxy.watchEffect(createPxth(['registeredUser', 'personalData', 'name']), observer, defaultObserve);
+
+		expect(observer).toBeCalledWith(fullUser.personalData.name);
+		observer.mockClear();
+
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual(['registeredUser']);
+
+		defaultObserve.mockClear();
+
+		proxy.watchEffect(createPxth(['registeredUser', 'personalData']), observer, defaultObserve);
+
+		expect(observer).toBeCalledWith(fullUser.personalData);
+		observer.mockClear();
+
+		expect(getPxthSegments(defaultObserve.mock.calls[0][0])).toStrictEqual([]);
+	});
+
+	it('calling observer fns (complex cases)', () => {
+		const fullData = {
+			truck: {
+				driver: {
+					name: 'Hello',
+					surname: 'Bye',
+					phone: '+333533333',
+				},
+				info: {
+					trailerNo: 'AAA111',
+					truckNo: 'AAA222',
+				},
+				owner: {
+					companyId: 0,
+					companyName: 'Hello World',
+					contacts: [
+						{
+							contactId: 0,
+							name: 'Bill Bill',
+							contactInfo: {
+								email: 'bill.bill@mail.loc',
+								phone: '+333 333 333',
+							},
+						},
+					],
+				},
+			},
+		};
+		const rawData = {
+			truck: {
+				plate_no: fullData.truck.info.truckNo,
+			},
+			trailer: {
+				plate_no: fullData.truck.info.trailerNo,
+			},
+			company: fullData.truck.owner.companyName,
+			contact_name: fullData.truck.owner.contacts[0].name,
+			contact_id: fullData.truck.owner.contacts[0].contactId,
+			contact_email: fullData.truck.owner.contacts[0].contactInfo.email,
+			contact_phone: fullData.truck.owner.contacts[0].contactInfo.phone,
+		};
+
+		const proxy = new MappingProxy<{
+			info: {
+				truckNo: string;
+				trailerNo: string;
+			};
+			owner: {
+				name: string;
+				contactId: number;
+				contactInfo: {
+					email: string;
+					phone: string;
+				};
+			};
+		}>(
+			{
+				info: {
+					truckNo: createPxth(['truck', 'plate_no']),
+					trailerNo: createPxth(['trailer', 'plate_no']),
+				},
+				owner: {
+					name: createPxth(['contact_name']),
+					contactId: createPxth(['contact_id']),
+					contactInfo: {
+						email: createPxth(['contact_email']),
+						phone: createPxth(['contact_phone']),
+					},
+				},
+			},
+			createPxth(['truck']),
+		);
+
+		const observers: Observer<unknown>[] = [];
+
+		const defaultWatch = vi.fn((_, observer) => {
+			observers.push(observer);
+			return () => observers.splice(observers.indexOf(observer), 1);
+		});
+		const observer = vi.fn();
+
+		proxy.watch(createPxth(['truck', 'owner']), observer, defaultWatch);
+		expect(getPxthSegments(defaultWatch.mock.calls[0][0])).toStrictEqual([]);
+
+		defaultWatch.mockClear();
+
+		proxy.watch(createPxth(['truck', 'info']), observer, defaultWatch);
+		expect(getPxthSegments(defaultWatch.mock.calls[0][0])).toStrictEqual([]);
+
+		observers[0](rawData);
+		expect(observer).toBeCalledWith(fullData.truck.owner.contacts[0]);
+
+		observer.mockClear();
+
+		observers[1](rawData);
+		expect(observer).toBeCalledWith(fullData.truck.info);
+	});
+
+	it('should set proxied value', () => {
+		const proxy = new MappingProxy<RegisteredUser>(getUserMapSource(), createPxth(['registeredUser']));
+
+		const defaultSetValue = vi.fn();
+		const defaultGetValue = vi.fn();
+
+		proxy.setValue(
+			createPxth(['registeredUser', 'personalData', 'name', 'firstName']),
+			'Hello',
+			defaultSetValue,
+			defaultGetValue,
+		);
+
+		expect(getPxthSegments(defaultSetValue.mock.calls[0][0])).toStrictEqual(['registeredUser', 'name']);
+		expect(defaultSetValue).toBeCalledWith(expect.anything(), 'Hello');
+
+		defaultSetValue.mockClear();
+
+		proxy.setValue(
+			createPxth(['registeredUser', 'personalData', 'name']),
+			{ firstName: 'As', lastName: 'Df' },
+			defaultSetValue,
+			defaultGetValue,
+		);
+
+		expect(
+			defaultSetValue.mock.calls.findIndex(
+				([path, value]) => samePxth(path, createPxth(['registeredUser', 'name'])) && value === 'As',
+			) !== -1,
+		).toBeTruthy();
+
+		expect(
+			defaultSetValue.mock.calls.findIndex(
+				([path, value]) => samePxth(path, createPxth(['registeredUser', 'surname'])) && value === 'Df',
+			) !== -1,
+		).toBeTruthy();
+	});
+
+	it('should set proxied value based on the old value', () => {
+		const proxy = new MappingProxy<RegisteredUser>(getUserMapSource(), createPxth(['registeredUser']));
+
+		const defaultSetValue = vi.fn();
+		const getStringValue = vi.fn(() => 'old value');
+
+		proxy.setValue(
+			createPxth(['registeredUser', 'personalData', 'name', 'firstName']),
+			(old) => old + ' updated',
+			defaultSetValue,
+			getStringValue as <U>(path: Pxth<U>) => U,
+		);
+
+		// eslint-disable-next-line @typescript-eslint/no-explicit-any
+		expect(getPxthSegments((getStringValue as Mock<(...args: any[]) => any>).mock.calls[0][0])).toStrictEqual([
+			'registeredUser',
+			'name',
+		]);
+		expect(getPxthSegments(defaultSetValue.mock.calls[0][0])).toStrictEqual(['registeredUser', 'name']);
+		expect(defaultSetValue).toBeCalledWith(expect.anything(), 'old value updated');
+
+		defaultSetValue.mockClear();
+		const getObjectValue = vi.fn(() => ({ firstName: 'As', lastName: 'Df' })) as <U>(path: Pxth<U>) => U;
+
+		proxy.setValue(
+			createPxth<object>(['registeredUser', 'personalData', 'name']),
+			(old: object) => ({ ...old, lastName: 'updated' }),
+			defaultSetValue,
+			getObjectValue,
+		);
+
+		expect(
+			defaultSetValue.mock.calls.findIndex(
+				([path, value]) => samePxth(path, createPxth(['registeredUser', 'name'])) && value === 'As',
+			) !== -1,
+		).toBeTruthy();
+
+		expect(
+			defaultSetValue.mock.calls.findIndex(
+				([path, value]) => samePxth(path, createPxth(['registeredUser', 'surname'])) && value === 'updated',
+			) !== -1,
+		).toBeTruthy();
+	});
+
+	it('should get proxied value', () => {
+		const fullUser = {
+			personalData: {
+				name: {
+					firstName: 'Hello',
+					lastName: 'World',
+				},
+				birthday: new Date('2020.12.26'),
+			},
+			registrationDate: new Date('2020.12.31'),
+			notify: true,
+		};
+		const rawData = {
+			registeredUser: {
+				name: fullUser.personalData.name.firstName,
+				surname: fullUser.personalData.name.lastName,
+				dates: {
+					registration: fullUser.registrationDate,
+				},
+			},
+			dateOfBirth: fullUser.personalData.birthday,
+		};
+
+		const proxy = new MappingProxy<RegisteredUser>(getUserMapSource(), createPxth(['registeredUser']));
+
+		const defaultGet = <V>(path: Pxth<V>) => deepGet(rawData, path);
+
+		expect(proxy.getValue(createPxth(['registeredUser', 'personalData', 'name', 'firstName']), defaultGet)).toBe(
+			fullUser.personalData.name.firstName,
+		);
+		expect(proxy.getValue(createPxth(['registeredUser', 'personalData', 'name']), defaultGet)).toStrictEqual(
+			fullUser.personalData.name,
+		);
+		expect(proxy.getValue(createPxth(['registeredUser', 'personalData', 'birthday']), defaultGet)).toStrictEqual(
+			fullUser.personalData.birthday,
+		);
+	});
+
+	it('should return normal path from proxied path', () => {
+		const proxy = new MappingProxy<RegisteredUser & { location: { city: string } }>(
+			{
+				...getUserMapSource(),
+				location: createPxth<{ city: string }>(['registeredUser', 'personalData', 'home_location']),
+			},
+			createPxth(['registeredUser']),
+		);
+
+		expect(getPxthSegments(proxy.getNormalPath(createPxth(['registeredUser', 'personalData'])))).toStrictEqual([]);
+		expect(getPxthSegments(proxy.getNormalPath(createPxth(['registeredUser', 'registrationDate'])))).toStrictEqual([
+			'registeredUser',
+			'dates',
+			'registration',
+		]);
+		expect(
+			getPxthSegments(proxy.getNormalPath(createPxth(['registeredUser', 'personalData', 'name']))),
+		).toStrictEqual(['registeredUser']);
+		expect(getPxthSegments(proxy.getNormalPath(createPxth(['registeredUser', 'location', 'city'])))).toStrictEqual([
+			'registeredUser',
+			'personalData',
+			'home_location',
+			'city',
+		]);
+	});
+
+	it('should return proxied path from normal path', () => {
+		const proxy = new MappingProxy<RegisteredUser>(
+			{
+				registrationDate: createPxth<Date>(['registeredUser', 'dates', 'registration']),
+				personalData: {
+					name: {
+						firstName: createPxth(['registeredUser', 'name']),
+						lastName: createPxth(['registeredUser', 'surname']),
+					},
+					birthday: createPxth<Date>(['dateOfBirth']),
+				},
+			},
+			createPxth(['registeredUser']),
+		);
+
+		expect(
+			getPxthSegments(proxy.getProxiedPath(createPxth(['registeredUser', 'dates', 'registration']))),
+		).toStrictEqual(['registeredUser', 'registrationDate']);
+		expect(getPxthSegments(proxy.getProxiedPath(createPxth(['registeredUser', 'name'])))).toStrictEqual([
+			'registeredUser',
+			'personalData',
+			'name',
+			'firstName',
+		]);
+		expect(() => proxy.getProxiedPath(createPxth(['registeredUser', 'personalData']))).toThrow();
+	});
+
+	it('should getValue from nested path', () => {
+		const proxy = new MappingProxy(
+			{
+				location: createPxth(['core', 'values', 'location_from']),
+				cmpId: createPxth(['core', 'cmp_id_from']),
+			},
+			createPxth(['compound']),
+		);
+
+		const values = {
+			core: {
+				cmp_id_from: 5,
+				values: {
+					location_from: {
+						id: 24,
+					},
+				},
+			},
+		};
+
+		const fn = vi.fn((path) => {
+			return deepGet(values, path);
+		});
+		const value = proxy.getValue(createPxth(['compound', 'location', 'id']), fn as <U>(path: Pxth<U>) => U);
+		expect(value).toBe(24);
+	});
+
+	it('should setValue to nested path', () => {
+		const proxy = new MappingProxy(
+			{
+				location: createPxth(['core', 'values', 'location_from']),
+				cmpId: createPxth(['core', 'cmp_id_from']),
+			},
+			createPxth(['compound']),
+		);
+
+		const values = {
+			core: {
+				cmp_id_from: 5,
+				values: {
+					location_from: {
+						id: 24,
+						info: {
+							street: 'Gedimino g.',
+							city: 'Vilnius',
+						},
+					},
+				},
+			},
+		};
+
+		const defaultSetValue: <U>(path: Pxth<U>, value: SetStateAction<U>) => void = vi.fn(
+			<U>(path: Pxth<U>, value: SetStateAction<U>) => {
+				deepSet(values, path, isFunction(value) ? deepGet(values, path) : value);
+			},
+		);
+		const defaultGetValue = vi.fn();
+
+		proxy.setValue(createPxth(['compound', 'location', 'id']), 42, defaultSetValue, defaultGetValue);
+		expect(values).toStrictEqual({
+			core: {
+				cmp_id_from: 5,
+				values: {
+					location_from: {
+						id: 42,
+						info: {
+							street: 'Gedimino g.',
+							city: 'Vilnius',
+						},
+					},
+				},
+			},
+		});
+
+		proxy.setValue(
+			createPxth(['compound', 'location', 'info']),
+			{
+				city: 'Kaunas',
+				street: 'Teodoro',
+			},
+			defaultSetValue,
+			defaultGetValue,
+		);
+		expect(values).toStrictEqual({
+			core: {
+				cmp_id_from: 5,
+				values: {
+					location_from: {
+						id: 42,
+						info: {
+							city: 'Kaunas',
+							street: 'Teodoro',
+						},
+					},
+				},
+			},
+		});
+	});
+
+	it('should watch value from nested path', () => {
+		const proxy = new MappingProxy(
+			{
+				location: createPxth(['core', 'values', 'location_from']),
+				cmpId: createPxth(['core', 'cmp_id_from']),
+			},
+			createPxth(['compound']),
+		);
+
+		const observer = vi.fn();
+		const defaultWatch = vi.fn((_path, proxiedObserver: (value: unknown) => void) => {
+			proxiedObserver(42);
+			return vi.fn();
+		});
+
+		proxy.watch(
+			createPxth(['compound', 'location', 'id']),
+			observer,
+			defaultWatch as <U>(path: Pxth<U>, observer: Observer<U>) => () => void,
+		);
+
+		expect(getPxthSegments(defaultWatch.mock.calls[0][0])).toStrictEqual(['core', 'values', 'location_from', 'id']);
+		expect(defaultWatch.mock.calls[0][1]).toBeDefined();
+		expect(observer).toBeCalledWith(42);
+	});
+
+	it('should handle arrays', () => {
+		const proxy = new MappingProxy(
+			{
+				values: [
+					{
+						hello: createPxth(['real', 'path']),
+					},
+				],
+			},
+			createPxth(['proxied_path']),
+		);
+
+		expect(
+			getPxthSegments(proxy.getNormalPath(createPxth(['proxied_path', 'values', '0', 'hello']))),
+		).toStrictEqual(['real', 'path']);
+	});
+});
diff --git a/packages/stocked/test/typings/StockProxy.test.ts b/packages/stocked/test/typings/StockProxy.test.ts
new file mode 100644
index 00000000..dbc85743
--- /dev/null
+++ b/packages/stocked/test/typings/StockProxy.test.ts
@@ -0,0 +1,19 @@
+import { createPxth } from 'pxth';
+import { describe, expect, it } from 'vitest';
+
+import { DummyProxy } from '../DummyProxy';
+
+describe('Proxy activation', () => {
+	it('should activate proxy', () => {
+		const proxy = new DummyProxy(createPxth(['asdf']));
+		proxy.activate();
+		expect(Object.isFrozen(proxy)).toBeTruthy();
+		expect(proxy.isActive()).toBeTruthy();
+	});
+	it('should not let to edit active proxy', () => {
+		const proxy = new DummyProxy(createPxth(['asdf']));
+		proxy.activate();
+		// eslint-disable-next-line @typescript-eslint/no-explicit-any
+		expect(() => ((proxy as any).path = 'asdfsdf')).toThrow();
+	});
+});
diff --git a/packages/stocked/test/utils/ObserverArray.test.ts b/packages/stocked/test/utils/ObserverArray.test.ts
new file mode 100644
index 00000000..1d6ca665
--- /dev/null
+++ b/packages/stocked/test/utils/ObserverArray.test.ts
@@ -0,0 +1,73 @@
+import { describe, expect, it, vi } from 'vitest';
+
+import { ObserverArray } from '../../src/utils/ObserverArray';
+
+describe('ObserverArray "call" function', () => {
+	it('should call all functions', () => {
+		const observer1 = vi.fn();
+
+		const arr = new ObserverArray();
+		arr.add(observer1);
+		arr.add(observer1);
+		arr.add(observer1);
+
+		arr.call(null);
+
+		expect(observer1).toBeCalledTimes(3);
+	});
+
+	it('should receive message', () => {
+		const observer1 = vi.fn();
+		const observer2 = vi.fn();
+		const observer3 = vi.fn();
+
+		const message = 'sample message';
+
+		const arr = new ObserverArray();
+
+		arr.add(observer1);
+		arr.add(observer2);
+		arr.add(observer3);
+
+		arr.call(message);
+
+		expect(observer1).toBeCalledWith(message);
+		expect(observer2).toBeCalledWith(message);
+		expect(observer3).toBeCalledWith(message);
+	});
+});
+
+describe('ObserverArray "remove" function', () => {
+	it('should remove observer', () => {
+		const observer = vi.fn();
+		const removedObserver = vi.fn();
+
+		const arr = new ObserverArray();
+
+		arr.add(observer);
+		const key = arr.add(removedObserver);
+
+		arr.remove(key);
+
+		arr.call(null);
+
+		expect(removedObserver).not.toBeCalled();
+		expect(observer).toBeCalled();
+	});
+});
+
+describe('ObserverArray "isEmpty" function', () => {
+	it('should return true/false, depending on array size', () => {
+		const observer = vi.fn();
+
+		const arr = new ObserverArray();
+
+		const key = arr.add(observer);
+
+		expect(arr.isEmpty()).toBeFalsy();
+
+		arr.remove(key);
+
+		expect(arr.isEmpty()).toBeTruthy();
+	});
+});
diff --git a/packages/stocked/test/utils/areProxyMapsEqual.test.ts b/packages/stocked/test/utils/areProxyMapsEqual.test.ts
new file mode 100644
index 00000000..fa17ab76
--- /dev/null
+++ b/packages/stocked/test/utils/areProxyMapsEqual.test.ts
@@ -0,0 +1,130 @@
+import { createPxth } from 'pxth';
+import { describe, expect, it } from 'vitest';
+
+import { areProxyMapsEqual } from '../../src/utils/areProxyMapsEqual';
+
+describe('areProxyMapsEqual', () => {
+	it('should return false if objects have different amount of entries', () => {
+		expect(areProxyMapsEqual({}, { a: createPxth([]) })).toBeFalsy();
+		expect(areProxyMapsEqual({ a: createPxth([]) }, {})).toBeFalsy();
+		expect(areProxyMapsEqual({ a: createPxth([]) }, { a: createPxth([]), b: createPxth([]) })).toBeFalsy();
+	});
+
+	it('should return false when objects differ', () => {
+		expect(areProxyMapsEqual({ a: createPxth(['hello1']) }, { a: createPxth(['hello']) })).toBeFalsy();
+		expect(areProxyMapsEqual({ a: createPxth(['bye']) }, { b: createPxth(['bye']) })).toBeFalsy();
+	});
+
+	it('should return true if objects are same', () => {
+		expect(areProxyMapsEqual({ a: createPxth([]) }, { a: createPxth([]) })).toBeTruthy();
+		expect(areProxyMapsEqual({ a: createPxth(['bye']) }, { a: createPxth(['bye']) })).toBeTruthy();
+	});
+
+	it('should compare 2 nested objects', () => {
+		expect(
+			areProxyMapsEqual(
+				{
+					registrationDate: createPxth(['registeredUser', 'dates', 'registration']),
+					personalData: {
+						name: {
+							firstName: createPxth(['registeredUser', 'name']),
+							lastName: createPxth(['registeredUser', 'surname']),
+						},
+						birthday: createPxth(['dateOfBirth']),
+					},
+				},
+				{
+					registrationDate: createPxth(['registeredUser', 'dates', 'registration']),
+					personalData: {
+						name: {
+							firstName: createPxth(['registeredUser', 'name']),
+							lastName: createPxth(['registeredUser', 'surname']),
+						},
+						birthday: createPxth(['dateOfBirth']),
+					},
+				},
+			),
+		).toBeTruthy();
+
+		expect(
+			areProxyMapsEqual(
+				{
+					registrationDate: createPxth(['registeredUser', 'dates', 'registration']),
+					personalData: {
+						name: {
+							firstName: createPxth(['registeredUser', 'name']),
+							lastName: createPxth(['registeredUser', 'surname']),
+						},
+						birthday: createPxth(['dateOfBirth']),
+					},
+				},
+				{
+					registrationDate: createPxth(['registeredUser', 'dates', 'registration']),
+					personalData: {
+						name: {
+							firstName: createPxth(['registeredUser', 'name']),
+							lastName: createPxth(['registeredUser', 'surname']),
+							// Added additional property
+							additionalData: createPxth(['hello', 'world']),
+						},
+						birthday: createPxth(['dateOfBirth']),
+					},
+				},
+			),
+		).toBeFalsy();
+
+		expect(
+			areProxyMapsEqual(
+				{
+					registrationDate: createPxth(['registeredUser', 'dates', 'registration']),
+					personalData: {
+						name: {
+							// Changed path
+							firstName: createPxth(['name', 'registeredUser']),
+							lastName: createPxth(['registeredUser', 'surname']),
+						},
+						birthday: createPxth(['dateOfBirth']),
+					},
+				},
+				{
+					registrationDate: createPxth(['registeredUser', 'dates', 'registration']),
+					personalData: {
+						name: {
+							firstName: createPxth(['registeredUser', 'name']),
+							lastName: createPxth(['registeredUser', 'surname']),
+							additionalData: createPxth(['hello', 'world']),
+						},
+						birthday: createPxth(['dateOfBirth']),
+					},
+				},
+			),
+		).toBeFalsy();
+
+		expect(
+			areProxyMapsEqual(
+				{
+					registrationDate: createPxth(['registeredUser', 'dates', 'registration']),
+					// Changed name
+					personalDataMODIFIED: {
+						name: {
+							firstName: createPxth(['name', 'registeredUser']),
+							lastName: createPxth(['registeredUser', 'surname']),
+						},
+						birthday: createPxth(['dateOfBirth']),
+					},
+				},
+				{
+					registrationDate: createPxth(['registeredUser', 'dates', 'registration']),
+					personalData: {
+						name: {
+							firstName: createPxth(['registeredUser', 'name']),
+							lastName: createPxth(['registeredUser', 'surname']),
+							additionalData: createPxth(['hello', 'world']),
+						},
+						birthday: createPxth(['dateOfBirth']),
+					},
+				},
+			),
+		).toBeFalsy();
+	});
+});
diff --git a/packages/stocked/test/utils/useInterceptors.test.ts b/packages/stocked/test/utils/useInterceptors.test.ts
new file mode 100644
index 00000000..15dab76d
--- /dev/null
+++ b/packages/stocked/test/utils/useInterceptors.test.ts
@@ -0,0 +1,271 @@
+import { act, renderHook, waitFor } from '@testing-library/react';
+import { createPxth, getPxthSegments, Pxth } from 'pxth';
+import { describe, expect, it, Mock, vi } from 'vitest';
+
+import { MappingProxy, StockProxy, useStock } from '../../src';
+import { intercept, useInterceptors } from '../../src/utils/useInterceptors';
+import { DummyProxy } from '../DummyProxy';
+
+const defaultInitialValues = {
+	hello: '',
+	dest: {
+		bye: 'asdf',
+		l: 0,
+	},
+};
+
+const renderUseInterceptorsHook = <T extends object>(initialValues: T, proxy?: StockProxy<unknown>) => {
+	const { result } = renderHook(() => useStock({ initialValues }));
+
+	const stock = result.current;
+	return [renderHook(() => useInterceptors(stock, proxy)), stock] as const;
+};
+
+describe('hit cases', () => {
+	it('no proxy', () => {
+		const [{ result }] = renderUseInterceptorsHook(defaultInitialValues);
+
+		const observer = vi.fn();
+		act(() => {
+			const cleanup = result.current.watch(createPxth(['hello']), observer);
+			result.current.setValue(createPxth(['hello']), 'asdf');
+			cleanup();
+			result.current.setValue(createPxth(['hello']), 'ba');
+		});
+
+		expect(observer).toBeCalledTimes(1);
+		expect(observer).toBeCalledWith('asdf');
+	});
+	it('no proxy - with "watchEffect"', () => {
+		const [{ result }] = renderUseInterceptorsHook(defaultInitialValues);
+
+		const observer = vi.fn();
+		act(() => {
+			const cleanup = result.current.watchEffect(createPxth(['dest', 'bye']), observer);
+			cleanup();
+		});
+
+		expect(observer).toBeCalledTimes(1);
+		expect(observer).toBeCalledWith('asdf');
+	});
+	it('non activated proxy', () => {
+		expect(() => renderUseInterceptorsHook(defaultInitialValues, new DummyProxy(createPxth(['asdf'])))).toThrow();
+	});
+});
+
+describe('intercept', () => {
+	it('no proxy', () => {
+		const standard = vi.fn();
+		const custom = vi.fn();
+		intercept(undefined, createPxth([]), standard, custom, []);
+		expect(standard).toBeCalled();
+		expect(custom).not.toBeCalled();
+	});
+	it('proxy', () => {
+		const proxy = new DummyProxy(createPxth(['asdf']));
+		const standard = vi.fn();
+		const custom = vi.fn();
+		intercept(proxy, createPxth(['asdf']), standard, custom, []);
+		expect(standard).not.toBeCalled();
+		expect(custom).toBeCalled();
+	});
+	it('proxy (nested interception)', () => {
+		const proxy = new DummyProxy(createPxth(['asdf']));
+		const standard = vi.fn();
+		const custom = vi.fn();
+		intercept(proxy, createPxth(['asdf', 'hello', 'b']), standard, custom, []);
+		expect(standard).not.toBeCalled();
+		expect(custom).toBeCalled();
+	});
+	it('ignoring proxy', () => {
+		const proxy = new DummyProxy(createPxth(['asdf']));
+		const standard = vi.fn();
+		const custom = vi.fn();
+		intercept(proxy, createPxth(['basdf.hello.wy']), standard, custom, []);
+		expect(standard).toBeCalled();
+		expect(custom).not.toBeCalled();
+	});
+});
+
+describe('proxy', () => {
+	it('should call proxy functions', () => {
+		const proxy = new DummyProxy(createPxth(['dest']));
+
+		// eslint-disable-next-line @typescript-eslint/no-explicit-any
+		const watch: Mock<(...args: any[]) => () => void> = vi.fn(() => () => {});
+		const setValue = vi.fn();
+		const getValue = vi.fn();
+
+		proxy.watch = watch;
+		proxy.setValue = setValue;
+		proxy.getValue = getValue;
+		proxy.activate();
+		const [{ result }] = renderUseInterceptorsHook(defaultInitialValues, proxy);
+
+		const observer = vi.fn();
+
+		act(() => {
+			const cleanup = result.current.watch(createPxth(['dest']), observer);
+			const cleanup2 = result.current.watch(createPxth(['asdf']), observer);
+			result.current.setValue(createPxth(['dest']), 'asdf');
+			result.current.setValue(createPxth(['asdf']), 'asdf');
+			cleanup();
+			result.current.getValue(createPxth(['dest']));
+			result.current.getValue(createPxth(['asdf']));
+			cleanup2();
+		});
+
+		expect(getPxthSegments(watch.mock.calls[0][0])).toStrictEqual(['dest']);
+		expect(watch).toBeCalledWith(expect.anything(), observer, expect.any(Function));
+		expect(watch).toBeCalledTimes(1);
+		expect(getPxthSegments(setValue.mock.calls[0][0])).toStrictEqual(['dest']);
+		expect(setValue).toBeCalledWith(expect.anything(), 'asdf', expect.any(Function), expect.any(Function));
+		expect(setValue).toBeCalledTimes(1);
+		expect(getPxthSegments(getValue.mock.calls[0][0])).toStrictEqual(['dest']);
+		expect(getValue).toBeCalledTimes(1);
+	});
+
+	it('should call proxy functions - with "watchEffect"', () => {
+		const proxy = new DummyProxy(createPxth(['dest']));
+
+		// eslint-disable-next-line @typescript-eslint/no-explicit-any
+		const watchEffect: Mock<(...args: any[]) => () => void> = vi.fn(() => () => {});
+
+		proxy.watchEffect = watchEffect;
+		proxy.activate();
+		const [{ result }] = renderUseInterceptorsHook(defaultInitialValues, proxy);
+
+		const observer = vi.fn();
+
+		act(() => {
+			const cleanup = result.current.watchEffect(createPxth(['dest']), observer);
+			const cleanup2 = result.current.watchEffect(createPxth(['asdf']), observer);
+			cleanup();
+			cleanup2();
+		});
+
+		expect(getPxthSegments(watchEffect.mock.calls[0][0])).toStrictEqual(['dest']);
+		expect(watchEffect).toBeCalledWith(expect.anything(), observer, expect.any(Function));
+		expect(watchEffect).toBeCalledTimes(1);
+		expect(observer).toBeCalled();
+	});
+
+	it('should handle setValues / getValues properly', async () => {
+		const proxy = new DummyProxy(createPxth(['dest']));
+
+		const watch = vi.fn(() => () => {});
+		const setValue = vi.fn();
+		// eslint-disable-next-line @typescript-eslint/no-unused-vars
+		const getValue = vi.fn((_path: Pxth<unknown>) => 'Test get value');
+
+		proxy.watch = watch;
+		proxy.setValue = setValue;
+		proxy.getValue = getValue as <V>(path: Pxth<V>, defaultGetValue: <U>(path: Pxth<U>) => U) => V;
+		proxy.activate();
+		const [{ result }] = renderUseInterceptorsHook(defaultInitialValues, proxy);
+
+		result.current.setValues({
+			hello: 'asdf',
+			dest: {
+				bye: '',
+				l: 15,
+			},
+		});
+
+		await waitFor(() =>
+			expect(result.current.getValues()).toStrictEqual({
+				hello: 'asdf',
+				dest: 'Test get value',
+			}),
+		);
+
+		expect(getPxthSegments(setValue.mock.calls[0][0])).toStrictEqual(['dest']);
+		expect(setValue).toBeCalledTimes(1);
+
+		expect(getPxthSegments(getValue.mock.calls[0][0])).toStrictEqual(['dest']);
+		expect(getValue).toBeCalledTimes(1);
+	});
+
+	it('should set entire values object', async () => {
+		const initialValues = {
+			userName: 'Harry',
+			userSurname: 'Potter',
+		};
+
+		const proxy = new MappingProxy(
+			{
+				driver: {
+					name: createPxth<string>(['userName']),
+					surname: createPxth<string>(['userSurname']),
+				},
+			},
+			createPxth<{ driver: { name: string; surname: string } }>(['proxy']),
+		);
+
+		proxy.activate();
+
+		const [{ result }, realStock] = renderUseInterceptorsHook(initialValues, proxy);
+
+		const proxiedStock = result.current;
+
+		proxiedStock.setValues({
+			proxy: {
+				driver: {
+					name: 'John',
+					surname: 'Weasley',
+				},
+			},
+			userName: 'THIS SHOULD BE OVERRIDED',
+			userSurname: 'THIS SHOULD BE OVERRIDED',
+		} as typeof initialValues);
+
+		await waitFor(() => {
+			expect(proxiedStock.getValues()).toStrictEqual({
+				proxy: {
+					driver: {
+						name: 'John',
+						surname: 'Weasley',
+					},
+				},
+				userName: 'John',
+				userSurname: 'Weasley',
+			});
+
+			expect(realStock.getValues()).toStrictEqual({
+				userName: 'John',
+				userSurname: 'Weasley',
+			});
+		});
+	});
+
+	it('should be able to pass an update callback to construct new state', async () => {
+		const initialValues = {
+			userName: 'Harry',
+			userSurname: 'Potter',
+		};
+
+		const proxy = new MappingProxy(
+			{
+				driver: {
+					name: createPxth<string>(['userName']),
+					surname: createPxth<string>(['userSurname']),
+				},
+			},
+			createPxth<{ driver: { name: string; surname: string } }>(['proxy']),
+		);
+
+		proxy.activate();
+
+		const [{ result }, realStock] = renderUseInterceptorsHook(initialValues, proxy);
+
+		const proxiedStock = result.current;
+
+		const valuePath = createPxth<string>(['proxy', 'driver', 'name']);
+		proxiedStock.setValue(valuePath, (old) => old + ' updated');
+
+		await waitFor(() => {
+			expect(proxiedStock.getValue(valuePath)).toBe('Harry updated');
+			expect(realStock.getValue(createPxth<string>(['userName']))).toBe('Harry updated');
+		});
+	});
+});
diff --git a/packages/stocked/test/utils/useLazyRef.test.ts b/packages/stocked/test/utils/useLazyRef.test.ts
new file mode 100644
index 00000000..633e81db
--- /dev/null
+++ b/packages/stocked/test/utils/useLazyRef.test.ts
@@ -0,0 +1,31 @@
+import { renderHook } from '@testing-library/react';
+import { describe, expect, it, vi } from 'vitest';
+
+import { useLazyRef } from '../../src/utils/useLazyRef';
+
+describe('Lazy initializing test', () => {
+	it('should initialize once', () => {
+		const initializer = vi.fn();
+
+		initializer.mockReturnValue(1);
+
+		const { rerender } = renderHook(() => useLazyRef(initializer));
+
+		rerender();
+		rerender();
+		rerender();
+		rerender();
+
+		expect(initializer).toBeCalledTimes(1);
+	});
+
+	it('should return initialized value', () => {
+		const initializer = vi.fn();
+
+		initializer.mockReturnValue(1);
+
+		const { result } = renderHook(() => useLazyRef(initializer));
+
+		expect(result.current.current).toBe(1);
+	});
+});
diff --git a/packages/stocked/tsconfig.json b/packages/stocked/tsconfig.json
new file mode 100644
index 00000000..c869b7f5
--- /dev/null
+++ b/packages/stocked/tsconfig.json
@@ -0,0 +1,36 @@
+{
+	// see https://www.typescriptlang.org/tsconfig to better understand tsconfigs
+	"include": ["src", "types"],
+	"compilerOptions": {
+		"module": "esnext",
+		"lib": ["dom", "esnext"],
+		"importHelpers": true,
+		// output .d.ts declaration files for consumers
+		"declaration": true,
+		// output .js.map sourcemap files for consumers
+		"sourceMap": true,
+		// match output dir to input dir. e.g. dist/index instead of dist/src/index
+		"rootDir": ".",
+		// stricter type-checking for stronger correctness. Recommended by TS
+		"strict": true,
+		// linter checks for common issues
+		"noImplicitReturns": true,
+		"noFallthroughCasesInSwitch": true,
+		// noUnused* overlap with @typescript-eslint/no-unused-vars, can disable if duplicative
+		"noUnusedLocals": true,
+		"noUnusedParameters": true,
+		// use Node's module resolution algorithm, instead of the legacy TS one
+		"moduleResolution": "node",
+		// transpile JSX to React.createElement
+		"jsx": "react",
+		// interop between ESM and CJS modules. Recommended by TS
+		"esModuleInterop": true,
+		// significant perf increase by skipping checking .d.ts files, particularly those in node_modules. Recommended by TS
+		"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`
+		"noEmit": true,
+		"resolveJsonModule": true
+	}
+}
diff --git a/packages/stocked/tsup.config.ts b/packages/stocked/tsup.config.ts
new file mode 100644
index 00000000..a4cb69aa
--- /dev/null
+++ b/packages/stocked/tsup.config.ts
@@ -0,0 +1,13 @@
+import { defineConfig } from 'tsup';
+
+export default defineConfig({
+	entry: ['./src/index.ts'],
+	experimentalDts: true,
+	bundle: true,
+	format: ['cjs', 'esm'],
+	treeshake: 'smallest',
+	tsconfig: './tsconfig.json',
+	define: {
+		'import.meta.vitest': 'undefined',
+	},
+});
diff --git a/packages/stocked/vitest.config.ts b/packages/stocked/vitest.config.ts
new file mode 100644
index 00000000..ad9b0155
--- /dev/null
+++ b/packages/stocked/vitest.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vitest/config';
+
+export default defineConfig({
+	test: {
+		environment: 'jsdom',
+	},
+});
diff --git a/packages/x/aqu.config.json b/packages/x/aqu.config.json
deleted file mode 100644
index 79ee5a56..00000000
--- a/packages/x/aqu.config.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-	"buildOptions": {
-		"target": ["es2019", "chrome58", "firefox57", "safari11", "edge18", "node12"],
-		"preserveSymlinks": false
-	},
-	"dtsBundleGeneratorOptions": {
-		"libraries": {
-			"importedLibraries": ["stocked", "react", "@reactive-forms/core", "pxth"],
-			"allowedTypesLibraries": []
-		}
-	}
-}
diff --git a/packages/x/eslint.config.mjs b/packages/x/eslint.config.mjs
index cba6dd58..0c280120 100644
--- a/packages/x/eslint.config.mjs
+++ b/packages/x/eslint.config.mjs
@@ -2,7 +2,7 @@ import baseConfig from '@reactive-tools/eslint-config';
 
 export default [
 	{
-		ignores: ['**/dist', '**/node_modules', '**/*.config.js'],
+		ignores: ['**/dist', '**/node_modules', '**/*.config.js', '**/prepared-package', '**/.tsup'],
 	},
 	...baseConfig,
 ];
diff --git a/packages/x/package.json b/packages/x/package.json
index 5e623516..e39654b0 100644
--- a/packages/x/package.json
+++ b/packages/x/package.json
@@ -2,9 +2,6 @@
 	"name": "@reactive-forms/x",
 	"description": "Advanced Reactive Forms components for rich eXperience",
 	"version": "0.11.1",
-	"main": "dist/index.js",
-	"module": "dist/x.esm.js",
-	"types": "dist/x.d.ts",
 	"bugs": "https://github.com/fracht/reactive-forms/issues",
 	"homepage": "https://github.com/fracht/reactive-forms#readme",
 	"repository": "fracht/reactive-forms.git",
@@ -14,32 +11,48 @@
 		"access": "public",
 		"directory": "prepared-package"
 	},
+	"main": "./dist/index.js",
+	"module": "./dist/index.mjs",
+	"types": "./dist/index.d.ts",
+	"exports": {
+		"import": {
+			"types": "./dist/index.d.mts",
+			"import": "./dist/index.mjs"
+		},
+		"require": {
+			"types": "./dist/index.d.ts",
+			"require": "./dist/index.js"
+		}
+	},
 	"scripts": {
-		"build": "aqu build && rimraf ./prepared-package && clean-publish",
-		"lint": "eslint .",
-		"lint:fix": "npm run lint --fix",
-		"start": "aqu watch",
+		"build": "tsup && rimraf ./prepared-package && clean-publish",
+		"lint": "eslint . && attw --pack .",
+		"lint:fix": "eslint . --fix",
+		"start": "tsup --watch",
 		"test": "jest --passWithNoTests",
 		"test:log-coverage": "jest --passWithNoTests --coverage --silent --ci --coverageReporters=text",
 		"test:watch": "jest --passWithNoTests --watch"
 	},
 	"devDependencies": {
+		"@arethetypeswrong/cli": "^0.16.4",
 		"@babel/core": "7.19.6",
+		"@microsoft/api-extractor": "^7.47.11",
 		"@reactive-forms/core": "workspace:*",
 		"@reactive-tools/eslint-config": "workspace:*",
 		"@testing-library/react": "13.4.0",
 		"@types/jest": "26.0.24",
 		"@types/lodash": "4.14.161",
-		"@types/react": "18.0.23",
-		"@types/react-dom": "18.0.6",
+		"@types/react": "18.3.12",
+		"@types/react-dom": "18.3.1",
 		"aqu": "0.4.3",
 		"eslint": "^9.13.0",
 		"jest": "29.2.2",
-		"react": "18.2.0",
-		"react-dom": "18.2.0",
+		"react": "18.3.1",
+		"react-dom": "18.3.1",
 		"rimraf": "3.0.2",
 		"ts-jest": "29.0.3",
 		"tslib": "2.3.1",
+		"tsup": "^8.3.5",
 		"typescript": "4.8.4"
 	},
 	"peerDependencies": {
diff --git a/packages/x/tsconfig.json b/packages/x/tsconfig.json
index e17b5623..9ef00ffe 100644
--- a/packages/x/tsconfig.json
+++ b/packages/x/tsconfig.json
@@ -1,25 +1,10 @@
 {
-	"compilerOptions": {
-		"outDir": "dist",
-		"module": "esnext",
-		"lib": ["dom", "esnext"],
-		"moduleResolution": "node",
-		"jsx": "react",
-		"sourceMap": true,
-		"declaration": true,
-		"esModuleInterop": true,
-		"noImplicitReturns": true,
-		"noImplicitThis": true,
-		"noImplicitAny": true,
-		"strictNullChecks": true,
-		"noUnusedLocals": true,
-		"noUnusedParameters": true,
-		"allowSyntheticDefaultImports": true,
-		"noFallthroughCasesInSwitch": true,
-		"rootDir": "./src",
-		"strict": true,
-		"importHelpers": true,
-		"skipLibCheck": true
-	},
-	"include": ["src", "tests"]
+	"references": [
+		{
+			"path": "./tsconfig.lib.json"
+		},
+		{
+			"path": "./tsconfig.test.json"
+		}
+	]
 }
diff --git a/packages/x/tsconfig.lib.json b/packages/x/tsconfig.lib.json
new file mode 100644
index 00000000..41364fa5
--- /dev/null
+++ b/packages/x/tsconfig.lib.json
@@ -0,0 +1,26 @@
+{
+	"compilerOptions": {
+		"outDir": "dist",
+		"module": "esnext",
+		"lib": ["dom", "esnext"],
+		"moduleResolution": "node",
+		"jsx": "react",
+		"sourceMap": true,
+		"declaration": true,
+		"esModuleInterop": true,
+		"noImplicitReturns": true,
+		"noImplicitThis": true,
+		"noImplicitAny": true,
+		"strictNullChecks": true,
+		"noUnusedLocals": true,
+		"noUnusedParameters": true,
+		"allowSyntheticDefaultImports": true,
+		"noFallthroughCasesInSwitch": true,
+		"rootDir": "./src",
+		"strict": true,
+		"importHelpers": true,
+		"skipLibCheck": true,
+		"composite": true
+	},
+	"include": ["src"]
+}
diff --git a/packages/x/tsconfig.test.json b/packages/x/tsconfig.test.json
index 0c2dfa50..0742ffc6 100644
--- a/packages/x/tsconfig.test.json
+++ b/packages/x/tsconfig.test.json
@@ -10,6 +10,11 @@
 		"noUnusedLocals": false,
 		"noUnusedParameters": false,
 		"strict": false,
-		"alwaysStrict": false
-	}
+		"alwaysStrict": false,
+		"esModuleInterop": true,
+		"jsx": "react",
+		"composite": true
+	},
+	"include": ["tests"],
+	"references": [{ "path": "./tsconfig.lib.json" }]
 }
diff --git a/packages/x/tsup.config.ts b/packages/x/tsup.config.ts
new file mode 100644
index 00000000..7ddf5f27
--- /dev/null
+++ b/packages/x/tsup.config.ts
@@ -0,0 +1,13 @@
+import { defineConfig } from 'tsup';
+
+export default defineConfig({
+	entry: ['./src/index.ts'],
+	experimentalDts: true,
+	bundle: true,
+	format: ['cjs', 'esm'],
+	treeshake: 'smallest',
+	tsconfig: './tsconfig.lib.json',
+	define: {
+		'import.meta.vitest': 'undefined',
+	},
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 72c77593..3643cfff 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -28,7 +28,7 @@ importers:
         version: 11.1.6(size-limit@11.1.6)
       aqu:
         specifier: 0.4.3
-        version: 0.4.3(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))
+        version: 0.4.3(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))
       clean-publish:
         specifier: 5.1.0
         version: 5.1.0
@@ -61,11 +61,17 @@ importers:
         version: 4.17.21
       tiny-invariant:
         specifier: 1.2.0
-        version: 1.3.3
+        version: 1.2.0
     devDependencies:
+      '@arethetypeswrong/cli':
+        specifier: ^0.16.4
+        version: 0.16.4
       '@babel/core':
         specifier: 7.19.6
-        version: 7.26.0
+        version: 7.19.6
+      '@microsoft/api-extractor':
+        specifier: ^7.47.11
+        version: 7.47.11(@types/node@18.19.60)
       '@reactive-forms/core':
         specifier: workspace:*
         version: link:../core/prepared-package
@@ -73,29 +79,32 @@ importers:
         specifier: workspace:*
         version: link:../../tools/eslint-config
       '@types/react':
-        specifier: 18.0.23
+        specifier: 18.3.12
         version: 18.3.12
       aqu:
         specifier: 0.4.3
-        version: 0.4.3(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@22.8.1)(babel-jest@29.7.0(@babel/core@7.26.0))
+        version: 0.4.3(@babel/core@7.19.6)(@jest/types@29.6.3)(@types/node@18.19.60)(babel-jest@29.7.0(@babel/core@7.19.6))(babel-plugin-macros@3.1.0)
       eslint:
         specifier: ^9.13.0
         version: 9.13.0(jiti@2.3.3)
       jest:
         specifier: 29.2.2
-        version: 29.7.0(@types/node@22.8.1)
+        version: 29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0)
       react:
-        specifier: 18.2.0
+        specifier: 18.3.1
         version: 18.3.1
       rimraf:
         specifier: 3.0.2
-        version: 6.0.1
+        version: 3.0.2
       tslib:
         specifier: 2.3.1
-        version: 2.8.0
+        version: 2.3.1
+      tsup:
+        specifier: ^8.3.5
+        version: 8.3.5(@microsoft/api-extractor@7.47.11(@types/node@18.19.60))(jiti@2.3.3)(postcss@8.4.47)(typescript@4.8.4)
       typescript:
         specifier: 4.8.4
-        version: 5.6.3
+        version: 4.8.4
     publishDirectory: prepared-package
 
   packages/core:
@@ -105,85 +114,94 @@ importers:
         version: 4.17.21
       lodash-es:
         specifier: 4.17.15
-        version: 4.17.21
+        version: 4.17.15
       pxth:
-        specifier: 0.7.0
-        version: 0.7.0
+        specifier: workspace:*
+        version: link:../pxth
       stocked:
-        specifier: 1.0.0-beta.33
-        version: 1.0.0-beta.33(react@18.3.1)
+        specifier: workspace:*
+        version: link:../stocked
       tiny-invariant:
         specifier: 1.2.0
-        version: 1.3.3
+        version: 1.2.0
     devDependencies:
+      '@arethetypeswrong/cli':
+        specifier: ^0.16.4
+        version: 0.16.4
       '@babel/core':
         specifier: 7.19.6
-        version: 7.26.0
+        version: 7.19.6
+      '@microsoft/api-extractor':
+        specifier: ^7.47.11
+        version: 7.47.11(@types/node@18.19.60)
       '@reactive-tools/eslint-config':
         specifier: workspace:*
         version: link:../../tools/eslint-config
       '@testing-library/react':
         specifier: 13.4.0
-        version: 16.0.1(@testing-library/dom@8.19.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        version: 13.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@types/jest':
         specifier: 26.0.24
-        version: 29.5.14
+        version: 26.0.24
       '@types/lodash':
         specifier: 4.14.161
-        version: 4.17.12
+        version: 4.14.161
       '@types/node':
         specifier: ^18.11.18
-        version: 22.8.1
+        version: 18.19.60
       '@types/react':
-        specifier: 18.0.23
+        specifier: 18.3.12
         version: 18.3.12
       aqu:
         specifier: 0.4.3
-        version: 0.4.3(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@22.8.1)(babel-jest@29.7.0(@babel/core@7.26.0))
+        version: 0.4.3(@babel/core@7.19.6)(@jest/types@29.6.3)(@types/node@18.19.60)(babel-jest@29.7.0(@babel/core@7.19.6))(babel-plugin-macros@3.1.0)
       eslint:
         specifier: ^9.13.0
         version: 9.13.0(jiti@2.3.3)
       jest:
         specifier: 29.2.2
-        version: 29.7.0(@types/node@22.8.1)
+        version: 29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0)
       react:
-        specifier: 18.2.0
+        specifier: 18.3.1
         version: 18.3.1
       react-dom:
-        specifier: 18.2.0
+        specifier: 18.3.1
         version: 18.3.1(react@18.3.1)
       rimraf:
         specifier: 3.0.2
-        version: 6.0.1
+        version: 3.0.2
       ts-jest:
         specifier: 29.0.3
-        version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.15.18)(jest@29.7.0(@types/node@22.8.1))(typescript@5.6.3)
+        version: 29.0.3(@babel/core@7.19.6)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.19.6))(esbuild@0.15.18)(jest@29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0))(typescript@4.8.4)
       tslib:
         specifier: 2.3.1
-        version: 2.8.0
+        version: 2.3.1
+      tsup:
+        specifier: ^8.3.5
+        version: 8.3.5(@microsoft/api-extractor@7.47.11(@types/node@18.19.60))(jiti@2.3.3)(postcss@8.4.47)(typescript@4.8.4)
       typescript:
         specifier: 4.8.4
-        version: 5.6.3
+        version: 4.8.4
       yup:
         specifier: 0.32.9
-        version: 1.4.0
+        version: 0.32.9
     publishDirectory: prepared-package
 
   packages/dom:
     dependencies:
       pxth:
-        specifier: 0.7.0
-        version: 0.7.0
+        specifier: workspace:*
+        version: link:../pxth
       stocked:
-        specifier: 1.0.0-beta.33
-        version: 1.0.0-beta.33(react@18.3.1)
+        specifier: workspace:*
+        version: link:../stocked
       tiny-invariant:
         specifier: 1.2.0
-        version: 1.3.3
+        version: 1.2.0
     devDependencies:
       '@babel/core':
         specifier: 7.19.6
-        version: 7.26.0
+        version: 7.19.6
       '@reactive-forms/core':
         specifier: workspace:*
         version: link:../core/prepared-package
@@ -192,19 +210,19 @@ importers:
         version: link:../../tools/eslint-config
       '@testing-library/react':
         specifier: 13.4.0
-        version: 16.0.1(@testing-library/dom@8.19.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        version: 13.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@types/jest':
         specifier: 26.0.24
-        version: 29.5.14
+        version: 26.0.24
       '@types/react':
-        specifier: 18.0.23
+        specifier: 18.3.12
         version: 18.3.12
       '@types/react-dom':
-        specifier: 18.0.6
+        specifier: 18.3.1
         version: 18.3.1
       aqu:
         specifier: 0.4.3
-        version: 0.4.3(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@22.8.1)(babel-jest@29.7.0(@babel/core@7.26.0))
+        version: 0.4.3(@babel/core@7.19.6)(@jest/types@29.6.3)(@types/node@22.8.2)(babel-jest@29.7.0(@babel/core@7.19.6))(babel-plugin-macros@3.1.0)
       cpy-cli:
         specifier: ^5.0.0
         version: 5.0.0
@@ -213,28 +231,28 @@ importers:
         version: 9.13.0(jiti@2.3.3)
       jest:
         specifier: 29.2.2
-        version: 29.7.0(@types/node@22.8.1)
+        version: 29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0)
       jest-environment-jsdom:
         specifier: 29.2.1
-        version: 29.7.0
+        version: 29.2.1
       react:
-        specifier: 18.2.0
+        specifier: 18.3.1
         version: 18.3.1
       react-dom:
-        specifier: 18.2.0
+        specifier: 18.3.1
         version: 18.3.1(react@18.3.1)
       rimraf:
         specifier: 3.0.2
-        version: 6.0.1
+        version: 3.0.2
       ts-jest:
         specifier: 29.0.3
-        version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.15.18)(jest@29.7.0(@types/node@22.8.1))(typescript@5.6.3)
+        version: 29.0.3(@babel/core@7.19.6)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.19.6))(esbuild@0.15.18)(jest@29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0))(typescript@4.8.4)
       tslib:
         specifier: 2.3.1
-        version: 2.8.0
+        version: 2.3.1
       typescript:
         specifier: 4.8.4
-        version: 5.6.3
+        version: 4.8.4
     publishDirectory: prepared-package
 
   packages/pxth:
@@ -251,13 +269,13 @@ importers:
         version: 0.16.4
       '@microsoft/api-extractor':
         specifier: ^7.47.11
-        version: 7.47.11(@types/node@22.8.1)
+        version: 7.47.11(@types/node@20.17.2)
       '@types/lodash':
         specifier: ^4.17.12
         version: 4.17.12
       '@types/node':
-        specifier: ^14.14.31
-        version: 22.8.1
+        specifier: ^20.17.2
+        version: 20.17.2
       eslint:
         specifier: ^9.13.0
         version: 9.13.0(jiti@2.3.3)
@@ -266,13 +284,74 @@ importers:
         version: 10.0.7(typescript@5.6.3)
       tsup:
         specifier: ^8.3.5
-        version: 8.3.5(@microsoft/api-extractor@7.47.11(@types/node@22.8.1))(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3)
+        version: 8.3.5(@microsoft/api-extractor@7.47.11(@types/node@20.17.2))(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3)
+      typescript:
+        specifier: ^5.6.3
+        version: 5.6.3
+      vitest:
+        specifier: ^2.1.3
+        version: 2.1.4(@types/node@20.17.2)(happy-dom@15.7.4)(jsdom@25.0.1)
+
+  packages/stocked:
+    dependencies:
+      lodash:
+        specifier: ^4.17.21
+        version: 4.17.21
+      pxth:
+        specifier: workspace:*
+        version: link:../pxth
+      tiny-invariant:
+        specifier: ^1.3.3
+        version: 1.3.3
+    devDependencies:
+      '@arethetypeswrong/cli':
+        specifier: ^0.16.4
+        version: 0.16.4
+      '@microsoft/api-extractor':
+        specifier: ^7.47.11
+        version: 7.47.11(@types/node@22.8.2)
+      '@testing-library/dom':
+        specifier: ^10.4.0
+        version: 10.4.0
+      '@testing-library/react':
+        specifier: ^16.0.1
+        version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@types/lodash':
+        specifier: ^4.17.12
+        version: 4.17.12
+      '@types/react':
+        specifier: 18.3.12
+        version: 18.3.12
+      '@types/react-dom':
+        specifier: 18.3.1
+        version: 18.3.1
+      configs:
+        specifier: github:fracht/configs
+        version: https://codeload.github.com/fracht/configs/tar.gz/b8a8e13fc3db0f3d5afdcedd0749fccc7292be30
+      jsdom:
+        specifier: ^25.0.1
+        version: 25.0.1
+      react:
+        specifier: ^18.3.1
+        version: 18.3.1
+      react-dom:
+        specifier: ^18.3.1
+        version: 18.3.1(react@18.3.1)
+      tslib:
+        specifier: 2.3.1
+        version: 2.3.1
+      tsup:
+        specifier: ^8.3.5
+        version: 8.3.5(@microsoft/api-extractor@7.47.11(@types/node@22.8.2))(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3)
       typescript:
         specifier: ^5.6.3
         version: 5.6.3
+      vitepress:
+        specifier: ^1.4.1
+        version: 1.4.1(@algolia/client-search@4.24.0)(@types/node@22.8.2)(@types/react@18.3.12)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3)
       vitest:
         specifier: ^2.1.3
-        version: 2.1.4(@types/node@22.8.1)(jsdom@20.0.3)
+        version: 2.1.4(@types/node@22.8.2)(happy-dom@15.7.4)(jsdom@25.0.1)
 
   packages/x:
     dependencies:
@@ -280,9 +359,15 @@ importers:
         specifier: 4.17.21
         version: 4.17.21
     devDependencies:
+      '@arethetypeswrong/cli':
+        specifier: ^0.16.4
+        version: 0.16.4
       '@babel/core':
         specifier: 7.19.6
-        version: 7.26.0
+        version: 7.19.6
+      '@microsoft/api-extractor':
+        specifier: ^7.47.11
+        version: 7.47.11(@types/node@22.8.2)
       '@reactive-forms/core':
         specifier: workspace:*
         version: link:../core/prepared-package
@@ -291,53 +376,56 @@ importers:
         version: link:../../tools/eslint-config
       '@testing-library/react':
         specifier: 13.4.0
-        version: 16.0.1(@testing-library/dom@8.19.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+        version: 13.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@types/jest':
         specifier: 26.0.24
-        version: 29.5.14
+        version: 26.0.24
       '@types/lodash':
         specifier: 4.14.161
-        version: 4.17.12
+        version: 4.14.161
       '@types/react':
-        specifier: 18.0.23
+        specifier: 18.3.12
         version: 18.3.12
       '@types/react-dom':
-        specifier: 18.0.6
+        specifier: 18.3.1
         version: 18.3.1
       aqu:
         specifier: 0.4.3
-        version: 0.4.3(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@22.8.1)(babel-jest@29.7.0(@babel/core@7.26.0))
+        version: 0.4.3(@babel/core@7.19.6)(@jest/types@29.6.3)(@types/node@22.8.2)(babel-jest@29.7.0(@babel/core@7.19.6))(babel-plugin-macros@3.1.0)
       eslint:
         specifier: ^9.13.0
         version: 9.13.0(jiti@2.3.3)
       jest:
         specifier: 29.2.2
-        version: 29.7.0(@types/node@22.8.1)
+        version: 29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0)
       react:
-        specifier: 18.2.0
+        specifier: 18.3.1
         version: 18.3.1
       react-dom:
-        specifier: 18.2.0
+        specifier: 18.3.1
         version: 18.3.1(react@18.3.1)
       rimraf:
         specifier: 3.0.2
-        version: 6.0.1
+        version: 3.0.2
       ts-jest:
         specifier: 29.0.3
-        version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.15.18)(jest@29.7.0(@types/node@22.8.1))(typescript@5.6.3)
+        version: 29.0.3(@babel/core@7.19.6)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.19.6))(esbuild@0.15.18)(jest@29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0))(typescript@4.8.4)
       tslib:
         specifier: 2.3.1
-        version: 2.8.0
+        version: 2.3.1
+      tsup:
+        specifier: ^8.3.5
+        version: 8.3.5(@microsoft/api-extractor@7.47.11(@types/node@22.8.2))(jiti@2.3.3)(postcss@8.4.47)(typescript@4.8.4)
       typescript:
         specifier: 4.8.4
-        version: 5.6.3
+        version: 4.8.4
     publishDirectory: prepared-package
 
   tools/eslint-config:
     dependencies:
       '@eslint/compat':
         specifier: ^1.2.1
-        version: 1.2.1(eslint@9.13.0(jiti@2.3.3))
+        version: 1.2.2(eslint@9.13.0(jiti@2.3.3))
       '@eslint/eslintrc':
         specifier: ^3.1.0
         version: 3.1.0
@@ -377,6 +465,71 @@ importers:
 
 packages:
 
+  '@algolia/autocomplete-core@1.9.3':
+    resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==}
+
+  '@algolia/autocomplete-plugin-algolia-insights@1.9.3':
+    resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==}
+    peerDependencies:
+      search-insights: '>= 1 < 3'
+
+  '@algolia/autocomplete-preset-algolia@1.9.3':
+    resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==}
+    peerDependencies:
+      '@algolia/client-search': '>= 4.9.1 < 6'
+      algoliasearch: '>= 4.9.1 < 6'
+
+  '@algolia/autocomplete-shared@1.9.3':
+    resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==}
+    peerDependencies:
+      '@algolia/client-search': '>= 4.9.1 < 6'
+      algoliasearch: '>= 4.9.1 < 6'
+
+  '@algolia/cache-browser-local-storage@4.24.0':
+    resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==}
+
+  '@algolia/cache-common@4.24.0':
+    resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==}
+
+  '@algolia/cache-in-memory@4.24.0':
+    resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==}
+
+  '@algolia/client-account@4.24.0':
+    resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==}
+
+  '@algolia/client-analytics@4.24.0':
+    resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==}
+
+  '@algolia/client-common@4.24.0':
+    resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==}
+
+  '@algolia/client-personalization@4.24.0':
+    resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==}
+
+  '@algolia/client-search@4.24.0':
+    resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==}
+
+  '@algolia/logger-common@4.24.0':
+    resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==}
+
+  '@algolia/logger-console@4.24.0':
+    resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==}
+
+  '@algolia/recommend@4.24.0':
+    resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==}
+
+  '@algolia/requester-browser-xhr@4.24.0':
+    resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==}
+
+  '@algolia/requester-common@4.24.0':
+    resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==}
+
+  '@algolia/requester-node-http@4.24.0':
+    resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==}
+
+  '@algolia/transporter@4.24.0':
+    resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==}
+
   '@ampproject/remapping@2.3.0':
     resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
     engines: {node: '>=6.0.0'}
@@ -401,6 +554,10 @@ packages:
     resolution: {integrity: sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==}
     engines: {node: '>=6.9.0'}
 
+  '@babel/core@7.19.6':
+    resolution: {integrity: sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==}
+    engines: {node: '>=6.9.0'}
+
   '@babel/core@7.26.0':
     resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==}
     engines: {node: '>=6.9.0'}
@@ -1063,6 +1220,29 @@ packages:
     resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
     engines: {node: '>=0.1.90'}
 
+  '@docsearch/css@3.6.2':
+    resolution: {integrity: sha512-vKNZepO2j7MrYBTZIGXvlUOIR+v9KRf70FApRgovWrj3GTs1EITz/Xb0AOlm1xsQBp16clVZj1SY/qaOJbQtZw==}
+
+  '@docsearch/js@3.6.2':
+    resolution: {integrity: sha512-pS4YZF+VzUogYrkblCucQ0Oy2m8Wggk8Kk7lECmZM60hTbaydSIhJTTiCrmoxtBqV8wxORnOqcqqOfbmkkQEcA==}
+
+  '@docsearch/react@3.6.2':
+    resolution: {integrity: sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==}
+    peerDependencies:
+      '@types/react': '>= 16.8.0 < 19.0.0'
+      react: '>= 16.8.0 < 19.0.0'
+      react-dom: '>= 16.8.0 < 19.0.0'
+      search-insights: '>= 1 < 3'
+    peerDependenciesMeta:
+      '@types/react':
+        optional: true
+      react:
+        optional: true
+      react-dom:
+        optional: true
+      search-insights:
+        optional: true
+
   '@effect/schema@0.71.1':
     resolution: {integrity: sha512-XvFttkuBUL3s4ofZ+OVE4Pagb4wsPG8laSS8iO5lVI9Yt1zIM49uxlYIA2BJ45jjS3MdplUepC0NilotKnjU2A==}
     peerDependencies:
@@ -1377,8 +1557,8 @@ packages:
     resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
 
-  '@eslint/compat@1.2.1':
-    resolution: {integrity: sha512-JbHG2TWuCeNzh87fXo+/46Z1LEo9DBA9T188d0fZgGxAD+cNyS6sx9fdiyxjGPBMyQVRlCutTByZ6a5+YMkF7g==}
+  '@eslint/compat@1.2.2':
+    resolution: {integrity: sha512-jhgiIrsw+tRfcBQ4BFl2C3vCrIUw2trCY0cnDvGZpwTtKCEDmZhAtMfrEUP/KpnwM6PrO0T+Ltm+ccW74olG3Q==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^9.10.0
@@ -1533,6 +1713,10 @@ packages:
     resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
 
+  '@jest/types@26.6.2':
+    resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==}
+    engines: {node: '>= 10.14.2'}
+
   '@jest/types@29.6.3':
     resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -1549,9 +1733,6 @@ packages:
     resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
     engines: {node: '>=6.0.0'}
 
-  '@jridgewell/sourcemap-codec@1.4.15':
-    resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
-
   '@jridgewell/sourcemap-codec@1.5.0':
     resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
 
@@ -1805,6 +1986,24 @@ packages:
       zen-observable:
         optional: true
 
+  '@shikijs/core@1.22.2':
+    resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==}
+
+  '@shikijs/engine-javascript@1.22.2':
+    resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==}
+
+  '@shikijs/engine-oniguruma@1.22.2':
+    resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==}
+
+  '@shikijs/transformers@1.22.2':
+    resolution: {integrity: sha512-8f78OiBa6pZDoZ53lYTmuvpFPlWtevn23bzG+azpPVvZg7ITax57o/K3TC91eYL3OMJOO0onPbgnQyZjRos8XQ==}
+
+  '@shikijs/types@1.22.2':
+    resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==}
+
+  '@shikijs/vscode-textmate@9.3.0':
+    resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==}
+
   '@sinclair/typebox@0.27.8':
     resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
 
@@ -1839,9 +2038,20 @@ packages:
     peerDependencies:
       size-limit: 11.1.6
 
-  '@testing-library/dom@8.19.0':
-    resolution: {integrity: sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==}
+  '@testing-library/dom@10.4.0':
+    resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
+    engines: {node: '>=18'}
+
+  '@testing-library/dom@8.20.1':
+    resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==}
+    engines: {node: '>=12'}
+
+  '@testing-library/react@13.4.0':
+    resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==}
     engines: {node: '>=12'}
+    peerDependencies:
+      react: ^18.0.0
+      react-dom: ^18.0.0
 
   '@testing-library/react@16.0.1':
     resolution: {integrity: sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==}
@@ -1865,8 +2075,8 @@ packages:
   '@types/argparse@1.0.38':
     resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
 
-  '@types/aria-query@4.2.2':
-    resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==}
+  '@types/aria-query@5.0.4':
+    resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
 
   '@types/babel__core@7.20.5':
     resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
@@ -1886,6 +2096,9 @@ packages:
   '@types/graceful-fs@4.1.9':
     resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
 
+  '@types/hast@3.0.4':
+    resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+
   '@types/istanbul-lib-coverage@2.0.6':
     resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
 
@@ -1895,8 +2108,8 @@ packages:
   '@types/istanbul-reports@3.0.4':
     resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
 
-  '@types/jest@29.5.14':
-    resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==}
+  '@types/jest@26.0.24':
+    resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==}
 
   '@types/jsdom@20.0.1':
     resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==}
@@ -1904,18 +2117,42 @@ packages:
   '@types/json-schema@7.0.15':
     resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
 
+  '@types/linkify-it@5.0.0':
+    resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
+
+  '@types/lodash@4.14.161':
+    resolution: {integrity: sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA==}
+
   '@types/lodash@4.17.12':
     resolution: {integrity: sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==}
 
+  '@types/markdown-it@14.1.2':
+    resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
+
+  '@types/mdast@4.0.4':
+    resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+  '@types/mdurl@2.0.0':
+    resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
+
   '@types/node@12.20.55':
     resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
 
-  '@types/node@22.8.1':
-    resolution: {integrity: sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==}
+  '@types/node@18.19.60':
+    resolution: {integrity: sha512-cYRj7igVqgxhlHFdBHHpU2SNw3+dN2x0VTZJtLYk6y/ieuGN4XiBgtDjYVktM/yk2y/8pKMileNc6IoEzEJnUw==}
+
+  '@types/node@20.17.2':
+    resolution: {integrity: sha512-OOHK4sjXqkL7yQ7VEEHcf6+0jSvKjWqwnaCtY7AKD/VLEvRHMsxxu7eI8ErnjxHS8VwmekD4PeVCpu4qZEZSxg==}
+
+  '@types/node@22.8.2':
+    resolution: {integrity: sha512-NzaRNFV+FZkvK/KLCsNdTvID0SThyrs5SHB6tsD/lajr22FGC73N2QeDPM2wHtVde8mgcXuSsHQkH5cX1pbPLw==}
 
   '@types/normalize-package-data@2.4.4':
     resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
 
+  '@types/parse-json@4.0.2':
+    resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
+
   '@types/prop-types@15.7.13':
     resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==}
 
@@ -1937,9 +2174,18 @@ packages:
   '@types/tough-cookie@4.0.5':
     resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
 
+  '@types/unist@3.0.3':
+    resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+  '@types/web-bluetooth@0.0.20':
+    resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
+
   '@types/yargs-parser@21.0.3':
     resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
 
+  '@types/yargs@15.0.19':
+    resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==}
+
   '@types/yargs@17.0.33':
     resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
 
@@ -2061,6 +2307,13 @@ packages:
   '@ungap/structured-clone@1.2.0':
     resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
 
+  '@vitejs/plugin-vue@5.1.4':
+    resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==}
+    engines: {node: ^18.0.0 || >=20.0.0}
+    peerDependencies:
+      vite: ^5.0.0
+      vue: ^3.2.25
+
   '@vitest/expect@2.1.4':
     resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==}
 
@@ -2090,6 +2343,94 @@ packages:
   '@vitest/utils@2.1.4':
     resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==}
 
+  '@vue/compiler-core@3.5.12':
+    resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==}
+
+  '@vue/compiler-dom@3.5.12':
+    resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==}
+
+  '@vue/compiler-sfc@3.5.12':
+    resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==}
+
+  '@vue/compiler-ssr@3.5.12':
+    resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==}
+
+  '@vue/devtools-api@7.5.4':
+    resolution: {integrity: sha512-j9UC/KeYUNZ6AyCJxBROBCbogB5YHW6PZv9VnCNp2ntE4rq426Lfc8WP5B9V+rXBwqWmrgZTGYBa31CBSxdAUg==}
+
+  '@vue/devtools-kit@7.5.4':
+    resolution: {integrity: sha512-0i7WFgc1B2TL52tstn82zlb9opSA0aIiHfkUYFXtZb8CIpmlFMTkHtgwVl6PMWNBj3LNhYou1YJCLpCYvJYYoA==}
+
+  '@vue/devtools-shared@7.5.4':
+    resolution: {integrity: sha512-dwuq4YmwTyLc7eBOqX63s3JB8il7qnKsNgENglSMkUPwiItHkVAYYfPESN1rxSdYkl1RCux1l5TBidYqfUDNAA==}
+
+  '@vue/reactivity@3.5.12':
+    resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==}
+
+  '@vue/runtime-core@3.5.12':
+    resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==}
+
+  '@vue/runtime-dom@3.5.12':
+    resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==}
+
+  '@vue/server-renderer@3.5.12':
+    resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==}
+    peerDependencies:
+      vue: 3.5.12
+
+  '@vue/shared@3.5.12':
+    resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==}
+
+  '@vueuse/core@11.1.0':
+    resolution: {integrity: sha512-P6dk79QYA6sKQnghrUz/1tHi0n9mrb/iO1WTMk/ElLmTyNqgDeSZ3wcDf6fRBGzRJbeG1dxzEOvLENMjr+E3fg==}
+
+  '@vueuse/integrations@11.1.0':
+    resolution: {integrity: sha512-O2ZgrAGPy0qAjpoI2YR3egNgyEqwG85fxfwmA9BshRIGjV4G6yu6CfOPpMHAOoCD+UfsIl7Vb1bXJ6ifrHYDDA==}
+    peerDependencies:
+      async-validator: ^4
+      axios: ^1
+      change-case: ^5
+      drauu: ^0.4
+      focus-trap: ^7
+      fuse.js: ^7
+      idb-keyval: ^6
+      jwt-decode: ^4
+      nprogress: ^0.2
+      qrcode: ^1.5
+      sortablejs: ^1
+      universal-cookie: ^7
+    peerDependenciesMeta:
+      async-validator:
+        optional: true
+      axios:
+        optional: true
+      change-case:
+        optional: true
+      drauu:
+        optional: true
+      focus-trap:
+        optional: true
+      fuse.js:
+        optional: true
+      idb-keyval:
+        optional: true
+      jwt-decode:
+        optional: true
+      nprogress:
+        optional: true
+      qrcode:
+        optional: true
+      sortablejs:
+        optional: true
+      universal-cookie:
+        optional: true
+
+  '@vueuse/metadata@11.1.0':
+    resolution: {integrity: sha512-l9Q502TBTaPYGanl1G+hPgd3QX5s4CGnpXriVBR5fEZ/goI6fvDaVmIl3Td8oKFurOxTmbXvBPSsgrd6eu6HYg==}
+
+  '@vueuse/shared@11.1.0':
+    resolution: {integrity: sha512-YUtIpY122q7osj+zsNMFAfMTubGz0sn5QzE5gPzAIiCmtt2ha3uQUY1+JPyL4gRCTsLPX82Y9brNbo/aqlA91w==}
+
   abab@2.0.6:
     resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
     deprecated: Use your platform's native atob() and btoa() methods instead
@@ -2115,6 +2456,10 @@ packages:
     resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
     engines: {node: '>= 6.0.0'}
 
+  agent-base@7.1.1:
+    resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
+    engines: {node: '>= 14'}
+
   aggregate-error@4.0.1:
     resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==}
     engines: {node: '>=12'}
@@ -2144,6 +2489,9 @@ packages:
   ajv@8.13.0:
     resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==}
 
+  algoliasearch@4.24.0:
+    resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==}
+
   ansi-align@3.0.1:
     resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
 
@@ -2241,9 +2589,11 @@ packages:
   argparse@2.0.1:
     resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
 
-  aria-query@5.3.2:
-    resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
-    engines: {node: '>= 0.4'}
+  aria-query@5.1.3:
+    resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
+
+  aria-query@5.3.0:
+    resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
 
   array-buffer-byte-length@1.0.1:
     resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
@@ -2288,9 +2638,6 @@ packages:
   async-retry@1.2.3:
     resolution: {integrity: sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==}
 
-  async@3.2.6:
-    resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
-
   asynckit@0.4.0:
     resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
 
@@ -2315,6 +2662,10 @@ packages:
     resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
 
+  babel-plugin-macros@3.1.0:
+    resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+    engines: {node: '>=10', npm: '>=6'}
+
   babel-plugin-polyfill-corejs2@0.4.11:
     resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==}
     peerDependencies:
@@ -2361,6 +2712,9 @@ packages:
     resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
     engines: {node: '>=8'}
 
+  birpc@0.2.19:
+    resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==}
+
   bl@4.1.0:
     resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
 
@@ -2440,6 +2794,9 @@ packages:
   caniuse-lite@1.0.30001673:
     resolution: {integrity: sha512-WTrjUCSMp3LYX0nE12ECkV0a+e6LC85E0Auz75555/qr78Oc8YWhEPNfDd6SHdtlCMSzqtuXY0uyEMNRcsKpKw==}
 
+  ccount@2.0.1:
+    resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+
   chai@5.1.2:
     resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
     engines: {node: '>=12'}
@@ -2472,6 +2829,12 @@ packages:
     resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==}
     engines: {node: '>=12.20'}
 
+  character-entities-html4@2.1.0:
+    resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+
+  character-entities-legacy@3.0.0:
+    resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
   chardet@0.7.0:
     resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
 
@@ -2594,6 +2957,9 @@ packages:
     resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
     engines: {node: '>= 0.8'}
 
+  comma-separated-tokens@2.0.3:
+    resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
   commander@10.0.1:
     resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
     engines: {node: '>=14'}
@@ -2619,6 +2985,10 @@ packages:
   config-chain@1.1.13:
     resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
 
+  configs@https://codeload.github.com/fracht/configs/tar.gz/b8a8e13fc3db0f3d5afdcedd0749fccc7292be30:
+    resolution: {tarball: https://codeload.github.com/fracht/configs/tar.gz/b8a8e13fc3db0f3d5afdcedd0749fccc7292be30}
+    version: 1.0.0
+
   configstore@7.0.0:
     resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==}
     engines: {node: '>=18'}
@@ -2627,15 +2997,26 @@ packages:
     resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
     engines: {node: ^14.18.0 || >=16.10.0}
 
+  convert-source-map@1.9.0:
+    resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+
   convert-source-map@2.0.0:
     resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
 
+  copy-anything@3.0.5:
+    resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
+    engines: {node: '>=12.13'}
+
   core-js-compat@3.38.1:
     resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==}
 
   core-js@3.38.1:
     resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==}
 
+  cosmiconfig@7.1.0:
+    resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+    engines: {node: '>=10'}
+
   cosmiconfig@8.3.6:
     resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
     engines: {node: '>=14'}
@@ -2689,6 +3070,10 @@ packages:
     resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==}
     engines: {node: '>=8'}
 
+  cssstyle@4.1.0:
+    resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==}
+    engines: {node: '>=18'}
+
   csstype@3.1.3:
     resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
 
@@ -2701,6 +3086,10 @@ packages:
     resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
     engines: {node: '>=12'}
 
+  data-urls@5.0.0:
+    resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
+    engines: {node: '>=18'}
+
   data-view-buffer@1.0.1:
     resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
     engines: {node: '>= 0.4'}
@@ -2740,6 +3129,10 @@ packages:
     resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
     engines: {node: '>=6'}
 
+  deep-equal@2.2.3:
+    resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==}
+    engines: {node: '>= 0.4'}
+
   deep-extend@0.6.0:
     resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
     engines: {node: '>=4.0.0'}
@@ -2785,6 +3178,10 @@ packages:
   deprecation@2.3.1:
     resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
 
+  dequal@2.0.3:
+    resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+    engines: {node: '>=6'}
+
   detect-indent@6.1.0:
     resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
     engines: {node: '>=8'}
@@ -2793,6 +3190,13 @@ packages:
     resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
     engines: {node: '>=8'}
 
+  devlop@1.1.0:
+    resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+
+  diff-sequences@26.6.2:
+    resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==}
+    engines: {node: '>= 10.14.2'}
+
   diff-sequences@29.6.3:
     resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -2835,11 +3239,6 @@ packages:
   effect@3.6.5:
     resolution: {integrity: sha512-NhopZTAKljaAlR0CEroOAJJngdqg7bzlnWcDrCwh4d2WNVohVbBtUS4SGqLt8tUy7IFsTWATYiUtmhDG+YELjA==}
 
-  ejs@3.1.10:
-    resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-
   electron-to-chromium@1.5.47:
     resolution: {integrity: sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==}
 
@@ -2897,6 +3296,9 @@ packages:
     resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
     engines: {node: '>= 0.4'}
 
+  es-get-iterator@1.1.3:
+    resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
+
   es-iterator-helpers@1.1.0:
     resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==}
     engines: {node: '>= 0.4'}
@@ -3051,10 +3453,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'}
@@ -3208,6 +3606,9 @@ packages:
     resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
     engines: {node: '>=4.0'}
 
+  estree-walker@2.0.2:
+    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
   estree-walker@3.0.3:
     resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
 
@@ -3318,9 +3719,6 @@ packages:
     resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
     engines: {node: '>=16.0.0'}
 
-  filelist@1.0.4:
-    resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
-
   fill-range@7.1.1:
     resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
     engines: {node: '>=8'}
@@ -3352,6 +3750,9 @@ packages:
   flatted@3.3.1:
     resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
 
+  focus-trap@7.6.0:
+    resolution: {integrity: sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==}
+
   for-each@0.3.3:
     resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
 
@@ -3460,11 +3861,6 @@ packages:
     resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
     hasBin: true
 
-  glob@11.0.0:
-    resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==}
-    engines: {node: 20 || >=22}
-    hasBin: true
-
   glob@7.2.3:
     resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
     deprecated: Glob versions prior to v9 are no longer supported
@@ -3513,6 +3909,10 @@ packages:
   graphemer@1.4.0:
     resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
 
+  happy-dom@15.7.4:
+    resolution: {integrity: sha512-r1vadDYGMtsHAAsqhDuk4IpPvr6N8MGKy5ntBo7tSdim+pWDxus2PNqOcOt8LuDZ4t3KJHE+gCuzupcx/GKnyQ==}
+    engines: {node: '>=18.0.0'}
+
   has-ansi@2.0.0:
     resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
     engines: {node: '>=0.10.0'}
@@ -3555,6 +3955,12 @@ packages:
     resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
     engines: {node: '>= 0.4'}
 
+  hast-util-to-html@9.0.3:
+    resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==}
+
+  hast-util-whitespace@3.0.0:
+    resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+
   highlight.js@10.7.3:
     resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
 
@@ -3562,6 +3968,9 @@ packages:
     resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
     engines: {node: '>=0.10.0'}
 
+  hookable@5.5.3:
+    resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+
   hosted-git-info@7.0.2:
     resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
     engines: {node: ^16.14.0 || >=18.0.0}
@@ -3570,17 +3979,32 @@ packages:
     resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
     engines: {node: '>=12'}
 
+  html-encoding-sniffer@4.0.0:
+    resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
+    engines: {node: '>=18'}
+
   html-escaper@2.0.2:
     resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
 
+  html-void-elements@3.0.0:
+    resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+
   http-proxy-agent@5.0.0:
     resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
     engines: {node: '>= 6'}
 
+  http-proxy-agent@7.0.2:
+    resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+    engines: {node: '>= 14'}
+
   https-proxy-agent@5.0.1:
     resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
     engines: {node: '>= 6'}
 
+  https-proxy-agent@7.0.5:
+    resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==}
+    engines: {node: '>= 14'}
+
   human-id@1.0.2:
     resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
 
@@ -3686,6 +4110,10 @@ packages:
     resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
     engines: {node: '>= 0.4'}
 
+  is-arguments@1.1.1:
+    resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+    engines: {node: '>= 0.4'}
+
   is-array-buffer@3.0.4:
     resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
     engines: {node: '>= 0.4'}
@@ -3910,6 +4338,10 @@ packages:
     resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==}
     engines: {node: '>= 0.4'}
 
+  is-what@4.1.16:
+    resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
+    engines: {node: '>=12.13'}
+
   is-windows@1.0.2:
     resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
     engines: {node: '>=0.10.0'}
@@ -3963,15 +4395,6 @@ packages:
   jackspeak@3.4.3:
     resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
 
-  jackspeak@4.0.2:
-    resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==}
-    engines: {node: 20 || >=22}
-
-  jake@10.9.2:
-    resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
-    engines: {node: '>=10'}
-    hasBin: true
-
   jest-changed-files@29.7.0:
     resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -4002,6 +4425,10 @@ packages:
       ts-node:
         optional: true
 
+  jest-diff@26.6.2:
+    resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==}
+    engines: {node: '>= 10.14.2'}
+
   jest-diff@29.7.0:
     resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -4014,8 +4441,8 @@ packages:
     resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
 
-  jest-environment-jsdom@29.7.0:
-    resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==}
+  jest-environment-jsdom@29.2.1:
+    resolution: {integrity: sha512-MipBdmrjgzEdQMkK7b7wBShOfv1VqO6FVwa9S43bZwKYLC4dlWnPiCgNpZX3ypNEpJO8EMpMhg4HrUkWUZXGiw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
       canvas: ^2.5.0
@@ -4027,6 +4454,10 @@ packages:
     resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
 
+  jest-get-type@26.3.0:
+    resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==}
+    engines: {node: '>= 10.14.2'}
+
   jest-get-type@29.6.3:
     resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -4106,8 +4537,8 @@ packages:
     resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
 
-  jest@29.7.0:
-    resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
+  jest@29.2.2:
+    resolution: {integrity: sha512-r+0zCN9kUqoON6IjDdjbrsWobXM/09Nd45kIPRD8kloaRh1z5ZCMdVsgLXGxmlL7UpAJsvCYOQNO+NjvG/gqiQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     hasBin: true
     peerDependencies:
@@ -4147,6 +4578,15 @@ packages:
       canvas:
         optional: true
 
+  jsdom@25.0.1:
+    resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==}
+    engines: {node: '>=18'}
+    peerDependencies:
+      canvas: ^2.11.2
+    peerDependenciesMeta:
+      canvas:
+        optional: true
+
   jsesc@3.0.2:
     resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
     engines: {node: '>=6'}
@@ -4271,6 +4711,9 @@ packages:
     resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
     engines: {node: '>=10'}
 
+  lodash-es@4.17.15:
+    resolution: {integrity: sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==}
+
   lodash-es@4.17.21:
     resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
 
@@ -4313,6 +4756,9 @@ packages:
   lodash.merge@4.6.2:
     resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
 
+  lodash.mergewith@4.6.2:
+    resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
+
   lodash.once@4.1.1:
     resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
 
@@ -4354,10 +4800,6 @@ packages:
   lru-cache@10.4.3:
     resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
 
-  lru-cache@11.0.1:
-    resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==}
-    engines: {node: 20 || >=22}
-
   lru-cache@4.1.5:
     resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
 
@@ -4385,6 +4827,9 @@ packages:
   makeerror@1.0.12:
     resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
 
+  mark.js@8.11.1:
+    resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
+
   marked-terminal@7.1.0:
     resolution: {integrity: sha512-+pvwa14KZL74MVXjYdPR3nSInhGhNvPce/3mqLVZT2oUvt654sL1XImFuLZ1pkA866IYZ3ikDTOFUIC7XzpZZg==}
     engines: {node: '>=16.0.0'}
@@ -4396,6 +4841,9 @@ packages:
     engines: {node: '>= 16'}
     hasBin: true
 
+  mdast-util-to-hast@13.2.0:
+    resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
+
   memfs-or-file-map-to-github-branch@1.2.1:
     resolution: {integrity: sha512-I/hQzJ2a/pCGR8fkSQ9l5Yx+FQ4e7X6blNHyWBm2ojeFLT3GVzGkTj7xnyWpdclrr7Nq4dmx3xrvu70m3ypzAQ==}
 
@@ -4414,6 +4862,21 @@ packages:
     resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
     engines: {node: '>= 8'}
 
+  micromark-util-character@2.1.0:
+    resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==}
+
+  micromark-util-encode@2.0.0:
+    resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
+
+  micromark-util-sanitize-uri@2.0.0:
+    resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
+
+  micromark-util-symbol@2.0.0:
+    resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
+
+  micromark-util-types@2.0.0:
+    resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
+
   micromatch@4.0.8:
     resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
     engines: {node: '>=8.6'}
@@ -4442,20 +4905,12 @@ packages:
     resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
     engines: {node: '>=18'}
 
-  minimatch@10.0.1:
-    resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
-    engines: {node: 20 || >=22}
-
   minimatch@3.0.8:
     resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==}
 
   minimatch@3.1.2:
     resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
 
-  minimatch@5.1.6:
-    resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
-    engines: {node: '>=10'}
-
   minimatch@9.0.5:
     resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
     engines: {node: '>=16 || 14 >=14.17'}
@@ -4467,6 +4922,12 @@ packages:
     resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
     engines: {node: '>=16 || 14 >=14.17'}
 
+  minisearch@7.1.0:
+    resolution: {integrity: sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==}
+
+  mitt@3.0.1:
+    resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
   mri@1.2.0:
     resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
     engines: {node: '>=4'}
@@ -4582,6 +5043,10 @@ packages:
     resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
     engines: {node: '>= 0.4'}
 
+  object-is@1.1.6:
+    resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+    engines: {node: '>= 0.4'}
+
   object-keys@1.1.1:
     resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
     engines: {node: '>= 0.4'}
@@ -4621,6 +5086,9 @@ packages:
     resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
     engines: {node: '>=18'}
 
+  oniguruma-to-js@0.4.3:
+    resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==}
+
   open@10.1.0:
     resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==}
     engines: {node: '>=18'}
@@ -4791,10 +5259,6 @@ packages:
     resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
     engines: {node: '>=16 || 14 >=14.18'}
 
-  path-scurry@2.0.0:
-    resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
-    engines: {node: 20 || >=22}
-
   path-type@4.0.0:
     resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
     engines: {node: '>=8'}
@@ -4810,6 +5274,9 @@ packages:
     resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
     engines: {node: '>= 14.16'}
 
+  perfect-debounce@1.0.0:
+    resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
+
   picocolors@1.1.1:
     resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
 
@@ -4870,6 +5337,9 @@ packages:
     resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
     engines: {node: ^10 || ^12 || >=14}
 
+  preact@10.24.3:
+    resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==}
+
   prelude-ls@1.2.1:
     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
     engines: {node: '>= 0.8.0'}
@@ -4888,6 +5358,10 @@ packages:
     engines: {node: '>=14'}
     hasBin: true
 
+  pretty-format@26.6.2:
+    resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==}
+    engines: {node: '>= 10'}
+
   pretty-format@27.5.1:
     resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
     engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
@@ -4914,6 +5388,9 @@ packages:
   property-expr@2.0.6:
     resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==}
 
+  property-information@6.5.0:
+    resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+
   proto-list@1.2.4:
     resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
 
@@ -4937,9 +5414,6 @@ packages:
   pure-rand@6.1.0:
     resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
 
-  pxth@0.7.0:
-    resolution: {integrity: sha512-V2bNJNl7FIuvjsnreT7EWaBiqD5akAuGrKAVxgarjmTSDcDIGKLhY39ZFBqMkSTN8OHEBM4pszNUN+rfrojMfw==}
-
   qs@6.13.0:
     resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
     engines: {node: '>=0.6'}
@@ -5024,6 +5498,9 @@ packages:
   regenerator-transform@0.15.2:
     resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
 
+  regex@4.3.3:
+    resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==}
+
   regexp.prototype.flags@1.5.3:
     resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==}
     engines: {node: '>= 0.4'}
@@ -5106,21 +5583,22 @@ packages:
     resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
     engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
 
+  rfdc@1.4.1:
+    resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
   rimraf@3.0.2:
     resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
     deprecated: Rimraf versions prior to v4 are no longer supported
     hasBin: true
 
-  rimraf@6.0.1:
-    resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
-    engines: {node: 20 || >=22}
-    hasBin: true
-
   rollup@4.24.2:
     resolution: {integrity: sha512-do/DFGq5g6rdDhdpPq5qb2ecoczeK6y+2UAjdJ5trjQJj5f1AiVdLRWRc9A9/fFukfvJRgM0UXzxBIYMovm5ww==}
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
 
+  rrweb-cssom@0.7.1:
+    resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
+
   run-applescript@7.0.0:
     resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
     engines: {node: '>=18'}
@@ -5168,6 +5646,9 @@ packages:
     resolution: {integrity: sha512-yEsN6TuxZhZ1Tl9iB81frTNS292m0I/IG7+w8lTvfcJQP2x3vnpOoevjBoE3Np5A6KnZM2+RtVenihj9t6NiYg==}
     engines: {node: '>=12'}
 
+  search-insights@2.17.2:
+    resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==}
+
   semver@6.3.1:
     resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
     hasBin: true
@@ -5210,6 +5691,9 @@ packages:
     resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
     engines: {node: '>=8'}
 
+  shiki@1.22.2:
+    resolution: {integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==}
+
   side-channel@1.0.6:
     resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
     engines: {node: '>= 0.4'}
@@ -5267,6 +5751,9 @@ packages:
     resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
     engines: {node: '>= 8'}
 
+  space-separated-tokens@2.0.2:
+    resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
   spawndamnit@2.0.0:
     resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==}
 
@@ -5282,6 +5769,10 @@ packages:
   spdx-license-ids@3.0.12:
     resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==}
 
+  speakingurl@14.0.1:
+    resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
+    engines: {node: '>=0.10.0'}
+
   sprintf-js@1.0.3:
     resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
 
@@ -5299,11 +5790,9 @@ packages:
     resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
     engines: {node: '>=18'}
 
-  stocked@1.0.0-beta.33:
-    resolution: {integrity: sha512-ZXH3cnMrIsc0ULmgXIgJnkHhf7iimUDsYoAZqZXmWw2xwKbv0qhc/FMuuVMHG2G7Z3S7cG34fowDkJSNnzkBgg==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      react: '>=16'
+  stop-iteration-iterator@1.0.0:
+    resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
+    engines: {node: '>= 0.4'}
 
   string-argv@0.3.2:
     resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
@@ -5358,6 +5847,9 @@ packages:
   string_decoder@1.3.0:
     resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
 
+  stringify-entities@4.0.4:
+    resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+
   strip-ansi@3.0.1:
     resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
     engines: {node: '>=0.10.0'}
@@ -5410,6 +5902,10 @@ packages:
     engines: {node: '>=16 || 14 >=14.17'}
     hasBin: true
 
+  superjson@2.2.1:
+    resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==}
+    engines: {node: '>=16'}
+
   supports-color@2.0.0:
     resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
     engines: {node: '>=0.8.0'}
@@ -5462,6 +5958,9 @@ packages:
     engines: {node: '>=18.18.0'}
     hasBin: true
 
+  tabbable@6.2.0:
+    resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
+
   term-size@2.2.1:
     resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
     engines: {node: '>=8'}
@@ -5491,8 +5990,8 @@ packages:
     resolution: {integrity: sha512-Kw36UHxJEELq2VUqdaSGR2/8cAsPgMtvX8uGVU6Jk26O66PhXec0A5ZnRYs47btbtwPDpXXF66+Fo3vimCM9aQ==}
     engines: {node: '>=16'}
 
-  tiny-case@1.0.3:
-    resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==}
+  tiny-invariant@1.2.0:
+    resolution: {integrity: sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==}
 
   tiny-invariant@1.3.3:
     resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
@@ -5519,6 +6018,13 @@ packages:
     resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
     engines: {node: '>=14.0.0'}
 
+  tldts-core@6.1.57:
+    resolution: {integrity: sha512-lXnRhuQpx3zU9EONF9F7HfcRLvN1uRYUBIiKL+C/gehC/77XTU+Jye6ui86GA3rU6FjlJ0triD1Tkjt2F/2lEg==}
+
+  tldts@6.1.57:
+    resolution: {integrity: sha512-Oy7yDXK8meJl8vPMOldzA+MtueAJ5BrH4l4HXwZuj2AtfoQbLjmTJmjNWPUcAo+E/ibHn7QlqMS0BOcXJFJyHQ==}
+    hasBin: true
+
   tmp@0.0.33:
     resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
     engines: {node: '>=0.6.0'}
@@ -5537,6 +6043,10 @@ packages:
     resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
     engines: {node: '>=6'}
 
+  tough-cookie@5.0.0:
+    resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==}
+    engines: {node: '>=16'}
+
   tr46@0.0.3:
     resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
 
@@ -5547,10 +6057,17 @@ packages:
     resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
     engines: {node: '>=12'}
 
+  tr46@5.0.0:
+    resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
+    engines: {node: '>=18'}
+
   tree-kill@1.2.2:
     resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
     hasBin: true
 
+  trim-lines@3.0.1:
+    resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
   ts-api-utils@1.3.0:
     resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
     engines: {node: '>=16'}
@@ -5560,23 +6077,20 @@ packages:
   ts-interface-checker@0.1.13:
     resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
 
-  ts-jest@29.2.5:
-    resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
+  ts-jest@29.0.3:
+    resolution: {integrity: sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==}
+    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     hasBin: true
     peerDependencies:
       '@babel/core': '>=7.0.0-beta.0 <8'
-      '@jest/transform': ^29.0.0
       '@jest/types': ^29.0.0
       babel-jest: ^29.0.0
       esbuild: '*'
       jest: ^29.0.0
-      typescript: '>=4.3 <6'
+      typescript: '>=4.3'
     peerDependenciesMeta:
       '@babel/core':
         optional: true
-      '@jest/transform':
-        optional: true
       '@jest/types':
         optional: true
       babel-jest:
@@ -5590,6 +6104,9 @@ packages:
   tslib@1.14.1:
     resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
 
+  tslib@2.3.1:
+    resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==}
+
   tslib@2.8.0:
     resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
 
@@ -5723,6 +6240,9 @@ packages:
   unbox-primitive@1.0.2:
     resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
 
+  undici-types@5.26.5:
+    resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
   undici-types@6.19.8:
     resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
 
@@ -5750,6 +6270,21 @@ packages:
     resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
     engines: {node: '>=18'}
 
+  unist-util-is@6.0.0:
+    resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+
+  unist-util-position@5.0.0:
+    resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+  unist-util-stringify-position@4.0.0:
+    resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
+  unist-util-visit-parents@6.0.1:
+    resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+
+  unist-util-visit@5.0.0:
+    resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+
   universal-user-agent@6.0.1:
     resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
 
@@ -5798,6 +6333,12 @@ packages:
     resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
 
+  vfile-message@4.0.2:
+    resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+
+  vfile@6.0.3:
+    resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
   vite-node@2.1.4:
     resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==}
     engines: {node: ^18.0.0 || >=20.0.0}
@@ -5834,6 +6375,18 @@ packages:
       terser:
         optional: true
 
+  vitepress@1.4.1:
+    resolution: {integrity: sha512-C2rQ7PMlDVqgsaHOa0uJtgGGWaGv74QMaGL62lxKbtFkYtosJB5HAfZ8+pEbfzzvLemYaYwaiQdFLBlexK2sFw==}
+    hasBin: true
+    peerDependencies:
+      markdown-it-mathjax3: ^4
+      postcss: ^8
+    peerDependenciesMeta:
+      markdown-it-mathjax3:
+        optional: true
+      postcss:
+        optional: true
+
   vitest@2.1.4:
     resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==}
     engines: {node: ^18.0.0 || >=20.0.0}
@@ -5859,10 +6412,33 @@ packages:
       jsdom:
         optional: true
 
+  vue-demi@0.14.10:
+    resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+    engines: {node: '>=12'}
+    hasBin: true
+    peerDependencies:
+      '@vue/composition-api': ^1.0.0-rc.1
+      vue: ^3.0.0-0 || ^2.6.0
+    peerDependenciesMeta:
+      '@vue/composition-api':
+        optional: true
+
+  vue@3.5.12:
+    resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+
   w3c-xmlserializer@4.0.0:
     resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
     engines: {node: '>=14'}
 
+  w3c-xmlserializer@5.0.0:
+    resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
+    engines: {node: '>=18'}
+
   walker@1.0.8:
     resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
 
@@ -5887,14 +6463,26 @@ packages:
     resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
     engines: {node: '>=12'}
 
+  whatwg-encoding@3.1.1:
+    resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
+    engines: {node: '>=18'}
+
   whatwg-mimetype@3.0.0:
     resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
     engines: {node: '>=12'}
 
+  whatwg-mimetype@4.0.0:
+    resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
+    engines: {node: '>=18'}
+
   whatwg-url@11.0.0:
     resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
     engines: {node: '>=12'}
 
+  whatwg-url@14.0.0:
+    resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==}
+    engines: {node: '>=18'}
+
   whatwg-url@5.0.0:
     resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
 
@@ -5994,6 +6582,10 @@ packages:
     resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
     engines: {node: '>=12'}
 
+  xml-name-validator@5.0.0:
+    resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
+    engines: {node: '>=18'}
+
   xmlchars@2.2.0:
     resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
 
@@ -6014,6 +6606,10 @@ packages:
   yallist@4.0.0:
     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
 
+  yaml@1.10.2:
+    resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+    engines: {node: '>= 6'}
+
   yargs-parser@20.2.9:
     resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
     engines: {node: '>=10'}
@@ -6042,11 +6638,119 @@ packages:
     resolution: {integrity: sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==}
     engines: {node: '>=10'}
 
-  yup@1.4.0:
-    resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==}
+  yup@0.32.9:
+    resolution: {integrity: sha512-Ci1qN+i2H0XpY7syDQ0k5zKQ/DoxO0LzPg8PAR/X4Mpj6DqaeCoIYEEjDJwhArh3Fa7GWbQQVDZKeXYlSH4JMg==}
+    engines: {node: '>=10'}
+
+  zwitch@2.0.4:
+    resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
 
 snapshots:
 
+  '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)':
+    dependencies:
+      '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)
+      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)
+    transitivePeerDependencies:
+      - '@algolia/client-search'
+      - algoliasearch
+      - search-insights
+
+  '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)':
+    dependencies:
+      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)
+      search-insights: 2.17.2
+    transitivePeerDependencies:
+      - '@algolia/client-search'
+      - algoliasearch
+
+  '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)':
+    dependencies:
+      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)
+      '@algolia/client-search': 4.24.0
+      algoliasearch: 4.24.0
+
+  '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)':
+    dependencies:
+      '@algolia/client-search': 4.24.0
+      algoliasearch: 4.24.0
+
+  '@algolia/cache-browser-local-storage@4.24.0':
+    dependencies:
+      '@algolia/cache-common': 4.24.0
+
+  '@algolia/cache-common@4.24.0': {}
+
+  '@algolia/cache-in-memory@4.24.0':
+    dependencies:
+      '@algolia/cache-common': 4.24.0
+
+  '@algolia/client-account@4.24.0':
+    dependencies:
+      '@algolia/client-common': 4.24.0
+      '@algolia/client-search': 4.24.0
+      '@algolia/transporter': 4.24.0
+
+  '@algolia/client-analytics@4.24.0':
+    dependencies:
+      '@algolia/client-common': 4.24.0
+      '@algolia/client-search': 4.24.0
+      '@algolia/requester-common': 4.24.0
+      '@algolia/transporter': 4.24.0
+
+  '@algolia/client-common@4.24.0':
+    dependencies:
+      '@algolia/requester-common': 4.24.0
+      '@algolia/transporter': 4.24.0
+
+  '@algolia/client-personalization@4.24.0':
+    dependencies:
+      '@algolia/client-common': 4.24.0
+      '@algolia/requester-common': 4.24.0
+      '@algolia/transporter': 4.24.0
+
+  '@algolia/client-search@4.24.0':
+    dependencies:
+      '@algolia/client-common': 4.24.0
+      '@algolia/requester-common': 4.24.0
+      '@algolia/transporter': 4.24.0
+
+  '@algolia/logger-common@4.24.0': {}
+
+  '@algolia/logger-console@4.24.0':
+    dependencies:
+      '@algolia/logger-common': 4.24.0
+
+  '@algolia/recommend@4.24.0':
+    dependencies:
+      '@algolia/cache-browser-local-storage': 4.24.0
+      '@algolia/cache-common': 4.24.0
+      '@algolia/cache-in-memory': 4.24.0
+      '@algolia/client-common': 4.24.0
+      '@algolia/client-search': 4.24.0
+      '@algolia/logger-common': 4.24.0
+      '@algolia/logger-console': 4.24.0
+      '@algolia/requester-browser-xhr': 4.24.0
+      '@algolia/requester-common': 4.24.0
+      '@algolia/requester-node-http': 4.24.0
+      '@algolia/transporter': 4.24.0
+
+  '@algolia/requester-browser-xhr@4.24.0':
+    dependencies:
+      '@algolia/requester-common': 4.24.0
+
+  '@algolia/requester-common@4.24.0': {}
+
+  '@algolia/requester-node-http@4.24.0':
+    dependencies:
+      '@algolia/requester-common': 4.24.0
+
+  '@algolia/transporter@4.24.0':
+    dependencies:
+      '@algolia/cache-common': 4.24.0
+      '@algolia/logger-common': 4.24.0
+      '@algolia/requester-common': 4.24.0
+
   '@ampproject/remapping@2.3.0':
     dependencies:
       '@jridgewell/gen-mapping': 0.3.5
@@ -6082,6 +6786,26 @@ snapshots:
 
   '@babel/compat-data@7.26.0': {}
 
+  '@babel/core@7.19.6':
+    dependencies:
+      '@ampproject/remapping': 2.3.0
+      '@babel/code-frame': 7.26.0
+      '@babel/generator': 7.26.0
+      '@babel/helper-compilation-targets': 7.25.9
+      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.19.6)
+      '@babel/helpers': 7.26.0
+      '@babel/parser': 7.26.1
+      '@babel/template': 7.25.9
+      '@babel/traverse': 7.25.9
+      '@babel/types': 7.26.0
+      convert-source-map: 1.9.0
+      debug: 4.3.7
+      gensync: 1.0.0-beta.2
+      json5: 2.2.3
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/core@7.26.0':
     dependencies:
       '@ampproject/remapping': 2.3.0
@@ -6129,6 +6853,19 @@ snapshots:
       lru-cache: 5.1.1
       semver: 6.3.1
 
+  '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-annotate-as-pure': 7.25.9
+      '@babel/helper-member-expression-to-functions': 7.25.9
+      '@babel/helper-optimise-call-expression': 7.25.9
+      '@babel/helper-replace-supers': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+      '@babel/traverse': 7.25.9
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6142,6 +6879,13 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-annotate-as-pure': 7.25.9
+      regexpu-core: 6.1.1
+      semver: 6.3.1
+
   '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6149,6 +6893,17 @@ snapshots:
       regexpu-core: 6.1.1
       semver: 6.3.1
 
+  '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-compilation-targets': 7.25.9
+      '@babel/helper-plugin-utils': 7.25.9
+      debug: 4.3.7
+      lodash.debounce: 4.0.8
+      resolve: 1.22.8
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6174,6 +6929,15 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/helper-module-transforms@7.26.0(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-module-imports': 7.25.9
+      '@babel/helper-validator-identifier': 7.25.9
+      '@babel/traverse': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6189,6 +6953,15 @@ snapshots:
 
   '@babel/helper-plugin-utils@7.25.9': {}
 
+  '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-annotate-as-pure': 7.25.9
+      '@babel/helper-wrap-function': 7.25.9
+      '@babel/traverse': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6198,6 +6971,15 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/helper-replace-supers@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-member-expression-to-functions': 7.25.9
+      '@babel/helper-optimise-call-expression': 7.25.9
+      '@babel/traverse': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6244,6 +7026,14 @@ snapshots:
     dependencies:
       '@babel/types': 7.26.0
 
+  '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/traverse': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6252,16 +7042,35 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+      '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.19.6)
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6271,6 +7080,14 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/traverse': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6279,120 +7096,252 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+
   '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
 
+  '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
+    optional: true
+
+  '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
 
   '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
+    optional: true
+
+  '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
 
   '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
+    optional: true
+
+  '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
 
   '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
+    optional: true
+
+  '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
 
   '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
+    optional: true
 
-  '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.19.6)':
     dependencies:
-      '@babel/core': 7.26.0
+      '@babel/core': 7.19.6
       '@babel/helper-plugin-utils': 7.25.9
 
-  '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
+    optional: true
 
-  '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.19.6)':
     dependencies:
-      '@babel/core': 7.26.0
+      '@babel/core': 7.19.6
       '@babel/helper-plugin-utils': 7.25.9
 
-  '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
-  '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.19.6)':
     dependencies:
-      '@babel/core': 7.26.0
+      '@babel/core': 7.19.6
       '@babel/helper-plugin-utils': 7.25.9
 
-  '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
+    optional: true
 
-  '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.19.6)':
     dependencies:
-      '@babel/core': 7.26.0
+      '@babel/core': 7.19.6
       '@babel/helper-plugin-utils': 7.25.9
 
-  '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
+    optional: true
 
-  '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.19.6)':
     dependencies:
-      '@babel/core': 7.26.0
+      '@babel/core': 7.19.6
       '@babel/helper-plugin-utils': 7.25.9
 
-  '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
+    optional: true
 
-  '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.19.6)':
     dependencies:
-      '@babel/core': 7.26.0
+      '@babel/core': 7.19.6
       '@babel/helper-plugin-utils': 7.25.9
 
-  '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
-      '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
       '@babel/helper-plugin-utils': 7.25.9
+    optional: true
 
-  '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.19.6)':
     dependencies:
-      '@babel/core': 7.26.0
+      '@babel/core': 7.19.6
       '@babel/helper-plugin-utils': 7.25.9
 
-  '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)':
+  '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
-      '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0)
+    optional: true
+
+  '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
+  '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-plugin-utils': 7.25.9
+    optional: true
+
+  '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
+  '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-plugin-utils': 7.25.9
+    optional: true
+
+  '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
+  '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-plugin-utils': 7.25.9
+    optional: true
+
+  '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
+  '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+
+  '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
+      '@babel/helper-plugin-utils': 7.25.9
+
+  '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
+  '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-plugin-utils': 7.25.9
+
+  '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.19.6)
       '@babel/traverse': 7.25.9
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0)
+      '@babel/traverse': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-module-imports': 7.25.9
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.19.6)
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6402,16 +7351,34 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6420,6 +7387,14 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6428,6 +7403,18 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-classes@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-annotate-as-pure': 7.25.9
+      '@babel/helper-compilation-targets': 7.25.9
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-replace-supers': 7.25.9(@babel/core@7.19.6)
+      '@babel/traverse': 7.25.9
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6440,39 +7427,80 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/template': 7.25.9
+
   '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
       '@babel/template': 7.25.9
 
+  '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9
+      '@babel/helper-plugin-utils': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6481,11 +7509,24 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6494,6 +7535,15 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-compilation-targets': 7.25.9
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/traverse': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6503,26 +7553,54 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-literals@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6531,6 +7609,15 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-simple-access': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6540,6 +7627,16 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-validator-identifier': 7.25.9
+      '@babel/traverse': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6550,6 +7647,14 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6558,27 +7663,55 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-compilation-targets': 7.25.9
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.19.6)
+
   '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6586,6 +7719,14 @@ snapshots:
       '@babel/helper-plugin-utils': 7.25.9
       '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0)
 
+  '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-replace-supers': 7.25.9(@babel/core@7.19.6)
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6594,11 +7735,24 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6607,11 +7761,24 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6620,6 +7787,15 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-annotate-as-pure': 7.25.9
+      '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6629,16 +7805,33 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.19.6)
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6646,6 +7839,17 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-annotate-as-pure': 7.25.9
+      '@babel/helper-module-imports': 7.25.9
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.19.6)
+      '@babel/types': 7.26.0
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6657,34 +7861,70 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-annotate-as-pure': 7.25.9
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-annotate-as-pure': 7.25.9
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      regenerator-transform: 0.15.2
+
   '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
       regenerator-transform: 0.15.2
 
+  '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-spread@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6693,44 +7933,157 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.19.6)
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
       '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0)
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/preset-env@7.26.0(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/compat-data': 7.26.0
+      '@babel/core': 7.19.6
+      '@babel/helper-compilation-targets': 7.25.9
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-validator-option': 7.25.9
+      '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.19.6)
+      '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.19.6)
+      '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.19.6)
+      '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.19.6)
+      '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.19.6)
+      '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.19.6)
+      '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.19.6)
+      '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.19.6)
+      babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.19.6)
+      babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.19.6)
+      babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.19.6)
+      core-js-compat: 3.38.1
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/preset-env@7.26.0(@babel/core@7.26.0)':
     dependencies:
       '@babel/compat-data': 7.26.0
@@ -6806,6 +8159,13 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/types': 7.26.0
+      esutils: 2.0.3
+
   '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6813,6 +8173,18 @@ snapshots:
       '@babel/types': 7.26.0
       esutils: 2.0.3
 
+  '@babel/preset-react@7.25.9(@babel/core@7.19.6)':
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-validator-option': 7.25.9
+      '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.19.6)
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/preset-react@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -6999,6 +8371,33 @@ snapshots:
   '@colors/colors@1.5.0':
     optional: true
 
+  '@docsearch/css@3.6.2': {}
+
+  '@docsearch/js@3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)':
+    dependencies:
+      '@docsearch/react': 3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)
+      preact: 10.24.3
+    transitivePeerDependencies:
+      - '@algolia/client-search'
+      - '@types/react'
+      - react
+      - react-dom
+      - search-insights
+
+  '@docsearch/react@3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)':
+    dependencies:
+      '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)
+      '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)
+      '@docsearch/css': 3.6.2
+      algoliasearch: 4.24.0
+    optionalDependencies:
+      '@types/react': 18.3.12
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      search-insights: 2.17.2
+    transitivePeerDependencies:
+      - '@algolia/client-search'
+
   '@effect/schema@0.71.1(effect@3.6.5)':
     dependencies:
       effect: 3.6.5
@@ -7173,7 +8572,7 @@ snapshots:
 
   '@eslint-community/regexpp@4.12.1': {}
 
-  '@eslint/compat@1.2.1(eslint@9.13.0(jiti@2.3.3))':
+  '@eslint/compat@1.2.2(eslint@9.13.0(jiti@2.3.3))':
     optionalDependencies:
       eslint: 9.13.0(jiti@2.3.3)
 
@@ -7286,7 +8685,7 @@ snapshots:
   '@jest/console@29.7.0':
     dependencies:
       '@jest/types': 29.6.3
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       chalk: 4.1.2
       jest-message-util: 29.7.0
       jest-util: 29.7.0
@@ -7299,14 +8698,49 @@ snapshots:
       '@jest/test-result': 29.7.0
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       ansi-escapes: 4.3.2
       chalk: 4.1.2
       ci-info: 3.9.0
       exit: 0.1.2
       graceful-fs: 4.2.11
       jest-changed-files: 29.7.0
-      jest-config: 29.7.0(@types/node@22.8.1)
+      jest-config: 29.7.0(@types/node@18.19.60)
+      jest-haste-map: 29.7.0
+      jest-message-util: 29.7.0
+      jest-regex-util: 29.6.3
+      jest-resolve: 29.7.0
+      jest-resolve-dependencies: 29.7.0
+      jest-runner: 29.7.0
+      jest-runtime: 29.7.0
+      jest-snapshot: 29.7.0
+      jest-util: 29.7.0
+      jest-validate: 29.7.0
+      jest-watcher: 29.7.0
+      micromatch: 4.0.8
+      pretty-format: 29.7.0
+      slash: 3.0.0
+      strip-ansi: 6.0.1
+    transitivePeerDependencies:
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  '@jest/core@29.7.0(babel-plugin-macros@3.1.0)':
+    dependencies:
+      '@jest/console': 29.7.0
+      '@jest/reporters': 29.7.0
+      '@jest/test-result': 29.7.0
+      '@jest/transform': 29.7.0
+      '@jest/types': 29.6.3
+      '@types/node': 18.19.60
+      ansi-escapes: 4.3.2
+      chalk: 4.1.2
+      ci-info: 3.9.0
+      exit: 0.1.2
+      graceful-fs: 4.2.11
+      jest-changed-files: 29.7.0
+      jest-config: 29.7.0(@types/node@18.19.60)(babel-plugin-macros@3.1.0)
       jest-haste-map: 29.7.0
       jest-message-util: 29.7.0
       jest-regex-util: 29.6.3
@@ -7331,7 +8765,7 @@ snapshots:
     dependencies:
       '@jest/fake-timers': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 22.8.1
+      '@types/node': 20.17.2
       jest-mock: 29.7.0
 
   '@jest/expect-utils@29.7.0':
@@ -7349,7 +8783,7 @@ snapshots:
     dependencies:
       '@jest/types': 29.6.3
       '@sinonjs/fake-timers': 10.3.0
-      '@types/node': 22.8.1
+      '@types/node': 20.17.2
       jest-message-util: 29.7.0
       jest-mock: 29.7.0
       jest-util: 29.7.0
@@ -7371,7 +8805,7 @@ snapshots:
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
       '@jridgewell/trace-mapping': 0.3.25
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       chalk: 4.1.2
       collect-v8-coverage: 1.0.2
       exit: 0.1.2
@@ -7418,7 +8852,7 @@ snapshots:
 
   '@jest/transform@29.7.0':
     dependencies:
-      '@babel/core': 7.26.0
+      '@babel/core': 7.19.6
       '@jest/types': 29.6.3
       '@jridgewell/trace-mapping': 0.3.25
       babel-plugin-istanbul: 6.1.1
@@ -7436,27 +8870,33 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@jest/types@26.6.2':
+    dependencies:
+      '@types/istanbul-lib-coverage': 2.0.6
+      '@types/istanbul-reports': 3.0.4
+      '@types/node': 18.19.60
+      '@types/yargs': 15.0.19
+      chalk: 4.1.2
+
   '@jest/types@29.6.3':
     dependencies:
       '@jest/schemas': 29.6.3
       '@types/istanbul-lib-coverage': 2.0.6
       '@types/istanbul-reports': 3.0.4
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       '@types/yargs': 17.0.33
       chalk: 4.1.2
 
   '@jridgewell/gen-mapping@0.3.5':
     dependencies:
       '@jridgewell/set-array': 1.2.1
-      '@jridgewell/sourcemap-codec': 1.4.15
+      '@jridgewell/sourcemap-codec': 1.5.0
       '@jridgewell/trace-mapping': 0.3.25
 
   '@jridgewell/resolve-uri@3.1.2': {}
 
   '@jridgewell/set-array@1.2.1': {}
 
-  '@jridgewell/sourcemap-codec@1.4.15': {}
-
   '@jridgewell/sourcemap-codec@1.5.0': {}
 
   '@jridgewell/trace-mapping@0.3.25':
@@ -7480,23 +8920,75 @@ snapshots:
       globby: 11.1.0
       read-yaml-file: 1.1.0
 
-  '@microsoft/api-extractor-model@7.29.8(@types/node@22.8.1)':
+  '@microsoft/api-extractor-model@7.29.8(@types/node@18.19.60)':
+    dependencies:
+      '@microsoft/tsdoc': 0.15.0
+      '@microsoft/tsdoc-config': 0.17.0
+      '@rushstack/node-core-library': 5.9.0(@types/node@18.19.60)
+    transitivePeerDependencies:
+      - '@types/node'
+
+  '@microsoft/api-extractor-model@7.29.8(@types/node@20.17.2)':
     dependencies:
       '@microsoft/tsdoc': 0.15.0
       '@microsoft/tsdoc-config': 0.17.0
-      '@rushstack/node-core-library': 5.9.0(@types/node@22.8.1)
+      '@rushstack/node-core-library': 5.9.0(@types/node@20.17.2)
     transitivePeerDependencies:
       - '@types/node'
 
-  '@microsoft/api-extractor@7.47.11(@types/node@22.8.1)':
+  '@microsoft/api-extractor-model@7.29.8(@types/node@22.8.2)':
     dependencies:
-      '@microsoft/api-extractor-model': 7.29.8(@types/node@22.8.1)
       '@microsoft/tsdoc': 0.15.0
       '@microsoft/tsdoc-config': 0.17.0
-      '@rushstack/node-core-library': 5.9.0(@types/node@22.8.1)
+      '@rushstack/node-core-library': 5.9.0(@types/node@22.8.2)
+    transitivePeerDependencies:
+      - '@types/node'
+
+  '@microsoft/api-extractor@7.47.11(@types/node@18.19.60)':
+    dependencies:
+      '@microsoft/api-extractor-model': 7.29.8(@types/node@18.19.60)
+      '@microsoft/tsdoc': 0.15.0
+      '@microsoft/tsdoc-config': 0.17.0
+      '@rushstack/node-core-library': 5.9.0(@types/node@18.19.60)
       '@rushstack/rig-package': 0.5.3
-      '@rushstack/terminal': 0.14.2(@types/node@22.8.1)
-      '@rushstack/ts-command-line': 4.23.0(@types/node@22.8.1)
+      '@rushstack/terminal': 0.14.2(@types/node@18.19.60)
+      '@rushstack/ts-command-line': 4.23.0(@types/node@18.19.60)
+      lodash: 4.17.21
+      minimatch: 3.0.8
+      resolve: 1.22.1
+      semver: 7.5.4
+      source-map: 0.6.1
+      typescript: 5.4.2
+    transitivePeerDependencies:
+      - '@types/node'
+
+  '@microsoft/api-extractor@7.47.11(@types/node@20.17.2)':
+    dependencies:
+      '@microsoft/api-extractor-model': 7.29.8(@types/node@20.17.2)
+      '@microsoft/tsdoc': 0.15.0
+      '@microsoft/tsdoc-config': 0.17.0
+      '@rushstack/node-core-library': 5.9.0(@types/node@20.17.2)
+      '@rushstack/rig-package': 0.5.3
+      '@rushstack/terminal': 0.14.2(@types/node@20.17.2)
+      '@rushstack/ts-command-line': 4.23.0(@types/node@20.17.2)
+      lodash: 4.17.21
+      minimatch: 3.0.8
+      resolve: 1.22.1
+      semver: 7.5.4
+      source-map: 0.6.1
+      typescript: 5.4.2
+    transitivePeerDependencies:
+      - '@types/node'
+
+  '@microsoft/api-extractor@7.47.11(@types/node@22.8.2)':
+    dependencies:
+      '@microsoft/api-extractor-model': 7.29.8(@types/node@22.8.2)
+      '@microsoft/tsdoc': 0.15.0
+      '@microsoft/tsdoc-config': 0.17.0
+      '@rushstack/node-core-library': 5.9.0(@types/node@22.8.2)
+      '@rushstack/rig-package': 0.5.3
+      '@rushstack/terminal': 0.14.2(@types/node@22.8.2)
+      '@rushstack/ts-command-line': 4.23.0(@types/node@22.8.2)
       lodash: 4.17.21
       minimatch: 3.0.8
       resolve: 1.22.1
@@ -7712,10 +9204,36 @@ snapshots:
   '@rollup/rollup-win32-ia32-msvc@4.24.2':
     optional: true
 
-  '@rollup/rollup-win32-x64-msvc@4.24.2':
-    optional: true
+  '@rollup/rollup-win32-x64-msvc@4.24.2':
+    optional: true
+
+  '@rushstack/node-core-library@5.9.0(@types/node@18.19.60)':
+    dependencies:
+      ajv: 8.13.0
+      ajv-draft-04: 1.0.0(ajv@8.13.0)
+      ajv-formats: 3.0.1(ajv@8.13.0)
+      fs-extra: 7.0.1
+      import-lazy: 4.0.0
+      jju: 1.4.0
+      resolve: 1.22.1
+      semver: 7.5.4
+    optionalDependencies:
+      '@types/node': 18.19.60
+
+  '@rushstack/node-core-library@5.9.0(@types/node@20.17.2)':
+    dependencies:
+      ajv: 8.13.0
+      ajv-draft-04: 1.0.0(ajv@8.13.0)
+      ajv-formats: 3.0.1(ajv@8.13.0)
+      fs-extra: 7.0.1
+      import-lazy: 4.0.0
+      jju: 1.4.0
+      resolve: 1.22.1
+      semver: 7.5.4
+    optionalDependencies:
+      '@types/node': 20.17.2
 
-  '@rushstack/node-core-library@5.9.0(@types/node@22.8.1)':
+  '@rushstack/node-core-library@5.9.0(@types/node@22.8.2)':
     dependencies:
       ajv: 8.13.0
       ajv-draft-04: 1.0.0(ajv@8.13.0)
@@ -7726,23 +9244,55 @@ snapshots:
       resolve: 1.22.1
       semver: 7.5.4
     optionalDependencies:
-      '@types/node': 22.8.1
+      '@types/node': 22.8.2
 
   '@rushstack/rig-package@0.5.3':
     dependencies:
       resolve: 1.22.1
       strip-json-comments: 3.1.1
 
-  '@rushstack/terminal@0.14.2(@types/node@22.8.1)':
+  '@rushstack/terminal@0.14.2(@types/node@18.19.60)':
+    dependencies:
+      '@rushstack/node-core-library': 5.9.0(@types/node@18.19.60)
+      supports-color: 8.1.1
+    optionalDependencies:
+      '@types/node': 18.19.60
+
+  '@rushstack/terminal@0.14.2(@types/node@20.17.2)':
+    dependencies:
+      '@rushstack/node-core-library': 5.9.0(@types/node@20.17.2)
+      supports-color: 8.1.1
+    optionalDependencies:
+      '@types/node': 20.17.2
+
+  '@rushstack/terminal@0.14.2(@types/node@22.8.2)':
     dependencies:
-      '@rushstack/node-core-library': 5.9.0(@types/node@22.8.1)
+      '@rushstack/node-core-library': 5.9.0(@types/node@22.8.2)
       supports-color: 8.1.1
     optionalDependencies:
-      '@types/node': 22.8.1
+      '@types/node': 22.8.2
+
+  '@rushstack/ts-command-line@4.23.0(@types/node@18.19.60)':
+    dependencies:
+      '@rushstack/terminal': 0.14.2(@types/node@18.19.60)
+      '@types/argparse': 1.0.38
+      argparse: 1.0.10
+      string-argv: 0.3.2
+    transitivePeerDependencies:
+      - '@types/node'
+
+  '@rushstack/ts-command-line@4.23.0(@types/node@20.17.2)':
+    dependencies:
+      '@rushstack/terminal': 0.14.2(@types/node@20.17.2)
+      '@types/argparse': 1.0.38
+      argparse: 1.0.10
+      string-argv: 0.3.2
+    transitivePeerDependencies:
+      - '@types/node'
 
-  '@rushstack/ts-command-line@4.23.0(@types/node@22.8.1)':
+  '@rushstack/ts-command-line@4.23.0(@types/node@22.8.2)':
     dependencies:
-      '@rushstack/terminal': 0.14.2(@types/node@22.8.1)
+      '@rushstack/terminal': 0.14.2(@types/node@22.8.2)
       '@types/argparse': 1.0.38
       argparse: 1.0.10
       string-argv: 0.3.2
@@ -7757,6 +9307,37 @@ snapshots:
     transitivePeerDependencies:
       - zenObservable
 
+  '@shikijs/core@1.22.2':
+    dependencies:
+      '@shikijs/engine-javascript': 1.22.2
+      '@shikijs/engine-oniguruma': 1.22.2
+      '@shikijs/types': 1.22.2
+      '@shikijs/vscode-textmate': 9.3.0
+      '@types/hast': 3.0.4
+      hast-util-to-html: 9.0.3
+
+  '@shikijs/engine-javascript@1.22.2':
+    dependencies:
+      '@shikijs/types': 1.22.2
+      '@shikijs/vscode-textmate': 9.3.0
+      oniguruma-to-js: 0.4.3
+
+  '@shikijs/engine-oniguruma@1.22.2':
+    dependencies:
+      '@shikijs/types': 1.22.2
+      '@shikijs/vscode-textmate': 9.3.0
+
+  '@shikijs/transformers@1.22.2':
+    dependencies:
+      shiki: 1.22.2
+
+  '@shikijs/types@1.22.2':
+    dependencies:
+      '@shikijs/vscode-textmate': 9.3.0
+      '@types/hast': 3.0.4
+
+  '@shikijs/vscode-textmate@9.3.0': {}
+
   '@sinclair/typebox@0.27.8': {}
 
   '@sindresorhus/is@4.6.0': {}
@@ -7787,21 +9368,40 @@ snapshots:
       '@size-limit/file': 11.1.6(size-limit@11.1.6)
       size-limit: 11.1.6
 
-  '@testing-library/dom@8.19.0':
+  '@testing-library/dom@10.4.0':
+    dependencies:
+      '@babel/code-frame': 7.26.0
+      '@babel/runtime': 7.26.0
+      '@types/aria-query': 5.0.4
+      aria-query: 5.3.0
+      chalk: 4.1.2
+      dom-accessibility-api: 0.5.16
+      lz-string: 1.5.0
+      pretty-format: 27.5.1
+
+  '@testing-library/dom@8.20.1':
     dependencies:
       '@babel/code-frame': 7.26.0
       '@babel/runtime': 7.26.0
-      '@types/aria-query': 4.2.2
-      aria-query: 5.3.2
+      '@types/aria-query': 5.0.4
+      aria-query: 5.1.3
       chalk: 4.1.2
       dom-accessibility-api: 0.5.16
       lz-string: 1.5.0
       pretty-format: 27.5.1
 
-  '@testing-library/react@16.0.1(@testing-library/dom@8.19.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+  '@testing-library/react@13.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+    dependencies:
+      '@babel/runtime': 7.26.0
+      '@testing-library/dom': 8.20.1
+      '@types/react-dom': 18.3.1
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+
+  '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@babel/runtime': 7.26.0
-      '@testing-library/dom': 8.19.0
+      '@testing-library/dom': 10.4.0
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
     optionalDependencies:
@@ -7812,7 +9412,7 @@ snapshots:
 
   '@types/argparse@1.0.38': {}
 
-  '@types/aria-query@4.2.2': {}
+  '@types/aria-query@5.0.4': {}
 
   '@types/babel__core@7.20.5':
     dependencies:
@@ -7839,7 +9439,11 @@ snapshots:
 
   '@types/graceful-fs@4.1.9':
     dependencies:
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
+
+  '@types/hast@3.0.4':
+    dependencies:
+      '@types/unist': 3.0.3
 
   '@types/istanbul-lib-coverage@2.0.6': {}
 
@@ -7851,29 +9455,56 @@ snapshots:
     dependencies:
       '@types/istanbul-lib-report': 3.0.3
 
-  '@types/jest@29.5.14':
+  '@types/jest@26.0.24':
     dependencies:
-      expect: 29.7.0
-      pretty-format: 29.7.0
+      jest-diff: 26.6.2
+      pretty-format: 26.6.2
 
   '@types/jsdom@20.0.1':
     dependencies:
-      '@types/node': 22.8.1
+      '@types/node': 20.17.2
       '@types/tough-cookie': 4.0.5
       parse5: 7.2.1
 
   '@types/json-schema@7.0.15': {}
 
+  '@types/linkify-it@5.0.0': {}
+
+  '@types/lodash@4.14.161': {}
+
   '@types/lodash@4.17.12': {}
 
+  '@types/markdown-it@14.1.2':
+    dependencies:
+      '@types/linkify-it': 5.0.0
+      '@types/mdurl': 2.0.0
+
+  '@types/mdast@4.0.4':
+    dependencies:
+      '@types/unist': 3.0.3
+
+  '@types/mdurl@2.0.0': {}
+
   '@types/node@12.20.55': {}
 
-  '@types/node@22.8.1':
+  '@types/node@18.19.60':
+    dependencies:
+      undici-types: 5.26.5
+
+  '@types/node@20.17.2':
+    dependencies:
+      undici-types: 6.19.8
+
+  '@types/node@22.8.2':
     dependencies:
       undici-types: 6.19.8
+    optional: true
 
   '@types/normalize-package-data@2.4.4': {}
 
+  '@types/parse-json@4.0.2':
+    optional: true
+
   '@types/prop-types@15.7.13': {}
 
   '@types/react-dom@18.3.1':
@@ -7893,8 +9524,16 @@ snapshots:
 
   '@types/tough-cookie@4.0.5': {}
 
+  '@types/unist@3.0.3': {}
+
+  '@types/web-bluetooth@0.0.20': {}
+
   '@types/yargs-parser@21.0.3': {}
 
+  '@types/yargs@15.0.19':
+    dependencies:
+      '@types/yargs-parser': 21.0.3
+
   '@types/yargs@17.0.33':
     dependencies:
       '@types/yargs-parser': 21.0.3
@@ -8078,6 +9717,11 @@ snapshots:
 
   '@ungap/structured-clone@1.2.0': {}
 
+  '@vitejs/plugin-vue@5.1.4(vite@5.4.10(@types/node@22.8.2))(vue@3.5.12(typescript@5.6.3))':
+    dependencies:
+      vite: 5.4.10(@types/node@22.8.2)
+      vue: 3.5.12(typescript@5.6.3)
+
   '@vitest/expect@2.1.4':
     dependencies:
       '@vitest/spy': 2.1.4
@@ -8085,13 +9729,21 @@ snapshots:
       chai: 5.1.2
       tinyrainbow: 1.2.0
 
-  '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.8.1))':
+  '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@20.17.2))':
+    dependencies:
+      '@vitest/spy': 2.1.4
+      estree-walker: 3.0.3
+      magic-string: 0.30.12
+    optionalDependencies:
+      vite: 5.4.10(@types/node@20.17.2)
+
+  '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.8.2))':
     dependencies:
       '@vitest/spy': 2.1.4
       estree-walker: 3.0.3
       magic-string: 0.30.12
     optionalDependencies:
-      vite: 5.4.10(@types/node@22.8.1)
+      vite: 5.4.10(@types/node@22.8.2)
 
   '@vitest/pretty-format@2.1.4':
     dependencies:
@@ -8118,6 +9770,108 @@ snapshots:
       loupe: 3.1.2
       tinyrainbow: 1.2.0
 
+  '@vue/compiler-core@3.5.12':
+    dependencies:
+      '@babel/parser': 7.26.1
+      '@vue/shared': 3.5.12
+      entities: 4.5.0
+      estree-walker: 2.0.2
+      source-map-js: 1.2.1
+
+  '@vue/compiler-dom@3.5.12':
+    dependencies:
+      '@vue/compiler-core': 3.5.12
+      '@vue/shared': 3.5.12
+
+  '@vue/compiler-sfc@3.5.12':
+    dependencies:
+      '@babel/parser': 7.26.1
+      '@vue/compiler-core': 3.5.12
+      '@vue/compiler-dom': 3.5.12
+      '@vue/compiler-ssr': 3.5.12
+      '@vue/shared': 3.5.12
+      estree-walker: 2.0.2
+      magic-string: 0.30.12
+      postcss: 8.4.47
+      source-map-js: 1.2.1
+
+  '@vue/compiler-ssr@3.5.12':
+    dependencies:
+      '@vue/compiler-dom': 3.5.12
+      '@vue/shared': 3.5.12
+
+  '@vue/devtools-api@7.5.4':
+    dependencies:
+      '@vue/devtools-kit': 7.5.4
+
+  '@vue/devtools-kit@7.5.4':
+    dependencies:
+      '@vue/devtools-shared': 7.5.4
+      birpc: 0.2.19
+      hookable: 5.5.3
+      mitt: 3.0.1
+      perfect-debounce: 1.0.0
+      speakingurl: 14.0.1
+      superjson: 2.2.1
+
+  '@vue/devtools-shared@7.5.4':
+    dependencies:
+      rfdc: 1.4.1
+
+  '@vue/reactivity@3.5.12':
+    dependencies:
+      '@vue/shared': 3.5.12
+
+  '@vue/runtime-core@3.5.12':
+    dependencies:
+      '@vue/reactivity': 3.5.12
+      '@vue/shared': 3.5.12
+
+  '@vue/runtime-dom@3.5.12':
+    dependencies:
+      '@vue/reactivity': 3.5.12
+      '@vue/runtime-core': 3.5.12
+      '@vue/shared': 3.5.12
+      csstype: 3.1.3
+
+  '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))':
+    dependencies:
+      '@vue/compiler-ssr': 3.5.12
+      '@vue/shared': 3.5.12
+      vue: 3.5.12(typescript@5.6.3)
+
+  '@vue/shared@3.5.12': {}
+
+  '@vueuse/core@11.1.0(vue@3.5.12(typescript@5.6.3))':
+    dependencies:
+      '@types/web-bluetooth': 0.0.20
+      '@vueuse/metadata': 11.1.0
+      '@vueuse/shared': 11.1.0(vue@3.5.12(typescript@5.6.3))
+      vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - vue
+
+  '@vueuse/integrations@11.1.0(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3))':
+    dependencies:
+      '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
+      '@vueuse/shared': 11.1.0(vue@3.5.12(typescript@5.6.3))
+      vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
+    optionalDependencies:
+      focus-trap: 7.6.0
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - vue
+
+  '@vueuse/metadata@11.1.0': {}
+
+  '@vueuse/shared@11.1.0(vue@3.5.12(typescript@5.6.3))':
+    dependencies:
+      vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - vue
+
   abab@2.0.6: {}
 
   acorn-globals@7.0.1:
@@ -8141,6 +9895,12 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  agent-base@7.1.1:
+    dependencies:
+      debug: 4.3.7
+    transitivePeerDependencies:
+      - supports-color
+
   aggregate-error@4.0.1:
     dependencies:
       clean-stack: 4.2.0
@@ -8175,6 +9935,24 @@ snapshots:
       require-from-string: 2.0.2
       uri-js: 4.4.1
 
+  algoliasearch@4.24.0:
+    dependencies:
+      '@algolia/cache-browser-local-storage': 4.24.0
+      '@algolia/cache-common': 4.24.0
+      '@algolia/cache-in-memory': 4.24.0
+      '@algolia/client-account': 4.24.0
+      '@algolia/client-analytics': 4.24.0
+      '@algolia/client-common': 4.24.0
+      '@algolia/client-personalization': 4.24.0
+      '@algolia/client-search': 4.24.0
+      '@algolia/logger-common': 4.24.0
+      '@algolia/logger-console': 4.24.0
+      '@algolia/recommend': 4.24.0
+      '@algolia/requester-browser-xhr': 4.24.0
+      '@algolia/requester-common': 4.24.0
+      '@algolia/requester-node-http': 4.24.0
+      '@algolia/transporter': 4.24.0
+
   ansi-align@3.0.1:
     dependencies:
       string-width: 4.2.3
@@ -8232,10 +10010,51 @@ snapshots:
       normalize-path: 3.0.0
       picomatch: 2.3.1
 
-  aqu@0.4.3(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@22.8.1)(babel-jest@29.7.0(@babel/core@7.26.0)):
+  aqu@0.4.3(@babel/core@7.19.6)(@jest/types@29.6.3)(@types/node@18.19.60)(babel-jest@29.7.0(@babel/core@7.19.6))(babel-plugin-macros@3.1.0):
     dependencies:
-      '@babel/preset-env': 7.26.0(@babel/core@7.26.0)
-      '@babel/preset-react': 7.25.9(@babel/core@7.26.0)
+      '@babel/preset-env': 7.26.0(@babel/core@7.19.6)
+      '@babel/preset-react': 7.25.9(@babel/core@7.19.6)
+      '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.15.18)
+      '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.8.4))(eslint@8.57.1)(typescript@4.8.4)
+      '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.8.4)
+      chalk: 4.1.2
+      chokidar: 3.6.0
+      commander: 9.5.0
+      dts-bundle-generator: 6.13.0
+      esbuild: 0.15.18
+      eslint: 8.57.1
+      eslint-config-prettier: 8.10.0(eslint@8.57.1)
+      eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8)
+      eslint-plugin-simple-import-sort: 8.0.0(eslint@8.57.1)
+      execa: 4.1.0
+      fs-extra: 10.1.0
+      github-username: 6.0.0
+      inquirer: 7.3.3
+      jest: 29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0)
+      jest-watch-typeahead: 2.2.2(jest@29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0))
+      lodash: 4.17.21
+      ora: 5.4.1
+      prettier: 2.8.8
+      rimraf: 3.0.2
+      ts-jest: 29.0.3(@babel/core@7.19.6)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.19.6))(esbuild@0.15.18)(jest@29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0))(typescript@4.8.4)
+      typescript: 4.8.4
+      webpack-merge: 5.10.0
+      yup: 0.32.11
+    transitivePeerDependencies:
+      - '@babel/core'
+      - '@jest/types'
+      - '@types/node'
+      - babel-jest
+      - babel-plugin-macros
+      - encoding
+      - node-notifier
+      - supports-color
+      - ts-node
+
+  aqu@0.4.3(@babel/core@7.19.6)(@jest/types@29.6.3)(@types/node@22.8.2)(babel-jest@29.7.0(@babel/core@7.19.6))(babel-plugin-macros@3.1.0):
+    dependencies:
+      '@babel/preset-env': 7.26.0(@babel/core@7.19.6)
+      '@babel/preset-react': 7.25.9(@babel/core@7.19.6)
       '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.15.18)
       '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.8.4))(eslint@8.57.1)(typescript@4.8.4)
       '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.8.4)
@@ -8252,19 +10071,18 @@ snapshots:
       fs-extra: 10.1.0
       github-username: 6.0.0
       inquirer: 7.3.3
-      jest: 29.7.0(@types/node@22.8.1)
-      jest-watch-typeahead: 2.2.2(jest@29.7.0(@types/node@22.8.1))
+      jest: 29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0)
+      jest-watch-typeahead: 2.2.2(jest@29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0))
       lodash: 4.17.21
       ora: 5.4.1
       prettier: 2.8.8
       rimraf: 3.0.2
-      ts-jest: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.15.18)(jest@29.7.0)(typescript@4.8.4)
+      ts-jest: 29.0.3(@babel/core@7.19.6)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.19.6))(esbuild@0.15.18)(jest@29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0))(typescript@4.8.4)
       typescript: 4.8.4
       webpack-merge: 5.10.0
       yup: 0.32.11
     transitivePeerDependencies:
       - '@babel/core'
-      - '@jest/transform'
       - '@jest/types'
       - '@types/node'
       - babel-jest
@@ -8274,7 +10092,7 @@ snapshots:
       - supports-color
       - ts-node
 
-  aqu@0.4.3(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0)):
+  aqu@0.4.3(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0)):
     dependencies:
       '@babel/preset-env': 7.26.0(@babel/core@7.26.0)
       '@babel/preset-react': 7.25.9(@babel/core@7.26.0)
@@ -8294,19 +10112,18 @@ snapshots:
       fs-extra: 10.1.0
       github-username: 6.0.0
       inquirer: 7.3.3
-      jest: 29.7.0(@types/node@22.8.1)
-      jest-watch-typeahead: 2.2.2(jest@29.7.0(@types/node@22.8.1))
+      jest: 29.2.2
+      jest-watch-typeahead: 2.2.2(jest@29.2.2)
       lodash: 4.17.21
       ora: 5.4.1
       prettier: 2.8.8
       rimraf: 3.0.2
-      ts-jest: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.15.18)(jest@29.7.0)(typescript@4.8.4)
+      ts-jest: 29.0.3(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.15.18)(jest@29.2.2)(typescript@4.8.4)
       typescript: 4.8.4
       webpack-merge: 5.10.0
       yup: 0.32.11
     transitivePeerDependencies:
       - '@babel/core'
-      - '@jest/transform'
       - '@jest/types'
       - '@types/node'
       - babel-jest
@@ -8322,7 +10139,13 @@ snapshots:
 
   argparse@2.0.1: {}
 
-  aria-query@5.3.2: {}
+  aria-query@5.1.3:
+    dependencies:
+      deep-equal: 2.2.3
+
+  aria-query@5.3.0:
+    dependencies:
+      dequal: 2.0.3
 
   array-buffer-byte-length@1.0.1:
     dependencies:
@@ -8390,8 +10213,6 @@ snapshots:
     dependencies:
       retry: 0.12.0
 
-  async@3.2.6: {}
-
   asynckit@0.4.0: {}
 
   atomically@2.0.3:
@@ -8403,6 +10224,19 @@ snapshots:
     dependencies:
       possible-typed-array-names: 1.0.0
 
+  babel-jest@29.7.0(@babel/core@7.19.6):
+    dependencies:
+      '@babel/core': 7.19.6
+      '@jest/transform': 29.7.0
+      '@types/babel__core': 7.20.5
+      babel-plugin-istanbul: 6.1.1
+      babel-preset-jest: 29.6.3(@babel/core@7.19.6)
+      chalk: 4.1.2
+      graceful-fs: 4.2.11
+      slash: 3.0.0
+    transitivePeerDependencies:
+      - supports-color
+
   babel-jest@29.7.0(@babel/core@7.26.0):
     dependencies:
       '@babel/core': 7.26.0
@@ -8415,6 +10249,7 @@ snapshots:
       slash: 3.0.0
     transitivePeerDependencies:
       - supports-color
+    optional: true
 
   babel-plugin-istanbul@6.1.1:
     dependencies:
@@ -8433,6 +10268,22 @@ snapshots:
       '@types/babel__core': 7.20.5
       '@types/babel__traverse': 7.20.6
 
+  babel-plugin-macros@3.1.0:
+    dependencies:
+      '@babel/runtime': 7.26.0
+      cosmiconfig: 7.1.0
+      resolve: 1.22.8
+    optional: true
+
+  babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.19.6):
+    dependencies:
+      '@babel/compat-data': 7.26.0
+      '@babel/core': 7.19.6
+      '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.19.6)
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+
   babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.26.0):
     dependencies:
       '@babel/compat-data': 7.26.0
@@ -8442,6 +10293,14 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.19.6):
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.19.6)
+      core-js-compat: 3.38.1
+    transitivePeerDependencies:
+      - supports-color
+
   babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0):
     dependencies:
       '@babel/core': 7.26.0
@@ -8450,6 +10309,13 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.19.6):
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.19.6)
+    transitivePeerDependencies:
+      - supports-color
+
   babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.26.0):
     dependencies:
       '@babel/core': 7.26.0
@@ -8457,6 +10323,25 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  babel-preset-current-node-syntax@1.1.0(@babel/core@7.19.6):
+    dependencies:
+      '@babel/core': 7.19.6
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.19.6)
+      '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.19.6)
+      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.19.6)
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.19.6)
+      '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.19.6)
+      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.19.6)
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.19.6)
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.19.6)
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.19.6)
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.19.6)
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.19.6)
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.19.6)
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.19.6)
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.19.6)
+      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.19.6)
+
   babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0):
     dependencies:
       '@babel/core': 7.26.0
@@ -8475,12 +10360,20 @@ snapshots:
       '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0)
       '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0)
       '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0)
+    optional: true
+
+  babel-preset-jest@29.6.3(@babel/core@7.19.6):
+    dependencies:
+      '@babel/core': 7.19.6
+      babel-plugin-jest-hoist: 29.6.3
+      babel-preset-current-node-syntax: 1.1.0(@babel/core@7.19.6)
 
   babel-preset-jest@29.6.3(@babel/core@7.26.0):
     dependencies:
       '@babel/core': 7.26.0
       babel-plugin-jest-hoist: 29.6.3
       babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0)
+    optional: true
 
   balanced-match@1.0.2: {}
 
@@ -8496,6 +10389,8 @@ snapshots:
 
   binary-extensions@2.3.0: {}
 
+  birpc@0.2.19: {}
+
   bl@4.1.0:
     dependencies:
       buffer: 5.7.1
@@ -8581,6 +10476,8 @@ snapshots:
 
   caniuse-lite@1.0.30001673: {}
 
+  ccount@2.0.1: {}
+
   chai@5.1.2:
     dependencies:
       assertion-error: 2.0.1
@@ -8618,6 +10515,10 @@ snapshots:
 
   char-regex@2.0.1: {}
 
+  character-entities-html4@2.1.0: {}
+
+  character-entities-legacy@3.0.0: {}
+
   chardet@0.7.0: {}
 
   check-error@2.1.1: {}
@@ -8739,6 +10640,8 @@ snapshots:
     dependencies:
       delayed-stream: 1.0.0
 
+  comma-separated-tokens@2.0.3: {}
+
   commander@10.0.1: {}
 
   commander@12.1.0: {}
@@ -8756,6 +10659,10 @@ snapshots:
       ini: 1.3.8
       proto-list: 1.2.4
 
+  configs@https://codeload.github.com/fracht/configs/tar.gz/b8a8e13fc3db0f3d5afdcedd0749fccc7292be30:
+    dependencies:
+      lodash.mergewith: 4.6.2
+
   configstore@7.0.0:
     dependencies:
       atomically: 2.0.3
@@ -8765,14 +10672,29 @@ snapshots:
 
   consola@3.2.3: {}
 
+  convert-source-map@1.9.0: {}
+
   convert-source-map@2.0.0: {}
 
+  copy-anything@3.0.5:
+    dependencies:
+      is-what: 4.1.16
+
   core-js-compat@3.38.1:
     dependencies:
       browserslist: 4.24.2
 
   core-js@3.38.1: {}
 
+  cosmiconfig@7.1.0:
+    dependencies:
+      '@types/parse-json': 4.0.2
+      import-fresh: 3.3.0
+      parse-json: 5.2.0
+      path-type: 4.0.0
+      yaml: 1.10.2
+    optional: true
+
   cosmiconfig@8.3.6(typescript@5.6.3):
     dependencies:
       import-fresh: 3.3.0
@@ -8813,13 +10735,43 @@ snapshots:
       p-filter: 3.0.0
       p-map: 6.0.0
 
-  create-jest@29.7.0(@types/node@22.8.1):
+  create-jest@29.7.0:
+    dependencies:
+      '@jest/types': 29.6.3
+      chalk: 4.1.2
+      exit: 0.1.2
+      graceful-fs: 4.2.11
+      jest-config: 29.7.0(@types/node@18.19.60)
+      jest-util: 29.7.0
+      prompts: 2.4.2
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  create-jest@29.7.0(@types/node@18.19.60)(babel-plugin-macros@3.1.0):
+    dependencies:
+      '@jest/types': 29.6.3
+      chalk: 4.1.2
+      exit: 0.1.2
+      graceful-fs: 4.2.11
+      jest-config: 29.7.0(@types/node@18.19.60)(babel-plugin-macros@3.1.0)
+      jest-util: 29.7.0
+      prompts: 2.4.2
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  create-jest@29.7.0(@types/node@22.8.2)(babel-plugin-macros@3.1.0):
     dependencies:
       '@jest/types': 29.6.3
       chalk: 4.1.2
       exit: 0.1.2
       graceful-fs: 4.2.11
-      jest-config: 29.7.0(@types/node@22.8.1)
+      jest-config: 29.7.0(@types/node@22.8.2)(babel-plugin-macros@3.1.0)
       jest-util: 29.7.0
       prompts: 2.4.2
     transitivePeerDependencies:
@@ -8848,6 +10800,10 @@ snapshots:
     dependencies:
       cssom: 0.3.8
 
+  cssstyle@4.1.0:
+    dependencies:
+      rrweb-cssom: 0.7.1
+
   csstype@3.1.3: {}
 
   danger@12.3.3:
@@ -8899,6 +10855,11 @@ snapshots:
       whatwg-mimetype: 3.0.0
       whatwg-url: 11.0.0
 
+  data-urls@5.0.0:
+    dependencies:
+      whatwg-mimetype: 4.0.0
+      whatwg-url: 14.0.0
+
   data-view-buffer@1.0.1:
     dependencies:
       call-bind: 1.0.7
@@ -8925,10 +10886,33 @@ snapshots:
 
   decimal.js@10.4.3: {}
 
-  dedent@1.5.3: {}
+  dedent@1.5.3(babel-plugin-macros@3.1.0):
+    optionalDependencies:
+      babel-plugin-macros: 3.1.0
 
   deep-eql@5.0.2: {}
 
+  deep-equal@2.2.3:
+    dependencies:
+      array-buffer-byte-length: 1.0.1
+      call-bind: 1.0.7
+      es-get-iterator: 1.1.3
+      get-intrinsic: 1.2.4
+      is-arguments: 1.1.1
+      is-array-buffer: 3.0.4
+      is-date-object: 1.0.5
+      is-regex: 1.1.4
+      is-shared-array-buffer: 1.0.3
+      isarray: 2.0.5
+      object-is: 1.1.6
+      object-keys: 1.1.1
+      object.assign: 4.1.5
+      regexp.prototype.flags: 1.5.3
+      side-channel: 1.0.6
+      which-boxed-primitive: 1.0.2
+      which-collection: 1.0.2
+      which-typed-array: 1.1.15
+
   deep-extend@0.6.0: {}
 
   deep-is@0.1.4: {}
@@ -8975,10 +10959,18 @@ snapshots:
 
   deprecation@2.3.1: {}
 
+  dequal@2.0.3: {}
+
   detect-indent@6.1.0: {}
 
   detect-newline@3.1.0: {}
 
+  devlop@1.1.0:
+    dependencies:
+      dequal: 2.0.3
+
+  diff-sequences@26.6.2: {}
+
   diff-sequences@29.6.3: {}
 
   dir-glob@3.0.1:
@@ -9016,10 +11008,6 @@ snapshots:
 
   effect@3.6.5: {}
 
-  ejs@3.1.10:
-    dependencies:
-      jake: 10.9.2
-
   electron-to-chromium@1.5.47: {}
 
   elegant-spinner@1.0.1: {}
@@ -9108,6 +11096,18 @@ snapshots:
 
   es-errors@1.3.0: {}
 
+  es-get-iterator@1.1.3:
+    dependencies:
+      call-bind: 1.0.7
+      get-intrinsic: 1.2.4
+      has-symbols: 1.0.3
+      is-arguments: 1.1.1
+      is-map: 2.0.3
+      is-set: 2.0.3
+      is-string: 1.0.7
+      isarray: 2.0.5
+      stop-iteration-iterator: 1.0.0
+
   es-iterator-helpers@1.1.0:
     dependencies:
       call-bind: 1.0.7
@@ -9283,8 +11283,6 @@ snapshots:
       '@esbuild/win32-ia32': 0.24.0
       '@esbuild/win32-x64': 0.24.0
 
-  escalade@3.1.2: {}
-
   escalade@3.2.0: {}
 
   escape-goat@4.0.0: {}
@@ -9494,6 +11492,8 @@ snapshots:
 
   estraverse@5.3.0: {}
 
+  estree-walker@2.0.2: {}
+
   estree-walker@3.0.3:
     dependencies:
       '@types/estree': 1.0.6
@@ -9623,10 +11623,6 @@ snapshots:
     dependencies:
       flat-cache: 4.0.1
 
-  filelist@1.0.4:
-    dependencies:
-      minimatch: 5.1.6
-
   fill-range@7.1.1:
     dependencies:
       to-regex-range: 5.0.1
@@ -9658,6 +11654,10 @@ snapshots:
 
   flatted@3.3.1: {}
 
+  focus-trap@7.6.0:
+    dependencies:
+      tabbable: 6.2.0
+
   for-each@0.3.3:
     dependencies:
       is-callable: 1.2.7
@@ -9772,15 +11772,6 @@ snapshots:
       package-json-from-dist: 1.0.1
       path-scurry: 1.11.1
 
-  glob@11.0.0:
-    dependencies:
-      foreground-child: 3.3.0
-      jackspeak: 4.0.2
-      minimatch: 10.0.1
-      minipass: 7.1.2
-      package-json-from-dist: 1.0.1
-      path-scurry: 2.0.0
-
   glob@7.2.3:
     dependencies:
       fs.realpath: 1.0.0
@@ -9843,6 +11834,13 @@ snapshots:
 
   graphemer@1.4.0: {}
 
+  happy-dom@15.7.4:
+    dependencies:
+      entities: 4.5.0
+      webidl-conversions: 7.0.0
+      whatwg-mimetype: 3.0.0
+    optional: true
+
   has-ansi@2.0.0:
     dependencies:
       ansi-regex: 2.1.1
@@ -9875,12 +11873,32 @@ snapshots:
     dependencies:
       function-bind: 1.1.2
 
+  hast-util-to-html@9.0.3:
+    dependencies:
+      '@types/hast': 3.0.4
+      '@types/unist': 3.0.3
+      ccount: 2.0.1
+      comma-separated-tokens: 2.0.3
+      hast-util-whitespace: 3.0.0
+      html-void-elements: 3.0.0
+      mdast-util-to-hast: 13.2.0
+      property-information: 6.5.0
+      space-separated-tokens: 2.0.2
+      stringify-entities: 4.0.4
+      zwitch: 2.0.4
+
+  hast-util-whitespace@3.0.0:
+    dependencies:
+      '@types/hast': 3.0.4
+
   highlight.js@10.7.3: {}
 
   homedir-polyfill@1.0.3:
     dependencies:
       parse-passwd: 1.0.0
 
+  hookable@5.5.3: {}
+
   hosted-git-info@7.0.2:
     dependencies:
       lru-cache: 10.4.3
@@ -9889,8 +11907,14 @@ snapshots:
     dependencies:
       whatwg-encoding: 2.0.0
 
+  html-encoding-sniffer@4.0.0:
+    dependencies:
+      whatwg-encoding: 3.1.1
+
   html-escaper@2.0.2: {}
 
+  html-void-elements@3.0.0: {}
+
   http-proxy-agent@5.0.0:
     dependencies:
       '@tootallnate/once': 2.0.0
@@ -9899,6 +11923,13 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  http-proxy-agent@7.0.2:
+    dependencies:
+      agent-base: 7.1.1
+      debug: 4.3.7
+    transitivePeerDependencies:
+      - supports-color
+
   https-proxy-agent@5.0.1:
     dependencies:
       agent-base: 6.0.2
@@ -9906,6 +11937,13 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  https-proxy-agent@7.0.5:
+    dependencies:
+      agent-base: 7.1.1
+      debug: 4.3.7
+    transitivePeerDependencies:
+      - supports-color
+
   human-id@1.0.2: {}
 
   human-signals@1.1.1: {}
@@ -10027,6 +12065,11 @@ snapshots:
       hasown: 2.0.2
       side-channel: 1.0.6
 
+  is-arguments@1.1.1:
+    dependencies:
+      call-bind: 1.0.7
+      has-tostringtag: 1.0.2
+
   is-array-buffer@3.0.4:
     dependencies:
       call-bind: 1.0.7
@@ -10200,6 +12243,8 @@ snapshots:
       call-bind: 1.0.7
       get-intrinsic: 1.2.4
 
+  is-what@4.1.16: {}
+
   is-windows@1.0.2: {}
 
   is-wsl@3.1.0:
@@ -10218,7 +12263,7 @@ snapshots:
 
   istanbul-lib-instrument@5.2.1:
     dependencies:
-      '@babel/core': 7.26.0
+      '@babel/core': 7.19.6
       '@babel/parser': 7.26.1
       '@istanbuljs/schema': 0.1.3
       istanbul-lib-coverage: 3.2.2
@@ -10269,33 +12314,22 @@ snapshots:
     optionalDependencies:
       '@pkgjs/parseargs': 0.11.0
 
-  jackspeak@4.0.2:
-    dependencies:
-      '@isaacs/cliui': 8.0.2
-
-  jake@10.9.2:
-    dependencies:
-      async: 3.2.6
-      chalk: 4.1.2
-      filelist: 1.0.4
-      minimatch: 3.1.2
-
   jest-changed-files@29.7.0:
     dependencies:
       execa: 5.1.1
       jest-util: 29.7.0
       p-limit: 3.1.0
 
-  jest-circus@29.7.0:
+  jest-circus@29.7.0(babel-plugin-macros@3.1.0):
     dependencies:
       '@jest/environment': 29.7.0
       '@jest/expect': 29.7.0
       '@jest/test-result': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       chalk: 4.1.2
       co: 4.6.0
-      dedent: 1.5.3
+      dedent: 1.5.3(babel-plugin-macros@3.1.0)
       is-generator-fn: 2.1.0
       jest-each: 29.7.0
       jest-matcher-utils: 29.7.0
@@ -10312,16 +12346,16 @@ snapshots:
       - babel-plugin-macros
       - supports-color
 
-  jest-cli@29.7.0(@types/node@22.8.1):
+  jest-cli@29.7.0:
     dependencies:
       '@jest/core': 29.7.0
       '@jest/test-result': 29.7.0
       '@jest/types': 29.6.3
       chalk: 4.1.2
-      create-jest: 29.7.0(@types/node@22.8.1)
+      create-jest: 29.7.0
       exit: 0.1.2
       import-local: 3.2.0
-      jest-config: 29.7.0(@types/node@22.8.1)
+      jest-config: 29.7.0(@types/node@18.19.60)
       jest-util: 29.7.0
       jest-validate: 29.7.0
       yargs: 17.7.2
@@ -10331,18 +12365,116 @@ snapshots:
       - supports-color
       - ts-node
 
-  jest-config@29.7.0(@types/node@22.8.1):
+  jest-cli@29.7.0(@types/node@18.19.60)(babel-plugin-macros@3.1.0):
     dependencies:
-      '@babel/core': 7.26.0
+      '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)
+      '@jest/test-result': 29.7.0
+      '@jest/types': 29.6.3
+      chalk: 4.1.2
+      create-jest: 29.7.0(@types/node@18.19.60)(babel-plugin-macros@3.1.0)
+      exit: 0.1.2
+      import-local: 3.2.0
+      jest-config: 29.7.0(@types/node@18.19.60)(babel-plugin-macros@3.1.0)
+      jest-util: 29.7.0
+      jest-validate: 29.7.0
+      yargs: 17.7.2
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  jest-cli@29.7.0(@types/node@22.8.2)(babel-plugin-macros@3.1.0):
+    dependencies:
+      '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)
+      '@jest/test-result': 29.7.0
+      '@jest/types': 29.6.3
+      chalk: 4.1.2
+      create-jest: 29.7.0(@types/node@22.8.2)(babel-plugin-macros@3.1.0)
+      exit: 0.1.2
+      import-local: 3.2.0
+      jest-config: 29.7.0(@types/node@22.8.2)(babel-plugin-macros@3.1.0)
+      jest-util: 29.7.0
+      jest-validate: 29.7.0
+      yargs: 17.7.2
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  jest-config@29.7.0(@types/node@18.19.60):
+    dependencies:
+      '@babel/core': 7.19.6
       '@jest/test-sequencer': 29.7.0
       '@jest/types': 29.6.3
-      babel-jest: 29.7.0(@babel/core@7.26.0)
+      babel-jest: 29.7.0(@babel/core@7.19.6)
+      chalk: 4.1.2
+      ci-info: 3.9.0
+      deepmerge: 4.3.1
+      glob: 7.2.3
+      graceful-fs: 4.2.11
+      jest-circus: 29.7.0(babel-plugin-macros@3.1.0)
+      jest-environment-node: 29.7.0
+      jest-get-type: 29.6.3
+      jest-regex-util: 29.6.3
+      jest-resolve: 29.7.0
+      jest-runner: 29.7.0
+      jest-util: 29.7.0
+      jest-validate: 29.7.0
+      micromatch: 4.0.8
+      parse-json: 5.2.0
+      pretty-format: 29.7.0
+      slash: 3.0.0
+      strip-json-comments: 3.1.1
+    optionalDependencies:
+      '@types/node': 18.19.60
+    transitivePeerDependencies:
+      - babel-plugin-macros
+      - supports-color
+
+  jest-config@29.7.0(@types/node@18.19.60)(babel-plugin-macros@3.1.0):
+    dependencies:
+      '@babel/core': 7.19.6
+      '@jest/test-sequencer': 29.7.0
+      '@jest/types': 29.6.3
+      babel-jest: 29.7.0(@babel/core@7.19.6)
+      chalk: 4.1.2
+      ci-info: 3.9.0
+      deepmerge: 4.3.1
+      glob: 7.2.3
+      graceful-fs: 4.2.11
+      jest-circus: 29.7.0(babel-plugin-macros@3.1.0)
+      jest-environment-node: 29.7.0
+      jest-get-type: 29.6.3
+      jest-regex-util: 29.6.3
+      jest-resolve: 29.7.0
+      jest-runner: 29.7.0
+      jest-util: 29.7.0
+      jest-validate: 29.7.0
+      micromatch: 4.0.8
+      parse-json: 5.2.0
+      pretty-format: 29.7.0
+      slash: 3.0.0
+      strip-json-comments: 3.1.1
+    optionalDependencies:
+      '@types/node': 18.19.60
+    transitivePeerDependencies:
+      - babel-plugin-macros
+      - supports-color
+
+  jest-config@29.7.0(@types/node@22.8.2)(babel-plugin-macros@3.1.0):
+    dependencies:
+      '@babel/core': 7.19.6
+      '@jest/test-sequencer': 29.7.0
+      '@jest/types': 29.6.3
+      babel-jest: 29.7.0(@babel/core@7.19.6)
       chalk: 4.1.2
       ci-info: 3.9.0
       deepmerge: 4.3.1
       glob: 7.2.3
       graceful-fs: 4.2.11
-      jest-circus: 29.7.0
+      jest-circus: 29.7.0(babel-plugin-macros@3.1.0)
       jest-environment-node: 29.7.0
       jest-get-type: 29.6.3
       jest-regex-util: 29.6.3
@@ -10356,11 +12488,18 @@ snapshots:
       slash: 3.0.0
       strip-json-comments: 3.1.1
     optionalDependencies:
-      '@types/node': 22.8.1
+      '@types/node': 22.8.2
     transitivePeerDependencies:
       - babel-plugin-macros
       - supports-color
 
+  jest-diff@26.6.2:
+    dependencies:
+      chalk: 4.1.2
+      diff-sequences: 26.6.2
+      jest-get-type: 26.3.0
+      pretty-format: 26.6.2
+
   jest-diff@29.7.0:
     dependencies:
       chalk: 4.1.2
@@ -10380,13 +12519,13 @@ snapshots:
       jest-util: 29.7.0
       pretty-format: 29.7.0
 
-  jest-environment-jsdom@29.7.0:
+  jest-environment-jsdom@29.2.1:
     dependencies:
       '@jest/environment': 29.7.0
       '@jest/fake-timers': 29.7.0
       '@jest/types': 29.6.3
       '@types/jsdom': 20.0.1
-      '@types/node': 22.8.1
+      '@types/node': 20.17.2
       jest-mock: 29.7.0
       jest-util: 29.7.0
       jsdom: 20.0.3
@@ -10400,17 +12539,19 @@ snapshots:
       '@jest/environment': 29.7.0
       '@jest/fake-timers': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       jest-mock: 29.7.0
       jest-util: 29.7.0
 
+  jest-get-type@26.3.0: {}
+
   jest-get-type@29.6.3: {}
 
   jest-haste-map@29.7.0:
     dependencies:
       '@jest/types': 29.6.3
       '@types/graceful-fs': 4.1.9
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       anymatch: 3.1.3
       fb-watchman: 2.0.2
       graceful-fs: 4.2.11
@@ -10449,7 +12590,7 @@ snapshots:
   jest-mock@29.7.0:
     dependencies:
       '@jest/types': 29.6.3
-      '@types/node': 22.8.1
+      '@types/node': 20.17.2
       jest-util: 29.7.0
 
   jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
@@ -10484,7 +12625,7 @@ snapshots:
       '@jest/test-result': 29.7.0
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       chalk: 4.1.2
       emittery: 0.13.1
       graceful-fs: 4.2.11
@@ -10512,7 +12653,7 @@ snapshots:
       '@jest/test-result': 29.7.0
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       chalk: 4.1.2
       cjs-module-lexer: 1.4.1
       collect-v8-coverage: 1.0.2
@@ -10532,15 +12673,15 @@ snapshots:
 
   jest-snapshot@29.7.0:
     dependencies:
-      '@babel/core': 7.26.0
+      '@babel/core': 7.19.6
       '@babel/generator': 7.26.0
-      '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
-      '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0)
+      '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.19.6)
+      '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.19.6)
       '@babel/types': 7.26.0
       '@jest/expect-utils': 29.7.0
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
-      babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0)
+      babel-preset-current-node-syntax: 1.1.0(@babel/core@7.19.6)
       chalk: 4.1.2
       expect: 29.7.0
       graceful-fs: 4.2.11
@@ -10558,7 +12699,7 @@ snapshots:
   jest-util@29.7.0:
     dependencies:
       '@jest/types': 29.6.3
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       chalk: 4.1.2
       ci-info: 3.9.0
       graceful-fs: 4.2.11
@@ -10573,11 +12714,33 @@ snapshots:
       leven: 3.1.0
       pretty-format: 29.7.0
 
-  jest-watch-typeahead@2.2.2(jest@29.7.0(@types/node@22.8.1)):
+  jest-watch-typeahead@2.2.2(jest@29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0)):
+    dependencies:
+      ansi-escapes: 6.2.1
+      chalk: 5.3.0
+      jest: 29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0)
+      jest-regex-util: 29.6.3
+      jest-watcher: 29.7.0
+      slash: 5.1.0
+      string-length: 5.0.1
+      strip-ansi: 7.1.0
+
+  jest-watch-typeahead@2.2.2(jest@29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0)):
+    dependencies:
+      ansi-escapes: 6.2.1
+      chalk: 5.3.0
+      jest: 29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0)
+      jest-regex-util: 29.6.3
+      jest-watcher: 29.7.0
+      slash: 5.1.0
+      string-length: 5.0.1
+      strip-ansi: 7.1.0
+
+  jest-watch-typeahead@2.2.2(jest@29.2.2):
     dependencies:
       ansi-escapes: 6.2.1
       chalk: 5.3.0
-      jest: 29.7.0(@types/node@22.8.1)
+      jest: 29.2.2
       jest-regex-util: 29.6.3
       jest-watcher: 29.7.0
       slash: 5.1.0
@@ -10588,7 +12751,7 @@ snapshots:
     dependencies:
       '@jest/test-result': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       ansi-escapes: 4.3.2
       chalk: 4.1.2
       emittery: 0.13.1
@@ -10597,17 +12760,41 @@ snapshots:
 
   jest-worker@29.7.0:
     dependencies:
-      '@types/node': 22.8.1
+      '@types/node': 18.19.60
       jest-util: 29.7.0
       merge-stream: 2.0.0
       supports-color: 8.1.1
 
-  jest@29.7.0(@types/node@22.8.1):
+  jest@29.2.2:
     dependencies:
       '@jest/core': 29.7.0
       '@jest/types': 29.6.3
       import-local: 3.2.0
-      jest-cli: 29.7.0(@types/node@22.8.1)
+      jest-cli: 29.7.0
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  jest@29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0):
+    dependencies:
+      '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)
+      '@jest/types': 29.6.3
+      import-local: 3.2.0
+      jest-cli: 29.7.0(@types/node@18.19.60)(babel-plugin-macros@3.1.0)
+    transitivePeerDependencies:
+      - '@types/node'
+      - babel-plugin-macros
+      - supports-color
+      - ts-node
+
+  jest@29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0):
+    dependencies:
+      '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)
+      '@jest/types': 29.6.3
+      import-local: 3.2.0
+      jest-cli: 29.7.0(@types/node@22.8.2)(babel-plugin-macros@3.1.0)
     transitivePeerDependencies:
       - '@types/node'
       - babel-plugin-macros
@@ -10664,6 +12851,34 @@ snapshots:
       - supports-color
       - utf-8-validate
 
+  jsdom@25.0.1:
+    dependencies:
+      cssstyle: 4.1.0
+      data-urls: 5.0.0
+      decimal.js: 10.4.3
+      form-data: 4.0.1
+      html-encoding-sniffer: 4.0.0
+      http-proxy-agent: 7.0.2
+      https-proxy-agent: 7.0.5
+      is-potential-custom-element-name: 1.0.1
+      nwsapi: 2.2.13
+      parse5: 7.2.1
+      rrweb-cssom: 0.7.1
+      saxes: 6.0.0
+      symbol-tree: 3.2.4
+      tough-cookie: 5.0.0
+      w3c-xmlserializer: 5.0.0
+      webidl-conversions: 7.0.0
+      whatwg-encoding: 3.1.1
+      whatwg-mimetype: 4.0.0
+      whatwg-url: 14.0.0
+      ws: 8.18.0
+      xml-name-validator: 5.0.0
+    transitivePeerDependencies:
+      - bufferutil
+      - supports-color
+      - utf-8-validate
+
   jsesc@3.0.2: {}
 
   json-buffer@3.0.1: {}
@@ -10803,6 +13018,8 @@ snapshots:
     dependencies:
       p-locate: 5.0.0
 
+  lodash-es@4.17.15: {}
+
   lodash-es@4.17.21: {}
 
   lodash.debounce@4.0.8: {}
@@ -10831,6 +13048,8 @@ snapshots:
 
   lodash.merge@4.6.2: {}
 
+  lodash.mergewith@4.6.2: {}
+
   lodash.once@4.1.1: {}
 
   lodash.sortby@4.7.0: {}
@@ -10869,8 +13088,6 @@ snapshots:
 
   lru-cache@10.4.3: {}
 
-  lru-cache@11.0.1: {}
-
   lru-cache@4.1.5:
     dependencies:
       pseudomap: 1.0.2
@@ -10900,6 +13117,8 @@ snapshots:
     dependencies:
       tmpl: 1.0.5
 
+  mark.js@8.11.1: {}
+
   marked-terminal@7.1.0(marked@9.1.6):
     dependencies:
       ansi-escapes: 7.0.0
@@ -10912,6 +13131,18 @@ snapshots:
 
   marked@9.1.6: {}
 
+  mdast-util-to-hast@13.2.0:
+    dependencies:
+      '@types/hast': 3.0.4
+      '@types/mdast': 4.0.4
+      '@ungap/structured-clone': 1.2.0
+      devlop: 1.1.0
+      micromark-util-sanitize-uri: 2.0.0
+      trim-lines: 3.0.1
+      unist-util-position: 5.0.0
+      unist-util-visit: 5.0.0
+      vfile: 6.0.3
+
   memfs-or-file-map-to-github-branch@1.2.1:
     dependencies:
       '@octokit/rest': 18.12.0
@@ -10926,6 +13157,23 @@ snapshots:
 
   merge2@1.4.1: {}
 
+  micromark-util-character@2.1.0:
+    dependencies:
+      micromark-util-symbol: 2.0.0
+      micromark-util-types: 2.0.0
+
+  micromark-util-encode@2.0.0: {}
+
+  micromark-util-sanitize-uri@2.0.0:
+    dependencies:
+      micromark-util-character: 2.1.0
+      micromark-util-encode: 2.0.0
+      micromark-util-symbol: 2.0.0
+
+  micromark-util-symbol@2.0.0: {}
+
+  micromark-util-types@2.0.0: {}
+
   micromatch@4.0.8:
     dependencies:
       braces: 3.0.3
@@ -10945,10 +13193,6 @@ snapshots:
 
   mimic-function@5.0.1: {}
 
-  minimatch@10.0.1:
-    dependencies:
-      brace-expansion: 2.0.1
-
   minimatch@3.0.8:
     dependencies:
       brace-expansion: 1.1.11
@@ -10957,17 +13201,17 @@ snapshots:
     dependencies:
       brace-expansion: 1.1.11
 
-  minimatch@5.1.6:
-    dependencies:
-      brace-expansion: 2.0.1
-
   minimatch@9.0.5:
     dependencies:
       brace-expansion: 2.0.1
 
   minimist@1.2.8: {}
 
-  minipass@7.1.2: {}
+  minipass@7.1.2: {}
+
+  minisearch@7.1.0: {}
+
+  mitt@3.0.1: {}
 
   mri@1.2.0: {}
 
@@ -11108,6 +13352,11 @@ snapshots:
 
   object-inspect@1.13.2: {}
 
+  object-is@1.1.6:
+    dependencies:
+      call-bind: 1.0.7
+      define-properties: 1.2.1
+
   object-keys@1.1.1: {}
 
   object.assign@4.1.5:
@@ -11156,6 +13405,10 @@ snapshots:
     dependencies:
       mimic-function: 5.0.1
 
+  oniguruma-to-js@0.4.3:
+    dependencies:
+      regex: 4.3.3
+
   open@10.1.0:
     dependencies:
       default-browser: 5.2.1
@@ -11326,11 +13579,6 @@ snapshots:
       lru-cache: 10.4.3
       minipass: 7.1.2
 
-  path-scurry@2.0.0:
-    dependencies:
-      lru-cache: 11.0.1
-      minipass: 7.1.2
-
   path-type@4.0.0: {}
 
   path-type@5.0.0: {}
@@ -11339,6 +13587,8 @@ snapshots:
 
   pathval@2.0.0: {}
 
+  perfect-debounce@1.0.0: {}
+
   picocolors@1.1.1: {}
 
   picomatch@2.3.1: {}
@@ -11376,6 +13626,8 @@ snapshots:
       picocolors: 1.1.1
       source-map-js: 1.2.1
 
+  preact@10.24.3: {}
+
   prelude-ls@1.2.1: {}
 
   prettier-linter-helpers@1.0.0:
@@ -11386,6 +13638,13 @@ snapshots:
 
   prettier@3.3.3: {}
 
+  pretty-format@26.6.2:
+    dependencies:
+      '@jest/types': 26.6.2
+      ansi-regex: 5.0.1
+      ansi-styles: 4.3.0
+      react-is: 17.0.2
+
   pretty-format@27.5.1:
     dependencies:
       ansi-regex: 5.0.1
@@ -11418,6 +13677,8 @@ snapshots:
 
   property-expr@2.0.6: {}
 
+  property-information@6.5.0: {}
+
   proto-list@1.2.4: {}
 
   pseudomap@1.0.2: {}
@@ -11437,11 +13698,6 @@ snapshots:
 
   pure-rand@6.1.0: {}
 
-  pxth@0.7.0:
-    dependencies:
-      lodash: 4.17.21
-      tiny-invariant: 1.3.3
-
   qs@6.13.0:
     dependencies:
       side-channel: 1.0.6
@@ -11537,6 +13793,8 @@ snapshots:
     dependencies:
       '@babel/runtime': 7.26.0
 
+  regex@4.3.3: {}
+
   regexp.prototype.flags@1.5.3:
     dependencies:
       call-bind: 1.0.7
@@ -11620,15 +13878,12 @@ snapshots:
 
   reusify@1.0.4: {}
 
+  rfdc@1.4.1: {}
+
   rimraf@3.0.2:
     dependencies:
       glob: 7.2.3
 
-  rimraf@6.0.1:
-    dependencies:
-      glob: 11.0.0
-      package-json-from-dist: 1.0.1
-
   rollup@4.24.2:
     dependencies:
       '@types/estree': 1.0.6
@@ -11653,6 +13908,8 @@ snapshots:
       '@rollup/rollup-win32-x64-msvc': 4.24.2
       fsevents: 2.3.3
 
+  rrweb-cssom@0.7.1: {}
+
   run-applescript@7.0.0: {}
 
   run-async@2.4.1: {}
@@ -11669,7 +13926,7 @@ snapshots:
 
   rxjs@7.8.1:
     dependencies:
-      tslib: 2.8.0
+      tslib: 2.3.1
 
   safe-array-concat@1.1.2:
     dependencies:
@@ -11698,6 +13955,8 @@ snapshots:
 
   scoped-regex@3.0.0: {}
 
+  search-insights@2.17.2: {}
+
   semver@6.3.1: {}
 
   semver@7.5.4:
@@ -11738,6 +13997,15 @@ snapshots:
 
   shebang-regex@3.0.0: {}
 
+  shiki@1.22.2:
+    dependencies:
+      '@shikijs/core': 1.22.2
+      '@shikijs/engine-javascript': 1.22.2
+      '@shikijs/engine-oniguruma': 1.22.2
+      '@shikijs/types': 1.22.2
+      '@shikijs/vscode-textmate': 9.3.0
+      '@types/hast': 3.0.4
+
   side-channel@1.0.6:
     dependencies:
       call-bind: 1.0.7
@@ -11788,6 +14056,8 @@ snapshots:
     dependencies:
       whatwg-url: 7.1.0
 
+  space-separated-tokens@2.0.2: {}
+
   spawndamnit@2.0.0:
     dependencies:
       cross-spawn: 5.1.0
@@ -11807,6 +14077,8 @@ snapshots:
 
   spdx-license-ids@3.0.12: {}
 
+  speakingurl@14.0.1: {}
+
   sprintf-js@1.0.3: {}
 
   stack-utils@2.0.6:
@@ -11819,13 +14091,9 @@ snapshots:
 
   stdin-discarder@0.2.2: {}
 
-  stocked@1.0.0-beta.33(react@18.3.1):
+  stop-iteration-iterator@1.0.0:
     dependencies:
-      lodash: 4.17.21
-      lodash-es: 4.17.21
-      pxth: 0.7.0
-      react: 18.3.1
-      tiny-invariant: 1.3.3
+      internal-slot: 1.0.7
 
   string-argv@0.3.2: {}
 
@@ -11911,6 +14179,11 @@ snapshots:
     dependencies:
       safe-buffer: 5.2.1
 
+  stringify-entities@4.0.4:
+    dependencies:
+      character-entities-html4: 2.1.0
+      character-entities-legacy: 3.0.0
+
   strip-ansi@3.0.1:
     dependencies:
       ansi-regex: 2.1.1
@@ -11955,6 +14228,10 @@ snapshots:
       pirates: 4.0.5
       ts-interface-checker: 0.1.13
 
+  superjson@2.2.1:
+    dependencies:
+      copy-anything: 3.0.5
+
   supports-color@2.0.0: {}
 
   supports-color@5.5.0:
@@ -12020,6 +14297,8 @@ snapshots:
     transitivePeerDependencies:
       - typescript
 
+  tabbable@6.2.0: {}
+
   term-size@2.2.1: {}
 
   terminal-link@3.0.0:
@@ -12047,7 +14326,7 @@ snapshots:
 
   tightrope@0.2.0: {}
 
-  tiny-case@1.0.3: {}
+  tiny-invariant@1.2.0: {}
 
   tiny-invariant@1.3.3: {}
 
@@ -12066,6 +14345,12 @@ snapshots:
 
   tinyspy@3.0.2: {}
 
+  tldts-core@6.1.57: {}
+
+  tldts@6.1.57:
+    dependencies:
+      tldts-core: 6.1.57
+
   tmp@0.0.33:
     dependencies:
       os-tmpdir: 1.0.2
@@ -12085,6 +14370,10 @@ snapshots:
       universalify: 0.2.0
       url-parse: 1.5.10
 
+  tough-cookie@5.0.0:
+    dependencies:
+      tldts: 6.1.57
+
   tr46@0.0.3: {}
 
   tr46@1.0.1:
@@ -12095,40 +14384,61 @@ snapshots:
     dependencies:
       punycode: 2.3.1
 
+  tr46@5.0.0:
+    dependencies:
+      punycode: 2.3.1
+
   tree-kill@1.2.2: {}
 
+  trim-lines@3.0.1: {}
+
   ts-api-utils@1.3.0(typescript@5.6.3):
     dependencies:
       typescript: 5.6.3
 
   ts-interface-checker@0.1.13: {}
 
-  ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.15.18)(jest@29.7.0(@types/node@22.8.1))(typescript@5.6.3):
+  ts-jest@29.0.3(@babel/core@7.19.6)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.19.6))(esbuild@0.15.18)(jest@29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0))(typescript@4.8.4):
     dependencies:
       bs-logger: 0.2.6
-      ejs: 3.1.10
       fast-json-stable-stringify: 2.1.0
-      jest: 29.7.0(@types/node@22.8.1)
+      jest: 29.2.2(@types/node@18.19.60)(babel-plugin-macros@3.1.0)
       jest-util: 29.7.0
       json5: 2.2.3
       lodash.memoize: 4.1.2
       make-error: 1.3.6
       semver: 7.6.3
-      typescript: 5.6.3
+      typescript: 4.8.4
       yargs-parser: 21.1.1
     optionalDependencies:
-      '@babel/core': 7.26.0
-      '@jest/transform': 29.7.0
+      '@babel/core': 7.19.6
       '@jest/types': 29.6.3
-      babel-jest: 29.7.0(@babel/core@7.26.0)
+      babel-jest: 29.7.0(@babel/core@7.19.6)
+      esbuild: 0.15.18
+
+  ts-jest@29.0.3(@babel/core@7.19.6)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.19.6))(esbuild@0.15.18)(jest@29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0))(typescript@4.8.4):
+    dependencies:
+      bs-logger: 0.2.6
+      fast-json-stable-stringify: 2.1.0
+      jest: 29.2.2(@types/node@22.8.2)(babel-plugin-macros@3.1.0)
+      jest-util: 29.7.0
+      json5: 2.2.3
+      lodash.memoize: 4.1.2
+      make-error: 1.3.6
+      semver: 7.6.3
+      typescript: 4.8.4
+      yargs-parser: 21.1.1
+    optionalDependencies:
+      '@babel/core': 7.19.6
+      '@jest/types': 29.6.3
+      babel-jest: 29.7.0(@babel/core@7.19.6)
       esbuild: 0.15.18
 
-  ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.15.18)(jest@29.7.0)(typescript@4.8.4):
+  ts-jest@29.0.3(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.15.18)(jest@29.2.2)(typescript@4.8.4):
     dependencies:
       bs-logger: 0.2.6
-      ejs: 3.1.10
       fast-json-stable-stringify: 2.1.0
-      jest: 29.7.0(@types/node@22.8.1)
+      jest: 29.2.2
       jest-util: 29.7.0
       json5: 2.2.3
       lodash.memoize: 4.1.2
@@ -12138,7 +14448,6 @@ snapshots:
       yargs-parser: 21.1.1
     optionalDependencies:
       '@babel/core': 7.26.0
-      '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
       babel-jest: 29.7.0(@babel/core@7.26.0)
       esbuild: 0.15.18
@@ -12147,9 +14456,95 @@ snapshots:
 
   tslib@1.14.1: {}
 
+  tslib@2.3.1: {}
+
   tslib@2.8.0: {}
 
-  tsup@8.3.5(@microsoft/api-extractor@7.47.11(@types/node@22.8.1))(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3):
+  tsup@8.3.5(@microsoft/api-extractor@7.47.11(@types/node@18.19.60))(jiti@2.3.3)(postcss@8.4.47)(typescript@4.8.4):
+    dependencies:
+      bundle-require: 5.0.0(esbuild@0.24.0)
+      cac: 6.7.14
+      chokidar: 4.0.1
+      consola: 3.2.3
+      debug: 4.3.7
+      esbuild: 0.24.0
+      joycon: 3.1.1
+      picocolors: 1.1.1
+      postcss-load-config: 6.0.1(jiti@2.3.3)(postcss@8.4.47)
+      resolve-from: 5.0.0
+      rollup: 4.24.2
+      source-map: 0.8.0-beta.0
+      sucrase: 3.35.0
+      tinyexec: 0.3.1
+      tinyglobby: 0.2.10
+      tree-kill: 1.2.2
+    optionalDependencies:
+      '@microsoft/api-extractor': 7.47.11(@types/node@18.19.60)
+      postcss: 8.4.47
+      typescript: 4.8.4
+    transitivePeerDependencies:
+      - jiti
+      - supports-color
+      - tsx
+      - yaml
+
+  tsup@8.3.5(@microsoft/api-extractor@7.47.11(@types/node@20.17.2))(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3):
+    dependencies:
+      bundle-require: 5.0.0(esbuild@0.24.0)
+      cac: 6.7.14
+      chokidar: 4.0.1
+      consola: 3.2.3
+      debug: 4.3.7
+      esbuild: 0.24.0
+      joycon: 3.1.1
+      picocolors: 1.1.1
+      postcss-load-config: 6.0.1(jiti@2.3.3)(postcss@8.4.47)
+      resolve-from: 5.0.0
+      rollup: 4.24.2
+      source-map: 0.8.0-beta.0
+      sucrase: 3.35.0
+      tinyexec: 0.3.1
+      tinyglobby: 0.2.10
+      tree-kill: 1.2.2
+    optionalDependencies:
+      '@microsoft/api-extractor': 7.47.11(@types/node@20.17.2)
+      postcss: 8.4.47
+      typescript: 5.6.3
+    transitivePeerDependencies:
+      - jiti
+      - supports-color
+      - tsx
+      - yaml
+
+  tsup@8.3.5(@microsoft/api-extractor@7.47.11(@types/node@22.8.2))(jiti@2.3.3)(postcss@8.4.47)(typescript@4.8.4):
+    dependencies:
+      bundle-require: 5.0.0(esbuild@0.24.0)
+      cac: 6.7.14
+      chokidar: 4.0.1
+      consola: 3.2.3
+      debug: 4.3.7
+      esbuild: 0.24.0
+      joycon: 3.1.1
+      picocolors: 1.1.1
+      postcss-load-config: 6.0.1(jiti@2.3.3)(postcss@8.4.47)
+      resolve-from: 5.0.0
+      rollup: 4.24.2
+      source-map: 0.8.0-beta.0
+      sucrase: 3.35.0
+      tinyexec: 0.3.1
+      tinyglobby: 0.2.10
+      tree-kill: 1.2.2
+    optionalDependencies:
+      '@microsoft/api-extractor': 7.47.11(@types/node@22.8.2)
+      postcss: 8.4.47
+      typescript: 4.8.4
+    transitivePeerDependencies:
+      - jiti
+      - supports-color
+      - tsx
+      - yaml
+
+  tsup@8.3.5(@microsoft/api-extractor@7.47.11(@types/node@22.8.2))(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3):
     dependencies:
       bundle-require: 5.0.0(esbuild@0.24.0)
       cac: 6.7.14
@@ -12168,7 +14563,7 @@ snapshots:
       tinyglobby: 0.2.10
       tree-kill: 1.2.2
     optionalDependencies:
-      '@microsoft/api-extractor': 7.47.11(@types/node@22.8.1)
+      '@microsoft/api-extractor': 7.47.11(@types/node@22.8.2)
       postcss: 8.4.47
       typescript: 5.6.3
     transitivePeerDependencies:
@@ -12274,6 +14669,8 @@ snapshots:
       has-symbols: 1.0.3
       which-boxed-primitive: 1.0.2
 
+  undici-types@5.26.5: {}
+
   undici-types@6.19.8: {}
 
   unicode-canonical-property-names-ecmascript@2.0.1: {}
@@ -12291,6 +14688,29 @@ snapshots:
 
   unicorn-magic@0.1.0: {}
 
+  unist-util-is@6.0.0:
+    dependencies:
+      '@types/unist': 3.0.3
+
+  unist-util-position@5.0.0:
+    dependencies:
+      '@types/unist': 3.0.3
+
+  unist-util-stringify-position@4.0.0:
+    dependencies:
+      '@types/unist': 3.0.3
+
+  unist-util-visit-parents@6.0.1:
+    dependencies:
+      '@types/unist': 3.0.3
+      unist-util-is: 6.0.0
+
+  unist-util-visit@5.0.0:
+    dependencies:
+      '@types/unist': 3.0.3
+      unist-util-is: 6.0.0
+      unist-util-visit-parents: 6.0.1
+
   universal-user-agent@6.0.1: {}
 
   universal-user-agent@7.0.2: {}
@@ -12344,12 +14764,39 @@ snapshots:
 
   validate-npm-package-name@5.0.1: {}
 
-  vite-node@2.1.4(@types/node@22.8.1):
+  vfile-message@4.0.2:
+    dependencies:
+      '@types/unist': 3.0.3
+      unist-util-stringify-position: 4.0.0
+
+  vfile@6.0.3:
+    dependencies:
+      '@types/unist': 3.0.3
+      vfile-message: 4.0.2
+
+  vite-node@2.1.4(@types/node@20.17.2):
+    dependencies:
+      cac: 6.7.14
+      debug: 4.3.7
+      pathe: 1.1.2
+      vite: 5.4.10(@types/node@20.17.2)
+    transitivePeerDependencies:
+      - '@types/node'
+      - less
+      - lightningcss
+      - sass
+      - sass-embedded
+      - stylus
+      - sugarss
+      - supports-color
+      - terser
+
+  vite-node@2.1.4(@types/node@22.8.2):
     dependencies:
       cac: 6.7.14
       debug: 4.3.7
       pathe: 1.1.2
-      vite: 5.4.10(@types/node@22.8.1)
+      vite: 5.4.10(@types/node@22.8.2)
     transitivePeerDependencies:
       - '@types/node'
       - less
@@ -12361,19 +14808,77 @@ snapshots:
       - supports-color
       - terser
 
-  vite@5.4.10(@types/node@22.8.1):
+  vite@5.4.10(@types/node@20.17.2):
+    dependencies:
+      esbuild: 0.21.5
+      postcss: 8.4.47
+      rollup: 4.24.2
+    optionalDependencies:
+      '@types/node': 20.17.2
+      fsevents: 2.3.3
+
+  vite@5.4.10(@types/node@22.8.2):
     dependencies:
       esbuild: 0.21.5
       postcss: 8.4.47
       rollup: 4.24.2
     optionalDependencies:
-      '@types/node': 22.8.1
+      '@types/node': 22.8.2
       fsevents: 2.3.3
 
-  vitest@2.1.4(@types/node@22.8.1)(jsdom@20.0.3):
+  vitepress@1.4.1(@algolia/client-search@4.24.0)(@types/node@22.8.2)(@types/react@18.3.12)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3):
+    dependencies:
+      '@docsearch/css': 3.6.2
+      '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)
+      '@shikijs/core': 1.22.2
+      '@shikijs/transformers': 1.22.2
+      '@shikijs/types': 1.22.2
+      '@types/markdown-it': 14.1.2
+      '@vitejs/plugin-vue': 5.1.4(vite@5.4.10(@types/node@22.8.2))(vue@3.5.12(typescript@5.6.3))
+      '@vue/devtools-api': 7.5.4
+      '@vue/shared': 3.5.12
+      '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
+      '@vueuse/integrations': 11.1.0(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3))
+      focus-trap: 7.6.0
+      mark.js: 8.11.1
+      minisearch: 7.1.0
+      shiki: 1.22.2
+      vite: 5.4.10(@types/node@22.8.2)
+      vue: 3.5.12(typescript@5.6.3)
+    optionalDependencies:
+      postcss: 8.4.47
+    transitivePeerDependencies:
+      - '@algolia/client-search'
+      - '@types/node'
+      - '@types/react'
+      - '@vue/composition-api'
+      - async-validator
+      - axios
+      - change-case
+      - drauu
+      - fuse.js
+      - idb-keyval
+      - jwt-decode
+      - less
+      - lightningcss
+      - nprogress
+      - qrcode
+      - react
+      - react-dom
+      - sass
+      - sass-embedded
+      - search-insights
+      - sortablejs
+      - stylus
+      - sugarss
+      - terser
+      - typescript
+      - universal-cookie
+
+  vitest@2.1.4(@types/node@20.17.2)(happy-dom@15.7.4)(jsdom@25.0.1):
     dependencies:
       '@vitest/expect': 2.1.4
-      '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.8.1))
+      '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@20.17.2))
       '@vitest/pretty-format': 2.1.4
       '@vitest/runner': 2.1.4
       '@vitest/snapshot': 2.1.4
@@ -12389,12 +14894,50 @@ snapshots:
       tinyexec: 0.3.1
       tinypool: 1.0.1
       tinyrainbow: 1.2.0
-      vite: 5.4.10(@types/node@22.8.1)
-      vite-node: 2.1.4(@types/node@22.8.1)
+      vite: 5.4.10(@types/node@20.17.2)
+      vite-node: 2.1.4(@types/node@20.17.2)
       why-is-node-running: 2.3.0
     optionalDependencies:
-      '@types/node': 22.8.1
-      jsdom: 20.0.3
+      '@types/node': 20.17.2
+      happy-dom: 15.7.4
+      jsdom: 25.0.1
+    transitivePeerDependencies:
+      - less
+      - lightningcss
+      - msw
+      - sass
+      - sass-embedded
+      - stylus
+      - sugarss
+      - supports-color
+      - terser
+
+  vitest@2.1.4(@types/node@22.8.2)(happy-dom@15.7.4)(jsdom@25.0.1):
+    dependencies:
+      '@vitest/expect': 2.1.4
+      '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.8.2))
+      '@vitest/pretty-format': 2.1.4
+      '@vitest/runner': 2.1.4
+      '@vitest/snapshot': 2.1.4
+      '@vitest/spy': 2.1.4
+      '@vitest/utils': 2.1.4
+      chai: 5.1.2
+      debug: 4.3.7
+      expect-type: 1.1.0
+      magic-string: 0.30.12
+      pathe: 1.1.2
+      std-env: 3.7.0
+      tinybench: 2.9.0
+      tinyexec: 0.3.1
+      tinypool: 1.0.1
+      tinyrainbow: 1.2.0
+      vite: 5.4.10(@types/node@22.8.2)
+      vite-node: 2.1.4(@types/node@22.8.2)
+      why-is-node-running: 2.3.0
+    optionalDependencies:
+      '@types/node': 22.8.2
+      happy-dom: 15.7.4
+      jsdom: 25.0.1
     transitivePeerDependencies:
       - less
       - lightningcss
@@ -12406,10 +14949,28 @@ snapshots:
       - supports-color
       - terser
 
+  vue-demi@0.14.10(vue@3.5.12(typescript@5.6.3)):
+    dependencies:
+      vue: 3.5.12(typescript@5.6.3)
+
+  vue@3.5.12(typescript@5.6.3):
+    dependencies:
+      '@vue/compiler-dom': 3.5.12
+      '@vue/compiler-sfc': 3.5.12
+      '@vue/runtime-dom': 3.5.12
+      '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.6.3))
+      '@vue/shared': 3.5.12
+    optionalDependencies:
+      typescript: 5.6.3
+
   w3c-xmlserializer@4.0.0:
     dependencies:
       xml-name-validator: 4.0.0
 
+  w3c-xmlserializer@5.0.0:
+    dependencies:
+      xml-name-validator: 5.0.0
+
   walker@1.0.8:
     dependencies:
       makeerror: 1.0.12
@@ -12434,13 +14995,24 @@ snapshots:
     dependencies:
       iconv-lite: 0.6.3
 
+  whatwg-encoding@3.1.1:
+    dependencies:
+      iconv-lite: 0.6.3
+
   whatwg-mimetype@3.0.0: {}
 
+  whatwg-mimetype@4.0.0: {}
+
   whatwg-url@11.0.0:
     dependencies:
       tr46: 3.0.0
       webidl-conversions: 7.0.0
 
+  whatwg-url@14.0.0:
+    dependencies:
+      tr46: 5.0.0
+      webidl-conversions: 7.0.0
+
   whatwg-url@5.0.0:
     dependencies:
       tr46: 0.0.3
@@ -12557,6 +15129,8 @@ snapshots:
 
   xml-name-validator@4.0.0: {}
 
+  xml-name-validator@5.0.0: {}
+
   xmlchars@2.2.0: {}
 
   xtend@4.0.2: {}
@@ -12569,6 +15143,9 @@ snapshots:
 
   yallist@4.0.0: {}
 
+  yaml@1.10.2:
+    optional: true
+
   yargs-parser@20.2.9: {}
 
   yargs-parser@21.1.1: {}
@@ -12576,7 +15153,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
@@ -12607,9 +15184,14 @@ snapshots:
       property-expr: 2.0.6
       toposort: 2.0.2
 
-  yup@1.4.0:
+  yup@0.32.9:
     dependencies:
+      '@babel/runtime': 7.26.0
+      '@types/lodash': 4.17.12
+      lodash: 4.17.21
+      lodash-es: 4.17.15
+      nanoclone: 0.2.1
       property-expr: 2.0.6
-      tiny-case: 1.0.3
       toposort: 2.0.2
-      type-fest: 2.19.0
+
+  zwitch@2.0.4: {}
diff --git a/turbo.json b/turbo.json
index 294cbc1c..809f39c3 100644
--- a/turbo.json
+++ b/turbo.json
@@ -10,6 +10,7 @@
 			"outputs": []
 		},
 		"lint": {
+			"dependsOn": ["build"],
 			"outputs": []
 		},
 		"dev": {