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, ::: -![](/img/setValueAtTime.png) + | 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`. -![](/img/linearRampToValueAtTime.png) + | 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`. -![](/img/exponentialRampToValueAtTime.png) + | 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). -![](/img/setTargetAtTime.png) + | 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. -![](/img/setValueCurveAtTime.png) + | 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"