diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..1995f8b
Binary files /dev/null and b/.DS_Store differ
diff --git a/web-interface/package-lock.json b/web-interface/package-lock.json
index a2ade6f..c0a237c 100644
--- a/web-interface/package-lock.json
+++ b/web-interface/package-lock.json
@@ -10,11 +10,13 @@
"dependencies": {
"@emotion/react": "^11.13.3",
"@emotion/styled": "^11.13.0",
+ "@hookform/resolvers": "^3.9.0",
"@mui/icons-material": "^6.1.1",
"@mui/material": "^6.1.1",
"@mui/x-date-pickers": "7.18.0",
"@mui/x-tree-view": "^7.18.0",
"@tanstack/react-query": "^5.56.2",
+ "@uiw/react-color-colorful": "^2.3.2",
"@xyflow/react": "^12.3.0",
"axios": "^1.7.7",
"idb-keyval": "^6.2.1",
@@ -22,10 +24,12 @@
"lodash": "^4.17.21",
"react": "^18.2.0",
"react-cmdk": "^1.3.9",
+ "react-colorful": "^5.6.1",
"react-dom": "^18.2.0",
"react-hook-form": "^7.53.0",
"react-modal-promise": "^1.0.2",
"uuid": "^9.0.1",
+ "yup": "^1.4.0",
"zustand": "^4.5.5"
},
"devDependencies": {
@@ -1055,6 +1059,15 @@
"react": ">= 16"
}
},
+ "node_modules/@hookform/resolvers": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.0.tgz",
+ "integrity": "sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react-hook-form": "^7.0.0"
+ }
+ },
"node_modules/@humanwhocodes/config-array": {
"version": "0.13.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
@@ -2478,6 +2491,106 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@uiw/color-convert": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@uiw/color-convert/-/color-convert-2.3.2.tgz",
+ "integrity": "sha512-Txs0oAcOGhvM15yi7NqDJSws6htpuGx75EblFlZmh4h4AyUYXaeN2HNcOAUt835M3SN1j7rqMC+XERIE4r776Q==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ },
+ "peerDependencies": {
+ "@babel/runtime": ">=7.19.0"
+ }
+ },
+ "node_modules/@uiw/react-color-alpha": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@uiw/react-color-alpha/-/react-color-alpha-2.3.2.tgz",
+ "integrity": "sha512-+yh+KEpNKjxNFFODQrB3Lki2hu6kznoSCngHgptlWBUtAC3e/e7tIiTTedSpCGr7fwIpC0CWrKwxENA3tyY/2Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/color-convert": "2.3.2",
+ "@uiw/react-drag-event-interactive": "2.3.2"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ },
+ "peerDependencies": {
+ "@babel/runtime": ">=7.19.0",
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@uiw/react-color-colorful": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@uiw/react-color-colorful/-/react-color-colorful-2.3.2.tgz",
+ "integrity": "sha512-Rr1qa4Uo588CZjOx6OZIXjo7+CNcnqogU0Nel6L5zzwL+3CNBC3GfS4Or4db/ZxFhN49qt6NqsQa/ykA2/ixpg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/color-convert": "2.3.2",
+ "@uiw/react-color-alpha": "2.3.2",
+ "@uiw/react-color-hue": "2.3.2",
+ "@uiw/react-color-saturation": "2.3.2"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ },
+ "peerDependencies": {
+ "@babel/runtime": ">=7.19.0",
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@uiw/react-color-hue": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@uiw/react-color-hue/-/react-color-hue-2.3.2.tgz",
+ "integrity": "sha512-aAveo++GAghw09Ngc8Zzwxhj9mGaJfw8q40fDGFrVNxdrwrAjySIKHzlOSg5kw6WnEp4tUjhkMXDfCZWUhqmPA==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/color-convert": "2.3.2",
+ "@uiw/react-color-alpha": "2.3.2"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ },
+ "peerDependencies": {
+ "@babel/runtime": ">=7.19.0",
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@uiw/react-color-saturation": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@uiw/react-color-saturation/-/react-color-saturation-2.3.2.tgz",
+ "integrity": "sha512-aDKMhjylBUb4dH4oTQYz+U4mhpOebbQ2J0Y8y5aX1tfZ3fZuBqnXtWzu7Ffj3ksdKwkQHPddxT5IDTbAChF/og==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/color-convert": "2.3.2",
+ "@uiw/react-drag-event-interactive": "2.3.2"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ },
+ "peerDependencies": {
+ "@babel/runtime": ">=7.19.0",
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
+ "node_modules/@uiw/react-drag-event-interactive": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@uiw/react-drag-event-interactive/-/react-drag-event-interactive-2.3.2.tgz",
+ "integrity": "sha512-lG5pJCtqbYBv7Dj0r12PE9q9yg7P2CzlQodw5ZHPY9GCSZVXHJc0g4lGvCbe/4Y8HYqM8aU4CYS8LplpX+mIQw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ },
+ "peerDependencies": {
+ "@babel/runtime": ">=7.19.0",
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0"
+ }
+ },
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
@@ -5865,6 +5978,12 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
+ "node_modules/property-expr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz",
+ "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==",
+ "license": "MIT"
+ },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -5929,6 +6048,16 @@
"react-dom": "^16.x || ^17.x || ^18.x"
}
},
+ "node_modules/react-colorful": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz",
+ "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
"node_modules/react-dom": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
@@ -6583,6 +6712,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/tiny-case": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
+ "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==",
+ "license": "MIT"
+ },
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -6605,6 +6740,12 @@
"node": ">=8.0"
}
},
+ "node_modules/toposort": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
+ "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==",
+ "license": "MIT"
+ },
"node_modules/ts-api-utils": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
@@ -7031,6 +7172,30 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/yup": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz",
+ "integrity": "sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==",
+ "license": "MIT",
+ "dependencies": {
+ "property-expr": "^2.0.5",
+ "tiny-case": "^1.0.3",
+ "toposort": "^2.0.2",
+ "type-fest": "^2.19.0"
+ }
+ },
+ "node_modules/yup/node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/zustand": {
"version": "4.5.5",
"resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.5.tgz",
diff --git a/web-interface/package.json b/web-interface/package.json
index bd6d96f..2bf2027 100644
--- a/web-interface/package.json
+++ b/web-interface/package.json
@@ -12,22 +12,29 @@
"dependencies": {
"@emotion/react": "^11.13.3",
"@emotion/styled": "^11.13.0",
+ "@favware/syntax-highlighter-react": "^1.1.2",
+ "@hookform/resolvers": "^3.9.0",
"@mui/icons-material": "^6.1.1",
"@mui/material": "^6.1.1",
"@mui/x-date-pickers": "7.18.0",
"@mui/x-tree-view": "^7.18.0",
"@tanstack/react-query": "^5.56.2",
+ "@uiw/react-codemirror": "^4.23.5",
+ "@uiw/react-color-colorful": "^2.3.2",
"@xyflow/react": "^12.3.0",
"axios": "^1.7.7",
"idb-keyval": "^6.2.1",
"immer": "^10.1.1",
"lodash": "^4.17.21",
+ "prismjs": "^1.29.0",
"react": "^18.2.0",
"react-cmdk": "^1.3.9",
+ "react-colorful": "^5.6.1",
"react-dom": "^18.2.0",
"react-hook-form": "^7.53.0",
"react-modal-promise": "^1.0.2",
"uuid": "^9.0.1",
+ "yup": "^1.4.0",
"zustand": "^4.5.5"
},
"devDependencies": {
diff --git a/web-interface/src/components/constants/behavior.json b/web-interface/src/components/constants/behavior.json
new file mode 100644
index 0000000..ba0dc55
--- /dev/null
+++ b/web-interface/src/components/constants/behavior.json
@@ -0,0 +1,1077 @@
+{
+ "AELIF": {
+ "type": "neurons",
+ "parameters": {
+ "tau": {
+ "type": "float",
+ "description": "time constant of voltage decay.",
+ "default": null
+ },
+ "R": {
+ "type": "float",
+ "description": "the resistance of the membrane potential.",
+ "default": null
+ },
+ "threshold": {
+ "type": "float",
+ "description": "the threshold of neurons to initiate spike.",
+ "default": null
+ },
+ "v_reset": {
+ "type": "float",
+ "description": "immediate membrane potential after a spike.",
+ "default": null
+ },
+ "v_rest": {
+ "type": "float",
+ "description": "neuron membrane potential in absent of input.",
+ "default": null
+ },
+ "delta": {
+ "type": "float",
+ "description": "the constant defining the sharpness of exponential curve.",
+ "default": null
+ },
+ "theta_rh": {
+ "type": "float",
+ "description": "The boosting threshold.",
+ "default": null
+ },
+ "alpha": {
+ "type": "float",
+ "description": "subthreshold adaptation parameter.",
+ "default": null
+ },
+ "beta": {
+ "type": "float",
+ "description": "spike-triggered adaptation parameter.",
+ "default": null
+ },
+ "w_tau": {
+ "type": "float",
+ "description": "time constant of adaptation decay.",
+ "default": null
+ },
+ "init_v": null,
+ "init_s": null,
+ "omega": null
+ }
+ },
+ "ActivityBaseHomeostasis": {
+ "type": "neurons",
+ "parameters": {
+ "window_size": {
+ "type": "int",
+ "description": "The simulation steps to accumulate spikes.",
+ "default": null
+ },
+ "activity_rate": {
+ "type": "int",
+ "description": " The expected number of spikes in a window.",
+ "default": null
+ },
+ "updating_rate": {
+ "type": "float",
+ "description": "A scaler to change update effect with.",
+ "default": null
+ },
+ "decay_rate": {
+ "type": "float",
+ "description": "A scaler to change updating_rate after each applied homeostasis. The default is 1.0",
+ "default": 1.0
+ }
+ }
+ },
+ "AveragePool2D": {
+ "type": "synapses",
+ "parameters": {
+ "current_coef": {
+ "type": "float",
+ "description": "Scalar coefficient that multiplies weights.",
+ "default": 1
+ }
+ }
+ },
+ "BaseDendriticInput": {
+ "type": "synapses",
+ "parameters": {
+ "current_coef": {
+ "type": "float",
+ "description": "Scalar coefficient that multiplies weights.",
+ "default": 1
+ }
+ }
+ },
+ "Conv2dDendriticInput": {
+ "type": "synapses",
+ "parameters": {
+ "current_coef": {
+ "type": "float",
+ "description": "Scalar coefficient that multiplies weights.",
+ "default": 1
+ },
+ "stride": {
+ "type": "int",
+ "description": "Stride of the convolution. The default is 1.",
+ "default": 1
+ },
+ "padding": {
+ "type": "int",
+ "description": "Padding added to both sides of the input. The default is 0.",
+ "default": 0
+ }
+ }
+ },
+ "Conv2dRSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "a_plus": {
+ "type": "float",
+ "description": "Coefficient for the positive weight change. The default is None.",
+ "default": null
+ },
+ "a_minus": {
+ "type": "float",
+ "description": "Coefficient for the negative weight change. The default is None.",
+ "default": null
+ },
+ "tau_c": {
+ "type": "float",
+ "description": "Time constant for the eligibility trace. The default is None.",
+ "default": null
+ },
+ "init_c_mode": {
+ "type": "int",
+ "description": "Initialization mode for the eligibility trace. The default is 0.",
+ "default": 0
+ },
+ "w_min": {
+ "type": "float",
+ "description": "Minimum for weights. The default is 0.0.",
+ "default": 0.0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum for weights. The default is 1.0.",
+ "default": 1.0
+ },
+ "positive_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for positive learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ },
+ "negative_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for negative learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ }
+ }
+ },
+ "Conv2dSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "a_plus": {
+ "type": "float",
+ "description": "Coefficient for the positive weight change. The default is None.",
+ "default": null
+ },
+ "a_minus": {
+ "type": "float",
+ "description": "Coefficient for the negative weight change. The default is None.",
+ "default": null
+ },
+ "w_min": {
+ "type": "float",
+ "description": "Minimum for weights. The default is 0.0.",
+ "default": 0.0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum for weights. The default is 1.0.",
+ "default": 1.0
+ },
+ "positive_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for positive learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ },
+ "negative_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for negative learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ }
+ }
+ },
+ "CurrentNormalization": {
+ "type": "synapses",
+ "parameters": {
+ "norm": {
+ "type": "int",
+ "description": "Desired maximum of current for each neuron.",
+ "default": 1
+ }
+ }
+ },
+ "DelayInitializer": {
+ "type": "synapses",
+ "parameters": {
+ "mode": {
+ "type": "str or number",
+ "description": "string should be torch functions that fills a tensor like:",
+ "default": null
+ },
+ "offset": {
+ "type": "int",
+ "description": "delay added to the all delays.",
+ "default": 0
+ },
+ "scale": { "type": "int", "description": "scales delay.", "default": 1 },
+ "weights": {
+ "type": "tensor",
+ "description": "giving the delays directly.",
+ "default": null
+ },
+ "destination": {
+ "type": "boolean",
+ "description": "True for destination neurons. defaults to False.",
+ "default": false
+ },
+ "delays": null
+ }
+ },
+ "Dopamine": {
+ "type": "network",
+ "parameters": {
+ "tau_dopamine": {
+ "type": "float",
+ "description": "Dopamine decay time constant.",
+ "default": 0.0
+ },
+ "initial_dopamine_concentration": {
+ "type": "float, optional",
+ "description": "Initial dopamine concentration",
+ "default": null
+ }
+ }
+ },
+ "ELIF": {
+ "type": "neurons",
+ "parameters": {
+ "tau": {
+ "type": "float",
+ "description": "time constant of voltage decay.",
+ "default": null
+ },
+ "R": {
+ "type": "float",
+ "description": "the resistance of the membrane potential.",
+ "default": null
+ },
+ "threshold": {
+ "type": "float",
+ "description": "the threshold of neurons to initiate spike.",
+ "default": null
+ },
+ "v_reset": {
+ "type": "float",
+ "description": "immediate membrane potential after a spike.",
+ "default": null
+ },
+ "v_rest": {
+ "type": "float",
+ "description": "neuron membrane potential in absent of input.",
+ "default": null
+ },
+ "delta": {
+ "type": "float",
+ "description": "the constant defining the sharpness of exponential curve.",
+ "default": null
+ },
+ "theta_rh": {
+ "type": "float",
+ "description": "The boosting threshold. (rheobase)",
+ "default": null
+ },
+ "init_v": null,
+ "init_s": null
+ }
+ },
+ "Fire": { "type": "neurons", "parameters": {} },
+ "InherentNoise": {
+ "type": "neurons",
+ "parameters": {
+ "mode": {
+ "type": "str",
+ "description": "Mode to be used in initialize the tensor. Accepts similar values to Pymonntorch's ",
+ "default": "rand"
+ },
+ "scale": {
+ "type": "float",
+ "description": "Scale factor to multiply to the tensor. Default is 1.0.",
+ "default": 1
+ },
+ "offset": {
+ "type": "function",
+ "description": "An offset value to be added to the tensor. Default is 0.0.",
+ "default": 0
+ }
+ }
+ },
+ "KWTA": {
+ "type": "neurons",
+ "parameters": {
+ "k": {
+ "type": "int",
+ "description": "number of winners.",
+ "default": null
+ },
+ "dimension": {
+ "type": "int",
+ "optional": true,
+ "description": "K-WTA on specific dimension. defaults to None.",
+ "default": null
+ }
+ }
+ },
+ "LIF": {
+ "type": "neurons",
+ "parameters": {
+ "tau": {
+ "type": "float",
+ "description": "time constant of voltage decay.",
+ "default": null
+ },
+ "R": {
+ "type": "float",
+ "description": "the resistance of the membrane potential.",
+ "default": null
+ },
+ "threshold": {
+ "type": "float",
+ "description": "the threshold of neurons to initiate spike.",
+ "default": null
+ },
+ "v_reset": {
+ "type": "float",
+ "description": "immediate membrane potential after a spike.",
+ "default": null
+ },
+ "v_rest": {
+ "type": "float",
+ "description": "neuron membrane potential in absent of input.",
+ "default": null
+ },
+ "init_v": null,
+ "init_s": null
+ }
+ },
+ "LateralDendriticInput": {
+ "type": "synapses",
+ "parameters": {
+ "current_coef": {
+ "type": "float",
+ "description": "Scalar coefficient that multiplies weights.",
+ "default": 1
+ },
+ "inhibitory": {
+ "type": "bool or None",
+ "description": "If None, connection type respect the NeuronGroup type. if True, the effect in inhibitory and False is excitatory.",
+ "default": null
+ }
+ }
+ },
+ "Local2dDendriticInput": {
+ "type": "synapses",
+ "parameters": {
+ "current_coef": {
+ "type": "float",
+ "description": "Scalar coefficient that multiplies weights.",
+ "default": 1
+ },
+ "stride": {
+ "type": "int",
+ "description": "Stride of the convolution. The default is 1.",
+ "default": 1
+ },
+ "padding": {
+ "type": "int",
+ "description": "Padding added to both sides of the input. The default is 0.",
+ "default": 0
+ }
+ }
+ },
+ "Local2dRSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "a_plus": {
+ "type": "float",
+ "description": "Coefficient for the positive weight change. The default is None.",
+ "default": null
+ },
+ "a_minus": {
+ "type": "float",
+ "description": "Coefficient for the negative weight change. The default is None.",
+ "default": null
+ },
+ "tau_c": {
+ "type": "float",
+ "description": "Time constant for the eligibility trace. The default is None.",
+ "default": null
+ },
+ "init_c_mode": {
+ "type": "int",
+ "description": "Initialization mode for the eligibility trace. The default is 0.",
+ "default": 0
+ },
+ "w_min": {
+ "type": "float",
+ "description": "Minimum for weights. The default is 0.0.",
+ "default": 0.0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum for weights. The default is 1.0.",
+ "default": 1.0
+ },
+ "positive_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for positive learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ },
+ "negative_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for negative learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ }
+ }
+ },
+ "Local2dSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "w_min": {
+ "type": "float",
+ "description": "Minimum for weights. The default is 0.0.",
+ "default": 0.0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum for weights. The default is 1.0.",
+ "default": 1.0
+ },
+ "positive_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for positive learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ },
+ "negative_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for negative learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ }
+ }
+ },
+ "LocationSetter": { "type": "neurons", "parameters": {} },
+ "NeuronAxon": {
+ "type": "neurons",
+ "parameters": {
+ "max_delay": {
+ "type": "int",
+ "description": "Maximum delay of all dendrites connected to the neurons. This value determines the delay buffer size.",
+ "default": 1
+ },
+ "proximal_min_delay": {
+ "type": "int",
+ "description": "Minimum delay of proximal dendrites. The default is 0.",
+ "default": 0
+ },
+ "distal_min_delay": {
+ "type": "int",
+ "description": "Minimum delay of distal dendrites. The default is 0.",
+ "default": 0
+ },
+ "apical_min_delay": {
+ "type": "int",
+ "description": "Minimum delay of apical dendrites. The default is 0.",
+ "default": 0
+ },
+ "have_trace": {
+ "type": "boolean",
+ "description": "whether to calculate trace or not. None checks if trace is available.",
+ "default": null
+ }
+ }
+ },
+ "One2OneDendriticInput": {
+ "type": "synapses",
+ "parameters": {
+ "current_coef": {
+ "type": "float",
+ "description": "Scalar coefficient that multiplies weights.",
+ "default": 1
+ }
+ }
+ },
+ "One2OneRSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "a_plus": {
+ "type": "float",
+ "description": "Coefficient for the positive weight change. The default is None.",
+ "default": null
+ },
+ "a_minus": {
+ "type": "float",
+ "description": "Coefficient for the negative weight change. The default is None.",
+ "default": null
+ },
+ "tau_c": {
+ "type": "float",
+ "description": "Time constant for the eligibility trace. The default is None.",
+ "default": null
+ },
+ "init_c_mode": {
+ "type": "int",
+ "description": "Initialization mode for the eligibility trace. The default is 0.",
+ "default": 0
+ },
+ "w_min": {
+ "type": "float",
+ "description": "Minimum for weights. The default is 0.0.",
+ "default": 0.0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum for weights. The default is 1.0.",
+ "default": 1.0
+ },
+ "positive_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for positive learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ },
+ "negative_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for negative learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ }
+ }
+ },
+ "One2OneSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "w_min": {
+ "type": "float",
+ "description": "Minimum for weights. The default is 0.0.",
+ "default": 0.0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum for weights. The default is 1.0.",
+ "default": 1.0
+ },
+ "a_plus": {
+ "type": "float",
+ "description": "Coefficient for the positive weight change. The default is None.",
+ "default": null
+ },
+ "a_minus": {
+ "type": "float",
+ "description": "Coefficient for the negative weight change. The default is None.",
+ "default": null
+ },
+ "positive_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for positive learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ },
+ "negative_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for negative learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ }
+ }
+ },
+ "One2OneiSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "lr": {
+ "type": "float",
+ "description": "Learning rate. The Default is 1e-5.",
+ "default": 1e-5
+ },
+ "rho": {
+ "type": "float",
+ "description": "Constant that determines the fire rate of target neurons.",
+ "default": null
+ },
+ "alpha": {
+ "type": "float",
+ "description": "Manual constant for target trace, which replace rho value.",
+ "default": null
+ },
+ "is_inhibitory": null
+ }
+ },
+ "Payoff": {
+ "type": "network",
+ "parameters": {
+ "initial_payoff": {
+ "type": "float",
+ "description": "Initial reward/punishment value. Default is 0.0.",
+ "default": 0.0
+ }
+ }
+ },
+ "SensorySetter": { "type": "neurons", "parameters": {} },
+ "SimpleDendriteComputation": {
+ "type": "neurons",
+ "parameters": {
+ "apical_provocativeness": {
+ "type": "float",
+ "description": "The strength of the apical dendrites. The default is None.",
+ "default": null
+ },
+ "distal_provocativeness": {
+ "type": "float",
+ "description": "The strength of the distal dendrites. The default is None.",
+ "default": null
+ },
+ "I_tau": {
+ "type": "float",
+ "description": "Decaying factor to current. If None, at each step, current falls to zero.",
+ "default": null
+ }
+ }
+ },
+ "SimpleDendriteStructure": {
+ "type": "neurons",
+ "parameters": {
+ "proximal_max_delay": {
+ "type": "int",
+ "description": "Maximum delay of proximal dendrites. The default is 1. Set this to 0 to discard Proximal dendrite.",
+ "default": null
+ },
+ "distal_max_delay": {
+ "type": "int",
+ "description": "Maximum delay of distal dendrites. The default is 1. Set this to 0 to discard Distal dendrite.",
+ "default": null
+ },
+ "apical_max_delay": {
+ "type": "int",
+ "description": "Maximum delay of distal dendrites. The default is ",
+ "default": null
+ },
+ "proximal_min_delay": {
+ "type": "int",
+ "description": "Minimum delay of proximal dendrites. The default is 0.",
+ "default": 0
+ },
+ "distal_min_delay": {
+ "type": "int",
+ "description": "Minimum delay of distal dendrites. The default is 0.",
+ "default": 0
+ },
+ "apical_min_delay": {
+ "type": "int",
+ "description": "Minimum delay of apical dendrites. The default is ",
+ "default": null
+ },
+ "Proximal_max_delay": null,
+ "Distal_max_delay": null,
+ "Apical_max_delay": null
+ }
+ },
+ "SimpleDendriticInput": {
+ "type": "synapses",
+ "parameters": {
+ "current_coef": {
+ "type": "float",
+ "description": "Scalar coefficient that multiplies weights.",
+ "default": 1
+ }
+ }
+ },
+ "SimpleRSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "a_plus": {
+ "type": "float",
+ "description": "Coefficient for the positive weight change. The default is None.",
+ "default": null
+ },
+ "a_minus": {
+ "type": "float",
+ "description": "Coefficient for the negative weight change. The default is None.",
+ "default": null
+ },
+ "tau_c": {
+ "type": "float",
+ "description": "Time constant for the eligibility trace. The default is None.",
+ "default": null
+ },
+ "init_c_mode": {
+ "type": "int",
+ "description": "Initialization mode for the eligibility trace. The default is 0.",
+ "default": 0
+ },
+ "w_min": {
+ "type": "float",
+ "description": "Minimum for weights. The default is 0.0.",
+ "default": 0.0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum for weights. The default is 1.0.",
+ "default": 1.0
+ },
+ "positive_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for positive learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ },
+ "negative_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for negative learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ }
+ }
+ },
+ "SimpleSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "w_min": {
+ "type": "float",
+ "description": "Minimum for weights. The default is 0.0.",
+ "default": 0.0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum for weights. The default is 1.0.",
+ "default": 1.0
+ },
+ "a_plus": {
+ "type": "float",
+ "description": "Coefficient for the positive weight change. The default is None.",
+ "default": null
+ },
+ "a_minus": {
+ "type": "float",
+ "description": "Coefficient for the negative weight change. The default is None.",
+ "default": null
+ },
+ "positive_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for positive learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ },
+ "negative_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for negative learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ }
+ }
+ },
+ "SimpleiSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "lr": {
+ "type": "float",
+ "description": "Learning rate. The Default is 1e-5.",
+ "default": 1e-5
+ },
+ "rho": {
+ "type": "float",
+ "description": "Constant that determines the fire rate of target neurons.",
+ "default": null
+ },
+ "alpha": {
+ "type": "float",
+ "description": "Manual constant for target trace, which replace rho value.",
+ "default": null
+ },
+ "is_inhibitory": null
+ }
+ },
+ "SparseDendriticInput": {
+ "type": "synapses",
+ "parameters": {
+ "current_coef": {
+ "type": "float",
+ "description": "Scalar coefficient that multiplies weights.",
+ "default": 1
+ }
+ }
+ },
+ "SparseRSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "a_plus": {
+ "type": "float",
+ "description": "Coefficient for the positive weight change. The default is None.",
+ "default": null
+ },
+ "a_minus": {
+ "type": "float",
+ "description": "Coefficient for the negative weight change. The default is None.",
+ "default": null
+ },
+ "tau_c": {
+ "type": "float",
+ "description": "Time constant for the eligibility trace. The default is None.",
+ "default": null
+ },
+ "init_c_mode": {
+ "type": "int",
+ "description": "Initialization mode for the eligibility trace. The default is 0.",
+ "default": 0
+ },
+ "w_min": {
+ "type": "float",
+ "description": "Minimum for weights. The default is 0.0.",
+ "default": 0.0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum for weights. The default is 1.0.",
+ "default": 1.0
+ },
+ "positive_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for positive learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ },
+ "negative_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for negative learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ }
+ }
+ },
+ "SparseSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "w_min": {
+ "type": "float",
+ "description": "Minimum for weights. The default is 0.0.",
+ "default": 0.0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum for weights. The default is 1.0.",
+ "default": 1.0
+ },
+ "a_plus": {
+ "type": "float",
+ "description": "Coefficient for the positive weight change. The default is None.",
+ "default": null
+ },
+ "a_minus": {
+ "type": "float",
+ "description": "Coefficient for the negative weight change. The default is None.",
+ "default": null
+ },
+ "positive_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for positive learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ },
+ "negative_bound": {
+ "type": "str or function",
+ "description": "Bounding mechanism for negative learning. Accepting \"no_bound\", \"hard_bound\" and \"soft_bound\". The default is \"no_bound\". \"weights\", \"w_min\" and \"w_max\" pass as arguments for a bounding function.",
+ "default": null
+ }
+ }
+ },
+ "SparseiSTDP": {
+ "type": "synapses",
+ "parameters": {
+ "lr": {
+ "type": "float",
+ "description": "Learning rate. The Default is 1e-5.",
+ "default": 1e-5
+ },
+ "rho": {
+ "type": "float",
+ "description": "Constant that determines the fire rate of target neurons.",
+ "default": null
+ },
+ "alpha": {
+ "type": "float",
+ "description": "Manual constant for target trace, which replace rho value.",
+ "default": null
+ },
+ "is_inhibitory": null
+ }
+ },
+ "SpikeNdDataset": {
+ "type": "layer",
+ "parameters": {
+ "dataloader": {
+ "type": "Dataloader",
+ "description": "A pytorch dataloader kind returning up to a triole of (sensory, location, label).",
+ "default": null
+ },
+ "ndim_sensory": {
+ "type": "int",
+ "description": "Sensory's number of dimension refering to a single instance.",
+ "default": 2
+ },
+ "ndim_location": {
+ "type": "int",
+ "description": "Location's number of dimension refering to a single instance.",
+ "default": 2
+ },
+ "have_location": {
+ "type": "bool",
+ "description": "Whether dataloader returns location input.",
+ "default": false
+ },
+ "have_sensory": {
+ "type": "bool",
+ "description": "Whether dataloader returns sensory input.",
+ "default": true
+ },
+ "have_label": {
+ "type": "bool",
+ "description": "Whether dataloader returns label of input.",
+ "default": true
+ },
+ "silent_interval": {
+ "type": "int",
+ "description": "The interval of silent activity between two different input.",
+ "default": 0
+ },
+ "instance_duration": {
+ "type": "int",
+ "description": "The duration of each instance of input with same target value.",
+ "default": null
+ },
+ "loop": {
+ "type": "bool",
+ "description": "If True, dataloader repeats.",
+ "default": true
+ }
+ }
+ },
+ "SpikeTrace": {
+ "type": "neurons",
+ "parameters": {
+ "tau_s": {
+ "type": "float",
+ "description": "decay term for spike trace. The default is None.",
+ "default": null
+ }
+ }
+ },
+ "SynapseInit": { "type": "synapses", "parameters": {} },
+ "TimeResolution": {
+ "type": "network",
+ "parameters": {
+ "dt": {
+ "type": "float",
+ "description": "Initial iteration time resolution. Default is 1",
+ "default": 1
+ }
+ }
+ },
+ "VoltageBaseHomeostasis": {
+ "type": "neurons",
+ "parameters": {
+ "target_voltage": {
+ "type": "float",
+ "description": "The expected voltage of neuron. Defaults to None.",
+ "default": null
+ },
+ "max_ta": {
+ "type": "float",
+ "description": "The desired maximum voltage for a neuron. If not provided, the value of target_voltage is used.",
+ "default": null
+ },
+ "min_ta": {
+ "type": "float",
+ "description": "The desired minimum voltage for a neuron. If not provided, the value of target_voltage is used.",
+ "default": null
+ },
+ "eta_ip": {
+ "type": "flaot",
+ "description": "The updating speed of the homeostasis process. The default is 0.001.",
+ "default": 0.001
+ }
+ }
+ },
+ "WeightClip": {
+ "type": "synapses",
+ "parameters": {
+ "w_min": {
+ "type": "float",
+ "description": "Minimum weight constraint.",
+ "default": 0
+ },
+ "w_max": {
+ "type": "float",
+ "description": "Maximum weight constraint.",
+ "default": 1
+ }
+ }
+ },
+ "WeightInitializer": {
+ "type": "synapses",
+ "parameters": {
+ "mode": {
+ "type": "str or number",
+ "description": "string should be torch functions that fills a tensor like:",
+ "default": null
+ },
+ "scale": {
+ "type": "float",
+ "description": "Scaling factor to apply on the weight.",
+ "default": 1
+ },
+ "offset": {
+ "type": "float",
+ "description": "An offset to add to the weight.",
+ "default": 0
+ },
+ "function": {
+ "type": "callable",
+ "description": "A function to apply on weight.",
+ "default": null
+ },
+ "density": {
+ "type": "flaot",
+ "description": "The sparsity of weights. default is one.",
+ "default": 1
+ },
+ "true_sparsity": {
+ "type": "bool",
+ "description": "If false, weights are created but have zero value. Defaults to True.",
+ "default": true
+ },
+ "weights": {
+ "type": "tensor",
+ "description": "Optional parameter to specify the weights matrix directly.",
+ "default": null
+ },
+ "weight_shape": {
+ "type": "tuple",
+ "description": "Optional parameter to specify the shape of the weights tensor.",
+ "default": null
+ },
+ "kernel_shape": {
+ "type": "tuple",
+ "description": "Optional parameter to specify the shape of the kernel.",
+ "default": null
+ }
+ }
+ },
+ "WeightNormalization": {
+ "type": "synapses",
+ "parameters": {
+ "norm": {
+ "type": "int",
+ "description": "Desired sum of weights for each neuron.",
+ "default": 1
+ }
+ }
+ }
+}
diff --git a/web-interface/src/components/constants/export.ts b/web-interface/src/components/constants/export.ts
new file mode 100644
index 0000000..3616802
--- /dev/null
+++ b/web-interface/src/components/constants/export.ts
@@ -0,0 +1,31 @@
+const currentDate = () => {
+ const currentdate = new Date();
+ const datetime =
+ 'Last_export: ' +
+ currentdate.getDate() +
+ '/' +
+ (currentdate.getMonth() + 1) +
+ '/' +
+ currentdate.getFullYear() +
+ '_@_' +
+ currentdate.getHours() +
+ ':' +
+ currentdate.getMinutes() +
+ ':' +
+ currentdate.getSeconds();
+
+ return datetime;
+};
+
+const exportData = data => {
+ const jsonString = `data:text/json;chatset=utf-8,${encodeURIComponent(JSON.stringify(data))}`;
+ const link = document.createElement('a');
+ link.href = jsonString;
+ link.download = `${currentDate()}.json`;
+
+ link.click();
+
+ document.body.removeChild(link);
+};
+
+export default exportData;
diff --git a/web-interface/src/components/hookForm/codeHighlighter.tsx b/web-interface/src/components/hookForm/codeHighlighter.tsx
new file mode 100644
index 0000000..a55d718
--- /dev/null
+++ b/web-interface/src/components/hookForm/codeHighlighter.tsx
@@ -0,0 +1,56 @@
+import React, { useEffect, useState } from 'react';
+import { TextField, Box, ClickAwayListener } from '@mui/material';
+import Prism from 'prismjs'; // Import Prism.js
+import 'prismjs/themes/prism.css'; // Import Prism.js CSS for styling
+import 'prismjs/components/prism-javascript.min.js'; // Import necessary languages
+
+const CodeHighlighter = ({ item, register, errors, getValues }) => {
+ const [code, setCode] = useState('// Write your code here');
+ const [editing, setEditing] = useState(false);
+
+ useEffect(() => {
+ if (!editing) {
+ Prism.highlightAll(); // Highlight the code only when not editing
+ }
+ }, [code, editing]);
+
+ return (
+
+ {editing && (
+ setEditing(false)}>
+
+
+ )}
+ {!editing && (
+ setEditing(true)}
+ >
+ {getValues(item.id) || item.value}
+
+ )}
+
+ );
+};
+
+export default CodeHighlighter;
diff --git a/web-interface/src/components/hookForm/form.tsx b/web-interface/src/components/hookForm/form.tsx
new file mode 100644
index 0000000..cd4791f
--- /dev/null
+++ b/web-interface/src/components/hookForm/form.tsx
@@ -0,0 +1,106 @@
+import { Box, Button, IconButton, Stack, styled, TextField } from '@mui/material';
+import { fullSizeStyle } from '../../styles/BaseComponents';
+import { useEffect, useState } from 'react';
+import { yupResolver } from '@hookform/resolvers/yup';
+import BackspaceTwoToneIcon from '@mui/icons-material/BackspaceTwoTone';
+
+import * as yup from 'yup';
+import { createYupSchema } from './yupSchemaCreator';
+import { formData } from './formData';
+import { useForm } from 'react-hook-form';
+import RenderItem from './renderItem';
+
+const Container = styled(Box)(() => ({
+ ...fullSizeStyle,
+ display: 'grid',
+ gridTemplateColumns: '100%',
+ gridTemplateRows: '50px calc(100% - 132px) 50px',
+ gap: '16px',
+ padding: '4px',
+}));
+
+const CustomForm = ({ fields = formData.ng, onSubmit, id = '0' }) => {
+ const [searchText, setSearchText] = useState('');
+
+ const yupSchema = fields.reduce(createYupSchema, {});
+ const validateSchema = yup.object().shape(yupSchema);
+
+ const {
+ register,
+ handleSubmit,
+ getValues,
+ setValue,
+ watch,
+ reset,
+ formState: { errors },
+ } = useForm({
+ resolver: yupResolver(validateSchema),
+ defaultValues: fields.reduce((acc, field) => {
+ acc[field.id] = field.value;
+
+ return acc;
+ }, {}),
+ });
+
+ useEffect(() => {
+ const defaultValues = fields.reduce((acc, field) => {
+ acc[field.id] = field.value;
+ return acc;
+ }, {});
+
+ reset(defaultValues); // Reset the form with new default values
+ }, [id, fields, reset]);
+
+ const search = (items, key) => {
+ if (!key) return [...items]; // Return original items if searchText is empty
+ return items.filter(item => {
+ return item.label.toLowerCase().includes(key.toLowerCase());
+ });
+ };
+
+ return (
+
+
+ setSearchText('')}>
+
+
+ ),
+ },
+ }}
+ onChange={e => {
+ setSearchText(e.target.value);
+ }}
+ />
+
+
+ {search(fields, searchText).map(item => (
+
+ ))}
+
+
+
+
+
+ );
+};
+
+export default CustomForm;
diff --git a/web-interface/src/components/hookForm/formData.ts b/web-interface/src/components/hookForm/formData.ts
new file mode 100644
index 0000000..2b39b70
--- /dev/null
+++ b/web-interface/src/components/hookForm/formData.ts
@@ -0,0 +1,74 @@
+export const formData = {
+ ng: {
+ Number: {
+ id: 'Number',
+ label: 'Number',
+ placeholder: 'Float/int',
+ type: 'number',
+ validationType: 'number',
+ value: '2.56',
+
+ validations: [
+ // {
+ // type: 'required',
+ // params: ['this field is required'],
+ // },
+ // {
+ // type: 'min',
+ // params: [5, 'name cannot be less than 5 characters'],
+ // },
+ // {
+ // type: 'max',
+ // params: [10, 'name cannot be more than 10 characters'],
+ // },
+ ],
+ },
+ String: {
+ id: 'String',
+ label: 'String',
+ placeholder: 'String',
+ type: 'string',
+ validationType: 'string',
+ value: 'something',
+ validations: [
+ // {
+ // type: 'required',
+ // params: ['this field is required'],
+ // },
+ ],
+ },
+ Code: {
+ id: 'Code',
+ label: 'Code',
+ placeholder: 'Float/int',
+ type: 'code',
+ validationType: 'string',
+ value: 'text = "Hello world!"\nprint(text)',
+ validations: [
+ // {
+ // type: 'required',
+ // params: ['this field is required'],
+ // },
+ ],
+ },
+ Selectable: {
+ id: 'Selectable',
+ label: 'Selectable',
+ placeholder: 'Select',
+ type: 'selectable',
+ validationType: 'string',
+ value: '',
+ options: [
+ { value: 1, label: '1' },
+ { value: 2, label: '2' },
+ { value: 3, label: '3' },
+ ],
+ validations: [
+ {
+ type: 'required',
+ params: ['this field is required'],
+ },
+ ],
+ },
+ },
+};
diff --git a/web-interface/src/components/hookForm/renderItem.tsx b/web-interface/src/components/hookForm/renderItem.tsx
new file mode 100644
index 0000000..756fc9f
--- /dev/null
+++ b/web-interface/src/components/hookForm/renderItem.tsx
@@ -0,0 +1,56 @@
+import { FormControl, FormHelperText, InputLabel, MenuItem, Select, TextField } from '@mui/material';
+import CodeHighlighter from './codeHighlighter';
+const textFieldTypes = ['number', 'text', 'password', 'string'];
+const codeFieldTypes = ['code'];
+const selectFieldTypes = ['selectable'];
+
+const RenderItem = ({ item, register, errors, getValues, setValue, watch }) => {
+ if (textFieldTypes.includes(item.type))
+ return (
+ <>
+
+ >
+ );
+ if (codeFieldTypes.includes(item.type))
+ return ;
+
+ if (selectFieldTypes.includes(item.type))
+ return (
+
+
+ {item.label}
+
+
+ {errors[item.id]?.message && {errors[item.id]?.message}}
+
+ );
+};
+
+export default RenderItem;
diff --git a/web-interface/src/components/hookForm/yupSchemaCreator.tsx b/web-interface/src/components/hookForm/yupSchemaCreator.tsx
new file mode 100644
index 0000000..c3fc0a9
--- /dev/null
+++ b/web-interface/src/components/hookForm/yupSchemaCreator.tsx
@@ -0,0 +1,19 @@
+import * as yup from 'yup';
+
+export function createYupSchema(schema, config) {
+ const { id, validationType, validations = [] } = config;
+ if (!yup[validationType]) {
+ return schema;
+ }
+ let validator = yup[validationType]();
+ validations.forEach(validation => {
+ const { params, type } = validation;
+ if (!validator[type]) {
+ return;
+ }
+ // console.log(type, params);
+ validator = validator[type](...params);
+ });
+ schema[id] = validator;
+ return schema;
+}
diff --git a/web-interface/src/components/react-flow/nodes/input-port.tsx b/web-interface/src/components/react-flow/nodes/input-port.tsx
index b3c883b..0430d17 100644
--- a/web-interface/src/components/react-flow/nodes/input-port.tsx
+++ b/web-interface/src/components/react-flow/nodes/input-port.tsx
@@ -2,11 +2,20 @@ import LastPageRoundedIcon from '@mui/icons-material/LastPageRounded';
import { Stack, SvgIcon } from '@mui/material';
import { Handle, NodeProps, Position } from '@xyflow/react';
import type { ReactFlowAppNode } from '../../../stores/types';
+import useReactFlowStore from '../../../stores/react-flow';
+import { useShallow } from 'zustand/react/shallow';
+import { drawer, infoDrawer } from '../../../stores/app-states';
+const selector = (state: ReactFlowAppStoreState) => ({
+ selectedNodeID: state.selectedNodeID,
+ setSelectedNodeID: state.setSelectedNodeID,
+});
export const NODE_TYPE = 'i';
export const DEFAULT_COLOR = '#7cb342';
export const CustomNode = ({ id, data }: NodeProps) => {
+ const { selectedNodeID, setSelectedNodeID } = useReactFlowStore(useShallow(selector));
+
return (
<>
) => {
alignItems: 'center',
fontSize: '0.6rem',
color: '#fff',
+ boxShadow: selectedNodeID == id ? '10px 5px 5px gray' : null,
+ }}
+ onClick={() => setSelectedNodeID(id)}
+ onDoubleClick={() => {
+ drawer.setOpen(false);
+ infoDrawer.setID(id);
}}
>
diff --git a/web-interface/src/components/react-flow/nodes/neuron-group.tsx b/web-interface/src/components/react-flow/nodes/neuron-group.tsx
index e08a520..a4e396a 100644
--- a/web-interface/src/components/react-flow/nodes/neuron-group.tsx
+++ b/web-interface/src/components/react-flow/nodes/neuron-group.tsx
@@ -2,11 +2,16 @@ import { Stack } from '@mui/material';
import { Handle, NodeProps, NodeToolbar, Position } from '@xyflow/react';
import { useMemo } from 'react';
import useReactFlowStore from '../../../stores/react-flow';
-import { ReactFlowAppNode } from '../../../stores/types';
+import { ReactFlowAppNode, ReactFlowAppStoreState } from '../../../stores/types';
+import { useShallow } from 'zustand/react/shallow';
+import { drawer, infoDrawer } from '../../../stores/app-states';
+const selector = (state: ReactFlowAppStoreState) => ({
+ selectedNodeID: state.selectedNodeID,
+ setSelectedNodeID: state.setSelectedNodeID,
+});
export const NODE_TYPE = 'ng';
export const DEFAULT_COLOR = '#ff0072';
-
export const CustomNode = ({ id, data }: NodeProps) => {
// TODO: increase by 10
// TODO: update relative height of the box to its node indexes
@@ -22,6 +27,7 @@ export const CustomNode = ({ id, data }: NodeProps) => {
b: { top: 20 },
};
}, []);
+ const { selectedNodeID, setSelectedNodeID } = useReactFlowStore(useShallow(selector));
return (
<>
@@ -47,6 +53,12 @@ export const CustomNode = ({ id, data }: NodeProps) => {
alignItems: 'center',
fontSize: '0.6rem',
color: '#fff',
+ boxShadow: selectedNodeID == id ? '10px 5px 5px gray' : null,
+ }}
+ onClick={() => setSelectedNodeID(id)}
+ onDoubleClick={() => {
+ drawer.setOpen(false);
+ infoDrawer.setID(id);
}}
>
{data.label}
diff --git a/web-interface/src/components/react-flow/nodes/output-port.tsx b/web-interface/src/components/react-flow/nodes/output-port.tsx
index 9cf3176..4c131d5 100644
--- a/web-interface/src/components/react-flow/nodes/output-port.tsx
+++ b/web-interface/src/components/react-flow/nodes/output-port.tsx
@@ -1,12 +1,22 @@
import FirstPageRoundedIcon from '@mui/icons-material/FirstPageRounded';
import { Stack, SvgIcon } from '@mui/material';
import { Handle, NodeProps, Position } from '@xyflow/react';
-import { ReactFlowAppNode } from '../../../stores/types';
+import { ReactFlowAppNode, ReactFlowAppStoreState } from '../../../stores/types';
+import useReactFlowStore from '../../../stores/react-flow';
+import { useShallow } from 'zustand/react/shallow';
+import { drawer, infoDrawer } from '../../../stores/app-states';
export const NODE_TYPE = 'o';
export const DEFAULT_COLOR = '#f4511e';
+const selector = (state: ReactFlowAppStoreState) => ({
+ selectedNodeID: state.selectedNodeID,
+ setSelectedNodeID: state.setSelectedNodeID,
+});
+
export const CustomNode = ({ id, data }: NodeProps) => {
+ const { selectedNodeID, setSelectedNodeID } = useReactFlowStore(useShallow(selector));
+
return (
<>
) => {
alignItems: 'center',
fontSize: '0.6rem',
color: '#fff',
+ boxShadow: selectedNodeID == id ? '10px 5px 5px gray' : null,
+ }}
+ onClick={() => setSelectedNodeID(id)}
+ onDoubleClick={() => {
+ drawer.setOpen(false);
+ infoDrawer.setID(id);
}}
>
diff --git a/web-interface/src/components/settings/resizable-drawer.tsx b/web-interface/src/components/settings/resizable-drawer.tsx
index d92dce2..51ca319 100644
--- a/web-interface/src/components/settings/resizable-drawer.tsx
+++ b/web-interface/src/components/settings/resizable-drawer.tsx
@@ -1,8 +1,10 @@
-import { Box, DrawerProps } from '@mui/material';
+import { alpha, Box, DrawerProps } from '@mui/material';
import Drawer from '@mui/material/Drawer';
import { useCallback, useState } from 'react';
+import { DRAWER_WIDTH } from './constants';
+import { treeItemClasses } from '@mui/x-tree-view/TreeItem';
-export const defaultDrawerWidth = 240;
+export const defaultDrawerWidth = DRAWER_WIDTH;
const minDrawerWidth = 300;
const maxDrawerWidth = 500;
@@ -15,7 +17,7 @@ export default function ResizableDrawer({ children, sx, ...props }: DrawerProps)
};
const handleMouseMove = useCallback((e: MouseEvent) => {
- const newWidth = document.body.clientWidth - e.clientX - document.body.clientLeft;
+ const newWidth = document.body.clientWidth - e.clientX - document.body.clientLeft + 20;
if (newWidth > minDrawerWidth && newWidth < maxDrawerWidth) {
setDrawerWidth(newWidth);
}
@@ -24,8 +26,18 @@ export default function ResizableDrawer({ children, sx, ...props }: DrawerProps)
return (
(({ threerows = false }) => ({
+ display: 'grid',
+ gridTemplateRows: threerows ? '40px calc(100% - 100px) 40px' : '40px calc(100% - 50px)',
+ gridTemplateColumns: '100%',
+ gap: '10px',
+ height: '100%',
+}));
export const Settings = () => {
useStateToggleShortcutOn(shortcuts.drawer, drawer.setOpen);
+ const nodes = useReactFlowStore(useShallow(state => state.nodes));
+ const updateNode = useReactFlowStore(useShallow(state => state.updateNode));
+ const id = infoDrawer.useStore().ID;
+ const [nodeFields, setNodeFields] = useState([]);
+
+ const handleExport = nodes => {
+ exportData(nodes);
+ };
+
+ const onSubmit = data => {
+ if (id) updateNode(id, { ...nodes.filter(item => item.id == id)[0]?.data, ...data });
+ };
+
+ useEffect(() => {
+ const newForm = JSON.parse(JSON.stringify(formData.ng));
+
+ if (id) {
+ const nodeData = nodes.filter(item => item.id == id)[0]?.data;
+ for (const item in nodeData) {
+ if (newForm[item]) {
+ newForm[item].value = nodeData[item];
+ }
+ }
+ setNodeFields(Object.values(newForm));
+ }
+ }, [id, nodes]);
return (
-
-
-
+ <>
+
+
+
+ }
+ onClick={() => {
+ drawer.setOpen(false);
+ }}
+ >
+ Close
+
+
+
+
+
+ }
+ type="submit"
+ variant="contained"
+ onClick={() => handleExport(nodes)}
+ >
+ Export
+
+
+
+
+
+
+
+ {infoDrawer.useStore().ID}:
+ }
+ onClick={() => {
+ drawer.setOpen(true);
+ infoDrawer.setID(null);
+ }}
+ >
+ Back
+
+
+
+
+
+
+
+ >
);
};
diff --git a/web-interface/src/components/settings/tree-view/color-picker.tsx b/web-interface/src/components/settings/tree-view/color-picker.tsx
new file mode 100644
index 0000000..6ae1c1d
--- /dev/null
+++ b/web-interface/src/components/settings/tree-view/color-picker.tsx
@@ -0,0 +1,94 @@
+import { BoxProps, styled, Button, Popover, Typography, Tooltip } from '@mui/material';
+import React from 'react';
+import { HexColorPicker } from 'react-colorful';
+
+interface ColorPickerProps extends BoxProps {
+ color?: string;
+ width?: number;
+}
+
+const ColorPickerButton = styled(Button)(({ theme, color, width }) => ({
+ borderRadius: `${(width || 10) / 2}px`,
+ height: width,
+ padding: 0,
+ minWidth: 0,
+ aspectRatio: 1,
+ backgroundColor: color || 'yellow',
+ marginRight: '8px',
+ boxSizing: 'border-box',
+
+ '&:hover': {
+ cursor: 'pointer',
+ },
+}));
+
+export const ColorPicker = ({ color, width = 14, onChangeColor }) => {
+ const [anchorEl, setAnchorEl] = React.useState(null);
+
+ const handleClick = (event: React.MouseEvent) => {
+ setAnchorEl(event.currentTarget);
+ };
+
+ const handleClose = () => {
+ setAnchorEl(null);
+ };
+
+ const open = Boolean(anchorEl);
+ const id = open ? 'simple-popover' : undefined;
+
+ return (
+ <>
+
+
+
+
+ {
+ onChangeColor && onChangeColor(color);
+ }}
+ />
+
+ >
+ );
+};
+export default ColorPicker;
diff --git a/web-interface/src/components/settings/tree-view/node-tree-view.tsx b/web-interface/src/components/settings/tree-view/node-tree-view.tsx
index 5ce06b8..2d73926 100644
--- a/web-interface/src/components/settings/tree-view/node-tree-view.tsx
+++ b/web-interface/src/components/settings/tree-view/node-tree-view.tsx
@@ -1,15 +1,41 @@
import { useShallow } from 'zustand/react/shallow';
import useReactFlowStore from '../../../stores/react-flow';
import { TreeItem } from './tree-item';
+import { infoDrawer, drawer } from '../../../stores/app-states';
+import { ReactFlowAppNode } from '../../../stores/types.ts';
export const NodeTreeView = () => {
const nodes = useReactFlowStore(useShallow(state => state.nodes));
- console.log(nodes);
+ const updateNode = useReactFlowStore(useShallow(state => state.updateNode));
+ const selectedNodeID = useReactFlowStore(useShallow(state => state.selectedNodeID));
+ const setSelectedNodeID = useReactFlowStore(useShallow(state => state.setSelectedNodeID));
+ // console.log(nodes);
+ const handleChangeColor = (item: ReactFlowAppNode, color: string) => {
+ updateNode(item.id, { ...item.data, color });
+ };
+ const handleChangeLabel = (item: ReactFlowAppNode, label: string) => {
+ updateNode(item.id, { ...item.data, label });
+ };
+ const handleEdit = (id: string | null) => {
+ setSelectedNodeID(id);
+ drawer.setOpen(false);
+ infoDrawer.setID(id);
+ };
return (
{nodes.map(item => (
-
+ handleChangeColor(item, color)}
+ onChangeLabel={label => handleChangeLabel(item, label)}
+ onClick={() => setSelectedNodeID(item.id)}
+ onEditClick={() => handleEdit(item.id)}
+ />
))}
);
diff --git a/web-interface/src/components/settings/tree-view/tree-item.tsx b/web-interface/src/components/settings/tree-view/tree-item.tsx
index 7324f96..118b83a 100644
--- a/web-interface/src/components/settings/tree-view/tree-item.tsx
+++ b/web-interface/src/components/settings/tree-view/tree-item.tsx
@@ -9,11 +9,18 @@ import clsx from 'clsx';
import { omit, pick } from 'lodash/fp';
import * as React from 'react';
import { RESET_STYLE_TREE_VIEW } from './constants';
-import { MoreSettings } from './more-settings';
+// import { MoreSettings } from './more-settings';
import * as components from './styled-components';
+import ColorPicker from './color-picker';
+import { Checkbox, ClickAwayListener, IconButton, Tooltip } from '@mui/material';
+import EditNoteIcon from '@mui/icons-material/EditNote';
interface StyledTreeItemProps extends Omit, React.HTMLAttributes {
moreSettingProps?: any; // for more setting menu function calls
+ onChangeColor?: (color: string) => void;
+ onChangeLabel?: (newName: string) => void;
+ onEditClick?: () => void;
+ selected?: boolean;
}
export const TreeItem = React.forwardRef(function TreeItem(
@@ -21,11 +28,23 @@ export const TreeItem = React.forwardRef(function TreeItem(
rootRef: React.Ref,
) {
// NOTE: Select out all child StyledTreeItemProps from props
- const { itemId, children, moreSettingProps, ...other } = props;
+ const [isEditing, setIsEditing] = React.useState(false);
+
+ const { itemId, children, moreSettingProps, color, onChangeColor, onChangeLabel, onEditClick, selected, ...other } =
+ props;
const logicProps = ['id', 'itemId', 'children', 'label', 'disabled'] as const;
const bypassedProps = omit(logicProps, other);
const { status, ...treeItem } = useTreeItem({ ...pick(logicProps, props), rootRef });
+ const stopPropagation = (event: React.MouseEvent) => {
+ event.stopPropagation();
+ };
+
+ const handleEdit = (event: React.MouseEvent) => {
+ event.stopPropagation();
+ onChangeLabel && setIsEditing(true);
+ };
+
return (
@@ -38,17 +57,62 @@ export const TreeItem = React.forwardRef(function TreeItem(
}),
})}
>
-
-
-
-
-
- {!moreSettingProps && }
+
+
+
+
+
+ {color && (
+ {
+ onChangeColor && onChangeColor(color);
+ }}
+ />
+ )}
+ {isEditing && onChangeLabel ? (
+ setIsEditing(false)}>
+ {
+ e.stopPropagation();
+ onChangeLabel && onChangeLabel(e.target.value);
+ }}
+ onKeyDown={e => {
+ e.stopPropagation();
+ if (e.key == 'Enter') {
+ setIsEditing(false);
+ }
+ }}
+ />
+
+ ) : (
+
+
+
+ )}
+
+ {/* {!moreSettingProps && } */}
+ {onEditClick && (
+ onEditClick()}>
+
+
+ )}
{children && }
diff --git a/web-interface/src/components/settings/tree-view/tree-view.tsx b/web-interface/src/components/settings/tree-view/tree-view.tsx
index 8f6aa5d..6a511bb 100644
--- a/web-interface/src/components/settings/tree-view/tree-view.tsx
+++ b/web-interface/src/components/settings/tree-view/tree-view.tsx
@@ -3,42 +3,28 @@ import DisabledByDefaultRoundedIcon from '@mui/icons-material/DisabledByDefaultR
import IndeterminateCheckBoxIcon from '@mui/icons-material/IndeterminateCheckBox';
import Box from '@mui/material/Box';
import { SimpleTreeView } from '@mui/x-tree-view/SimpleTreeView';
-import { TreeItem as MuiTreeItem } from '@mui/x-tree-view/TreeItem';
import { NodeTreeView } from './node-tree-view';
-import { TreeItem } from './tree-item';
+import useReactFlowStore from '../../../stores/react-flow';
+import { useShallow } from 'zustand/react/shallow';
export default function TreeView() {
+ const selectedNodeID = useReactFlowStore(useShallow(state => state.selectedNodeID));
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{/* TODO: setting more action must be added */}
{/* TODO: nodes color changer must be added, beside node types */}
{/* TODO: custom style must be added for the NODEs TreeITem */}
-
);
diff --git a/web-interface/src/stores/app-states.ts b/web-interface/src/stores/app-states.ts
index 85ca800..5cc655b 100644
--- a/web-interface/src/stores/app-states.ts
+++ b/web-interface/src/stores/app-states.ts
@@ -35,3 +35,17 @@ export const mainCmdk = {
useStore: useMainCmdkStore,
setOpen: setMainCmdkOpenState,
};
+
+type InfoDrawer = { ID: string | null };
+const useInfoDrawerStore = create(() => ({ ID: null }));
+const setInfoDrawerIDState: React.Dispatch> = ID => {
+ if (typeof ID === 'function') {
+ return useInfoDrawerStore.setState({ ID: ID(useInfoDrawerStore.getState().ID) });
+ }
+ useInfoDrawerStore.setState({ ID });
+};
+
+export const infoDrawer = {
+ useStore: useInfoDrawerStore,
+ setID: setInfoDrawerIDState,
+};
diff --git a/web-interface/src/stores/react-flow.ts b/web-interface/src/stores/react-flow.ts
index 0c45828..547a762 100644
--- a/web-interface/src/stores/react-flow.ts
+++ b/web-interface/src/stores/react-flow.ts
@@ -30,6 +30,7 @@ const useReactFlowStore = create()((set, get) => ({
{ id: 'e1-2', source: '1', target: '2' },
{ id: 'e2-3', source: '2', target: '3' },
],
+ selectedNodeID: null,
onNodesChange: changes => {
set({
nodes: applyNodeChanges(changes, get().nodes),
@@ -77,6 +78,11 @@ const useReactFlowStore = create()((set, get) => ({
}),
});
},
+ setSelectedNodeID: ID => {
+ set({
+ selectedNodeID: ID,
+ });
+ },
}));
export default useReactFlowStore;
diff --git a/web-interface/src/stores/types.ts b/web-interface/src/stores/types.ts
index b64bf98..5fcc79b 100644
--- a/web-interface/src/stores/types.ts
+++ b/web-interface/src/stores/types.ts
@@ -1,10 +1,9 @@
import type { Edge, Node, OnConnect, OnEdgesChange, OnNodesChange } from '@xyflow/react';
-
type NodeData = {
- label: string;
- color: string;
-}
+ label: string;
+ color: string;
+};
type AppNode = Node;
type AppState = {
nodes: AppNode[];
@@ -12,12 +11,15 @@ type AppState = {
onNodesChange: OnNodesChange;
onEdgesChange: OnEdgesChange;
onConnect: OnConnect;
+ selectedNodeID: string | null;
+
setNodes: (nodes: AppNode[]) => void;
setEdges: (edges: Edge[]) => void;
// custom logics, for store managements
addNode: (nodeType: string, data: NodeData) => void;
updateNode: (id: AppNode['id'], data: Partial) => void;
+ setSelectedNodeID: (id: string | null) => void;
};
-export type ReactFlowAppStoreState = AppState
-export type ReactFlowAppNode = AppNode
\ No newline at end of file
+export type ReactFlowAppStoreState = AppState;
+export type ReactFlowAppNode = AppNode;
diff --git a/web-interface/src/styles/BaseComponents.ts b/web-interface/src/styles/BaseComponents.ts
new file mode 100644
index 0000000..6211d37
--- /dev/null
+++ b/web-interface/src/styles/BaseComponents.ts
@@ -0,0 +1,44 @@
+import { Box, Button, styled } from '@mui/material';
+
+export const AllCenterBoxComponent = styled(Box)(() => ({
+ justifyContent: 'center',
+ alignItems: 'center',
+ display: 'flex',
+}));
+export const JustifyCenterBoxComponent = styled(Box)(() => ({
+ justifyContent: 'center',
+ display: 'flex',
+}));
+export const AllCenterButtonComponent = styled(Button)(() => ({
+ justifyContent: 'center',
+ alignItems: 'center',
+ display: 'flex',
+}));
+export const JustifyCenterButtonComponent = styled(Button)(() => ({
+ justifyContent: 'center',
+ display: 'flex',
+}));
+
+export const AllCenterStyle = {
+ justifyContent: 'center',
+ alignItems: 'center',
+ display: 'flex',
+};
+export const JustifyCenterStyle = {
+ justifyContent: 'center',
+ display: 'flex',
+};
+export const alignItemsCenterStyle = {
+ alignItems: 'center',
+ display: 'flex',
+};
+export const fullSizeStyle = {
+ height: '100%',
+ width: '100%',
+ boxSizing: 'border-box',
+};
+
+export const ProtoTypeStyle = {
+ border: '1px solid gray',
+ ...fullSizeStyle,
+};
diff --git a/web-interface/yarn.lock b/web-interface/yarn.lock
index 6f5a605..d21db09 100644
--- a/web-interface/yarn.lock
+++ b/web-interface/yarn.lock
@@ -23,7 +23,7 @@
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz"
integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==
-"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.24.5":
+"@babel/core@^7.24.5":
version "7.25.2"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz"
integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==
@@ -157,6 +157,13 @@
dependencies:
regenerator-runtime "^0.14.0"
+"@babel/runtime@^7.18.6":
+ version "7.25.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.7.tgz#7ffb53c37a8f247c8c4d335e89cdf16a2e0d0fb6"
+ integrity sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
"@babel/template@^7.25.0":
version "7.25.0"
resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz"
@@ -188,6 +195,80 @@
"@babel/helper-validator-identifier" "^7.24.7"
to-fast-properties "^2.0.0"
+"@codemirror/autocomplete@^6.0.0":
+ version "6.18.1"
+ resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.18.1.tgz#3bd8d62c9c9a14d0706ab0a8adac139eaf1a41f1"
+ integrity sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==
+ dependencies:
+ "@codemirror/language" "^6.0.0"
+ "@codemirror/state" "^6.0.0"
+ "@codemirror/view" "^6.17.0"
+ "@lezer/common" "^1.0.0"
+
+"@codemirror/commands@^6.0.0", "@codemirror/commands@^6.1.0":
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.7.0.tgz#a06595c0bd2966951640319a6abd953885d22bab"
+ integrity sha512-+cduIZ2KbesDhbykV02K25A5xIVrquSPz4UxxYBemRlAT2aW8dhwUgLDwej7q/RJUHKk4nALYcR1puecDvbdqw==
+ dependencies:
+ "@codemirror/language" "^6.0.0"
+ "@codemirror/state" "^6.4.0"
+ "@codemirror/view" "^6.27.0"
+ "@lezer/common" "^1.1.0"
+
+"@codemirror/language@^6.0.0":
+ version "6.10.3"
+ resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.3.tgz#eb25fc5ade19032e7bf1dcaa957804e5f1660585"
+ integrity sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==
+ dependencies:
+ "@codemirror/state" "^6.0.0"
+ "@codemirror/view" "^6.23.0"
+ "@lezer/common" "^1.1.0"
+ "@lezer/highlight" "^1.0.0"
+ "@lezer/lr" "^1.0.0"
+ style-mod "^4.0.0"
+
+"@codemirror/lint@^6.0.0":
+ version "6.8.2"
+ resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.8.2.tgz#7864b03583e9efd18554cff1dd4504da10338ab1"
+ integrity sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==
+ dependencies:
+ "@codemirror/state" "^6.0.0"
+ "@codemirror/view" "^6.0.0"
+ crelt "^1.0.5"
+
+"@codemirror/search@^6.0.0":
+ version "6.5.6"
+ resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.6.tgz#8f858b9e678d675869112e475f082d1e8488db93"
+ integrity sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==
+ dependencies:
+ "@codemirror/state" "^6.0.0"
+ "@codemirror/view" "^6.0.0"
+ crelt "^1.0.5"
+
+"@codemirror/state@^6.0.0", "@codemirror/state@^6.1.1", "@codemirror/state@^6.4.0":
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.4.1.tgz#da57143695c056d9a3c38705ed34136e2b68171b"
+ integrity sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==
+
+"@codemirror/theme-one-dark@^6.0.0":
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz#fcef9f9cfc17a07836cb7da17c9f6d7231064df8"
+ integrity sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==
+ dependencies:
+ "@codemirror/language" "^6.0.0"
+ "@codemirror/state" "^6.0.0"
+ "@codemirror/view" "^6.0.0"
+ "@lezer/highlight" "^1.0.0"
+
+"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.27.0":
+ version "6.34.1"
+ resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.34.1.tgz#b17ed29c563e4adc60086233f2d3e7197e2dc33e"
+ integrity sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==
+ dependencies:
+ "@codemirror/state" "^6.4.0"
+ style-mod "^4.1.0"
+ w3c-keyname "^2.2.4"
+
"@emotion/babel-plugin@^11.12.0":
version "11.12.0"
resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz"
@@ -233,7 +314,7 @@
resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz"
integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==
-"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.13.3", "@emotion/react@^11.4.1", "@emotion/react@^11.5.0", "@emotion/react@^11.9.0":
+"@emotion/react@^11.13.3":
version "11.13.3"
resolved "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz"
integrity sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==
@@ -263,7 +344,7 @@
resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz"
integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==
-"@emotion/styled@^11.13.0", "@emotion/styled@^11.3.0", "@emotion/styled@^11.8.1":
+"@emotion/styled@^11.13.0":
version "11.13.0"
resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz"
integrity sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==
@@ -295,11 +376,121 @@
resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz"
integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==
+"@esbuild/aix-ppc64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
+ integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
+
+"@esbuild/android-arm64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
+ integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
+
+"@esbuild/android-arm@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
+ integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
+
+"@esbuild/android-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
+ integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
+
"@esbuild/darwin-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz"
integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
+"@esbuild/darwin-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
+ integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
+
+"@esbuild/freebsd-arm64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
+ integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
+
+"@esbuild/freebsd-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
+ integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
+
+"@esbuild/linux-arm64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
+ integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
+
+"@esbuild/linux-arm@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
+ integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
+
+"@esbuild/linux-ia32@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
+ integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
+
+"@esbuild/linux-loong64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
+ integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
+
+"@esbuild/linux-mips64el@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
+ integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
+
+"@esbuild/linux-ppc64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
+ integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
+
+"@esbuild/linux-riscv64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
+ integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
+
+"@esbuild/linux-s390x@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
+ integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
+
+"@esbuild/linux-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
+ integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
+
+"@esbuild/netbsd-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
+ integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
+
+"@esbuild/openbsd-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
+ integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
+
+"@esbuild/sunos-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
+ integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
+
+"@esbuild/win32-arm64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
+ integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
+
+"@esbuild/win32-ia32@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
+ integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
+
+"@esbuild/win32-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
+ integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
+
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
version "4.4.0"
resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz"
@@ -332,6 +523,22 @@
resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz"
integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
+"@favware/syntax-highlighter-core@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@favware/syntax-highlighter-core/-/syntax-highlighter-core-1.1.2.tgz#f2ecb1dfef746480223bfc6feda2cde66b61f37b"
+ integrity sha512-htglQVflYp7N89n02XhH7L2v+cIa/h2vCt/oZpI5XmnVhL9fzkrHttmul7UTs0OCIkF4xOmEzTl2qGafSEJNKg==
+ dependencies:
+ "@stencil/core" "2.5.2"
+ clipboard "^2.0.8"
+ prismjs "^1.23.0"
+
+"@favware/syntax-highlighter-react@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@favware/syntax-highlighter-react/-/syntax-highlighter-react-1.1.2.tgz#5180fd3c2444213e3cd37045883dd3245ecb7901"
+ integrity sha512-f/Bksn2HMwwUkeDUstWllkTqrBnSstUGV2Bd0PxGXTJjFTTDNIEvohhv8XhfDWm1QuAqiIR4SDCnagzRBQRFBg==
+ dependencies:
+ "@favware/syntax-highlighter-core" "^1.1.2"
+
"@headlessui/react@^1.6.4":
version "1.7.19"
resolved "https://registry.npmjs.org/@headlessui/react/-/react-1.7.19.tgz"
@@ -345,6 +552,11 @@
resolved "https://registry.npmjs.org/@heroicons/react/-/react-2.1.5.tgz"
integrity sha512-FuzFN+BsHa+7OxbvAERtgBTNeZpUjgM/MIizfVkSCL2/edriN0Hx/DWRCR//aPYwO5QX/YlgLGXk+E3PcfZwjA==
+"@hookform/resolvers@^3.9.0":
+ version "3.9.0"
+ resolved "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.0.tgz"
+ integrity sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==
+
"@humanwhocodes/config-array@^0.13.0":
version "0.13.0"
resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz"
@@ -404,6 +616,25 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
+"@lezer/common@^1.0.0", "@lezer/common@^1.1.0":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.2.tgz#33cb2de75d72602d3ca905cdf7e32049fbe7402c"
+ integrity sha512-Z+R3hN6kXbgBWAuejUNPihylAL1Z5CaFqnIe0nTX8Ej+XlIy3EGtXxn6WtLMO+os2hRkQvm2yvaGMYliUzlJaw==
+
+"@lezer/highlight@^1.0.0":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.1.tgz#596fa8f9aeb58a608be0a563e960c373cbf23f8b"
+ integrity sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==
+ dependencies:
+ "@lezer/common" "^1.0.0"
+
+"@lezer/lr@^1.0.0":
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.2.tgz#931ea3dea8e9de84e90781001dae30dea9ff1727"
+ integrity sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==
+ dependencies:
+ "@lezer/common" "^1.0.0"
+
"@mui/core-downloads-tracker@^6.1.1":
version "6.1.1"
resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.1.tgz"
@@ -416,7 +647,7 @@
dependencies:
"@babel/runtime" "^7.25.6"
-"@mui/material@^5.15.14 || ^6.0.0", "@mui/material@^6.1.1":
+"@mui/material@^6.1.1":
version "6.1.1"
resolved "https://registry.npmjs.org/@mui/material/-/material-6.1.1.tgz"
integrity sha512-b+eULldTqtqTCbN++2BtBWCir/1LwEYw+2mIlOt2GiEUh1EBBw4/wIukGKKNt3xrCZqRA80yLLkV6tF61Lq3cA==
@@ -454,7 +685,7 @@
csstype "^3.1.3"
prop-types "^15.8.1"
-"@mui/system@^5.15.14 || ^6.0.0", "@mui/system@^6.1.1":
+"@mui/system@^6.1.1":
version "6.1.1"
resolved "https://registry.npmjs.org/@mui/system/-/system-6.1.1.tgz"
integrity sha512-PaYsCz2tUOcpu3T0okDEsSuP/yCDIj9JZ4Tox1JovRSKIjltHpXPsXZSGr3RiWdtM1MTQMFMCZzu0+CKbyy+Kw==
@@ -539,7 +770,7 @@
"@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9"
-"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
version "2.0.5"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
@@ -557,11 +788,91 @@
resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz"
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
+"@rollup/rollup-android-arm-eabi@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.2.tgz#4e0c4c462692ecb7ae2b008f25af4cced05ac4f9"
+ integrity sha512-8Ao+EDmTPjZ1ZBABc1ohN7Ylx7UIYcjReZinigedTOnGFhIctyGPxY2II+hJ6gD2/vkDKZTyQ0e7++kwv6wDrw==
+
+"@rollup/rollup-android-arm64@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.2.tgz#d97ed02a950061adc2056d6d2d6df8f05d877ae9"
+ integrity sha512-I+B1v0a4iqdS9DvYt1RJZ3W+Oh9EVWjbY6gp79aAYipIbxSLEoQtFQlZEnUuwhDXCqMxJ3hluxKAdPD+GiluFQ==
+
"@rollup/rollup-darwin-arm64@4.22.2":
version "4.22.2"
resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.2.tgz"
integrity sha512-BTHO7rR+LC67OP7I8N8GvdvnQqzFujJYWo7qCQ8fGdQcb8Gn6EQY+K1P+daQLnDCuWKbZ+gHAQZuKiQkXkqIYg==
+"@rollup/rollup-darwin-x64@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.2.tgz#22ee27a0ccfdc045c2a37f6980351329516ce119"
+ integrity sha512-1esGwDNFe2lov4I6GsEeYaAMHwkqk0IbuGH7gXGdBmd/EP9QddJJvTtTF/jv+7R8ZTYPqwcdLpMTxK8ytP6k6Q==
+
+"@rollup/rollup-linux-arm-gnueabihf@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.2.tgz#d86df2d8c600ebdd7251110a3357c53e0a583ace"
+ integrity sha512-GBHuY07x96OTEM3OQLNaUSUwrOhdMea/LDmlFHi/HMonrgF6jcFrrFFwJhhe84XtA1oK/Qh4yFS+VMREf6dobg==
+
+"@rollup/rollup-linux-arm-musleabihf@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.2.tgz#a8b7b6a805356c8bd0409e4c5f56664d80a50aaa"
+ integrity sha512-Dbfa9Sc1G1lWxop0gNguXOfGhaXQWAGhZUcqA0Vs6CnJq8JW/YOw/KvyGtQFmz4yDr0H4v9X248SM7bizYj4yQ==
+
+"@rollup/rollup-linux-arm64-gnu@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.2.tgz#766064021d2bfc42f13f4653f8870a9b8bbdc31d"
+ integrity sha512-Z1YpgBvFYhZIyBW5BoopwSg+t7yqEhs5HCei4JbsaXnhz/eZehT18DaXl957aaE9QK7TRGFryCAtStZywcQe1A==
+
+"@rollup/rollup-linux-arm64-musl@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.2.tgz#490f49236102b97738d9406eaf5cd8d9dad35c15"
+ integrity sha512-66Zszr7i/JaQ0u/lefcfaAw16wh3oT72vSqubIMQqWzOg85bGCPhoeykG/cC5uvMzH80DQa2L539IqKht6twVA==
+
+"@rollup/rollup-linux-powerpc64le-gnu@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.2.tgz#03a67f1476dd80f115ce35bc9b0d03c50c16679d"
+ integrity sha512-HpJCMnlMTfEhwo19bajvdraQMcAq3FX08QDx3OfQgb+414xZhKNf3jNvLFYKbbDSGBBrQh5yNwWZrdK0g0pokg==
+
+"@rollup/rollup-linux-riscv64-gnu@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.2.tgz#d86e9b7b5b242652cd691c46d1939130c35cb68d"
+ integrity sha512-/egzQzbOSRef2vYCINKITGrlwkzP7uXRnL+xU2j75kDVp3iPdcF0TIlfwTRF8woBZllhk3QaxNOEj2Ogh3t9hg==
+
+"@rollup/rollup-linux-s390x-gnu@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.2.tgz#c8fca373bec6df8550b31b3dbb56e2b241bc8718"
+ integrity sha512-qgYbOEbrPfEkH/OnUJd1/q4s89FvNJQIUldx8X2F/UM5sEbtkqZpf2s0yly2jSCKr1zUUOY1hnTP2J1WOzMAdA==
+
+"@rollup/rollup-linux-x64-gnu@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.2.tgz#be182ef761c9b0147496e647ace44fd1b912344f"
+ integrity sha512-a0lkvNhFLhf+w7A95XeBqGQaG0KfS3hPFJnz1uraSdUe/XImkp/Psq0Ca0/UdD5IEAGoENVmnYrzSC9Y2a2uKQ==
+
+"@rollup/rollup-linux-x64-musl@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.2.tgz#c280202d5b54d04f1e2b810359fe73c4973e8b72"
+ integrity sha512-sSWBVZgzwtsuG9Dxi9kjYOUu/wKW+jrbzj4Cclabqnfkot8Z3VEHcIgyenA3lLn/Fu11uDviWjhctulkhEO60g==
+
+"@rollup/rollup-win32-arm64-msvc@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.2.tgz#8ae561401b92acb8ca7a842ffadececb22a2247e"
+ integrity sha512-t/YgCbZ638R/r7IKb9yCM6nAek1RUvyNdfU0SHMDLOf6GFe/VG1wdiUAsxTWHKqjyzkRGg897ZfCpdo1bsCSsA==
+
+"@rollup/rollup-win32-ia32-msvc@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.2.tgz#c3a8b081595026eab9fccfe581624cb31af0d6f8"
+ integrity sha512-kTmX5uGs3WYOA+gYDgI6ITkZng9SP71FEMoHNkn+cnmb9Zuyyay8pf0oO5twtTwSjNGy1jlaWooTIr+Dw4tIbw==
+
+"@rollup/rollup-win32-x64-msvc@4.22.2":
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.2.tgz#c770006ccc780b2de7b2151fc7f37b49121a21c1"
+ integrity sha512-Yy8So+SoRz8I3NS4Bjh91BICPOSVgdompTIPYTByUqU66AXSIOgmW3Lv1ke3NORPqxdF+RdrZET+8vYai6f4aA==
+
+"@stencil/core@2.5.2":
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/@stencil/core/-/core-2.5.2.tgz#ad00d495ee37bbed4044524d59c7f22de15ab4a7"
+ integrity sha512-bgjPXkSzzg1WnTgVUm6m5ZzpKt602WmA/QljODAW1xVN40OHJdbGblzF/F6MFzqv2c5Cy30CB41arc8qADIdcQ==
+
"@tanstack/eslint-plugin-query@^5.20.1":
version "5.56.1"
resolved "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.56.1.tgz"
@@ -709,7 +1020,7 @@
dependencies:
"@types/react" "*"
-"@types/react@*", "@types/react@^17.0.0 || ^18.0.0", "@types/react@^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react@^18.2.43", "@types/react@>=16.8":
+"@types/react@*", "@types/react@^18.2.43":
version "18.3.8"
resolved "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz"
integrity sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==
@@ -744,7 +1055,7 @@
semver "^7.5.4"
ts-api-utils "^1.0.1"
-"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.14.0":
+"@typescript-eslint/parser@^6.14.0":
version "6.21.0"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz"
integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
@@ -819,16 +1130,6 @@
semver "^7.6.0"
ts-api-utils "^1.3.0"
-"@typescript-eslint/utils@^8.3.0":
- version "8.6.0"
- resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz"
- integrity sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==
- dependencies:
- "@eslint-community/eslint-utils" "^4.4.0"
- "@typescript-eslint/scope-manager" "8.6.0"
- "@typescript-eslint/types" "8.6.0"
- "@typescript-eslint/typescript-estree" "8.6.0"
-
"@typescript-eslint/utils@6.21.0":
version "6.21.0"
resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz"
@@ -842,6 +1143,16 @@
"@typescript-eslint/typescript-estree" "6.21.0"
semver "^7.5.4"
+"@typescript-eslint/utils@^8.3.0":
+ version "8.6.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz"
+ integrity sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@typescript-eslint/scope-manager" "8.6.0"
+ "@typescript-eslint/types" "8.6.0"
+ "@typescript-eslint/typescript-estree" "8.6.0"
+
"@typescript-eslint/visitor-keys@6.21.0":
version "6.21.0"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz"
@@ -858,6 +1169,75 @@
"@typescript-eslint/types" "8.6.0"
eslint-visitor-keys "^3.4.3"
+"@uiw/codemirror-extensions-basic-setup@4.23.5":
+ version "4.23.5"
+ resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.23.5.tgz#02ebe9c44f76609f15295e1ff9c83e770140c369"
+ integrity sha512-eTMfT8TejVN/D5vvuz9Lab+MIoRYdtqa2ftZZmU3JpcDIXf9KaExPo+G2Rl9HqySzaasgGXOOG164MAnj3MSIw==
+ dependencies:
+ "@codemirror/autocomplete" "^6.0.0"
+ "@codemirror/commands" "^6.0.0"
+ "@codemirror/language" "^6.0.0"
+ "@codemirror/lint" "^6.0.0"
+ "@codemirror/search" "^6.0.0"
+ "@codemirror/state" "^6.0.0"
+ "@codemirror/view" "^6.0.0"
+
+"@uiw/color-convert@2.3.2":
+ version "2.3.2"
+ resolved "https://registry.npmjs.org/@uiw/color-convert/-/color-convert-2.3.2.tgz"
+ integrity sha512-Txs0oAcOGhvM15yi7NqDJSws6htpuGx75EblFlZmh4h4AyUYXaeN2HNcOAUt835M3SN1j7rqMC+XERIE4r776Q==
+
+"@uiw/react-codemirror@^4.23.5":
+ version "4.23.5"
+ resolved "https://registry.yarnpkg.com/@uiw/react-codemirror/-/react-codemirror-4.23.5.tgz#6a16c23062067732cba105ac33ad69cf8e5c2111"
+ integrity sha512-2zzGpx61L4mq9zDG/hfsO4wAH209TBE8VVsoj/qrccRe6KfcneCwKgRxtQjxBCCnO0Q5S+IP+uwCx5bXRzgQFQ==
+ dependencies:
+ "@babel/runtime" "^7.18.6"
+ "@codemirror/commands" "^6.1.0"
+ "@codemirror/state" "^6.1.1"
+ "@codemirror/theme-one-dark" "^6.0.0"
+ "@uiw/codemirror-extensions-basic-setup" "4.23.5"
+ codemirror "^6.0.0"
+
+"@uiw/react-color-alpha@2.3.2":
+ version "2.3.2"
+ resolved "https://registry.npmjs.org/@uiw/react-color-alpha/-/react-color-alpha-2.3.2.tgz"
+ integrity sha512-+yh+KEpNKjxNFFODQrB3Lki2hu6kznoSCngHgptlWBUtAC3e/e7tIiTTedSpCGr7fwIpC0CWrKwxENA3tyY/2Q==
+ dependencies:
+ "@uiw/color-convert" "2.3.2"
+ "@uiw/react-drag-event-interactive" "2.3.2"
+
+"@uiw/react-color-colorful@^2.3.2":
+ version "2.3.2"
+ resolved "https://registry.npmjs.org/@uiw/react-color-colorful/-/react-color-colorful-2.3.2.tgz"
+ integrity sha512-Rr1qa4Uo588CZjOx6OZIXjo7+CNcnqogU0Nel6L5zzwL+3CNBC3GfS4Or4db/ZxFhN49qt6NqsQa/ykA2/ixpg==
+ dependencies:
+ "@uiw/color-convert" "2.3.2"
+ "@uiw/react-color-alpha" "2.3.2"
+ "@uiw/react-color-hue" "2.3.2"
+ "@uiw/react-color-saturation" "2.3.2"
+
+"@uiw/react-color-hue@2.3.2":
+ version "2.3.2"
+ resolved "https://registry.npmjs.org/@uiw/react-color-hue/-/react-color-hue-2.3.2.tgz"
+ integrity sha512-aAveo++GAghw09Ngc8Zzwxhj9mGaJfw8q40fDGFrVNxdrwrAjySIKHzlOSg5kw6WnEp4tUjhkMXDfCZWUhqmPA==
+ dependencies:
+ "@uiw/color-convert" "2.3.2"
+ "@uiw/react-color-alpha" "2.3.2"
+
+"@uiw/react-color-saturation@2.3.2":
+ version "2.3.2"
+ resolved "https://registry.npmjs.org/@uiw/react-color-saturation/-/react-color-saturation-2.3.2.tgz"
+ integrity sha512-aDKMhjylBUb4dH4oTQYz+U4mhpOebbQ2J0Y8y5aX1tfZ3fZuBqnXtWzu7Ffj3ksdKwkQHPddxT5IDTbAChF/og==
+ dependencies:
+ "@uiw/color-convert" "2.3.2"
+ "@uiw/react-drag-event-interactive" "2.3.2"
+
+"@uiw/react-drag-event-interactive@2.3.2":
+ version "2.3.2"
+ resolved "https://registry.npmjs.org/@uiw/react-drag-event-interactive/-/react-drag-event-interactive-2.3.2.tgz"
+ integrity sha512-lG5pJCtqbYBv7Dj0r12PE9q9yg7P2CzlQodw5ZHPY9GCSZVXHJc0g4lGvCbe/4Y8HYqM8aU4CYS8LplpX+mIQw==
+
"@ungap/structured-clone@^1.2.0":
version "1.2.0"
resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz"
@@ -901,7 +1281,7 @@ acorn-jsx@^5.3.2:
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
-"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.8.2, acorn@^8.9.0:
+acorn@^8.8.2, acorn@^8.9.0:
version "8.12.1"
resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz"
integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
@@ -1084,7 +1464,7 @@ braces@^3.0.3:
dependencies:
fill-range "^7.1.1"
-browserslist@^4.23.1, "browserslist@>= 4.21.0":
+browserslist@^4.23.1:
version "4.23.3"
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz"
integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==
@@ -1169,11 +1549,33 @@ client-only@^0.0.1:
resolved "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz"
integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
+clipboard@^2.0.8:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.11.tgz#62180360b97dd668b6b3a84ec226975762a70be5"
+ integrity sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==
+ dependencies:
+ good-listener "^1.2.2"
+ select "^1.1.2"
+ tiny-emitter "^2.0.0"
+
clsx@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz"
integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
+codemirror@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29"
+ integrity sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==
+ dependencies:
+ "@codemirror/autocomplete" "^6.0.0"
+ "@codemirror/commands" "^6.0.0"
+ "@codemirror/language" "^6.0.0"
+ "@codemirror/lint" "^6.0.0"
+ "@codemirror/search" "^6.0.0"
+ "@codemirror/state" "^6.0.0"
+ "@codemirror/view" "^6.0.0"
+
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
@@ -1188,16 +1590,16 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
-color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
@@ -1241,6 +1643,11 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0"
yaml "^1.10.0"
+crelt@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72"
+ integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==
+
cross-spawn@^7.0.2:
version "7.0.3"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
@@ -1281,7 +1688,7 @@ csstype@^3.0.2, csstype@^3.1.3:
resolved "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz"
integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==
-d3-drag@^3.0.0, "d3-drag@2 - 3":
+"d3-drag@2 - 3", d3-drag@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz"
integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==
@@ -1301,7 +1708,7 @@ d3-drag@^3.0.0, "d3-drag@2 - 3":
dependencies:
d3-color "1 - 3"
-d3-selection@^3.0.0, "d3-selection@2 - 3", d3-selection@3:
+"d3-selection@2 - 3", d3-selection@3, d3-selection@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz"
integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==
@@ -1395,6 +1802,11 @@ delayed-stream@~1.0.0:
resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+delegate@^3.1.2:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
+ integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
+
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
@@ -1693,7 +2105,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-"eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.55.0, "eslint@^8.57.0 || ^9.0.0", eslint@>=7:
+eslint@^8.55.0:
version "8.57.1"
resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz"
integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==
@@ -1978,6 +2390,13 @@ globby@^11.1.0:
merge2 "^1.4.1"
slash "^3.0.0"
+good-listener@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
+ integrity sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==
+ dependencies:
+ delegate "^3.1.2"
+
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz"
@@ -2092,7 +2511,7 @@ ignore@^5.2.0, ignore@^5.2.4:
resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
-immer@^10.1.1, immer@>=9.0.6:
+immer@^10.1.1:
version "10.1.1"
resolved "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz"
integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==
@@ -2468,21 +2887,14 @@ mime-types@^2.1.12:
dependencies:
mime-db "1.52.0"
-minimatch@^3.0.5:
- version "3.1.2"
- resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
- integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimatch@^3.1.1:
- version "3.1.2"
- resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
- integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+minimatch@9.0.3:
+ version "9.0.3"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
dependencies:
- brace-expansion "^1.1.7"
+ brace-expansion "^2.0.1"
-minimatch@^3.1.2:
+minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -2496,13 +2908,6 @@ minimatch@^9.0.4:
dependencies:
brace-expansion "^2.0.1"
-minimatch@9.0.3:
- version "9.0.3"
- resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz"
- integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
- dependencies:
- brace-expansion "^2.0.1"
-
ms@^2.1.3:
version "2.1.3"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
@@ -2724,6 +3129,11 @@ pretty-error@^4.0.0:
lodash "^4.17.20"
renderkid "^3.0.0"
+prismjs@^1.23.0, prismjs@^1.29.0:
+ version "1.29.0"
+ resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12"
+ integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==
+
prop-types@^15.6.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
@@ -2733,6 +3143,11 @@ prop-types@^15.6.2, prop-types@^15.8.1:
object-assign "^4.1.1"
react-is "^16.13.1"
+property-expr@^2.0.5:
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz"
+ integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==
+
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
@@ -2757,7 +3172,12 @@ react-cmdk@^1.3.9:
"@heroicons/react" "^2.0.13"
html-webpack-plugin "^5.5.0"
-"react-dom@^16 || ^17 || ^18", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.x || ^17.x || ^18.x", "react-dom@^17.0.0 || ^18.0.0", "react-dom@^17.0.0 || ^18.0.0 || ^19.0.0", react-dom@^18.2.0, react-dom@>=16.6.0, react-dom@>=16.8.0, react-dom@>=17:
+react-colorful@^5.6.1:
+ version "5.6.1"
+ resolved "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz"
+ integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==
+
+react-dom@^18.2.0:
version "18.3.1"
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz"
integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
@@ -2767,15 +3187,10 @@ react-cmdk@^1.3.9:
react-hook-form@^7.53.0:
version "7.53.0"
- resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz"
+ resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.53.0.tgz#3cf70951bf41fa95207b34486203ebefbd3a05ab"
integrity sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==
-react-is@^16.13.1:
- version "16.13.1"
- resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
- integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-
-react-is@^16.7.0:
+react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -2805,7 +3220,7 @@ react-transition-group@^4.4.5:
loose-envify "^1.4.0"
prop-types "^15.6.2"
-"react@^16 || ^17 || ^18", "react@^16.8.0 || ^17 || ^18 || ^19", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.x || ^17.x || ^18.x", "react@^17.0.0 || ^18.0.0", "react@^17.0.0 || ^18.0.0 || ^19.0.0", "react@^18 || ^19", react@^18.2.0, react@^18.3.1, "react@>= 16", react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=17:
+react@^18.2.0:
version "18.3.1"
resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz"
integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
@@ -2947,7 +3362,7 @@ safe-regex-test@^1.0.3:
es-errors "^1.3.0"
is-regex "^1.1.4"
-sass@*, sass@^1.70.0:
+sass@^1.70.0:
version "1.79.2"
resolved "https://registry.npmjs.org/sass/-/sass-1.79.2.tgz"
integrity sha512-YmT1aoF1MwHsZEu/eXhbAJNsPGAhNP4UixW9ckEwWCvPcVdVF0/C104OGDVEqtoctKq0N+wM20O/rj+sSPsWeg==
@@ -2963,6 +3378,11 @@ scheduler@^0.23.2:
dependencies:
loose-envify "^1.1.0"
+select@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
+ integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==
+
semver@^6.3.1:
version "6.3.1"
resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
@@ -3022,7 +3442,7 @@ slash@^3.0.0:
resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-source-map-js@^1.2.1, "source-map-js@>=0.6.2 <2.0.0":
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
@@ -3040,12 +3460,7 @@ source-map@^0.5.7:
resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
-source-map@^0.6.0:
- version "0.6.1"
- resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-source-map@~0.6.0:
+source-map@^0.6.0, source-map@~0.6.0:
version "0.6.1"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
@@ -3116,6 +3531,11 @@ strip-json-comments@^3.1.1:
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+style-mod@^4.0.0, style-mod@^4.1.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.1.2.tgz#ca238a1ad4786520f7515a8539d5a63691d7bf67"
+ integrity sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==
+
stylis@4.2.0:
version "4.2.0"
resolved "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz"
@@ -3145,7 +3565,7 @@ tapable@^2.0.0:
resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz"
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
-terser@^5.10.0, terser@^5.4.0:
+terser@^5.10.0:
version "5.33.0"
resolved "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz"
integrity sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==
@@ -3160,6 +3580,16 @@ text-table@^0.2.0:
resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+tiny-case@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz"
+ integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==
+
+tiny-emitter@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
+ integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
+
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"
@@ -3172,6 +3602,11 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
+toposort@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz"
+ integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==
+
ts-api-utils@^1.0.1, ts-api-utils@^1.3.0:
version "1.3.0"
resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz"
@@ -3194,6 +3629,11 @@ type-fest@^0.20.2:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+type-fest@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz"
+ integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
+
typed-array-buffer@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz"
@@ -3238,7 +3678,7 @@ typed-array-length@^1.0.6:
is-typed-array "^1.1.13"
possible-typed-array-names "^1.0.0"
-typescript@^5.2.2, typescript@>=4.2.0:
+typescript@^5.2.2:
version "5.6.2"
resolved "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz"
integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==
@@ -3283,7 +3723,7 @@ uuid@^9.0.1:
resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz"
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
-"vite@^4.2.0 || ^5.0.0", vite@^5.0.8:
+vite@^5.0.8:
version "5.4.6"
resolved "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz"
integrity sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==
@@ -3294,6 +3734,11 @@ uuid@^9.0.1:
optionalDependencies:
fsevents "~2.3.3"
+w3c-keyname@^2.2.4:
+ version "2.2.8"
+ resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5"
+ integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==
+
which-boxed-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz"
@@ -3376,6 +3821,16 @@ yocto-queue@^0.1.0:
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+yup@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz"
+ integrity sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==
+ dependencies:
+ property-expr "^2.0.5"
+ tiny-case "^1.0.3"
+ toposort "^2.0.2"
+ type-fest "^2.19.0"
+
zustand@^4.4.0, zustand@^4.5.5:
version "4.5.5"
resolved "https://registry.npmjs.org/zustand/-/zustand-4.5.5.tgz"