diff --git a/packages/audiodocs/docs/core/audio-param.mdx b/packages/audiodocs/docs/core/audio-param.mdx
index 93f476a25..ffe5c9368 100644
--- a/packages/audiodocs/docs/core/audio-param.mdx
+++ b/packages/audiodocs/docs/core/audio-param.mdx
@@ -3,6 +3,7 @@ sidebar_position: 4
---
import { Optional, ReadOnly } from '@site/src/components/Badges';
+import { SetValueAtTimeChart, LinearRampToValueAtTimeChart, ExponentialRampToValueAtTimeChart, SetTargetAtTimeChart, SetValueCurveAtTimeChart } from '@site/src/components/Charts';
# AudioParam
@@ -36,7 +37,7 @@ as they are more efficient for continuous changes. For more specific use cases,
:::
-
+
| Parameter | Type | Description |
| :---: | :---: | :---- |
@@ -56,7 +57,7 @@ as they are more efficient for continuous changes. For more specific use cases,
Schedules a gradual linear change to the new value.
The change begins at the time designated for the previous event. It follows a linear ramp to the `value`, achieving it by the specified `endTime`.
-
+
| Parameter | Type | Description |
| :---: | :---: | :---- |
@@ -76,7 +77,7 @@ The change begins at the time designated for the previous event. It follows a li
Schedules a gradual exponential change to the new value.
The change begins at the time designated for the previous event. It follows an exponential ramp to the `value`, achieving it by the specified `endTime`.
-
+
| Parameter | Type | Description |
| :---: | :---: | :---- |
@@ -96,7 +97,7 @@ The change begins at the time designated for the previous event. It follows an e
Schedules a gradual change to the new value at the start time.
This method is useful for decay or release portions of [ADSR envelopes](/docs/effects/gain-node#envelope---adsr).
-
+
| Parameter | Type | Description |
| :---: | :---: | :---- |
@@ -117,7 +118,7 @@ This method is useful for decay or release portions of [ADSR envelopes](/docs/ef
Schedules the parameters's value change following a curve defined by given array.
-
+
| Parameter | Type | Description |
| :---: | :---: | :---- |
diff --git a/packages/audiodocs/package.json b/packages/audiodocs/package.json
index 81ceb1280..49bd58c71 100644
--- a/packages/audiodocs/package.json
+++ b/packages/audiodocs/package.json
@@ -54,6 +54,7 @@
"react-native-reanimated": "^4.0.3",
"react-native-web": "^0.21.1",
"react-native-worklets": "^0.4.1",
+ "recharts": "^3.7.0",
"rehype-katex": "7",
"remark-math": "6",
"source-map": "^0.7.4",
diff --git a/packages/audiodocs/src/components/Charts/ExponentialRampToValueAtTime/index.tsx b/packages/audiodocs/src/components/Charts/ExponentialRampToValueAtTime/index.tsx
new file mode 100644
index 000000000..a8829681a
--- /dev/null
+++ b/packages/audiodocs/src/components/Charts/ExponentialRampToValueAtTime/index.tsx
@@ -0,0 +1,80 @@
+import {
+ Label,
+ ReferenceLine
+} from 'recharts';
+
+import { FC } from 'react';
+import AudioParamChartBase, { AudioParamDataPoint } from '../common/AudioParamChartBase';
+import styles from '../styles.module.css';
+
+const generateExponentialRampData = (): AudioParamDataPoint[] => {
+ const startTime = 0.2;
+ const endTime = 0.8;
+ const startValue = 0.2;
+ const targetValue = 0.8;
+ const data = [];
+
+ // Add points before the ramp
+ for (let time = 0.0; time < startTime; time += 0.1) {
+ data.push({ time: parseFloat(time.toFixed(1)), value: startValue });
+ }
+
+ // Generate exponential ramp points
+ const steps = 60;
+ for (let i = 0; i <= steps; i++) {
+ const t = i / steps;
+ const time = startTime + t * (endTime - startTime);
+ // Exponential interpolation: value = startValue * (targetValue / startValue)^t
+ const value = startValue * Math.pow(targetValue / startValue, t);
+ data.push({
+ time: parseFloat(time.toFixed(3)),
+ value: parseFloat(value.toFixed(3)),
+ });
+ }
+
+ // Add points after the ramp
+ for (let time = endTime + 0.1; time <= 0.9; time += 0.1) {
+ data.push({ time: parseFloat(time.toFixed(1)), value: targetValue });
+ }
+
+ return data;
+};
+
+const ExponentialRampToValueAtTimeChart: FC = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+export default ExponentialRampToValueAtTimeChart;
diff --git a/packages/audiodocs/src/components/Charts/LinearRampToValueAtTime/index.tsx b/packages/audiodocs/src/components/Charts/LinearRampToValueAtTime/index.tsx
new file mode 100644
index 000000000..30f9e3e89
--- /dev/null
+++ b/packages/audiodocs/src/components/Charts/LinearRampToValueAtTime/index.tsx
@@ -0,0 +1,38 @@
+import { Label, ReferenceLine } from "recharts";
+
+
+import { FC } from "react";
+import AudioParamChartBase from "../common/AudioParamChartBase";
+import styles from '../styles.module.css';
+
+const linearRampToValueAtTimeData = [
+ { time: 0.0, value: 0.2 },
+ { time: 0.1, value: 0.2},
+ { time: 0.2, value: 0.2 },
+ { time: 0.3, value: 0.3 },
+ { time: 0.4, value: 0.4 },
+ { time: 0.5, value: 0.5 },
+ { time: 0.6, value: 0.6 },
+ { time: 0.7, value: 0.7 },
+ { time: 0.8, value: 0.8 },
+ { time: 0.9, value: 0.8 },
+];
+
+const LinearRampToValueAtTimeChart: FC = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+export default LinearRampToValueAtTimeChart;
\ No newline at end of file
diff --git a/packages/audiodocs/src/components/Charts/SetTargetAtTime/index.tsx b/packages/audiodocs/src/components/Charts/SetTargetAtTime/index.tsx
new file mode 100644
index 000000000..67765434d
--- /dev/null
+++ b/packages/audiodocs/src/components/Charts/SetTargetAtTime/index.tsx
@@ -0,0 +1,115 @@
+import { Label, ReferenceDot, ReferenceLine } from 'recharts';
+
+import ChartBaseWrapper, { AudioParamDataPoint } from '../common/AudioParamChartBase';
+import styles from '../styles.module.css';
+
+const CustomLabelWithArrow = (props: any) => {
+ const { viewBox, cx, cy } = props;
+
+ // Use cx/cy if available (from ReferenceDot), otherwise fallback to viewBox
+ const dotX = cx || viewBox?.cx || viewBox?.x || 0;
+ const dotY = cy || viewBox?.cy || viewBox?.y || 0;
+
+ // Position label below the dot
+ const labelY = dotY + 30;
+ const arrowStartY = labelY;
+ const arrowEndY = dotY + 8;
+
+ return (
+
+ {/* Arrow pointing from label to dot */}
+
+
+
+
+
+
+ {/* Label text */}
+
+ timeConstant controls
+
+
+ the change rate
+
+
+ );
+};
+
+const generateSetTargetAtTimeData = (): AudioParamDataPoint[] => {
+ const startTime = 0.3;
+ const timeConstant = 0.1;
+ const previousValue = 0.2;
+ const targetValue = 0.8;
+ const data = [];
+
+ // Add points before the change
+ for (let time = 0.0; time < startTime; time += 0.1) {
+ data.push({ time: parseFloat(time.toFixed(1)), value: previousValue });
+ }
+
+ // Generate points after the change using the formula
+ const steps = 60; // More granular steps for smooth curve
+
+ for (let i = 0; i < steps; i++) {
+ const t = i / steps;
+ const time = startTime + t * (0.9 - startTime); // Spread points until 0.9
+ const value = targetValue + (previousValue - targetValue) * Math.exp(-(time - startTime) / timeConstant);
+ data.push({ time: parseFloat(time.toFixed(3)), value: parseFloat(value.toFixed(3)) });
+ }
+
+ return data;
+}
+
+const SetTargetAtTimeChart = () => (
+
+
+
+
+
+
+
+
+
+ }
+ />
+
+);
+
+export default SetTargetAtTimeChart;
\ No newline at end of file
diff --git a/packages/audiodocs/src/components/Charts/SetValueAtTime/index.tsx b/packages/audiodocs/src/components/Charts/SetValueAtTime/index.tsx
new file mode 100644
index 000000000..8fe03d75a
--- /dev/null
+++ b/packages/audiodocs/src/components/Charts/SetValueAtTime/index.tsx
@@ -0,0 +1,46 @@
+import { Label, Line, ReferenceLine, Tooltip } from 'recharts';
+
+import { FC } from 'react';
+import AudioParamChartBase from '../common/AudioParamChartBase';
+import styles from '../styles.module.css';
+
+const setValueAtTimeData = [
+ { time: 0.0, value: 0.2 },
+ { time: 0.1, value: 0.2 },
+ { time: 0.2, value: 0.2 },
+ { time: 0.3, value: 0.2 },
+ { time: 0.3, value: 0.8 },
+ { time: 0.4, value: 0.8 },
+ { time: 0.5, value: 0.8 },
+ { time: 0.6, value: 0.8 },
+ { time: 0.7, value: 0.8 },
+ { time: 0.8, value: 0.8 },
+ { time: 0.9, value: 0.8 },
+];
+
+const SetValueAtTimeChart: FC = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+export default SetValueAtTimeChart;
\ No newline at end of file
diff --git a/packages/audiodocs/src/components/Charts/SetValueCurveAtTime/index.tsx b/packages/audiodocs/src/components/Charts/SetValueCurveAtTime/index.tsx
new file mode 100644
index 000000000..9ed96c9e7
--- /dev/null
+++ b/packages/audiodocs/src/components/Charts/SetValueCurveAtTime/index.tsx
@@ -0,0 +1,42 @@
+import { Label, ReferenceDot, ReferenceLine } from 'recharts';
+
+import { FC } from 'react';
+import AudioParamChartBase from '../common/AudioParamChartBase';
+import styles from '../styles.module.css';
+
+
+const setValueCurveAtTimeData = [
+ { time: 0, value: 0.2 },
+ { time: 0.1, value: 0.2},
+ { time: 0.2, value: 0.2},
+ { time: 0.2, value: 0.5},
+ { time: 0.3, value: 0.35},
+ { time: 0.4, value: 0.6},
+ { time: 0.5, value: 0.45},
+ { time: 0.6, value: 0.8},
+ { time: 0.7, value: 0.8},
+ { time: 0.8, value: 0.8},
+ { time: 0.9, value: 0.8},
+];
+
+const SetValueCurveAtTimeChart: FC = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+export default SetValueCurveAtTimeChart;
\ No newline at end of file
diff --git a/packages/audiodocs/src/components/Charts/common/AudioParamChartBase.tsx b/packages/audiodocs/src/components/Charts/common/AudioParamChartBase.tsx
new file mode 100644
index 000000000..88d5e29ab
--- /dev/null
+++ b/packages/audiodocs/src/components/Charts/common/AudioParamChartBase.tsx
@@ -0,0 +1,99 @@
+import {
+ CartesianGrid,
+ Line,
+ LineChart,
+ XAxis,
+ YAxis
+} from 'recharts';
+
+import { FC, ReactNode } from 'react';
+import styles from '../styles.module.css';
+
+export type AudioParamDataPoint = {
+ time: number;
+ value: number;
+};
+
+export interface AudioParamChartBaseProps {
+ children: ReactNode;
+ data: AudioParamDataPoint[];
+}
+
+const AudioParamChartBase: FC = ({
+ children,
+ data,
+}) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {children}
+
+);
+
+export default AudioParamChartBase;
diff --git a/packages/audiodocs/src/components/Charts/index.tsx b/packages/audiodocs/src/components/Charts/index.tsx
new file mode 100644
index 000000000..cb587720e
--- /dev/null
+++ b/packages/audiodocs/src/components/Charts/index.tsx
@@ -0,0 +1,7 @@
+import ExponentialRampToValueAtTimeChart from "./ExponentialRampToValueAtTime";
+import LinearRampToValueAtTimeChart from "./LinearRampToValueAtTime";
+import SetTargetAtTimeChart from "./SetTargetAtTime";
+import SetValueAtTimeChart from "./SetValueAtTime";
+import SetValueCurveAtTimeChart from "./SetValueCurveAtTime";
+
+export { ExponentialRampToValueAtTimeChart, LinearRampToValueAtTimeChart, SetTargetAtTimeChart, SetValueAtTimeChart, SetValueCurveAtTimeChart };
diff --git a/packages/audiodocs/src/components/Charts/styles.module.css b/packages/audiodocs/src/components/Charts/styles.module.css
new file mode 100644
index 000000000..2a46f8020
--- /dev/null
+++ b/packages/audiodocs/src/components/Charts/styles.module.css
@@ -0,0 +1,36 @@
+.chart {
+ width: 100%;
+ max-height: 70vh;
+ aspect-ratio: 3/2;
+}
+
+.leadingLine {
+ color: var(--ifm-color-primary);
+}
+
+.referenceLine {
+ color: var(--ifm-color-primary);
+}
+
+.label {
+ fill: var(--ifm-font-color-base);
+ font-weight: normal;
+ font-size: medium;
+}
+
+@media screen and (max-width: 500px) {
+ .label {
+ font-size: small;
+ }
+}
+
+.referenceLabel {
+ fill: var(--ifm-font-color-base);
+ font-weight: normal;
+ font-size: small;
+}
+
+.referenceDot {
+ fill: var(--ifm-color-primary);
+ color: var(--ifm-color-primary);
+}
\ No newline at end of file
diff --git a/packages/audiodocs/static/img/exponentialRampToValueAtTime.png b/packages/audiodocs/static/img/exponentialRampToValueAtTime.png
deleted file mode 100644
index e2f4d213c..000000000
Binary files a/packages/audiodocs/static/img/exponentialRampToValueAtTime.png and /dev/null differ
diff --git a/packages/audiodocs/static/img/linearRampToValueAtTime.png b/packages/audiodocs/static/img/linearRampToValueAtTime.png
deleted file mode 100644
index b16565e8e..000000000
Binary files a/packages/audiodocs/static/img/linearRampToValueAtTime.png and /dev/null differ
diff --git a/packages/audiodocs/static/img/setTargetAtTime.png b/packages/audiodocs/static/img/setTargetAtTime.png
deleted file mode 100644
index aa34d38ce..000000000
Binary files a/packages/audiodocs/static/img/setTargetAtTime.png and /dev/null differ
diff --git a/packages/audiodocs/static/img/setValueAtTime.png b/packages/audiodocs/static/img/setValueAtTime.png
deleted file mode 100644
index 8464a7cc6..000000000
Binary files a/packages/audiodocs/static/img/setValueAtTime.png and /dev/null differ
diff --git a/packages/audiodocs/static/img/setValueCurveAtTime.png b/packages/audiodocs/static/img/setValueCurveAtTime.png
deleted file mode 100644
index 613734219..000000000
Binary files a/packages/audiodocs/static/img/setValueCurveAtTime.png and /dev/null differ
diff --git a/packages/audiodocs/yarn.lock b/packages/audiodocs/yarn.lock
index 07781ef6b..b2eb89120 100644
--- a/packages/audiodocs/yarn.lock
+++ b/packages/audiodocs/yarn.lock
@@ -1833,7 +1833,7 @@
vfile "^6.0.1"
webpack "^5.88.1"
-"@docusaurus/module-type-aliases@3.9.2":
+"@docusaurus/module-type-aliases@3.9.2", "@docusaurus/module-type-aliases@^3.9.2":
version "3.9.2"
resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.9.2.tgz#993c7cb0114363dea5ef6855e989b3ad4b843a34"
integrity sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew==
@@ -2104,10 +2104,10 @@
fs-extra "^11.1.1"
tslib "^2.6.0"
-"@docusaurus/tsconfig@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.7.0.tgz#654dcc524e25b8809af0f1b0b42485c18c047ab5"
- integrity sha512-vRsyj3yUZCjscgfgcFYjIsTcAru/4h4YH2/XAE8Rs7wWdnng98PgWKvP5ovVc4rmRpRg2WChVW0uOy2xHDvDBQ==
+"@docusaurus/tsconfig@^3.9.2":
+ version "3.9.2"
+ resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.9.2.tgz#7f440e0ae665b841e1d487749037f26a0275f9c1"
+ integrity sha512-j6/Fp4Rlpxsc632cnRnl5HpOWeb6ZKssDj6/XzzAzVGXXfm9Eptx3rxCC+fDzySn9fHTS+CWJjPineCR1bB5WQ==
"@docusaurus/types@3.9.2":
version "3.9.2"
@@ -3225,6 +3225,18 @@
resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-2.0.0.tgz#4c40b74655c83982c8cf47530ee7dc13d957b6aa"
integrity sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==
+"@reduxjs/toolkit@1.x.x || 2.x.x":
+ version "2.11.2"
+ resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.11.2.tgz#582225acea567329ca6848583e7dd72580d38e82"
+ integrity sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==
+ dependencies:
+ "@standard-schema/spec" "^1.0.0"
+ "@standard-schema/utils" "^0.3.0"
+ immer "^11.0.0"
+ redux "^5.0.1"
+ redux-thunk "^3.1.0"
+ reselect "^5.1.0"
+
"@resvg/resvg-wasm@2.4.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/@resvg/resvg-wasm/-/resvg-wasm-2.4.0.tgz#e01164b9a267c822e1ff797daa2fb91b663ea6f0"
@@ -3296,6 +3308,16 @@
micromark-util-character "^1.1.0"
micromark-util-symbol "^1.0.1"
+"@standard-schema/spec@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8"
+ integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==
+
+"@standard-schema/utils@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@standard-schema/utils/-/utils-0.3.0.tgz#3d5e608f16c2390c10528e98e59aef6bf73cae7b"
+ integrity sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==
+
"@svgr/babel-plugin-add-jsx-attribute@8.0.0":
version "8.0.0"
resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22"
@@ -3484,23 +3506,62 @@
dependencies:
"@types/node" "*"
+"@types/d3-array@^3.0.3":
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.2.2.tgz#e02151464d02d4a1b44646d0fcdb93faf88fde8c"
+ integrity sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==
+
+"@types/d3-color@*":
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.3.tgz#368c961a18de721da8200e80bf3943fb53136af2"
+ integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==
+
+"@types/d3-ease@^3.0.0":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.2.tgz#e28db1bfbfa617076f7770dd1d9a48eaa3b6c51b"
+ integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==
+
+"@types/d3-interpolate@^3.0.1":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz#412b90e84870285f2ff8a846c6eb60344f12a41c"
+ integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==
+ dependencies:
+ "@types/d3-color" "*"
+
+"@types/d3-path@*":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.1.tgz#f632b380c3aca1dba8e34aa049bcd6a4af23df8a"
+ integrity sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==
+
"@types/d3-scale-chromatic@^3.0.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#dc6d4f9a98376f18ea50bad6c39537f1b5463c39"
integrity sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==
-"@types/d3-scale@^4.0.3":
+"@types/d3-scale@^4.0.2", "@types/d3-scale@^4.0.3":
version "4.0.9"
resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.9.tgz#57a2f707242e6fe1de81ad7bfcccaaf606179afb"
integrity sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==
dependencies:
"@types/d3-time" "*"
-"@types/d3-time@*":
+"@types/d3-shape@^3.1.0":
+ version "3.1.8"
+ resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.1.8.tgz#d1516cc508753be06852cd06758e3bb54a22b0e3"
+ integrity sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==
+ dependencies:
+ "@types/d3-path" "*"
+
+"@types/d3-time@*", "@types/d3-time@^3.0.0":
version "3.0.4"
resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.4.tgz#8472feecd639691450dd8000eb33edd444e1323f"
integrity sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==
+"@types/d3-timer@^3.0.0":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70"
+ integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==
+
"@types/debug@^4.0.0":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917"
@@ -3893,6 +3954,11 @@
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4"
integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==
+"@types/use-sync-external-store@^0.0.6":
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc"
+ integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==
+
"@types/webxr@*":
version "0.5.23"
resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.23.tgz#fe2b76ffa9600d118f2fcdf855fa93bcf8e79f8c"
@@ -5764,7 +5830,7 @@ cytoscape@^3.28.1:
dependencies:
internmap "^1.0.0"
-"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0:
+"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.1.6, d3-array@^3.2.0:
version "3.2.4"
resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5"
integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==
@@ -5835,7 +5901,7 @@ d3-delaunay@6:
iconv-lite "0.6"
rw "1"
-"d3-ease@1 - 3", d3-ease@3:
+"d3-ease@1 - 3", d3-ease@3, d3-ease@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4"
integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==
@@ -5873,7 +5939,7 @@ d3-hierarchy@3:
resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6"
integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==
-"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3:
+"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3, d3-interpolate@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d"
integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==
@@ -5921,7 +5987,7 @@ d3-scale-chromatic@3:
d3-color "1 - 3"
d3-interpolate "1 - 3"
-d3-scale@4:
+d3-scale@4, d3-scale@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396"
integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==
@@ -5937,7 +6003,7 @@ d3-scale@4:
resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31"
integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==
-d3-shape@3:
+d3-shape@3, d3-shape@^3.1.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5"
integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==
@@ -5958,14 +6024,14 @@ d3-shape@^1.2.0:
dependencies:
d3-time "1 - 3"
-"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3:
+"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3, d3-time@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7"
integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==
dependencies:
d3-array "2 - 3"
-"d3-timer@1 - 3", d3-timer@3:
+"d3-timer@1 - 3", d3-timer@3, d3-timer@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0"
integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==
@@ -6065,6 +6131,11 @@ decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+decimal.js-light@^2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934"
+ integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==
+
decode-named-character-reference@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed"
@@ -6490,6 +6561,11 @@ es-set-tostringtag@^2.1.0:
has-tostringtag "^1.0.2"
hasown "^2.0.2"
+es-toolkit@^1.39.3:
+ version "1.44.0"
+ resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.44.0.tgz#b363b436b6115c3cc9cc21954c1e08ecdaa51c8c"
+ integrity sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==
+
esast-util-from-estree@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz#8d1cfb51ad534d2f159dc250e604f3478a79f1ad"
@@ -6778,6 +6854,11 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.4:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+eventemitter3@^5.0.1:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb"
+ integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==
+
events@^3.2.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
@@ -7871,6 +7952,16 @@ image-size@^2.0.2:
resolved "https://registry.yarnpkg.com/image-size/-/image-size-2.0.2.tgz#84a7b43704db5736f364bf0d1b029821299b4bdc"
integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==
+immer@^10.1.1:
+ version "10.2.0"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-10.2.0.tgz#88a4ce06a1af64172d254b70f7cb04df51c871b1"
+ integrity sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==
+
+immer@^11.0.0:
+ version "11.1.4"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-11.1.4.tgz#37aee86890b134a8f1a2fadd44361fb86c6ae67e"
+ integrity sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==
+
import-fresh@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
@@ -12073,6 +12164,14 @@ react-reconciler@0.27.0:
loose-envify "^1.1.0"
scheduler "^0.21.0"
+"react-redux@8.x.x || 9.x.x":
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5"
+ integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==
+ dependencies:
+ "@types/use-sync-external-store" "^0.0.6"
+ use-sync-external-store "^1.4.0"
+
react-refresh@^0.4.0:
version "0.4.3"
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53"
@@ -12188,6 +12287,23 @@ recast@^0.21.0:
source-map "~0.6.1"
tslib "^2.0.1"
+recharts@^3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/recharts/-/recharts-3.7.0.tgz#e3c72656ba18841085293e83bfc9a4f78b20abdd"
+ integrity sha512-l2VCsy3XXeraxIID9fx23eCb6iCBsxUQDnE8tWm6DFdszVAO7WVY/ChAD9wVit01y6B2PMupYiMmQwhgPHc9Ew==
+ dependencies:
+ "@reduxjs/toolkit" "1.x.x || 2.x.x"
+ clsx "^2.1.1"
+ decimal.js-light "^2.5.1"
+ es-toolkit "^1.39.3"
+ eventemitter3 "^5.0.1"
+ immer "^10.1.1"
+ react-redux "8.x.x || 9.x.x"
+ reselect "5.1.1"
+ tiny-invariant "^1.3.3"
+ use-sync-external-store "^1.2.2"
+ victory-vendor "^37.0.2"
+
rechoir@^0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22"
@@ -12235,6 +12351,16 @@ recma-stringify@^1.0.0:
unified "^11.0.0"
vfile "^6.0.0"
+redux-thunk@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3"
+ integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==
+
+redux@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b"
+ integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==
+
reflect-metadata@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b"
@@ -12499,6 +12625,11 @@ requires-port@^1.0.0:
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+reselect@5.1.1, reselect@^5.1.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e"
+ integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==
+
reselect@^4.1.7:
version "4.1.8"
resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524"
@@ -13464,7 +13595,7 @@ tiny-inflate@^1.0.0:
resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"
integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==
-tiny-invariant@^1.0.2:
+tiny-invariant@^1.0.2, tiny-invariant@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127"
integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==
@@ -13941,6 +14072,11 @@ use-sync-external-store@^1.0.0:
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0"
integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==
+use-sync-external-store@^1.2.2, use-sync-external-store@^1.4.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d"
+ integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==
+
usehooks-ts@^2.9.1:
version "2.16.0"
resolved "https://registry.yarnpkg.com/usehooks-ts/-/usehooks-ts-2.16.0.tgz#31deaa2f1147f65666aae925bd890b54e63b0d3f"
@@ -14070,6 +14206,26 @@ vfile@^6.0.0, vfile@^6.0.1:
"@types/unist" "^3.0.0"
vfile-message "^4.0.0"
+victory-vendor@^37.0.2:
+ version "37.3.6"
+ resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-37.3.6.tgz#401ac4b029a0b3d33e0cba8e8a1d765c487254da"
+ integrity sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==
+ dependencies:
+ "@types/d3-array" "^3.0.3"
+ "@types/d3-ease" "^3.0.0"
+ "@types/d3-interpolate" "^3.0.1"
+ "@types/d3-scale" "^4.0.2"
+ "@types/d3-shape" "^3.1.0"
+ "@types/d3-time" "^3.0.0"
+ "@types/d3-timer" "^3.0.0"
+ d3-array "^3.1.6"
+ d3-ease "^3.0.1"
+ d3-interpolate "^3.0.1"
+ d3-scale "^4.0.2"
+ d3-shape "^3.1.0"
+ d3-time "^3.0.0"
+ d3-timer "^3.0.1"
+
vlq@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468"