diff --git a/client/component/package.json b/client/component/package.json index 672bb24..c00f35f 100644 --- a/client/component/package.json +++ b/client/component/package.json @@ -55,7 +55,7 @@ "three": ">=0.182.0" }, "devDependencies": { - "@h5web/lib": "^16.0.0", + "@h5web/lib": "^17.0.0", "@react-three/drei": "^9.122.0", "@react-three/fiber": "^8.18.0", "@types/cwise": "^1.0.6", diff --git a/client/component/src/ConnectedPlot.tsx b/client/component/src/ConnectedPlot.tsx index ba14b38..9de0c4f 100644 --- a/client/component/src/ConnectedPlot.tsx +++ b/client/component/src/ConnectedPlot.tsx @@ -147,12 +147,20 @@ interface ClientScatterParametersMessage { pointSize: number; } +/** + * A client status message + */ +interface ClientConfigMessage { + config: Map; +} + type ClientMessage = | ClientStatusMessage | ClientSelectionMessage | ClientLineParametersMessage | ClientScatterParametersMessage | ClearSelectionsMessage + | ClientConfigMessage | BatonRequestMessage | BatonDonateMessage; @@ -224,6 +232,8 @@ interface ConnectedPlotProps { hostname?: string; /** The port */ port?: string; + /** A configuration map */ + config?: object; /** The universally unique identifier */ uuid: string; } @@ -238,6 +248,7 @@ function ConnectedPlot({ plotId = 'plot_0', hostname = '127.0.0.1', port = '80', + config, uuid, }: ConnectedPlotProps) { const [plotProps, setPlotProps] = useState(); @@ -246,6 +257,7 @@ function ConnectedPlot({ useState(defaultPlotConfig); const [scatterData, setScatterData] = useState(); + const [configMap, setConfigMap] = useState(config); const mountState = useRef(''); const plotServerURL = `ws://${hostname}:${port}/plot/${uuid}/${plotId}`; const { sendMessage, lastMessage, readyState, getWebSocket } = useWebSocket( @@ -271,6 +283,10 @@ function ConnectedPlot({ }; }, []); + if (config != configMap) { + setConfigMap(config); + } + const sendClientMessage = useCallback( (data: ClientMessage) => { console.log('%s: sending', plotId, data); @@ -338,6 +354,12 @@ function ConnectedPlot({ } }, [getWebSocket, plotId, readyState, sendStatusMessage]); + useEffect(() => { + if (readyState === ReadyState.OPEN && configMap) { + sendClientMessage({ config: configMap } as ClientConfigMessage); + } + }, [readyState, configMap, sendClientMessage]); + const clearLineData = () => { setLineData([]); setLinePlotConfig(defaultPlotConfig); diff --git a/client/component/src/LabelledInput.tsx b/client/component/src/LabelledInput.tsx index 8fb37c7..9281f91 100644 --- a/client/component/src/LabelledInput.tsx +++ b/client/component/src/LabelledInput.tsx @@ -1,4 +1,4 @@ -import '@h5web/lib/dist/styles.css'; +import '@h5web/lib/styles.css'; import styles from './LabelledInput.module.css'; diff --git a/client/component/src/VideoPlot.tsx b/client/component/src/VideoPlot.tsx new file mode 100644 index 0000000..cf95f7c --- /dev/null +++ b/client/component/src/VideoPlot.tsx @@ -0,0 +1,246 @@ +import { + DefaultInteractions, + type ModifierKey, + ResetZoomButton, + TooltipMesh, + VisMesh, + VisCanvas, + getVisDomain, + FloatingControl, +} from '@h5web/lib'; +import { useEffect, useMemo, useState, type ReactElement } from 'react'; +import { useFrame, useThree } from '@react-three/fiber'; +import { useTexture, useVideoTexture } from '@react-three/drei'; + +import SelectionComponent from './SelectionComponent'; +import type { PlotBaseProps } from './models'; +import { createInteractionsConfig, InteractionModeType } from './utils'; +import { + PlotCustomizationContextProvider, + usePlotCustomizationContext, +} from './PlotCustomizationContext'; +import { AnyToolbar } from './PlotToolbar'; + +/** + * Props for the `VideoPlot` component. + */ +interface VideoPlotProps extends PlotBaseProps { + /** video source url */ + sourceURL: string; + /** if true, source is an animated image (MJPEG, animated GIF, etc) */ + isImage?: boolean; +} + +function ImageMeshMaterial(props: { + sourceUrl: string; + play: boolean; + setSize: (size: [number, number]) => void; +}) { + const { setFrameloop } = useThree(); + const texture = useTexture(props.sourceUrl); + const data = texture.source.data as HTMLImageElement; + const height = data.height; + const width = data.width; + + useEffect(() => { + props.setSize([height, width]); + }, [height, width, props]); + + useEffect(() => { + return () => { + setFrameloop('demand'); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + useEffect(() => { + // dial down frame loop when no more frames + if (data.complete) { + setFrameloop('demand'); + } + }, [data.complete, setFrameloop]); + + useEffect(() => { + setFrameloop(props.play ? 'always' : 'demand'); + }, [props.play, setFrameloop]); + + // eslint-disable-next-line react-hooks/immutability + useFrame(() => (texture.needsUpdate = props.play)); + + // eslint-disable-next-line react/no-unknown-property + return ; +} + +function VideoMeshMaterial(props: { + sourceUrl: string; + play: boolean; + setSize: (size: [number, number]) => void; +}) { + const { setFrameloop } = useThree(); + const texture = useVideoTexture(props.sourceUrl); + const data = texture.source.data; + + useEffect(() => { + data.pause(); // start paused + return () => { + setFrameloop('demand'); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const height = data.videoHeight; + const width = data.videoWidth; + useEffect(() => { + props.setSize([height, width]); + }, [height, width, props]); + + useEffect(() => { + if (props.play) { + data.play().catch((e) => { + console.log('Could not play: %s', e); + }); + } else { + data.pause(); + } + setFrameloop(props.play ? 'always' : 'demand'); + }, [data, props.play, setFrameloop]); + + // eslint-disable-next-line react/no-unknown-property + return ; +} + +function PlayButton(props: { clickPlay: () => void; text: string }) { + return ( + + + + ); +} + +export function VideoVisCanvas(props: VideoPlotProps) { + const { + title, + showGrid, + xCustomDomain, + setXCustomDomain, + xDomain, + xLabel, + yCustomDomain, + setYCustomDomain, + yDomain, + yLabel, + mode, + batonProps, + canSelect, + selectionMax, + selectionType, + updateSelection, + selections, + } = usePlotCustomizationContext(); + const { sourceURL, isImage = false } = { ...props }; + const [isPlaying, setPlaying] = useState(false); + + const interactionsConfig = createInteractionsConfig(mode); + const tooltipText = (x: number, y: number): ReactElement => { + return ( +

+ {x.toPrecision(8)}, {y.toPrecision(8)} +

+ ); + }; + + const [size, setSize] = useState([1, 1]); + + useEffect(() => { + setXCustomDomain([0, size[1]]); + setYCustomDomain([0, size[0]]); + }, [size, setXCustomDomain, setYCustomDomain]); + const xVisDomain = useMemo(() => { + return getVisDomain(xCustomDomain, xDomain); + }, [xCustomDomain, xDomain]); + + const yVisDomain = useMemo(() => { + return getVisDomain(yCustomDomain, yDomain); + }, [yCustomDomain, yDomain]); + + return ( + + + + setPlaying((p) => !p)} + text={isPlaying ? 'Pause' : 'Play'} + /> + + + {isImage ? ( + + ) : ( + + )} + + {canSelect && ( + + )} + + ); +} + +/** + * Render a video plot. + * @param {VideoPlotProps} props - The component props. + * @returns {JSX.Element} The rendered component. + */ +function VideoPlot(props: VideoPlotProps) { + return ( +
+ + {props.customToolbarChildren} + + +
+ ); +} + +export default VideoPlot; +export type { VideoPlotProps }; diff --git a/client/component/src/index.ts b/client/component/src/index.ts index b63c003..46c6875 100644 --- a/client/component/src/index.ts +++ b/client/component/src/index.ts @@ -21,6 +21,9 @@ export type { ImageData, ImagePlotProps } from './ImagePlot'; export { default as LinePlot } from './LinePlot'; export type { LineData, LineParams, LinePlotProps } from './LinePlot'; +export { default as VideoPlot } from './VideoPlot'; +export type { VideoPlotProps } from './VideoPlot'; + export { PlotCustomizationContextProvider, usePlotCustomizationContext, diff --git a/client/example/src/App.tsx b/client/example/src/App.tsx index a7cc798..ec4956f 100644 --- a/client/example/src/App.tsx +++ b/client/example/src/App.tsx @@ -131,6 +131,7 @@ class AppMain extends React.Component { ...heatmapProps.plotConfig, title: 'Sample Heatmap Plot (no toolbar)', }; + const config = { pvName: 'MY_DEVICE' }; const host = import.meta.env.VITE_WS_HOST ?? window.location.hostname; const port = import.meta.env.VITE_WS_PORT ?? window.location.port; @@ -157,6 +158,7 @@ class AppMain extends React.Component { uuid={this.uuid} hostname={host} port={port} + config={config} />
diff --git a/client/example/vite.config.ts b/client/example/vite.config.ts index dbbe5af..cc1a3ad 100644 --- a/client/example/vite.config.ts +++ b/client/example/vite.config.ts @@ -7,6 +7,7 @@ export default defineConfig({ base: './', define: { global: 'window', // this fixes global is not defined + 'process.env.DRAGGABLE_DEBUG': 'undefined', // fixes react-draggable issue in its log function }, build: { outDir: '../../server/example-client/sdist', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2df5a01..be683cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,11 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + static-module: ^3.0.4 + static-eval: ^2.1.1 + minimist: ^0.2.4 + importers: .: @@ -23,10 +28,10 @@ importers: version: 9.39.4 '@typescript-eslint/eslint-plugin': specifier: ^8.49.0 - version: 8.62.0(@typescript-eslint/parser@8.62.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) + version: 8.62.1(@typescript-eslint/parser@8.62.1(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.49.0 - version: 8.62.0(eslint@9.39.4)(typescript@5.9.3) + version: 8.62.1(eslint@9.39.4)(typescript@5.9.3) '@vitejs/plugin-react': specifier: ^5.2.0 version: 5.2.0(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) @@ -41,7 +46,7 @@ importers: version: 10.1.8(eslint@9.39.4) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.6(eslint-config-prettier@10.1.8(eslint@9.39.4))(eslint@9.39.4)(prettier@3.9.1) + version: 5.5.6(eslint-config-prettier@10.1.8(eslint@9.39.4))(eslint@9.39.4)(prettier@3.9.4) eslint-plugin-react: specifier: ^7.37.5 version: 7.37.5(eslint@9.39.4) @@ -56,7 +61,7 @@ importers: version: 17.7.0 prettier: specifier: ^3.7.4 - version: 3.9.1 + version: 3.9.4 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -107,7 +112,7 @@ importers: version: 4.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-icons: specifier: ^5.5.0 - version: 5.6.0(react@18.3.1) + version: 5.7.0(react@18.3.1) react-select: specifier: ^5.10.1 version: 5.10.2(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -119,14 +124,14 @@ importers: version: 1.0.35 devDependencies: '@h5web/lib': - specifier: ^16.0.0 - version: 16.0.1(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0))(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(@types/three@0.185.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0)(typescript@5.9.3)(use-sync-external-store@1.6.0(react@18.3.1)) + specifier: ^17.0.0 + version: 17.0.0(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1))(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(@types/three@0.185.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1)(typescript@5.9.3)(use-sync-external-store@1.6.0(react@18.3.1)) '@react-three/drei': specifier: ^9.122.0 - version: 9.122.0(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0))(@types/react@18.3.31)(@types/three@0.185.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0)(use-sync-external-store@1.6.0(react@18.3.1)) + version: 9.122.0(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1))(@types/react@18.3.31)(@types/three@0.185.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1)(use-sync-external-store@1.6.0(react@18.3.1)) '@react-three/fiber': specifier: ^8.18.0 - version: 8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0) + version: 8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1) '@types/cwise': specifier: ^1.0.6 version: 1.0.7 @@ -138,7 +143,7 @@ importers: version: 3.0.4 '@types/d3-random': specifier: ^3.0.3 - version: 3.0.3 + version: 3.0.4 '@types/d3-scale': specifier: ^4.0.9 version: 4.0.9 @@ -174,7 +179,7 @@ importers: version: 11.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) three: specifier: '>=0.182.0' - version: 0.185.0 + version: 0.185.1 typedoc: specifier: ^0.28.15 version: 0.28.19(typescript@5.9.3) @@ -207,7 +212,7 @@ importers: version: 11.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) three: specifier: '>=0.182.0' - version: 0.185.0 + version: 0.185.1 devDependencies: '@types/ndarray': specifier: ^1.0.14 @@ -235,20 +240,20 @@ importers: version: 18.3.1(react@18.3.1) react-icons: specifier: ^5.5.0 - version: 5.6.0(react@18.3.1) + version: 5.7.0(react@18.3.1) three: specifier: '>=0.182.0' - version: 0.185.0 + version: 0.185.1 devDependencies: '@storybook/addon-docs': specifier: ^10.3.3 - version: 10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) + version: 10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) '@storybook/addon-links': specifier: ^10.3.3 - version: 10.4.6(@types/react@18.3.31)(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10)) + version: 10.4.6(@types/react@18.3.31)(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10)) '@storybook/react-vite': specifier: ^10.3.3 - version: 10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3)(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) + version: 10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3)(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) '@types/ndarray': specifier: ^1.0.14 version: 1.0.14 @@ -265,14 +270,14 @@ importers: specifier: ^4.19.0 version: 4.19.0 '@types/three': - specifier: ^0.164.1 - version: 0.164.1 + specifier: '>=0.182.0' + version: 0.185.0 eslint-plugin-storybook: specifier: ^10.3.3 - version: 10.4.6(eslint@9.39.4)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3) + version: 10.4.6(eslint@9.39.4)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3) storybook: specifier: ^10.3.3 - version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10) + version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10) swagger-ui-react: specifier: ^5.31.0 version: 5.32.8(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -376,14 +381,14 @@ packages: '@dimforge/rapier3d-compat@0.12.0': resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==} - '@emnapi/core@1.11.0': - resolution: {integrity: sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==} + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} '@emnapi/core@1.9.2': resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} - '@emnapi/runtime@1.11.0': - resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==} + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} @@ -654,8 +659,8 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react@0.27.16': - resolution: {integrity: sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==} + '@floating-ui/react@0.27.19': + resolution: {integrity: sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog==} peerDependencies: react: '>=17.0.0' react-dom: '>=17.0.0' @@ -666,8 +671,8 @@ packages: '@gerrit0/mini-shiki@3.23.0': resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} - '@h5web/lib@16.0.1': - resolution: {integrity: sha512-uG8dAgKQKe6I08UZWGzc+d25qW4S97ILLgvMFHyy4fok4scEQClpVQN5VFBIydvrVJdu40bDgGW1DbeSOjRf/A==} + '@h5web/lib@17.0.0': + resolution: {integrity: sha512-w0g5XnyU4fauZqHbt7IuumJT3BaAbGXV8lAgtYeyxY1OCLme4hKB802u2Qvwn8Epjr/P3T27oITowc4OK/gDWw==} peerDependencies: '@react-three/fiber': 8.x '@types/react': 18.x @@ -895,106 +900,106 @@ packages: '@oxc-project/types@0.127.0': resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} - '@oxc-resolver/binding-android-arm-eabi@11.21.3': - resolution: {integrity: sha512-eNU11A2WNizh04v3uyaJCootrHIaS0B9aHYXvAvVnPNk4xYSjMUjHnhQ6dewPN2MRYDskV85d1N0Aw0WNWhcyg==} + '@oxc-resolver/binding-android-arm-eabi@11.23.0': + resolution: {integrity: sha512-8IJyWRLVAyhTfe9/TIEbQqSQnl5rUqYJrUOS6Dkr+Mq9FGHMxDGeiEmwkBqCvDP5KckpPh/GYSgbag66O6JsCw==} cpu: [arm] os: [android] - '@oxc-resolver/binding-android-arm64@11.21.3': - resolution: {integrity: sha512-8Q+ZjTLvn2dIcWsrmhdrEihm7q+ag/k+mkry7Z+t0QbbHaVxXQfvH9AewyVMh/WrpEKhQ3DDgx9fYbqeCpeOEw==} + '@oxc-resolver/binding-android-arm64@11.23.0': + resolution: {integrity: sha512-pprVojnNhHxupwTT2gdeUlkxll6XEvWWBk3oVicOSNVWQC99OBnDhMQDoirqnzrE1bScQSMS2JgPpqdlrhz/Fg==} cpu: [arm64] os: [android] - '@oxc-resolver/binding-darwin-arm64@11.21.3': - resolution: {integrity: sha512-wkh0qKZGHXVUDxFw3oA1TXnU2BDYY/r775oJflGeIr8uDPPoN2pk8gijQIzYRT6hoql/lg3+Tx/SaTn9e2/aGg==} + '@oxc-resolver/binding-darwin-arm64@11.23.0': + resolution: {integrity: sha512-mbIrWIMAJeytyee36OyUP5XH92TP7FaKaQ2m5AjokKy7STgjrhRt7SMXqpqLjhGm6Xn721Xmsg6H3Rtd9YQETw==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.21.3': - resolution: {integrity: sha512-HbNc23FAQYbuyDV2vBWMez4u4mrsm5RAkniGZAWqr6lYZ3N4beeqIb776jzwRl8qL2zRhHVXpUj97X0QgogVzg==} + '@oxc-resolver/binding-darwin-x64@11.23.0': + resolution: {integrity: sha512-UnIphmZ1LazUCr9DXWaKYWtKDefPMbgLsywaoYxRqVCNHhq4MM6d2q1Nz1i9Vzxt5i+cE2nRUYpAUHr/lijNYA==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.21.3': - resolution: {integrity: sha512-K6xNsTUPEUdfrn0+kbMq5nOUB5w1C5pavPQngt4TM2FpN91lP0PBe2srSpamb4d69O7h86oAi/qWX/kZNRSjkw==} + '@oxc-resolver/binding-freebsd-x64@11.23.0': + resolution: {integrity: sha512-aaZ/cSEYFkSxgS2hOrobT6RQcsWNviOX8dW6CEkVx2/UYkAf9MeHbjl3W0usWV53rVV//ndBdn2nb1y7jsu4lw==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3': - resolution: {integrity: sha512-VcFmOpcpWX1zoEy8M58tR2M9YxM+Z9RuQhqAx5q0CTmrruaP7Gveejg75hzd/5sg5nk9G3aLALEa3hE2FsmmTQ==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.23.0': + resolution: {integrity: sha512-IoJLvO5SjLSVMaq83BNTrPCb1FppvoJc1IhZ5CoUVl3PykUBku7D+LK1j0GSurhJcIc6zfjghsvaZNpq5ev6Mg==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3': - resolution: {integrity: sha512-quVoxFLBy43hWaQbbDtQNRwAX5vX76mv7n64icAtQcJ3eNgVeblqmkupF/hAneNthdqSlnd1sTjb3aQSaDPaCQ==} + '@oxc-resolver/binding-linux-arm-musleabihf@11.23.0': + resolution: {integrity: sha512-vskFpwg44T/LFsfjSCnVZ5ygcuqzPC1yUzVEiKa8BgHAQz0+QLQQW3EGWLPVi8EXFghzjR4EtgPBtOhCjU4jdw==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.21.3': - resolution: {integrity: sha512-X0AqNZgcD07Q4V3RDK18/vYOj/HQT/FnmEFGYS2jTWqY7JO13ryE3TEs3eAIgUJhBnNkpEaiXqz3VK8M7qQhWQ==} + '@oxc-resolver/binding-linux-arm64-gnu@11.23.0': + resolution: {integrity: sha512-//TcHVhrChyw5RYtgts6WO7KcWq9387c1Z5Zvhqpk/ktAbyaRYgBZrpSY1GDCFq50ASt6B6jhh+JxB1rB45IAg==} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-arm64-musl@11.21.3': - resolution: {integrity: sha512-YkaQnaKYdbuaXvRt5Qd0GpbihzVnyfR6z1SpYfIUC6RTu4NF7lDKPjVkYb+jRI2gedVO2rVpN35Y6akG6ud4Lw==} + '@oxc-resolver/binding-linux-arm64-musl@11.23.0': + resolution: {integrity: sha512-ZFqlwiTf7CXLLSGyAR9tYiO33LiaeIEXW+xm42d8mnUGpDgPltyrCGYtQezyMMEXvjhOgCz1X+i7sbDTJEx+bg==} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3': - resolution: {integrity: sha512-gB9HwhrPiFqUzDeEq+y/CgAijz1YdI6BnXz5GaH2Pa9cWdutchlkGFAiAuGb/PjVQpiK6NFKzFuztxrweoit7A==} + '@oxc-resolver/binding-linux-ppc64-gnu@11.23.0': + resolution: {integrity: sha512-oZ5LeN5+H1R19dRjTAxKrxQguH+AsemHcnthEfFxf4OjmBSty2doHLeSmMunKy3zpTHJQ3lh3Af+dNS+W6dYeA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3': - resolution: {integrity: sha512-zjDWBlYk8QGv0H8dsPUWqkfjYIIjG2TvspGkzXL0eImbgxtZorA/klKeHyolevoT3Kvbi+1iMr9Lhrh7jf54Og==} + '@oxc-resolver/binding-linux-riscv64-gnu@11.23.0': + resolution: {integrity: sha512-O4ciFDyX5ebQd0qkb1bjAIg8IEfiLT03GbSeylwlwlUMK9KwBWaALwrxSbc0Msaz4U6iPj+T9eRXpD5mxBfmvA==} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-musl@11.21.3': - resolution: {integrity: sha512-4UfsQvacV388y1zpXL7C1x1FNYaV52JtuNRiuzrfQA2z1z6ElVrsidkGsrvQ5EgeSq1Pj7kaKqrgGkvFuxJ/tw==} + '@oxc-resolver/binding-linux-riscv64-musl@11.23.0': + resolution: {integrity: sha512-P3o8Y9kISYjcxadmbO+94ThRwLhwGuDAbA7dcdd4+YLpfeF+mmobz8fXf4NmSdfSqjyRSkceJDBRZha9NVYkiQ==} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-s390x-gnu@11.21.3': - resolution: {integrity: sha512-b5uH+HKH0MP5mNBYaK75SKsJbw52URqrx2LavYdq6wb0l3ExAG5niYRP9DWUNHdKilpaBVM2bXk9HNWrH3ew7Q==} + '@oxc-resolver/binding-linux-s390x-gnu@11.23.0': + resolution: {integrity: sha512-oj03m1E3RmTFczKhcKJDzHaEDKJnPIsDcQFVxBJsSdXGSuIPdt5TvcM332FfMQgzI6yDJqyl4InrnFfXrmUTKQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-gnu@11.21.3': - resolution: {integrity: sha512-PjYlmilBpNRh2ntXNYAK3Am5w/nPfEpnU/96iNx7CI8EzAn12J4JRiec63wHJTH31nLoCNxBg/829pN+3CfG3Q==} + '@oxc-resolver/binding-linux-x64-gnu@11.23.0': + resolution: {integrity: sha512-BqJxbSC8FdP7mSuSpRePTGHm0hXWV+dfz//f7SjsteZncLaBgWTBmi/OZNv7sX6CyG/Pt/eJkPorP+DkMOhMwQ==} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-musl@11.21.3': - resolution: {integrity: sha512-QTBAb7JuHlZ7JUEyM8UiQi2f7m/L4swBhP2TNpYIDc9Wp/wRw1G/8sl6i13aIzQAXH7LKIm294LeOHd0lQR8zA==} + '@oxc-resolver/binding-linux-x64-musl@11.23.0': + resolution: {integrity: sha512-utmw+VmUrW4K8LI5/6jhg4aGYKJHOIjQ9syYOOA6pF3w7haKu4r4enTe2U0C04/HbUvkq/Zif43xFsKW1Pnq9w==} cpu: [x64] os: [linux] libc: [musl] - '@oxc-resolver/binding-openharmony-arm64@11.21.3': - resolution: {integrity: sha512-4j1DFwjwv36ec9kds0jU/ucQ5Ha4ERO/H95BxR5JFf0kqUUAJ1kwII7XhTc1vZrkdJkvLGC9Q2MbpObpum8RBg==} + '@oxc-resolver/binding-openharmony-arm64@11.23.0': + resolution: {integrity: sha512-V6lbRrthHa4TbvsLjPtg+EkXT1tRY+s4I8rYLXUfiHlZzGx3sLv1EH9CEOOevjvUYHLsbe/gqCIc73XnQfPb9A==} cpu: [arm64] os: [openharmony] - '@oxc-resolver/binding-wasm32-wasi@11.21.3': - resolution: {integrity: sha512-i8oluoel5kru/j1WNrjmQSiA3GQ7wvIYVR1IwIoZtKogAhya2iub+ZKIeSIkcJOrnzQ18Tzl/F+kL3fYOxZLvA==} + '@oxc-resolver/binding-wasm32-wasi@11.23.0': + resolution: {integrity: sha512-gRoOxQPdnAmIAjxcuQNBxfihvx+wjTaQM/9/eP12xwnGNawOG/+Zz9RHN4WNSxT45b5CrscK4NB8aPh+oZQXAQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.21.3': - resolution: {integrity: sha512-M/8dw8dD6aOs+NlPJax401CZB9I7Aut84isQLgALGGwke4Afvw+/7yYhZb94yXf6t2sPLhQLmSmtSV+2FhsOWg==} + '@oxc-resolver/binding-win32-arm64-msvc@11.23.0': + resolution: {integrity: sha512-CgTGMYsJVe1eUiCdJTpGw21svXw79ITsemN1h0hcNkiswasDbN5MoibSLY+gRMWP5syfEz5iffrjZnwEP8xeUA==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@11.21.3': - resolution: {integrity: sha512-H7BCt/VnS9hnmMp42eGhZ99izSCRvlnWwy/N71K1/J8QoExwY4262Z8QiEkMDtduRJrztayDxETTckmUuAVL9Q==} + '@oxc-resolver/binding-win32-x64-msvc@11.23.0': + resolution: {integrity: sha512-gUGJpr+Rn6zMxm5juApV0K3U845i8t47o8k+rbO0BHbi4PoJIfSPeQmrE2dgohQm2g5k6iviNFyXCGqvmaYUpw==} cpu: [x64] os: [win32] @@ -1588,8 +1593,8 @@ packages: '@types/d3-path@1.0.11': resolution: {integrity: sha512-4pQMp8ldf7UaB/gR8Fvvy69psNHkTpD/pVw3vmEi8iZAB9EPMBruB1JvHO4BIq9QkUUd2lV1F5YXpMNj7JPBpw==} - '@types/d3-random@3.0.3': - resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} + '@types/d3-random@3.0.4': + resolution: {integrity: sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==} '@types/d3-scale-chromatic@3.1.0': resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} @@ -1696,9 +1701,6 @@ packages: '@types/swagger-ui-react@4.19.0': resolution: {integrity: sha512-uScp1xkLZJej0bt3/lO4U11ywWEBnI5CFCR0tqp+5Rvxl1Mj1v6VkGED0W70jJwqlBvbD+/a6bDiK8rjepCr8g==} - '@types/three@0.164.1': - resolution: {integrity: sha512-dR/trWDhyaNqJV38rl1TonlCA9DpnX7OPYDWD81bmBGn/+uEc3+zNalFxQcV4FlPTeDBhCY3SFWKvK6EJwL88g==} - '@types/three@0.185.0': resolution: {integrity: sha512-O2Uy8Cj4Nonr8dWUUbifMdPe8B0Mq7EdOHb89S4+kjUw/KhbjTZrUuYlrQ1bpUKG+EP9QJnN7qNxbHGlGoLHMA==} @@ -1720,63 +1722,63 @@ packages: '@types/webxr@0.5.24': resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==} - '@typescript-eslint/eslint-plugin@8.62.0': - resolution: {integrity: sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==} + '@typescript-eslint/eslint-plugin@8.62.1': + resolution: {integrity: sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.62.0 + '@typescript-eslint/parser': ^8.62.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.62.0': - resolution: {integrity: sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==} + '@typescript-eslint/parser@8.62.1': + resolution: {integrity: sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.62.0': - resolution: {integrity: sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==} + '@typescript-eslint/project-service@8.62.1': + resolution: {integrity: sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.62.0': - resolution: {integrity: sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==} + '@typescript-eslint/scope-manager@8.62.1': + resolution: {integrity: sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.62.0': - resolution: {integrity: sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==} + '@typescript-eslint/tsconfig-utils@8.62.1': + resolution: {integrity: sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.62.0': - resolution: {integrity: sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==} + '@typescript-eslint/type-utils@8.62.1': + resolution: {integrity: sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.62.0': - resolution: {integrity: sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==} + '@typescript-eslint/types@8.62.1': + resolution: {integrity: sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.62.0': - resolution: {integrity: sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==} + '@typescript-eslint/typescript-estree@8.62.1': + resolution: {integrity: sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.62.0': - resolution: {integrity: sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==} + '@typescript-eslint/utils@8.62.1': + resolution: {integrity: sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.62.0': - resolution: {integrity: sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==} + '@typescript-eslint/visitor-keys@8.62.1': + resolution: {integrity: sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@use-gesture/core@10.3.1': @@ -1927,14 +1929,18 @@ packages: '@webcontainer/env@1.1.1': resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} - '@webgpu/types@0.1.69': - resolution: {integrity: sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-node@1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + + acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} @@ -1981,10 +1987,6 @@ packages: resolution: {integrity: sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==} engines: {node: '>=0.10.0'} - amdefine@1.0.1: - resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} - engines: {node: '>=0.4.2'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2017,6 +2019,9 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} + array-from@2.1.1: + resolution: {integrity: sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==} + array-includes@3.1.9: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} @@ -2083,8 +2088,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.40: - resolution: {integrity: sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==} + baseline-browser-mapping@2.10.42: + resolution: {integrity: sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==} engines: {node: '>=6.0.0'} hasBin: true @@ -2100,8 +2105,8 @@ packages: brace-expansion@2.1.1: resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} - brace-expansion@5.0.6: - resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + brace-expansion@5.0.7: + resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} engines: {node: 18 || 20 || >=22} browserslist@4.28.4: @@ -2148,8 +2153,8 @@ packages: peerDependencies: three: '>=0.126.1' - caniuse-lite@1.0.30001799: - resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} + caniuse-lite@1.0.30001800: + resolution: {integrity: sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==} center-align@0.1.3: resolution: {integrity: sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==} @@ -2325,6 +2330,9 @@ packages: resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} engines: {node: '>=0.12'} + dash-ast@2.0.1: + resolution: {integrity: sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -2451,11 +2459,11 @@ packages: dup@1.0.0: resolution: {integrity: sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==} - duplexer2@0.0.2: - resolution: {integrity: sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==} + duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - electron-to-chromium@1.5.380: - resolution: {integrity: sha512-W6d5AbuEoRayO447cqrg6lKJIlscgRnnxOZl/08kfV71BQDoEBC7Wwis68z87LjyK6f4kWyTaubuDbhHKrZkbA==} + electron-to-chromium@1.5.387: + resolution: {integrity: sha512-TaxwufTFDufvPEoXdhwVrA3UdFWBeWGkYoJ1K8ldF1xe6gKfth6iRNS5lTQ5JPNOHdGQm8PT1QYKUqFLCiUefQ==} empathic@2.0.1: resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} @@ -2492,8 +2500,8 @@ packages: resolution: {integrity: sha512-0PuBxFi+4uPanB97iDxCLWuHeYud2FALrw5HFZGtAF38UpJDbDC8frwp2cnDyae692CQ0dou60UwWfhgsa4U/g==} engines: {node: '>= 0.4'} - es-module-lexer@2.1.0: - resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + es-module-lexer@2.3.0: + resolution: {integrity: sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==} es-object-atoms@1.1.2: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} @@ -2518,6 +2526,13 @@ packages: es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + es6-map@0.1.5: + resolution: {integrity: sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==} + + es6-set@0.1.6: + resolution: {integrity: sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==} + engines: {node: '>=0.12'} + es6-symbol@3.1.4: resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} engines: {node: '>=0.12'} @@ -2535,14 +2550,14 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - escodegen@0.0.28: - resolution: {integrity: sha512-6ioQhg16lFs5c7XJlJFXIDxBjO4yRvXC9yK6dLNNGuhI3a/fJukHanPF6qtpjGDgAFzI8Wuq3PSIarWmaOq/5A==} - engines: {node: '>=0.4.0'} + escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} hasBin: true - escodegen@1.3.3: - resolution: {integrity: sha512-z9FWgKc48wjMlpzF5ymKS1AF8OIgnKLp9VyN7KbdtyrP/9lndwUFqCtMm+TAJmJf7KJFFYc4cFJfVTTGkKEwsA==} - engines: {node: '>=0.10.0'} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} hasBin: true eslint-config-prettier@10.1.8: @@ -2622,16 +2637,6 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esprima@1.0.4: - resolution: {integrity: sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==} - engines: {node: '>=0.4.0'} - hasBin: true - - esprima@1.1.1: - resolution: {integrity: sha512-qxxB994/7NtERxgXdFgLHIs9M6bhLXc6qtUmWZ3L8+gTQ9qaoyki2887P2IqAYsoENyr8SUbTutStDniOHSDHg==} - engines: {node: '>=0.4.0'} - hasBin: true - esprima@1.2.5: resolution: {integrity: sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==} engines: {node: '>=0.4.0'} @@ -2650,28 +2655,23 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} - estraverse@1.3.2: - resolution: {integrity: sha512-OkbCPVUu8D9tbsLcUR+CKFRBbhZlogmkbWaP3BPERlkqzWL5Q6IdTz6eUk+b5cid2MTaCqJb2nNRGoJ8TpfPrg==} - engines: {node: '>=0.4.0'} - - estraverse@1.5.1: - resolution: {integrity: sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==} - engines: {node: '>=0.4.0'} + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-is-function@1.0.0: + resolution: {integrity: sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==} + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@1.0.0: - resolution: {integrity: sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==} - engines: {node: '>=0.10.0'} - esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -2689,10 +2689,6 @@ packages: ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - falafel@2.2.5: - resolution: {integrity: sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==} - engines: {node: '>=0.4.0'} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2708,8 +2704,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.1.2: - resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + fast-uri@3.1.3: + resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} @@ -2768,8 +2764,8 @@ packages: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} - fs-extra@11.3.5: - resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} + fs-extra@11.3.6: + resolution: {integrity: sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==} engines: {node: '>=14.14'} fsevents@2.3.3: @@ -2795,6 +2791,9 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-assigned-identifiers@1.2.0: + resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -3092,9 +3091,6 @@ packages: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -3180,6 +3176,10 @@ packages: resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==} engines: {node: '>=0.10.0'} + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3190,8 +3190,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - linkify-it@5.0.1: - resolution: {integrity: sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==} + linkify-it@5.0.2: + resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} local-pkg@1.2.1: resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} @@ -3244,11 +3244,14 @@ packages: '@types/three': '>=0.134.0' three: '>=0.134.0' + magic-string@0.25.1: + resolution: {integrity: sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==} + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - markdown-it@14.2.0: - resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} + markdown-it@14.3.0: + resolution: {integrity: sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==} hasBin: true math-expression-evaluator@1.4.0: @@ -3264,14 +3267,14 @@ packages: memoize-one@6.0.0: resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + merge-source-map@1.0.4: + resolution: {integrity: sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==} + meshline@3.3.1: resolution: {integrity: sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ==} peerDependencies: three: '>=0.137' - meshoptimizer@0.18.1: - resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} - meshoptimizer@1.1.1: resolution: {integrity: sha512-oRFNWJRDA/WTrVj7NWvqa5HqE1t9MYDj2VaWirQCzCCrAd2GHrqR/sQezCxiWATPNlKTcRaPRHPJwIRoPBAp5g==} @@ -3309,11 +3312,8 @@ packages: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} - minimist@0.0.8: - resolution: {integrity: sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minimist@0.2.4: + resolution: {integrity: sha512-Pkrrm8NjyQ8yVt8Am9M+yUt74zE3iokhzbG1bFVNjLB92vwM71hf40RkEsryg98BujhVOncKm/C1xROxZ030LQ==} minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} @@ -3387,16 +3387,10 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@0.4.0: - resolution: {integrity: sha512-8WvkvUZiKAjjsy/63rJjA7jw9uyF0CLVLjBKEfnPHE3Jxvs1LgwqL2OmJN+LliIX1vrzKW+AAu02Cc+xv27ncQ==} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - object-keys@0.4.0: - resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} - object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -3433,6 +3427,10 @@ packages: resolution: {integrity: sha512-DPlCms3KKEbjVQb0spV6Awfn6UWNheuG/+folQPzh/wUaKwuqvj8zt5gagD7qoyxtE03cIiKPgLFS3Q8Bz00uQ==} engines: {node: '>=12.20.0'} + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -3445,8 +3443,8 @@ packages: resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-resolver@11.21.3: - resolution: {integrity: sha512-2Mx3fKQz7+xgrBONjsxOgCGtMHOn38/HxMzW1I5efwXB5a4lRN0Vp40gYUJFBWJslcrvwoofTrqoTnLbwTd3pA==} + oxc-resolver@11.23.0: + resolution: {integrity: sha512-f0+l598CJMOLnYPXsXxttJALH0ljtivdRMKtvHhxRuWa5FYmw5+qODARl8oYjMC/brpzKcrpdORsOBrTqhBZ9A==} p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} @@ -3499,8 +3497,8 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} pkg-types@1.3.1: @@ -3513,13 +3511,17 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + postcss@8.5.16: + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} engines: {node: ^10 || ^12 || >=14} potpack@1.0.2: resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==} + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3528,8 +3530,8 @@ packages: resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} - prettier@3.9.1: - resolution: {integrity: sha512-ppiDo2CSwexck1eyZUwJHg/N3nf1+6IRCv7W/VJ5vaLnVCmB7+3CdRfMwoCHBBX6xTrREDTksZ4OZl5SSf4zXA==} + prettier@3.9.4: + resolution: {integrity: sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==} engines: {node: '>=14'} hasBin: true @@ -3571,9 +3573,6 @@ packages: querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - quote-stream@0.0.0: - resolution: {integrity: sha512-m4VtvjAMx00wgAS6eOy50ZDat1EBQeFKBIrtF/oxUt0MenEI33y7runJcRiOihc+JBBIt2aFFJhILIh4e9shJA==} - ramda-adjunct@5.1.0: resolution: {integrity: sha512-8qCpl2vZBXEJyNbi4zqcgdfHtcdsWjOGbiNSEnEBrM6Y0OKOT8UxJbIVGm1TIcjaSu2MxaWcgtsNlKlCk7o7qg==} engines: {node: '>=0.10.3'} @@ -3636,8 +3635,8 @@ packages: peerDependencies: react: '*' - react-icons@5.6.0: - resolution: {integrity: sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==} + react-icons@5.7.0: + resolution: {integrity: sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw==} peerDependencies: react: '*' @@ -3667,8 +3666,8 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-keyed-flatten-children@5.0.1: - resolution: {integrity: sha512-bZhTocogwo+q6zz3+HAQexckXhm+Ko8CaujKO6A138kVpRtF4xN8OmLE7F1Qv9YcDJrZ8gPXkJdM/VgcKjJimg==} + react-keyed-flatten-children@5.1.1: + resolution: {integrity: sha512-+DXMhjG0nbKq7AuWvAp1NUWCcg4jsUuBCdtDW8ySl45m3+MTjbXbR+TxvoM/1dTH7reSDqksBipkc/e/gpUnDg==} peerDependencies: react: '>=18.0.0' react-is: '>=18.0.0' @@ -3747,8 +3746,8 @@ packages: react-use-websocket@4.13.0: resolution: {integrity: sha512-anMuVoV//g2N76Wxqvqjjo1X48r9Np3y1/gMl7arX84tAPXdy5R7sB5lO5hvCzQRYjqXwV8XMAiEBOUbyrZFrw==} - react-window@2.2.1: - resolution: {integrity: sha512-jrUMKDLW1B4yX4OU0QjdytGgWIg6wqWfiTe86lUhFsCUltkNNB/zYxFU0DTKAzBOMRbkpLVWS1IkLvQeO4L7nw==} + react-window@2.2.3: + resolution: {integrity: sha512-gTRqQYC8ojbiXyd9duYFiSn2TJw0ROXCgYjenOvNKITWzK0m0eCvkUsEUM08xvydkMh7ncp+LE0uS3DeNGZxnQ==} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 @@ -3757,12 +3756,6 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} - readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} - - readable-stream@1.1.14: - resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} - readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -3879,6 +3872,9 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scope-analyzer@2.1.2: + resolution: {integrity: sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3952,10 +3948,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map@0.1.43: - resolution: {integrity: sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==} - engines: {node: '>=0.8.0'} - source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} @@ -3964,9 +3956,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -3977,11 +3969,11 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - static-eval@0.2.4: - resolution: {integrity: sha512-6dWWPfa/0+1zULdQi7ssT5EQZHsGK8LygBzhE/HdafNCo4e/Ibt7vLPfxBw9VcdVV+t0ARtN4ZAJKtApVc0A5Q==} + static-eval@2.1.1: + resolution: {integrity: sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==} - static-module@1.5.0: - resolution: {integrity: sha512-XTj7pQOHT33l77lK/Pu8UXqzI44C6LYAqwAc9hLTTESHRqJAFudBpReuopFPpoRr5CtOoSmGfFQC6FPlbDnyCw==} + static-module@3.0.4: + resolution: {integrity: sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==} stats-gl@2.4.2: resolution: {integrity: sha512-g5O9B0hm9CvnM36+v7SFl39T7hmAlv541tU81ME8YeSb3i1CIP5/QdDeSB3A0la0bKNHpxpwxOVRo2wFTYEosQ==} @@ -4037,9 +4029,6 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} - string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -4107,11 +4096,11 @@ packages: peerDependencies: three: '>=0.128.0' - three@0.185.0: - resolution: {integrity: sha512-+yRrcRO2iZa8uzvNNl0d7cL4huhgKgBvVJ0njcTe8xFqZ6DMAFZdCKDP91SEAuj25bNAj7k1QQdf+srZywVK6w==} + three@0.185.1: + resolution: {integrity: sha512-5aojFCXKwnjBRZvUnt3WFfEcvUJgkN5LlijRFN95hMy8WVkG4I0QNcJE+OuWvuJ0bOdStrbfXn0pkd6/QyiAlg==} - through2@0.4.2: - resolution: {integrity: sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==} + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -4199,6 +4188,10 @@ packages: tunnel-rat@0.1.2: resolution: {integrity: sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==} + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -4506,8 +4499,8 @@ packages: xml@1.0.1: resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} - xtend@2.1.2: - resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} yaeti@0.0.6: @@ -4570,8 +4563,8 @@ packages: react: optional: true - zustand@5.0.14: - resolution: {integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==} + zustand@5.0.12: + resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -4588,8 +4581,8 @@ packages: use-sync-external-store: optional: true - zustand@5.0.8: - resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==} + zustand@5.0.14: + resolution: {integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -4730,7 +4723,7 @@ snapshots: '@dimforge/rapier3d-compat@0.12.0': {} - '@emnapi/core@1.11.0': + '@emnapi/core@1.11.1': dependencies: '@emnapi/wasi-threads': 1.2.2 tslib: 2.8.1 @@ -4742,7 +4735,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.11.0': + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 optional: true @@ -4975,7 +4968,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react@0.27.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@floating-ui/react@0.27.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@floating-ui/utils': 0.2.11 @@ -4993,11 +4986,11 @@ snapshots: '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 - '@h5web/lib@16.0.1(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0))(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(@types/three@0.185.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0)(typescript@5.9.3)(use-sync-external-store@1.6.0(react@18.3.1))': + '@h5web/lib@17.0.0(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1))(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(@types/three@0.185.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1)(typescript@5.9.3)(use-sync-external-store@1.6.0(react@18.3.1))': dependencies: - '@floating-ui/react': 0.27.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/react': 0.27.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-hookz/web': 25.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-three/fiber': 8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0) + '@react-three/fiber': 8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1) '@types/d3-array': 3.2.2 '@types/d3-color': 3.1.3 '@types/d3-format': 3.0.4 @@ -5014,7 +5007,7 @@ snapshots: '@visx/tooltip': 3.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) d3-array: 3.2.4 d3-color: 3.1.0 - d3-format: 3.1.0 + d3-format: 3.1.2 d3-interpolate: 3.0.1 d3-scale: 4.0.2 d3-scale-chromatic: 3.1.0 @@ -5024,12 +5017,12 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-icons: 5.4.0(react@18.3.1) react-is: 18.3.1 - react-keyed-flatten-children: 5.0.1(react-is@18.3.1)(react@18.3.1) + react-keyed-flatten-children: 5.1.1(react-is@18.3.1)(react@18.3.1) react-measure: 2.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-slider: 2.0.6(react@18.3.1) - react-window: 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - three: 0.185.0 - zustand: 5.0.8(@types/react@18.3.31)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)) + react-window: 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + three: 0.185.1 + zustand: 5.0.12(@types/react@18.3.31)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)) optionalDependencies: '@types/react': 18.3.31 '@types/react-dom': 18.3.7(@types/react@18.3.31) @@ -5126,15 +5119,15 @@ snapshots: '@microsoft/tsdoc@0.16.0': {} - '@monogrid/gainmap-js@3.4.0(three@0.185.0)': + '@monogrid/gainmap-js@3.4.0(three@0.185.1)': dependencies: promise-worker-transferable: 1.0.4 - three: 0.185.0 + three: 0.185.1 - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@emnapi/core': 1.11.0 - '@emnapi/runtime': 1.11.0 + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 '@tybys/wasm-util': 0.10.3 optional: true @@ -5211,65 +5204,65 @@ snapshots: '@oxc-project/types@0.127.0': {} - '@oxc-resolver/binding-android-arm-eabi@11.21.3': + '@oxc-resolver/binding-android-arm-eabi@11.23.0': optional: true - '@oxc-resolver/binding-android-arm64@11.21.3': + '@oxc-resolver/binding-android-arm64@11.23.0': optional: true - '@oxc-resolver/binding-darwin-arm64@11.21.3': + '@oxc-resolver/binding-darwin-arm64@11.23.0': optional: true - '@oxc-resolver/binding-darwin-x64@11.21.3': + '@oxc-resolver/binding-darwin-x64@11.23.0': optional: true - '@oxc-resolver/binding-freebsd-x64@11.21.3': + '@oxc-resolver/binding-freebsd-x64@11.23.0': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.23.0': optional: true - '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3': + '@oxc-resolver/binding-linux-arm-musleabihf@11.23.0': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.21.3': + '@oxc-resolver/binding-linux-arm64-gnu@11.23.0': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.21.3': + '@oxc-resolver/binding-linux-arm64-musl@11.23.0': optional: true - '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3': + '@oxc-resolver/binding-linux-ppc64-gnu@11.23.0': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3': + '@oxc-resolver/binding-linux-riscv64-gnu@11.23.0': optional: true - '@oxc-resolver/binding-linux-riscv64-musl@11.21.3': + '@oxc-resolver/binding-linux-riscv64-musl@11.23.0': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.21.3': + '@oxc-resolver/binding-linux-s390x-gnu@11.23.0': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.21.3': + '@oxc-resolver/binding-linux-x64-gnu@11.23.0': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.21.3': + '@oxc-resolver/binding-linux-x64-musl@11.23.0': optional: true - '@oxc-resolver/binding-openharmony-arm64@11.21.3': + '@oxc-resolver/binding-openharmony-arm64@11.23.0': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.21.3': + '@oxc-resolver/binding-wasm32-wasi@11.23.0': dependencies: - '@emnapi/core': 1.11.0 - '@emnapi/runtime': 1.11.0 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0) + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.21.3': + '@oxc-resolver/binding-win32-arm64-msvc@11.23.0': optional: true - '@oxc-resolver/binding-win32-x64-msvc@11.21.3': + '@oxc-resolver/binding-win32-x64-msvc@11.23.0': optional: true '@pkgr/core@0.3.6': {} @@ -5307,42 +5300,42 @@ snapshots: '@react-spring/types': 9.7.5 react: 18.3.1 - '@react-spring/three@9.7.5(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0))(react@18.3.1)(three@0.185.0)': + '@react-spring/three@9.7.5(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1))(react@18.3.1)(three@0.185.1)': dependencies: '@react-spring/animated': 9.7.5(react@18.3.1) '@react-spring/core': 9.7.5(react@18.3.1) '@react-spring/shared': 9.7.5(react@18.3.1) '@react-spring/types': 9.7.5 - '@react-three/fiber': 8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0) + '@react-three/fiber': 8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1) react: 18.3.1 - three: 0.185.0 + three: 0.185.1 '@react-spring/types@9.7.5': {} - '@react-three/drei@9.122.0(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0))(@types/react@18.3.31)(@types/three@0.185.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0)(use-sync-external-store@1.6.0(react@18.3.1))': + '@react-three/drei@9.122.0(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1))(@types/react@18.3.31)(@types/three@0.185.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1)(use-sync-external-store@1.6.0(react@18.3.1))': dependencies: '@babel/runtime': 7.29.7 '@mediapipe/tasks-vision': 0.10.17 - '@monogrid/gainmap-js': 3.4.0(three@0.185.0) - '@react-spring/three': 9.7.5(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0))(react@18.3.1)(three@0.185.0) - '@react-three/fiber': 8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0) + '@monogrid/gainmap-js': 3.4.0(three@0.185.1) + '@react-spring/three': 9.7.5(@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1))(react@18.3.1)(three@0.185.1) + '@react-three/fiber': 8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1) '@use-gesture/react': 10.3.1(react@18.3.1) - camera-controls: 2.10.1(three@0.185.0) + camera-controls: 2.10.1(three@0.185.1) cross-env: 7.0.3 detect-gpu: 5.0.70 glsl-noise: 0.0.0 hls.js: 1.6.16 - maath: 0.10.8(@types/three@0.185.0)(three@0.185.0) - meshline: 3.3.1(three@0.185.0) + maath: 0.10.8(@types/three@0.185.0)(three@0.185.1) + meshline: 3.3.1(three@0.185.1) react: 18.3.1 react-composer: 5.0.3(react@18.3.1) - stats-gl: 2.4.2(@types/three@0.185.0)(three@0.185.0) + stats-gl: 2.4.2(@types/three@0.185.0)(three@0.185.1) stats.js: 0.17.0 suspend-react: 0.1.3(react@18.3.1) - three: 0.185.0 - three-mesh-bvh: 0.7.8(three@0.185.0) - three-stdlib: 2.36.1(three@0.185.0) - troika-three-text: 0.52.4(three@0.185.0) + three: 0.185.1 + three-mesh-bvh: 0.7.8(three@0.185.1) + three-stdlib: 2.36.1(three@0.185.1) + troika-three-text: 0.52.4(three@0.185.1) tunnel-rat: 0.1.2(@types/react@18.3.31)(react@18.3.1) utility-types: 3.11.0 zustand: 5.0.14(@types/react@18.3.31)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)) @@ -5354,7 +5347,7 @@ snapshots: - immer - use-sync-external-store - '@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.0)': + '@react-three/fiber@8.18.0(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.185.1)': dependencies: '@babel/runtime': 7.29.7 '@types/react-reconciler': 0.26.7 @@ -5367,7 +5360,7 @@ snapshots: react-use-measure: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) scheduler: 0.21.0 suspend-react: 0.1.3(react@18.3.1) - three: 0.185.0 + three: 0.185.1 zustand: 3.7.2(react@18.3.1) optionalDependencies: react-dom: 18.3.1(react@18.3.1) @@ -5380,7 +5373,7 @@ snapshots: dependencies: '@types/estree': 1.0.9 estree-walker: 2.0.2 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: rollup: 4.62.2 @@ -5464,7 +5457,7 @@ snapshots: ajv: 8.18.0 ajv-draft-04: 1.0.0(ajv@8.18.0) ajv-formats: 3.0.1(ajv@8.18.0) - fs-extra: 11.3.5 + fs-extra: 11.3.6 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.12 @@ -5522,15 +5515,15 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@storybook/addon-docs@10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0))': + '@storybook/addon-docs@10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0))': dependencies: '@mdx-js/react': 3.1.1(@types/react@18.3.31)(react@18.3.1) - '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) + '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) '@storybook/icons': 2.1.0(react@18.3.1) - '@storybook/react-dom-shim': 10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10)) + '@storybook/react-dom-shim': 10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10) ts-dedent: 2.3.0 optionalDependencies: '@types/react': 18.3.31 @@ -5541,18 +5534,18 @@ snapshots: - vite - webpack - '@storybook/addon-links@10.4.6(@types/react@18.3.31)(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))': + '@storybook/addon-links@10.4.6(@types/react@18.3.31)(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10) optionalDependencies: '@types/react': 18.3.31 react: 18.3.1 - '@storybook/builder-vite@10.4.6(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0))': + '@storybook/builder-vite@10.4.6(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0))': dependencies: - '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10) + '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10) ts-dedent: 2.3.0 vite: 7.3.6(@types/node@20.19.43)(yaml@2.9.0) transitivePeerDependencies: @@ -5560,9 +5553,9 @@ snapshots: - rollup - webpack - '@storybook/csf-plugin@10.4.6(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0))': + '@storybook/csf-plugin@10.4.6(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0))': dependencies: - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10) unplugin: 2.3.11 optionalDependencies: esbuild: 0.28.1 @@ -5575,28 +5568,28 @@ snapshots: dependencies: react: 18.3.1 - '@storybook/react-dom-shim@10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))': + '@storybook/react-dom-shim@10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10) optionalDependencies: '@types/react': 18.3.31 '@types/react-dom': 18.3.7(@types/react@18.3.31) - '@storybook/react-vite@10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3)(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0))': + '@storybook/react-vite@10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3)(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@5.9.3)(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) '@rollup/pluginutils': 5.4.0(rollup@4.62.2) - '@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) - '@storybook/react': 10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3) + '@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(rollup@4.62.2)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0)) + '@storybook/react': 10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3) empathic: 2.0.1 magic-string: 0.30.21 react: 18.3.1 react-docgen: 8.0.3 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.12 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10) tsconfig-paths: 4.2.0 vite: 7.3.6(@types/node@20.19.43)(yaml@2.9.0) transitivePeerDependencies: @@ -5608,15 +5601,15 @@ snapshots: - typescript - webpack - '@storybook/react@10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3)': + '@storybook/react@10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10)) + '@storybook/react-dom-shim': 10.4.6(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10)) react: 18.3.1 react-docgen: 8.0.3 react-docgen-typescript: 2.4.0(typescript@5.9.3) react-dom: 18.3.1(react@18.3.1) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10) optionalDependencies: '@types/react': 18.3.31 '@types/react-dom': 18.3.7(@types/react@18.3.31) @@ -6166,7 +6159,7 @@ snapshots: '@types/d3-path@1.0.11': {} - '@types/d3-random@3.0.3': {} + '@types/d3-random@3.0.4': {} '@types/d3-scale-chromatic@3.1.0': {} @@ -6263,14 +6256,6 @@ snapshots: dependencies: '@types/react': 18.3.31 - '@types/three@0.164.1': - dependencies: - '@tweenjs/tween.js': 23.1.3 - '@types/stats.js': 0.17.4 - '@types/webxr': 0.5.24 - fflate: 0.8.3 - meshoptimizer: 0.18.1 - '@types/three@0.185.0': dependencies: '@dimforge/rapier3d-compat': 0.12.0 @@ -6295,14 +6280,14 @@ snapshots: '@types/webxr@0.5.24': {} - '@typescript-eslint/eslint-plugin@8.62.0(@typescript-eslint/parser@8.62.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.62.0(eslint@9.39.4)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.62.0 - '@typescript-eslint/type-utils': 8.62.0(eslint@9.39.4)(typescript@5.9.3) - '@typescript-eslint/utils': 8.62.0(eslint@9.39.4)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/parser': 8.62.1(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/type-utils': 8.62.1(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/utils': 8.62.1(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.62.1 eslint: 9.39.4 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6311,41 +6296,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.62.0(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/parser@8.62.1(eslint@9.39.4)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.62.0 - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/typescript-estree': 8.62.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.62.1 debug: 4.4.3 eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.62.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.62.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@5.9.3) - '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@5.9.3) + '@typescript-eslint/types': 8.62.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.62.0': + '@typescript-eslint/scope-manager@8.62.1': dependencies: - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/visitor-keys': 8.62.1 - '@typescript-eslint/tsconfig-utils@8.62.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.62.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.62.0(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.62.1(eslint@9.39.4)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/typescript-estree': 8.62.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.62.0(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.62.1(eslint@9.39.4)(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.4 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -6353,14 +6338,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.62.0': {} + '@typescript-eslint/types@8.62.1': {} - '@typescript-eslint/typescript-estree@8.62.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.62.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.62.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@5.9.3) - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/project-service': 8.62.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@5.9.3) + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/visitor-keys': 8.62.1 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.5 @@ -6370,20 +6355,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.62.0(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/utils@8.62.1(eslint@9.39.4)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) - '@typescript-eslint/scope-manager': 8.62.0 - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/typescript-estree': 8.62.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.62.1 + '@typescript-eslint/types': 8.62.1 + '@typescript-eslint/typescript-estree': 8.62.1(typescript@5.9.3) eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.62.0': + '@typescript-eslint/visitor-keys@8.62.1': dependencies: - '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/types': 8.62.1 eslint-visitor-keys: 5.0.1 '@use-gesture/core@10.3.1': {} @@ -6638,12 +6623,18 @@ snapshots: '@webcontainer/env@1.1.1': {} - acorn-jsx@5.3.2(acorn@8.16.0): - dependencies: acorn-jsx@5.3.2(acorn@8.17.0): dependencies: acorn: 8.17.0 + acorn-node@1.8.2: + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + + acorn-walk@7.2.0: {} + acorn@7.4.1: {} acorn@8.17.0: {} @@ -6674,7 +6665,7 @@ snapshots: ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.2 + fast-uri: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -6686,9 +6677,6 @@ snapshots: longest: 1.0.1 repeat-string: 1.6.1 - amdefine@1.0.1: - optional: true - ansi-regex@5.0.1: {} ansi-styles@4.3.0: @@ -6716,6 +6704,8 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 + array-from@2.1.1: {} + array-includes@3.1.9: dependencies: call-bind: 1.0.9 @@ -6810,7 +6800,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.10.40: {} + baseline-browser-mapping@2.10.42: {} bidi-js@1.0.3: dependencies: @@ -6827,15 +6817,15 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.6: + brace-expansion@5.0.7: dependencies: balanced-match: 4.0.4 browserslist@4.28.4: dependencies: - baseline-browser-mapping: 2.10.40 - caniuse-lite: 1.0.30001799 - electron-to-chromium: 1.5.380 + baseline-browser-mapping: 2.10.42 + caniuse-lite: 1.0.30001800 + electron-to-chromium: 1.5.387 node-releases: 2.0.50 update-browserslist-db: 1.2.3(browserslist@4.28.4) @@ -6875,11 +6865,11 @@ snapshots: camelcase@1.2.1: {} - camera-controls@2.10.1(three@0.185.0): + camera-controls@2.10.1(three@0.185.1): dependencies: - three: 0.185.0 + three: 0.185.1 - caniuse-lite@1.0.30001799: {} + caniuse-lite@1.0.30001800: {} center-align@0.1.3: dependencies: @@ -6993,7 +6983,7 @@ snapshots: dependencies: cwise-compiler: 1.1.3 cwise-parser: 1.0.3 - static-module: 1.5.0 + static-module: 3.0.4 uglify-js: 2.8.29 d3-array@3.2.1: @@ -7056,6 +7046,8 @@ snapshots: es5-ext: 0.10.64 type: 2.7.3 + dash-ast@2.0.1: {} + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -7166,11 +7158,11 @@ snapshots: dup@1.0.0: {} - duplexer2@0.0.2: + duplexer2@0.1.4: dependencies: - readable-stream: 1.1.14 + readable-stream: 2.3.8 - electron-to-chromium@1.5.380: {} + electron-to-chromium@1.5.387: {} empathic@2.0.1: {} @@ -7269,7 +7261,7 @@ snapshots: iterator.prototype: 1.1.5 math-intrinsics: 1.1.0 - es-module-lexer@2.1.0: {} + es-module-lexer@2.3.0: {} es-object-atoms@1.1.2: dependencies: @@ -7308,6 +7300,24 @@ snapshots: es5-ext: 0.10.64 es6-symbol: 3.1.4 + es6-map@0.1.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-set: 0.1.6 + es6-symbol: 3.1.4 + event-emitter: 0.3.5 + + es6-set@0.1.6: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + event-emitter: 0.3.5 + type: 2.7.3 + es6-symbol@3.1.4: dependencies: d: 1.0.2 @@ -7346,29 +7356,31 @@ snapshots: escape-string-regexp@4.0.0: {} - escodegen@0.0.28: + escodegen@1.14.3: dependencies: - esprima: 1.0.4 - estraverse: 1.3.2 + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 optionalDependencies: - source-map: 0.7.6 + source-map: 0.6.1 - escodegen@1.3.3: + escodegen@2.1.0: dependencies: - esprima: 1.1.1 - estraverse: 1.5.1 - esutils: 1.0.0 + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 optionalDependencies: - source-map: 0.1.43 + source-map: 0.6.1 eslint-config-prettier@10.1.8(eslint@9.39.4): dependencies: eslint: 9.39.4 - eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@9.39.4))(eslint@9.39.4)(prettier@3.9.1): + eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@9.39.4))(eslint@9.39.4)(prettier@3.9.4): dependencies: eslint: 9.39.4 - prettier: 3.9.1 + prettier: 3.9.4 prettier-linter-helpers: 1.0.1 synckit: 0.11.13 optionalDependencies: @@ -7411,11 +7423,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@10.4.6(eslint@9.39.4)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3): + eslint-plugin-storybook@10.4.6(eslint@9.39.4)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.62.0(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/utils': 8.62.1(eslint@9.39.4)(typescript@5.9.3) eslint: 9.39.4 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10) transitivePeerDependencies: - supports-color - typescript @@ -7483,10 +7495,6 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 4.2.1 - esprima@1.0.4: {} - - esprima@1.1.1: {} - esprima@1.2.5: {} esprima@4.0.1: {} @@ -7499,20 +7507,18 @@ snapshots: dependencies: estraverse: 5.3.0 - estraverse@1.3.2: {} - - estraverse@1.5.1: {} + estraverse@4.3.0: {} estraverse@5.3.0: {} + estree-is-function@1.0.0: {} + estree-walker@2.0.2: {} estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 - esutils@1.0.0: {} - esutils@2.0.3: {} event-emitter@0.3.5: @@ -7528,11 +7534,6 @@ snapshots: dependencies: type: 2.7.3 - falafel@2.2.5: - dependencies: - acorn: 7.4.1 - isarray: 2.0.5 - fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -7543,15 +7544,15 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.1.2: {} + fast-uri@3.1.3: {} fault@1.0.4: dependencies: format: 0.2.2 - fdir@6.5.0(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 fflate@0.6.10: {} @@ -7591,7 +7592,7 @@ snapshots: format@0.2.2: {} - fs-extra@11.3.5: + fs-extra@11.3.6: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.1 @@ -7620,6 +7621,8 @@ snapshots: gensync@1.0.0-beta.2: {} + get-assigned-identifiers@1.2.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7908,8 +7911,6 @@ snapshots: dependencies: is-inside-container: 1.0.0 - isarray@0.0.1: {} - isarray@1.0.0: {} isarray@2.0.5: {} @@ -7987,6 +7988,11 @@ snapshots: lazy-cache@1.0.4: {} + levn@0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -7998,7 +8004,7 @@ snapshots: lines-and-columns@1.2.4: {} - linkify-it@5.0.1: + linkify-it@5.0.2: dependencies: uc.micro: 2.1.0 @@ -8041,20 +8047,24 @@ snapshots: lz-string@1.5.0: {} - maath@0.10.8(@types/three@0.185.0)(three@0.185.0): + maath@0.10.8(@types/three@0.185.0)(three@0.185.1): dependencies: '@types/three': 0.185.0 - three: 0.185.0 + three: 0.185.1 + + magic-string@0.25.1: + dependencies: + sourcemap-codec: 1.4.8 magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - markdown-it@14.2.0: + markdown-it@14.3.0: dependencies: argparse: 2.0.1 entities: 4.5.0 - linkify-it: 5.0.1 + linkify-it: 5.0.2 mdurl: 2.0.0 punycode.js: 2.3.1 uc.micro: 2.1.0 @@ -8067,11 +8077,13 @@ snapshots: memoize-one@6.0.0: {} - meshline@3.3.1(three@0.185.0): + merge-source-map@1.0.4: dependencies: - three: 0.185.0 + source-map: 0.5.7 - meshoptimizer@0.18.1: {} + meshline@3.3.1(three@0.185.1): + dependencies: + three: 0.185.1 meshoptimizer@1.1.1: {} @@ -8091,11 +8103,11 @@ snapshots: minimatch@10.2.3: dependencies: - brace-expansion: 5.0.6 + brace-expansion: 5.0.7 minimatch@10.2.5: dependencies: - brace-expansion: 5.0.6 + brace-expansion: 5.0.7 minimatch@3.1.5: dependencies: @@ -8105,9 +8117,7 @@ snapshots: dependencies: brace-expansion: 2.1.1 - minimist@0.0.8: {} - - minimist@1.2.8: {} + minimist@0.2.4: {} minipass@7.1.3: {} @@ -8182,12 +8192,8 @@ snapshots: object-assign@4.1.1: {} - object-inspect@0.4.0: {} - object-inspect@1.13.4: {} - object-keys@0.4.0: {} - object-keys@1.1.1: {} object.assign@4.1.7: @@ -8237,6 +8243,15 @@ snapshots: dependencies: apg-lite: 1.0.5 + optionator@0.8.3: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -8277,27 +8292,27 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.127.0 '@oxc-parser/binding-win32-x64-msvc': 0.127.0 - oxc-resolver@11.21.3: + oxc-resolver@11.23.0: optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.21.3 - '@oxc-resolver/binding-android-arm64': 11.21.3 - '@oxc-resolver/binding-darwin-arm64': 11.21.3 - '@oxc-resolver/binding-darwin-x64': 11.21.3 - '@oxc-resolver/binding-freebsd-x64': 11.21.3 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.21.3 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.21.3 - '@oxc-resolver/binding-linux-arm64-gnu': 11.21.3 - '@oxc-resolver/binding-linux-arm64-musl': 11.21.3 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.21.3 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.21.3 - '@oxc-resolver/binding-linux-riscv64-musl': 11.21.3 - '@oxc-resolver/binding-linux-s390x-gnu': 11.21.3 - '@oxc-resolver/binding-linux-x64-gnu': 11.21.3 - '@oxc-resolver/binding-linux-x64-musl': 11.21.3 - '@oxc-resolver/binding-openharmony-arm64': 11.21.3 - '@oxc-resolver/binding-wasm32-wasi': 11.21.3 - '@oxc-resolver/binding-win32-arm64-msvc': 11.21.3 - '@oxc-resolver/binding-win32-x64-msvc': 11.21.3 + '@oxc-resolver/binding-android-arm-eabi': 11.23.0 + '@oxc-resolver/binding-android-arm64': 11.23.0 + '@oxc-resolver/binding-darwin-arm64': 11.23.0 + '@oxc-resolver/binding-darwin-x64': 11.23.0 + '@oxc-resolver/binding-freebsd-x64': 11.23.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.23.0 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.23.0 + '@oxc-resolver/binding-linux-arm64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-arm64-musl': 11.23.0 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-riscv64-musl': 11.23.0 + '@oxc-resolver/binding-linux-s390x-gnu': 11.23.0 + '@oxc-resolver/binding-linux-x64-gnu': 11.23.0 + '@oxc-resolver/binding-linux-x64-musl': 11.23.0 + '@oxc-resolver/binding-openharmony-arm64': 11.23.0 + '@oxc-resolver/binding-wasm32-wasi': 11.23.0 + '@oxc-resolver/binding-win32-arm64-msvc': 11.23.0 + '@oxc-resolver/binding-win32-x64-msvc': 11.23.0 p-limit@3.1.0: dependencies: @@ -8349,7 +8364,7 @@ snapshots: picocolors@1.1.1: {} - picomatch@4.0.4: {} + picomatch@4.0.5: {} pkg-types@1.3.1: dependencies: @@ -8365,7 +8380,7 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss@8.5.15: + postcss@8.5.16: dependencies: nanoid: 3.3.15 picocolors: 1.1.1 @@ -8373,13 +8388,15 @@ snapshots: potpack@1.0.2: {} + prelude-ls@1.1.2: {} + prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.1: dependencies: fast-diff: 1.3.0 - prettier@3.9.1: {} + prettier@3.9.4: {} pretty-format@27.5.1: dependencies: @@ -8414,11 +8431,6 @@ snapshots: querystringify@2.2.0: {} - quote-stream@0.0.0: - dependencies: - minimist: 0.0.8 - through2: 0.4.2 - ramda-adjunct@5.1.0(ramda@0.30.1): dependencies: ramda: 0.30.1 @@ -8492,7 +8504,7 @@ snapshots: dependencies: react: 18.3.1 - react-icons@5.6.0(react@18.3.1): + react-icons@5.7.0(react@18.3.1): dependencies: react: 18.3.1 @@ -8517,7 +8529,7 @@ snapshots: react-is@18.3.1: {} - react-keyed-flatten-children@5.0.1(react-is@18.3.1)(react@18.3.1): + react-keyed-flatten-children@5.1.1(react-is@18.3.1)(react@18.3.1): dependencies: react: 18.3.1 react-is: 18.3.1 @@ -8609,7 +8621,7 @@ snapshots: react-use-websocket@4.13.0: {} - react-window@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-window@2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -8618,20 +8630,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - readable-stream@1.0.34: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - - readable-stream@1.1.14: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -8803,6 +8801,16 @@ snapshots: dependencies: loose-envify: 1.4.0 + scope-analyzer@2.1.2: + dependencies: + array-from: 2.1.1 + dash-ast: 2.0.1 + es6-map: 0.1.5 + es6-set: 0.1.6 + es6-symbol: 3.1.4 + estree-is-function: 1.0.0 + get-assigned-identifiers: 1.2.0 + semver@6.3.1: {} semver@7.7.4: {} @@ -8883,17 +8891,11 @@ snapshots: source-map-js@1.2.1: {} - source-map@0.1.43: - dependencies: - amdefine: 1.0.1 - optional: true - source-map@0.5.7: {} source-map@0.6.1: {} - source-map@0.7.6: - optional: true + sourcemap-codec@1.4.8: {} space-separated-tokens@2.0.2: {} @@ -8901,28 +8903,31 @@ snapshots: stackback@0.0.2: {} - static-eval@0.2.4: + static-eval@2.1.1: dependencies: - escodegen: 0.0.28 + escodegen: 2.1.0 - static-module@1.5.0: + static-module@3.0.4: dependencies: + acorn-node: 1.8.2 concat-stream: 1.6.2 - duplexer2: 0.0.2 - escodegen: 1.3.3 - falafel: 2.2.5 + convert-source-map: 1.9.0 + duplexer2: 0.1.4 + escodegen: 1.14.3 has: 1.0.4 - object-inspect: 0.4.0 - quote-stream: 0.0.0 - readable-stream: 1.0.34 + magic-string: 0.25.1 + merge-source-map: 1.0.4 + object-inspect: 1.13.4 + readable-stream: 2.3.8 + scope-analyzer: 2.1.2 shallow-copy: 0.0.1 - static-eval: 0.2.4 - through2: 0.4.2 + static-eval: 2.1.1 + through2: 2.0.5 - stats-gl@2.4.2(@types/three@0.185.0)(three@0.185.0): + stats-gl@2.4.2(@types/three@0.185.0)(three@0.185.1): dependencies: '@types/three': 0.185.0 - three: 0.185.0 + three: 0.185.1 stats.js@0.17.0: {} @@ -8933,7 +8938,7 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.1)(react@18.3.1)(utf-8-validate@5.0.10): + storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@18.3.31)(bufferutil@4.1.0)(prettier@3.9.4)(react@18.3.1)(utf-8-validate@5.0.10): dependencies: '@storybook/global': 5.0.0 '@storybook/icons': 2.1.0(react@18.3.1) @@ -8945,14 +8950,14 @@ snapshots: esbuild: 0.28.1 open: 10.2.0 oxc-parser: 0.127.0 - oxc-resolver: 11.21.3 + oxc-resolver: 11.23.0 recast: 0.23.12 semver: 7.8.5 use-sync-external-store: 1.6.0(react@18.3.1) ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: '@types/react': 18.3.31 - prettier: 3.9.1 + prettier: 3.9.4 transitivePeerDependencies: - '@testing-library/dom' - bufferutil @@ -9006,8 +9011,6 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.2 - string_decoder@0.10.31: {} - string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -9111,11 +9114,11 @@ snapshots: tabbable@6.5.0: {} - three-mesh-bvh@0.7.8(three@0.185.0): + three-mesh-bvh@0.7.8(three@0.185.1): dependencies: - three: 0.185.0 + three: 0.185.1 - three-stdlib@2.36.1(three@0.185.0): + three-stdlib@2.36.1(three@0.185.1): dependencies: '@types/draco3d': 1.4.10 '@types/offscreencanvas': 2019.7.3 @@ -9123,14 +9126,14 @@ snapshots: draco3d: 1.5.7 fflate: 0.6.10 potpack: 1.0.2 - three: 0.185.0 + three: 0.185.1 - three@0.185.0: {} + three@0.185.1: {} - through2@0.4.2: + through2@2.0.5: dependencies: - readable-stream: 1.0.34 - xtend: 2.1.2 + readable-stream: 2.3.8 + xtend: 4.0.2 tiny-invariant@1.3.3: {} @@ -9140,8 +9143,8 @@ snapshots: tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 tinyrainbow@2.0.0: {} @@ -9177,17 +9180,17 @@ snapshots: node-gyp-build: 4.8.4 optional: true - troika-three-text@0.52.4(three@0.185.0): + troika-three-text@0.52.4(three@0.185.1): dependencies: bidi-js: 1.0.3 - three: 0.185.0 - troika-three-utils: 0.52.4(three@0.185.0) + three: 0.185.1 + troika-three-utils: 0.52.4(three@0.185.1) troika-worker-utils: 0.52.0 webgl-sdf-generator: 1.1.1 - troika-three-utils@0.52.4(three@0.185.0): + troika-three-utils@0.52.4(three@0.185.1): dependencies: - three: 0.185.0 + three: 0.185.1 troika-worker-utils@0.52.0: {} @@ -9204,7 +9207,7 @@ snapshots: tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 - minimist: 1.2.8 + minimist: 0.2.4 strip-bom: 3.0.0 tslib@2.8.1: {} @@ -9217,6 +9220,10 @@ snapshots: - immer - react + type-check@0.3.2: + dependencies: + prelude-ls: 1.1.2 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -9273,7 +9280,7 @@ snapshots: dependencies: '@gerrit0/mini-shiki': 3.23.0 lunr: 2.3.9 - markdown-it: 14.2.0 + markdown-it: 14.3.0 minimatch: 10.2.5 typescript: 5.9.3 yaml: 2.9.0 @@ -9315,7 +9322,7 @@ snapshots: dependencies: '@jridgewell/remapping': 2.3.5 acorn: 8.17.0 - picomatch: 4.0.4 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 unraw@3.0.0: {} @@ -9389,9 +9396,9 @@ snapshots: vite@7.3.6(@types/node@20.19.43)(yaml@2.9.0): dependencies: esbuild: 0.28.1 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.15 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + postcss: 8.5.16 rollup: 4.62.2 tinyglobby: 0.2.17 optionalDependencies: @@ -9408,12 +9415,12 @@ snapshots: '@vitest/snapshot': 4.1.9 '@vitest/spy': 4.1.9 '@vitest/utils': 4.1.9 - es-module-lexer: 2.1.0 + es-module-lexer: 2.3.0 expect-type: 1.4.0 magic-string: 0.30.21 obug: 2.1.3 pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 std-env: 4.1.0 tinybench: 2.9.0 tinyexec: 1.2.4 @@ -9519,9 +9526,7 @@ snapshots: xml@1.0.1: {} - xtend@2.1.2: - dependencies: - object-keys: 0.4.0 + xtend@4.0.2: {} yaeti@0.0.6: {} @@ -9559,13 +9564,13 @@ snapshots: '@types/react': 18.3.31 react: 18.3.1 - zustand@5.0.14(@types/react@18.3.31)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)): + zustand@5.0.12(@types/react@18.3.31)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)): optionalDependencies: '@types/react': 18.3.31 react: 18.3.1 use-sync-external-store: 1.6.0(react@18.3.1) - zustand@5.0.8(@types/react@18.3.31)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)): + zustand@5.0.14(@types/react@18.3.31)(react@18.3.1)(use-sync-external-store@1.6.0(react@18.3.1)): optionalDependencies: '@types/react': 18.3.31 react: 18.3.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3dfd95d..bc672b0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -14,3 +14,7 @@ allowBuilds: tree-sitter-json: true utf-8-validate: true "@scarf/scarf": false +overrides: + static-module: "^3.0.4" + static-eval: "^2.1.1" + minimist: "^0.2.4" diff --git a/server/davidia/models/messages.py b/server/davidia/models/messages.py index e2a2923..4e72a9f 100644 --- a/server/davidia/models/messages.py +++ b/server/davidia/models/messages.py @@ -1,3 +1,4 @@ +from pydantic import BaseModel from enum import auto from typing import Any from uuid import uuid4 @@ -343,6 +344,20 @@ class ClearPlotMessage(DvDModel): plot_id: str +class ConfigModel(DvDModel): + """Class for representing any config""" + +class EpicsPVAccessConfig(ConfigModel): + pvName: str + +class ProfileToolConfig(ConfigModel): + profile: str + +class ClientConfigMessage(DvDModel): + """Class for representing a client config""" + + config: EpicsPVAccessConfig | ProfileToolConfig + class ClientStatusMessage(DvDModel): """Class for representing a client status""" @@ -375,13 +390,12 @@ class ClientScatterParametersMessage(DvDModel): ClientMessage = ( - ClientStatusMessage + ClearSelectionsMessage + | ClientConfigMessage + | ClientStatusMessage | ClientSelectionMessage | ClientLineParametersMessage | ClientScatterParametersMessage - | ClearSelectionsMessage - | BatonRequestMessage - | BatonDonateMessage ) @@ -395,6 +409,7 @@ class ClientScatterParametersMessage(DvDModel): BatonRequestMessage, SelectionsMessage, ClearSelectionsMessage, + ClientConfigMessage, ClientStatusMessage, ClientSelectionMessage, ClientLineParametersMessage, @@ -411,6 +426,8 @@ class ClientScatterParametersMessage(DvDModel): SurfaceData, TableData, PlotConfig, + EpicsPVAccessConfig, + ProfileToolConfig, ) + ALL_MESSAGES if __name__ == "__main__": diff --git a/server/davidia/server/fastapi_utils.py b/server/davidia/server/fastapi_utils.py index 93a73ce..8ffde5f 100644 --- a/server/davidia/server/fastapi_utils.py +++ b/server/davidia/server/fastapi_utils.py @@ -148,14 +148,15 @@ async def root_request(payload: MyModel) -> OtherModel: def _instantiate_obj(model_class, obj): if isinstance(model_class, UnionType): + excs = {} for m in get_args(model_class): try: return m.model_validate(obj) - except ValidationError: - logger.warning( - "Could not validate as %s: %s", m, obj, exc_info=True - ) + except ValidationError as e: + excs[m] = e logger.error("No valid models for", obj) + for m,e in excs.items(): + logger.error("%s: %s", m, e) return None if isinstance(obj, BaseModel): diff --git a/server/davidia/server/plotserver.py b/server/davidia/server/plotserver.py index d7426af..2594b62 100644 --- a/server/davidia/server/plotserver.py +++ b/server/davidia/server/plotserver.py @@ -19,6 +19,7 @@ _PlotDataMessage, ClearPlotMessage, ClearSelectionsMessage, + ClientConfigMessage, ClientSelectionMessage, ClientStatusMessage, ClientLineParametersMessage, @@ -242,7 +243,7 @@ async def send_baton_approval_request(self, message: BatonRequestMessage) -> Non """Sends message to current baton holder to request baton Parameters ---------- - message : ClientMessage + message : BatonRequestMessage """ requester = message.requester if self.baton is None: @@ -262,7 +263,7 @@ async def take_baton(self, message: BatonDonateMessage) -> bool: """Updates baton and sends new baton messages Parameters ---------- - message : ClientMessage + message : BatonDonateMessage Returns ------- @@ -801,6 +802,9 @@ async def handle_client(server: PlotServer, plot_id: str, socket: WebSocket, uui continue match received_message: + case ClientConfigMessage(): + logger.debug("Received config from client for %s: %s", plot_id, received_message) + pass # TODO update plot server state (does client need baton?) case ClientStatusMessage(): status = received_message.status if status == StatusType.ready: @@ -819,7 +823,6 @@ async def handle_client(server: PlotServer, plot_id: str, socket: WebSocket, uui "Websocket closing for %s:%s", client.name, client.uuid ) update_all = await server.remove_client(plot_id, client) - break case BatonRequestMessage(): await server.send_baton_approval_request(received_message) case BatonDonateMessage(): @@ -837,7 +840,7 @@ async def handle_client(server: PlotServer, plot_id: str, socket: WebSocket, uui client.uuid, received_message, ) - is_valid = client.uuid == server.baton + is_valid = received_message is not None and client.uuid == server.baton if is_valid: omit = client # omit originating client else: @@ -847,6 +850,7 @@ async def handle_client(server: PlotServer, plot_id: str, socket: WebSocket, uui ) if is_valid: + assert isinstance(received_message, ClientMessage) await server.prepare_client( plot_id, received_message, omit_client=omit ) diff --git a/server/demos/simple.py b/server/demos/simple.py index 73394a0..6853c38 100644 --- a/server/demos/simple.py +++ b/server/demos/simple.py @@ -1,3 +1,4 @@ +from davidia.models.selections import AnySelection from time import sleep import numpy as np @@ -179,8 +180,7 @@ def table_demo(p): def regions_demo(p): - region( - selections=[ + selections: list[AnySelection] = [ RectangularSelection( start=(3.5, 6.5), lengths=(3.2, 2.0), @@ -191,7 +191,9 @@ def regions_demo(p): LinearSelection( start=(6.9, 10.5), length=2.0, angle=1.1, colour="cyan", alpha=0.6 ), - ], + ] + region( + selections=selections, plot_id=f"plot_{p}", ) rs = region(plot_id=f"plot_{p}") diff --git a/storybook/.storybook/main.ts b/storybook/.storybook/main.ts index 6289648..88de6b6 100644 --- a/storybook/.storybook/main.ts +++ b/storybook/.storybook/main.ts @@ -11,6 +11,7 @@ const config: StorybookConfig = { from: '../../typedocs', to: 'typedocs', }, + '../public', ], addons: ['@storybook/addon-links', '@storybook/addon-docs'], diff --git a/storybook/.storybook/preview.ts b/storybook/.storybook/preview.ts index dd0c46c..2f4ac5a 100644 --- a/storybook/.storybook/preview.ts +++ b/storybook/.storybook/preview.ts @@ -21,6 +21,7 @@ const preview: Preview = { 'Scatter', 'Surface', 'Table', + 'Video', 'ConnectedPlot', ], 'Modals', diff --git a/storybook/package.json b/storybook/package.json index 7cc98c4..20a2c37 100644 --- a/storybook/package.json +++ b/storybook/package.json @@ -26,7 +26,7 @@ "@types/react": "^18.3.27", "@types/react-dom": "^18.3.7", "@types/swagger-ui-react": "^4.19.0", - "@types/three": "^0.164.1", + "@types/three": ">=0.182.0", "eslint-plugin-storybook": "^10.3.3", "storybook": "^10.3.3", "swagger-ui-react": "^5.31.0" diff --git a/storybook/public/Jellyfish_1080_10s_2MB.webm b/storybook/public/Jellyfish_1080_10s_2MB.webm new file mode 100644 index 0000000..2c8590b Binary files /dev/null and b/storybook/public/Jellyfish_1080_10s_2MB.webm differ diff --git a/storybook/stories/Video.stories.tsx b/storybook/stories/Video.stories.tsx new file mode 100644 index 0000000..2b7ad26 --- /dev/null +++ b/storybook/stories/Video.stories.tsx @@ -0,0 +1,23 @@ +import type { Meta, StoryObj } from '@storybook/react-vite'; +import { VideoPlot } from '@diamondlightsource/davidia'; + +const meta: Meta = { + title: 'Plots/Video', + component: VideoPlot, + tags: ['autodocs'], +}; + +export default meta; + +export const Heatmap: StoryObj = { + args: { + plotConfig: { + title: 'Sample Video Plot', + xLabel: 'x-axis', + yLabel: 'y-axis', + }, + // sourceURL: "http://localhost:8080/stream.mjpeg", + // isImage: true, + sourceURL: 'Jellyfish_1080_10s_2MB.webm', + }, +};