From e51dd38b5857695c20aad2caf2dfded12d634d30 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Tue, 30 Jan 2024 14:50:21 -0500 Subject: [PATCH 1/9] feat(view-2d): use aspect ratio on camera reset --- packages/viewer/package.json | 1 + packages/viewer/src/camera.ts | 39 +- packages/viewer/src/view-2d.ts | 18 +- packages/vtkjs/package.json | 1 + packages/vtkjs/src/view-2d-vtkjs.machine.ts | 10 +- packages/vtkjs/src/view-2d-vtkjs.ts | 13 +- packages/wasm-utils/src/bounding-box.ts | 49 + pnpm-lock.yaml | 938 ++++++++++---------- 8 files changed, 588 insertions(+), 481 deletions(-) create mode 100644 packages/wasm-utils/src/bounding-box.ts diff --git a/packages/viewer/package.json b/packages/viewer/package.json index c0f7d66c..cf07d77e 100644 --- a/packages/viewer/package.json +++ b/packages/viewer/package.json @@ -46,6 +46,7 @@ }, "dependencies": { "@itk-viewer/io": "workspace:^", + "@itk-viewer/wasm-utils": "workspace:^", "gl-matrix": "^3.4.3", "xstate": "5.5.2" } diff --git a/packages/viewer/src/camera.ts b/packages/viewer/src/camera.ts index d11e52c9..726ee1c4 100644 --- a/packages/viewer/src/camera.ts +++ b/packages/viewer/src/camera.ts @@ -1,4 +1,10 @@ -import { Bounds } from '@itk-viewer/io/types.js'; +import { + Bounds, + addPoint, + createBounds, + getCorners, + getLength, +} from '@itk-viewer/wasm-utils/bounding-box.js'; import { ReadonlyVec3, mat4, vec3, quat, ReadonlyQuat } from 'gl-matrix'; import { ActorRefFrom, AnyActorRef, assign, createActor, setup } from 'xstate'; @@ -184,6 +190,7 @@ export const reset2d = ( pose: Pose, verticalFieldOfView: number, bounds: Bounds, + aspect: number, ) => { const center = vec3.fromValues( (bounds[0] + bounds[1]) / 2.0, @@ -191,20 +198,24 @@ export const reset2d = ( (bounds[4] + bounds[5]) / 2.0, ); - let w1 = bounds[1] - bounds[0]; - let w2 = bounds[3] - bounds[2]; - let w3 = bounds[5] - bounds[4]; - w1 *= w1; - w2 *= w2; - w3 *= w3; - let radius = w1 + w2 + w3; - // If we have just a single point, pick a radius of 1.0 - radius = radius === 0 ? 1.0 : radius; - // compute the radius of the enclosing sphere - radius = Math.sqrt(radius) * 0.5; + // Get the bounds in view coordinates + const visiblePoints = getCorners(bounds); + + const viewBounds = createBounds(); + const viewMat = mat4.create(); + toMat4(viewMat, pose); + for (let i = 0; i < visiblePoints.length; ++i) { + const point = visiblePoints[i]; + vec3.transformMat4(point, point, viewMat); + addPoint(viewBounds, ...point); + } + + const xLength = getLength(viewBounds, 0); + const yLength = getLength(viewBounds, 1); + const parallelScale = 0.5 * Math.max(yLength, xLength / aspect); const angle = verticalFieldOfView * (Math.PI / 180); // to radians - const distance = radius / Math.sin(angle * 0.5); + const distance = parallelScale / Math.tan(angle * 0.5); - return { center, rotation: pose.rotation, distance, parallelScale: radius }; + return { center, rotation: pose.rotation, distance, parallelScale }; }; diff --git a/packages/viewer/src/view-2d.ts b/packages/viewer/src/view-2d.ts index 991983f3..1c40fe72 100644 --- a/packages/viewer/src/view-2d.ts +++ b/packages/viewer/src/view-2d.ts @@ -31,6 +31,7 @@ export const view2d = setup({ | { type: 'setSlice'; slice: number } | { type: 'setScale'; scale: number } | { type: 'setViewport'; viewport: ViewportActor } + | { type: 'setResolution'; resolution: [number, number] } | { type: 'setCamera'; camera: Camera } | CreateChild; }, @@ -61,13 +62,18 @@ export const view2d = setup({ actor.send(event); }); }, - resetCameraPose: async ({ context: { image, camera } }) => { + resetCameraPose: async ({ context: { image, camera, viewport } }) => { if (!image || !camera) return; + const aspect = (() => { + if (!viewport) return 1; + const { resolution: dims } = viewport.getSnapshot().context; + return dims[1] && dims[0] ? dims[0] / dims[1] : 1; + })(); const bounds = await image.getWorldBounds(image.coarsestScale); const { pose: currentPose, verticalFieldOfView } = camera.getSnapshot().context; - const pose = reset2d(currentPose, verticalFieldOfView, bounds); + const pose = reset2d(currentPose, verticalFieldOfView, bounds, aspect); camera.send({ type: 'setPose', pose, @@ -138,6 +144,14 @@ export const view2d = setup({ }), ], }, + setResolution: { + actions: [ + ({ context: { viewport }, event: { resolution } }) => { + if (!viewport) return; + viewport.send({ type: 'setResolution', resolution }); + }, + ], + }, setCamera: { actions: [ assign({ diff --git a/packages/vtkjs/package.json b/packages/vtkjs/package.json index bf940993..4427e0e6 100644 --- a/packages/vtkjs/package.json +++ b/packages/vtkjs/package.json @@ -29,6 +29,7 @@ "@itk-viewer/io": "workspace:^", "@itk-viewer/viewer": "workspace:^", "@kitware/vtk.js": "^29.3.0", + "gl-matrix": "^3.4.3", "xstate": "5.5.2" } } diff --git a/packages/vtkjs/src/view-2d-vtkjs.machine.ts b/packages/vtkjs/src/view-2d-vtkjs.machine.ts index 268d38a6..dcc51481 100644 --- a/packages/vtkjs/src/view-2d-vtkjs.machine.ts +++ b/packages/vtkjs/src/view-2d-vtkjs.machine.ts @@ -1,4 +1,4 @@ -import { assign, setup } from 'xstate'; +import { assign, sendParent, setup } from 'xstate'; import GenericRenderWindow, { vtkGenericRenderWindow, } from '@kitware/vtk.js/Rendering/Misc/GenericRenderWindow.js'; @@ -20,6 +20,7 @@ export const view2dLogic = setup({ context: Context; events: | SetContainerEvent + | { type: 'setResolution'; resolution: [number, number] } | { type: 'imageBuilt'; image: BuiltImage } | { type: 'setSlice'; slice: number } | { type: 'setCameraPose'; pose: Pose; parallelScaleRatio: number } @@ -54,6 +55,13 @@ export const view2dLogic = setup({ setContainer: { actions: [{ type: 'setContainer' }], }, + setResolution: { + actions: [ + sendParent(({ event }) => { + return event; + }), + ], + }, imageBuilt: { actions: [{ type: 'imageBuilt' }], }, diff --git a/packages/vtkjs/src/view-2d-vtkjs.ts b/packages/vtkjs/src/view-2d-vtkjs.ts index c9bcbe55..1aa9b785 100644 --- a/packages/vtkjs/src/view-2d-vtkjs.ts +++ b/packages/vtkjs/src/view-2d-vtkjs.ts @@ -1,4 +1,4 @@ -import { AnyEventObject } from 'xstate'; +import { Actor, AnyEventObject } from 'xstate'; import { mat4 } from 'gl-matrix'; import '@kitware/vtk.js/Rendering/Profiles/Volume'; @@ -19,6 +19,7 @@ import { const setupContainer = ( rendererContainer: vtkGenericRenderWindow, container: HTMLElement, + self: Actor, ) => { rendererContainer.setContainer(container as HTMLElement); rendererContainer.resize(); @@ -26,6 +27,8 @@ const setupContainer = ( const resizer = new ResizeObserver((entries: Array) => { if (!entries.length) return; rendererContainer.resize(); + const { width, height } = entries[0].contentRect; + self.send({ type: 'setResolution', resolution: [width, height] }); }); resizer.observe(container); @@ -76,15 +79,21 @@ const createImplementation = () => { setContainer: ({ event, context: { rendererContainer }, + self, }: { event: AnyEventObject; context: Context; + self: unknown; // Actor }) => { const { container } = event as SetContainerEvent; if (!container) { return cleanupContainer(rendererContainer); } - const scene = setupContainer(rendererContainer, container); + const scene = setupContainer( + rendererContainer, + container, + self as Actor, + ); actor = scene.actor; mapper = scene.mapper; renderer = scene.renderer; diff --git a/packages/wasm-utils/src/bounding-box.ts b/packages/wasm-utils/src/bounding-box.ts new file mode 100644 index 00000000..3bd1cadb --- /dev/null +++ b/packages/wasm-utils/src/bounding-box.ts @@ -0,0 +1,49 @@ +export type Bounds = [number, number, number, number, number, number]; + +export type ReadonlyBounds = readonly [ + number, + number, + number, + number, + number, + number, +]; + +const INIT_BOUNDS = Object.freeze([ + Number.MAX_VALUE, + -Number.MAX_VALUE, // X + Number.MAX_VALUE, + -Number.MAX_VALUE, // Y + Number.MAX_VALUE, + -Number.MAX_VALUE, // Z +] as ReadonlyBounds); + +export const createBounds = () => [...INIT_BOUNDS] as Bounds; + +export function addPoint(bounds: Bounds, x: number, y: number, z: number) { + const [xMin, xMax, yMin, yMax, zMin, zMax] = bounds; + bounds[0] = xMin < x ? xMin : x; + bounds[1] = xMax > x ? xMax : x; + bounds[2] = yMin < y ? yMin : y; + bounds[3] = yMax > y ? yMax : y; + bounds[4] = zMin < z ? zMin : z; + bounds[5] = zMax > z ? zMax : z; + return bounds; +} + +export function getCorners(bounds: ReadonlyBounds) { + const corners = new Array<[number, number, number]>(8); + let count = 0; + for (let ix = 0; ix < 2; ix++) { + for (let iy = 2; iy < 4; iy++) { + for (let iz = 4; iz < 6; iz++) { + corners[count++] = [bounds[ix], bounds[iy], bounds[iz]]; + } + } + } + return corners; +} + +export function getLength(bounds: ReadonlyBounds, index: number) { + return bounds[index * 2 + 1] - bounds[index * 2]; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa3a50d3..f9895aa7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -222,7 +222,7 @@ importers: devDependencies: '@vitest/ui': specifier: ^1.0.4 - version: 1.2.2(vitest@1.2.2) + version: 1.0.4(vitest@1.0.4) happy-dom: specifier: ^12.10.3 version: 12.10.3 @@ -240,16 +240,16 @@ importers: version: 5.0.10 vitest: specifier: ^1.0.4 - version: 1.2.2(@vitest/ui@1.2.2)(happy-dom@12.10.3) + version: 1.0.4(@vitest/ui@1.0.4)(happy-dom@12.10.3) vitest-canvas-mock: specifier: ^0.3.3 - version: 0.3.3(vitest@1.2.2) + version: 0.3.3(vitest@1.0.4) packages/transfer-function-editor/examples/vtk-js: dependencies: '@kitware/vtk.js': specifier: ^29.2.0 - version: 29.3.1(@babel/preset-env@7.23.8)(autoprefixer@10.4.16)(webpack@5.89.0)(wslink@1.12.4) + version: 29.3.0(@babel/preset-env@7.23.9)(autoprefixer@10.4.17)(webpack@5.90.0)(wslink@1.12.4) devDependencies: vite: specifier: ^5.0.8 @@ -260,6 +260,9 @@ importers: '@itk-viewer/io': specifier: workspace:^ version: link:../io + '@itk-viewer/wasm-utils': + specifier: workspace:^ + version: link:../wasm-utils gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -284,7 +287,10 @@ importers: version: link:../viewer '@kitware/vtk.js': specifier: ^29.3.0 - version: 29.3.1(@babel/preset-env@7.23.8)(autoprefixer@10.4.16)(webpack@5.89.0)(wslink@1.12.4) + version: 29.3.1(@babel/preset-env@7.23.9)(autoprefixer@10.4.17)(webpack@5.90.0)(wslink@1.12.4) + gl-matrix: + specifier: ^3.4.3 + version: 3.4.3 xstate: specifier: 5.5.2 version: 5.5.2 @@ -380,7 +386,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 dev: false /@azure/abort-controller@1.1.0: @@ -492,14 +498,6 @@ packages: - encoding dev: true - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.13 - chalk: 2.4.2 - dev: true - /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -512,20 +510,20 @@ packages: engines: {node: '>=6.9.0'} dev: false - /@babel/core@7.23.7: - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} + /@babel/core@7.23.9: + resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.23.5 '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.8 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) + '@babel/helpers': 7.23.9 + '@babel/parser': 7.23.9 + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 convert-source-map: 2.0.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -539,9 +537,9 @@ packages: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 jsesc: 2.5.2 dev: false @@ -549,14 +547,14 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false /@babel/helper-compilation-targets@7.23.6: @@ -565,47 +563,47 @@ packages: dependencies: '@babel/compat-data': 7.23.5 '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 + browserslist: 4.22.3 lru-cache: 5.1.1 semver: 6.3.1 dev: false - /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.7): - resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} + /@babel/helper-create-class-features-plugin@7.23.9(@babel/core@7.23.9): + resolution: {integrity: sha512-B2L9neXTIyPQoXDm+NtovPvG6VOLWnaXu3BIeVDWwdKFgG30oNa6CqVGiJPDWQwIAK49t9gnQI9c6K6RzabiKw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: false - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.9): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: false - /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.7): - resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} + /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.9): + resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) @@ -624,38 +622,38 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 dev: false /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false /@babel/helper-member-expression-to-functions@7.23.0: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -667,7 +665,7 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false /@babel/helper-plugin-utils@7.22.5: @@ -675,25 +673,25 @@ packages: engines: {node: '>=6.9.0'} dev: false - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.9): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: false - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.9): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -703,21 +701,21 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false /@babel/helper-string-parser@7.23.4: @@ -739,30 +737,21 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 dev: false - /@babel/helpers@7.23.8: - resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} + /@babel/helpers@7.23.9: + resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 transitivePeerDependencies: - supports-color dev: false - /@babel/highlight@7.22.13: - resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} @@ -771,856 +760,856 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + /@babel/parser@7.23.9: + resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) dev: false - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.7): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.9): resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 dev: false - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.7): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.7): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.9): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.9): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.9): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7): + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7): + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.7): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.7): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.7): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.7): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.9): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.7): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.7): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.9): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.23.7): - resolution: {integrity: sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==} + /@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.23.9): + resolution: {integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.7): + /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.9): resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: false - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.15 + '@babel/template': 7.23.9 dev: false - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7): + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.9): resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: false - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.23.9): + resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 dev: false - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.9): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.9): resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) dev: false - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 dev: false - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/preset-env@7.23.8(@babel/core@7.23.7): - resolution: {integrity: sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==} + /@babel/preset-env@7.23.9(@babel/core@7.23.9): + resolution: {integrity: sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.23.7) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.7) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7) - core-js-compat: 3.35.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.9) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.23.9) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.9) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.9) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.23.9) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.9) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.9) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.9) + babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.9) + babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.9) + babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.9) + core-js-compat: 3.35.1 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.9): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 esutils: 2.0.3 dev: false @@ -1634,24 +1623,23 @@ packages: dependencies: regenerator-runtime: 0.14.0 - /@babel/runtime@7.23.8: - resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} + /@babel/runtime@7.23.9: + resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - dev: false - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/template@7.23.9: + resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 dev: false - /@babel/traverse@7.23.7: - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} + /@babel/traverse@7.23.9: + resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 @@ -1660,16 +1648,16 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color dev: false - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + /@babel/types@7.23.9: + resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.23.4 @@ -2404,7 +2392,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 dev: false /@jridgewell/resolve-uri@3.1.1: @@ -2421,7 +2409,7 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 dev: false /@jridgewell/sourcemap-codec@1.4.15: @@ -2434,14 +2422,45 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: false - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 dev: false - /@kitware/vtk.js@29.3.1(@babel/preset-env@7.23.8)(autoprefixer@10.4.16)(webpack@5.89.0)(wslink@1.12.4): + /@kitware/vtk.js@29.3.0(@babel/preset-env@7.23.9)(autoprefixer@10.4.17)(webpack@5.90.0)(wslink@1.12.4): + resolution: {integrity: sha512-EofIxo6Qcfhh8SRx8Xp7B8HGM//2tzjQbhrMQsiaoPgs3yhtrqm+CBFmqboxt+waF8qUKxuUQb+DzM8cX2ivAg==} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.17.10 + autoprefixer: ^10.4.7 + wslink: ^1.1.0 + dependencies: + '@babel/preset-env': 7.23.9(@babel/core@7.23.9) + '@babel/runtime': 7.22.11 + '@types/webxr': 0.5.7 + autoprefixer: 10.4.17(postcss@8.4.33) + commander: 9.2.0 + d3-scale: 4.0.2 + fast-deep-equal: 3.1.3 + fflate: 0.7.3 + gl-matrix: 3.4.3 + globalthis: 1.0.3 + seedrandom: 3.0.5 + shader-loader: 1.3.1 + shelljs: 0.8.5 + spark-md5: 3.0.2 + stream-browserify: 3.0.0 + webworker-promise: 0.5.0 + worker-loader: 3.0.8(webpack@5.90.0) + wslink: 1.12.4 + xmlbuilder2: 3.0.2 + transitivePeerDependencies: + - webpack + dev: false + + /@kitware/vtk.js@29.3.1(@babel/preset-env@7.23.9)(autoprefixer@10.4.17)(webpack@5.90.0)(wslink@1.12.4): resolution: {integrity: sha512-TM3uBVwJWdMIU+VD+OnSxQU45lJiJiOxxkx56Du6K4d18u5fHi7nBkSlNhTtOCX5H8amwIofaPCKRnYRNkjosA==} hasBin: true peerDependencies: @@ -2449,10 +2468,10 @@ packages: autoprefixer: ^10.4.7 wslink: ^1.1.0 dependencies: - '@babel/preset-env': 7.23.8(@babel/core@7.23.7) + '@babel/preset-env': 7.23.9(@babel/core@7.23.9) '@babel/runtime': 7.22.11 '@types/webxr': 0.5.7 - autoprefixer: 10.4.16(postcss@8.4.33) + autoprefixer: 10.4.17(postcss@8.4.33) commander: 9.2.0 d3-scale: 4.0.2 fast-deep-equal: 3.1.3 @@ -2465,7 +2484,7 @@ packages: spark-md5: 3.0.2 stream-browserify: 3.0.0 webworker-promise: 0.5.0 - worker-loader: 3.0.8(webpack@5.89.0) + worker-loader: 3.0.8(webpack@5.90.0) wslink: 1.12.4 xmlbuilder2: 3.0.2 transitivePeerDependencies: @@ -2489,7 +2508,7 @@ packages: /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.22.11 + '@babel/runtime': 7.23.9 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -2952,7 +2971,7 @@ packages: resolution: {integrity: sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==} dependencies: '@types/estree': 1.0.1 - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.15 dev: false /@types/eslint@8.56.2: @@ -2968,9 +2987,11 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: false /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + dev: true /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -2983,7 +3004,7 @@ packages: /@types/node-fetch@2.6.7: resolution: {integrity: sha512-lX17GZVpJ/fuCjguZ5b3TjEbSENxmEk1B2z02yoXSK9WMEWRivhdSY73wWMn6bpcCDAOh6qAdktpKHIlkDk2lg==} dependencies: - '@types/node': 20.5.7 + '@types/node': 20.11.9 form-data: 4.0.0 dev: true @@ -2997,15 +3018,14 @@ packages: undici-types: 5.26.5 dev: true - /@types/node@20.11.0: - resolution: {integrity: sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==} + /@types/node@20.11.9: + resolution: {integrity: sha512-CQXNuMoS/VcoAMISe5pm4JnEd1Br5jildbQEToEMQvutmv+EaQr90ry9raiudgpyDuqFiV9e4rnjSfLNq12M5w==} dependencies: undici-types: 5.26.5 - dev: false /@types/node@20.5.7: resolution: {integrity: sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==} - dev: true + dev: false /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -3033,7 +3053,7 @@ packages: /@types/tunnel@0.0.3: resolution: {integrity: sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==} dependencies: - '@types/node': 20.5.7 + '@types/node': 20.11.9 dev: true /@types/webxr@0.5.7: @@ -3044,7 +3064,7 @@ packages: resolution: {integrity: sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==} requiresBuild: true dependencies: - '@types/node': 20.5.7 + '@types/node': 20.11.9 dev: true optional: true @@ -3184,56 +3204,55 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vitest/expect@1.2.2: - resolution: {integrity: sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==} + /@vitest/expect@1.0.4: + resolution: {integrity: sha512-/NRN9N88qjg3dkhmFcCBwhn/Ie4h064pY3iv7WLRsDJW7dXnEgeoa8W9zy7gIPluhz6CkgqiB3HmpIXgmEY5dQ==} dependencies: - '@vitest/spy': 1.2.2 - '@vitest/utils': 1.2.2 + '@vitest/spy': 1.0.4 + '@vitest/utils': 1.0.4 chai: 4.4.1 dev: true - /@vitest/runner@1.2.2: - resolution: {integrity: sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==} + /@vitest/runner@1.0.4: + resolution: {integrity: sha512-rhOQ9FZTEkV41JWXozFM8YgOqaG9zA7QXbhg5gy6mFOVqh4PcupirIJ+wN7QjeJt8S8nJRYuZH1OjJjsbxAXTQ==} dependencies: - '@vitest/utils': 1.2.2 + '@vitest/utils': 1.0.4 p-limit: 5.0.0 pathe: 1.1.2 dev: true - /@vitest/snapshot@1.2.2: - resolution: {integrity: sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==} + /@vitest/snapshot@1.0.4: + resolution: {integrity: sha512-vkfXUrNyNRA/Gzsp2lpyJxh94vU2OHT1amoD6WuvUAA12n32xeVZQ0KjjQIf8F6u7bcq2A2k969fMVxEsxeKYA==} dependencies: magic-string: 0.30.5 pathe: 1.1.2 pretty-format: 29.7.0 dev: true - /@vitest/spy@1.2.2: - resolution: {integrity: sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==} + /@vitest/spy@1.0.4: + resolution: {integrity: sha512-9ojTFRL1AJVh0hvfzAQpm0QS6xIS+1HFIw94kl/1ucTfGCaj1LV/iuJU4Y6cdR03EzPDygxTHwE1JOm+5RCcvA==} dependencies: tinyspy: 2.2.0 dev: true - /@vitest/ui@1.2.2(vitest@1.2.2): - resolution: {integrity: sha512-CG+5fa8lyoBr+9i+UZGS31Qw81v33QlD10uecHxN2CLJVN+jLnqx4pGzGvFFeJ7jSnUCT0AlbmVWY6fU6NJZmw==} + /@vitest/ui@1.0.4(vitest@1.0.4): + resolution: {integrity: sha512-gd4p6e7pjukSe4joWS5wpnm/JcEfzCZUYkYWQOORqJK1mDJ0MOaXa/9BbPOEVO5TcvdnKvFJUdJpFHnqoyYwZA==} peerDependencies: vitest: ^1.0.0 dependencies: - '@vitest/utils': 1.2.2 + '@vitest/utils': 1.0.4 fast-glob: 3.3.2 fflate: 0.8.1 flatted: 3.2.9 pathe: 1.1.2 picocolors: 1.0.0 sirv: 2.0.4 - vitest: 1.2.2(@vitest/ui@1.2.2)(happy-dom@12.10.3) + vitest: 1.0.4(@vitest/ui@1.0.4)(happy-dom@12.10.3) dev: true - /@vitest/utils@1.2.2: - resolution: {integrity: sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==} + /@vitest/utils@1.0.4: + resolution: {integrity: sha512-gsswWDXxtt0QvtK/y/LWukN7sGMYmnCcv1qv05CsY6cU/Y1zpGX1QuvLs+GO1inczpE6Owixeel3ShkjhYtGfA==} dependencies: diff-sequences: 29.6.3 - estree-walker: 3.0.3 loupe: 2.3.7 pretty-format: 29.7.0 dev: true @@ -3383,12 +3402,12 @@ packages: acorn: 8.11.3 dev: false - /acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.11.3 dev: true /acorn-walk@8.3.2: @@ -3400,6 +3419,7 @@ packages: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true + dev: false /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} @@ -3603,15 +3623,15 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /autoprefixer@10.4.16(postcss@8.4.33): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + /autoprefixer@10.4.17(postcss@8.4.33): + resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001576 + browserslist: 4.22.3 + caniuse-lite: 1.0.30001581 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -3641,38 +3661,38 @@ packages: transitivePeerDependencies: - debug - /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.7): - resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} + /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.9): + resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.7): - resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} + /babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.23.9): + resolution: {integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) - core-js-compat: 3.35.0 + '@babel/core': 7.23.9 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) + core-js-compat: 3.35.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.7): - resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} + /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.9): + resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + '@babel/core': 7.23.9 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) transitivePeerDependencies: - supports-color dev: false @@ -3757,15 +3777,15 @@ packages: update-browserslist-db: 1.0.11(browserslist@4.21.10) dev: false - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + /browserslist@4.22.3: + resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001576 - electron-to-chromium: 1.4.628 + caniuse-lite: 1.0.30001581 + electron-to-chromium: 1.4.648 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) + update-browserslist-db: 1.0.13(browserslist@4.22.3) dev: false /buffer-crc32@0.2.13: @@ -3796,7 +3816,7 @@ packages: /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 get-intrinsic: 1.2.1 dev: true @@ -3823,8 +3843,8 @@ packages: resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==} dev: false - /caniuse-lite@1.0.30001576: - resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} + /caniuse-lite@1.0.30001581: + resolution: {integrity: sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==} dev: false /cardinal@2.1.1: @@ -4109,10 +4129,10 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: false - /core-js-compat@3.35.0: - resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} + /core-js-compat@3.35.1: + resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} dependencies: - browserslist: 4.22.2 + browserslist: 4.22.3 dev: false /core-util-is@1.0.2: @@ -4308,7 +4328,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.22.11 + '@babel/runtime': 7.23.9 dev: true /dayjs@1.11.9: @@ -4441,8 +4461,8 @@ packages: resolution: {integrity: sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ==} dev: false - /electron-to-chromium@1.4.628: - resolution: {integrity: sha512-2k7t5PHvLsufpP6Zwk0nof62yLOsCf032wZx7/q0mv8gwlXjhcxI3lz6f0jBr0GrnWKcm3burXzI3t5IrcdUxw==} + /electron-to-chromium@1.4.648: + resolution: {integrity: sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==} dev: false /emoji-regex@8.0.0: @@ -4750,8 +4770,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true @@ -4782,12 +4802,6 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - dependencies: - '@types/estree': 1.0.5 - dev: true - /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -5159,9 +5173,6 @@ packages: dev: true optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -5196,7 +5207,7 @@ packages: /get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 @@ -5443,13 +5454,14 @@ packages: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 /hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 + dev: true /hook-std@3.0.0: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} @@ -5680,11 +5692,13 @@ packages: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.3 + dev: false /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.0 + dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -5908,7 +5922,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.11.0 + '@types/node': 20.11.9 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false @@ -6836,7 +6850,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -6848,7 +6862,7 @@ packages: dependencies: '@babel/code-frame': 7.23.5 index-to-position: 0.1.2 - type-fest: 4.10.1 + type-fest: 4.10.2 dev: true /path-exists@3.0.0: @@ -7116,7 +7130,7 @@ packages: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.10.1 + type-fest: 4.10.2 dev: true /read-pkg-up@7.0.1: @@ -7145,7 +7159,7 @@ packages: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.0 parse-json: 8.1.0 - type-fest: 4.10.1 + type-fest: 4.10.2 unicorn-magic: 0.1.0 dev: true @@ -7191,7 +7205,7 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} dependencies: - resolve: 1.22.4 + resolve: 1.22.8 dev: false /redent@3.0.0: @@ -7224,12 +7238,11 @@ packages: /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.9 dev: false /regexp.prototype.flags@1.5.0: @@ -7304,15 +7317,16 @@ packages: resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: false @@ -7419,7 +7433,7 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: false @@ -7956,7 +7970,7 @@ packages: engines: {node: '>=8'} dev: true - /terser-webpack-plugin@5.3.10(webpack@5.89.0): + /terser-webpack-plugin@5.3.10(webpack@5.90.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -7972,12 +7986,12 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.26.0 - webpack: 5.89.0 + terser: 5.27.0 + webpack: 5.90.0 dev: false /terser-webpack-plugin@5.3.9(webpack@5.88.2): @@ -8010,13 +8024,13 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.5 - acorn: 8.10.0 + acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 dev: false - /terser@5.26.0: - resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} + /terser@5.27.0: + resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==} engines: {node: '>=10'} hasBin: true dependencies: @@ -8222,8 +8236,8 @@ packages: engines: {node: '>=14.16'} dev: true - /type-fest@4.10.1: - resolution: {integrity: sha512-7ZnJYTp6uc04uYRISWtiX3DSKB/fxNQT0B5o1OUeCqiQiwF+JC9+rJiZIDrPrNCLLuTqyQmh4VdQqh/ZOkv9MQ==} + /type-fest@4.10.2: + resolution: {integrity: sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==} engines: {node: '>=16'} dev: true @@ -8381,13 +8395,13 @@ packages: picocolors: 1.0.0 dev: false - /update-browserslist-db@1.0.13(browserslist@4.22.2): + /update-browserslist-db@1.0.13(browserslist@4.22.3): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.2 + browserslist: 4.22.3 escalade: 3.1.1 picocolors: 1.0.0 dev: false @@ -8439,8 +8453,8 @@ packages: extsprintf: 1.3.0 dev: true - /vite-node@1.2.2: - resolution: {integrity: sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==} + /vite-node@1.0.4: + resolution: {integrity: sha512-9xQQtHdsz5Qn8hqbV7UKqkm8YkJhzT/zr41Dmt5N7AlD8hJXw/Z7y0QiD5I8lnTthV9Rvcvi0QW7PI0Fq83ZPg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: @@ -8543,17 +8557,17 @@ packages: fsevents: 2.3.3 dev: true - /vitest-canvas-mock@0.3.3(vitest@1.2.2): + /vitest-canvas-mock@0.3.3(vitest@1.0.4): resolution: {integrity: sha512-3P968tYBpqYyzzOaVtqnmYjqbe13576/fkjbDEJSfQAkHtC5/UjuRHOhFEN/ZV5HVZIkaROBUWgazDKJ+Ibw+Q==} peerDependencies: vitest: '*' dependencies: jest-canvas-mock: 2.5.2 - vitest: 1.2.2(@vitest/ui@1.2.2)(happy-dom@12.10.3) + vitest: 1.0.4(@vitest/ui@1.0.4)(happy-dom@12.10.3) dev: true - /vitest@1.2.2(@vitest/ui@1.2.2)(happy-dom@12.10.3): - resolution: {integrity: sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==} + /vitest@1.0.4(@vitest/ui@1.0.4)(happy-dom@12.10.3): + resolution: {integrity: sha512-s1GQHp/UOeWEo4+aXDOeFBJwFzL6mjycbQwwKWX2QcYfh/7tIerS59hWQ20mxzupTJluA2SdwiBuWwQHH67ckg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -8577,12 +8591,12 @@ packages: jsdom: optional: true dependencies: - '@vitest/expect': 1.2.2 - '@vitest/runner': 1.2.2 - '@vitest/snapshot': 1.2.2 - '@vitest/spy': 1.2.2 - '@vitest/ui': 1.2.2(vitest@1.2.2) - '@vitest/utils': 1.2.2 + '@vitest/expect': 1.0.4 + '@vitest/runner': 1.0.4 + '@vitest/snapshot': 1.0.4 + '@vitest/spy': 1.0.4 + '@vitest/ui': 1.0.4(vitest@1.0.4) + '@vitest/utils': 1.0.4 acorn-walk: 8.3.2 cac: 6.7.14 chai: 4.4.1 @@ -8598,7 +8612,7 @@ packages: tinybench: 2.6.0 tinypool: 0.8.2 vite: 5.0.10 - vite-node: 1.2.2 + vite-node: 1.0.4 why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -8681,8 +8695,8 @@ packages: - uglify-js dev: false - /webpack@5.89.0: - resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} + /webpack@5.90.0: + resolution: {integrity: sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -8698,7 +8712,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.6 acorn: 8.11.3 acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.22.2 + browserslist: 4.22.3 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 es-module-lexer: 1.4.1 @@ -8712,7 +8726,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.89.0) + terser-webpack-plugin: 5.3.10(webpack@5.90.0) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -8824,7 +8838,7 @@ packages: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true - /worker-loader@3.0.8(webpack@5.89.0): + /worker-loader@3.0.8(webpack@5.90.0): resolution: {integrity: sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -8832,7 +8846,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.89.0 + webpack: 5.90.0 dev: false /wrap-ansi@6.2.0: @@ -8899,7 +8913,7 @@ packages: '@oozcitak/dom': 1.15.10 '@oozcitak/infra': 1.0.8 '@oozcitak/util': 8.3.8 - '@types/node': 20.11.0 + '@types/node': 20.5.7 js-yaml: 3.14.0 dev: false From 560e3e2cbf6c80dacd5d6279738370fdd99f81a2 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Tue, 30 Jan 2024 15:11:53 -0500 Subject: [PATCH 2/9] refactor: rename wasm-utils to utils --- .changeset/clever-peaches-do.md | 12 ++++++ packages/blosc-zarr/bloscZarrDecompress.js | 2 +- packages/blosc-zarr/package.json | 2 +- packages/element/package.json | 1 + .../element/src/itk-remote-viewport-webrtc.ts | 11 +++--- packages/element/src/itk-remote-viewport.ts | 11 +++--- packages/io/package.json | 2 +- packages/io/src/ImageDataFromChunks.worker.js | 2 +- packages/io/src/MultiscaleSpatialImage.ts | 6 +-- packages/io/src/ZarrMultiscaleSpatialImage.ts | 2 +- packages/io/src/dimensionUtils.ts | 13 +------ packages/io/src/transformBounds.ts | 3 +- packages/io/src/types.ts | 9 ----- packages/remote-viewport/package.json | 1 + .../remote-viewport/src/remote-machine.ts | 10 ++--- .../remote-viewport/src/remote-viewport.ts | 7 ++-- packages/{wasm-utils => utils}/CHANGELOG.md | 0 packages/{wasm-utils => utils}/package.json | 2 +- .../{wasm-utils => utils}/src/bounding-box.ts | 0 .../{wasm-utils => utils}/src/dtypeUtils.js | 0 .../{wasm-utils => utils}/tsconfig.build.json | 0 packages/viewer/package.json | 2 +- packages/viewer/src/camera.ts | 2 +- pnpm-lock.yaml | 38 +++++++++++-------- 24 files changed, 66 insertions(+), 72 deletions(-) create mode 100644 .changeset/clever-peaches-do.md rename packages/{wasm-utils => utils}/CHANGELOG.md (100%) rename packages/{wasm-utils => utils}/package.json (96%) rename packages/{wasm-utils => utils}/src/bounding-box.ts (100%) rename packages/{wasm-utils => utils}/src/dtypeUtils.js (100%) rename packages/{wasm-utils => utils}/tsconfig.build.json (100%) diff --git a/.changeset/clever-peaches-do.md b/.changeset/clever-peaches-do.md new file mode 100644 index 00000000..7826867a --- /dev/null +++ b/.changeset/clever-peaches-do.md @@ -0,0 +1,12 @@ +--- +"@itk-viewer/remote-viewport": patch +"@itk-viewer/blosc-zarr": patch +"@itk-viewer/arcball": patch +"@itk-viewer/element": patch +"@itk-viewer/viewer": patch +"@itk-viewer/utils": patch +"@itk-viewer/vtkjs": patch +"@itk-viewer/io": patch +--- + +Add orthographic camera and zooming to 2D view. diff --git a/packages/blosc-zarr/bloscZarrDecompress.js b/packages/blosc-zarr/bloscZarrDecompress.js index ef0d38bc..b2651e13 100644 --- a/packages/blosc-zarr/bloscZarrDecompress.js +++ b/packages/blosc-zarr/bloscZarrDecompress.js @@ -5,7 +5,7 @@ import { getPipelinesBaseUrl, getPipelineWorkerUrl, } from 'itk-wasm'; -import { getSize } from '@itk-viewer/wasm-utils/dtypeUtils.js'; +import { getSize } from '@itk-viewer/utils/dtypeUtils.js'; const cores = navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4; const numberOfWorkers = cores + Math.floor(Math.sqrt(cores)); diff --git a/packages/blosc-zarr/package.json b/packages/blosc-zarr/package.json index eb5522bf..7c5e3233 100644 --- a/packages/blosc-zarr/package.json +++ b/packages/blosc-zarr/package.json @@ -42,7 +42,7 @@ "typescript": "^5.3.3" }, "dependencies": { - "@itk-viewer/wasm-utils": "workspace:^", + "@itk-viewer/utils": "workspace:^", "itk-wasm": "1.0.0-b.160" }, "eslintConfig": { diff --git a/packages/element/package.json b/packages/element/package.json index 42114567..57cad6a1 100644 --- a/packages/element/package.json +++ b/packages/element/package.json @@ -55,6 +55,7 @@ "@itk-viewer/remote-viewport": "workspace:^", "@itk-viewer/viewer": "workspace:^", "@itk-viewer/vtkjs": "workspace:^", + "@itk-viewer/utils": "workspace:^", "@lit/context": "^1.1.0", "gl-matrix": "^3.4.3", "itk-wasm": "1.0.0-b.160", diff --git a/packages/element/src/itk-remote-viewport-webrtc.ts b/packages/element/src/itk-remote-viewport-webrtc.ts index 978f7197..a052c4d3 100644 --- a/packages/element/src/itk-remote-viewport-webrtc.ts +++ b/packages/element/src/itk-remote-viewport-webrtc.ts @@ -5,20 +5,19 @@ import { Ref, createRef, ref } from 'lit/directives/ref.js'; import { SelectorController } from 'xstate-lit'; import { ActorRefFrom } from 'xstate'; +import { Bounds } from '@itk-viewer/utils/bounding-box.js'; +import { chunk } from '@itk-viewer/io/dimensionUtils.js'; +import { viewportMachine } from '@itk-viewer/viewer/viewport.js'; +import { Camera } from '@itk-viewer/viewer/camera.js'; import { RemoteActor, createHyphaMachineConfig, createRemoteViewport, + Image, } from '@itk-viewer/remote-viewport/remote-viewport.js'; -import type { Image } from '@itk-viewer/remote-viewport/remote-viewport.js'; - import { ItkViewport } from './itk-viewport.js'; import './itk-camera.js'; -import { Bounds } from '@itk-viewer/io/types.js'; -import { chunk } from '@itk-viewer/io/dimensionUtils.js'; -import { viewportMachine } from '@itk-viewer/viewer/viewport.js'; -import { Camera } from '@itk-viewer/viewer/camera.js'; type ViewportActor = ActorRefFrom; diff --git a/packages/element/src/itk-remote-viewport.ts b/packages/element/src/itk-remote-viewport.ts index c268b575..1944edbc 100644 --- a/packages/element/src/itk-remote-viewport.ts +++ b/packages/element/src/itk-remote-viewport.ts @@ -5,20 +5,19 @@ import { Ref, createRef, ref } from 'lit/directives/ref.js'; import { SelectorController } from 'xstate-lit'; import { ActorRefFrom } from 'xstate'; +import { Bounds } from '@itk-viewer/utils/bounding-box.js'; +import { chunk } from '@itk-viewer/io/dimensionUtils.js'; +import { viewportMachine } from '@itk-viewer/viewer/viewport.js'; +import { Camera } from '@itk-viewer/viewer/camera.js'; import { RemoteActor, createHyphaMachineConfig, createRemoteViewport, + Image, } from '@itk-viewer/remote-viewport/remote-viewport.js'; -import type { Image } from '@itk-viewer/remote-viewport/remote-viewport.js'; - import { ItkViewport } from './itk-viewport.js'; import './itk-camera.js'; -import { Bounds } from '@itk-viewer/io/types.js'; -import { chunk } from '@itk-viewer/io/dimensionUtils.js'; -import { viewportMachine } from '@itk-viewer/viewer/viewport.js'; -import { Camera } from '@itk-viewer/viewer/camera.js'; type ViewportActor = ActorRefFrom; diff --git a/packages/io/package.json b/packages/io/package.json index 508df415..796413e2 100644 --- a/packages/io/package.json +++ b/packages/io/package.json @@ -45,7 +45,7 @@ }, "dependencies": { "@itk-viewer/blosc-zarr": "workspace:^", - "@itk-viewer/wasm-utils": "workspace:^", + "@itk-viewer/utils": "workspace:^", "axios": "^1.6.3", "gl-matrix": "^3.4.3", "itk-wasm": "1.0.0-b.160", diff --git a/packages/io/src/ImageDataFromChunks.worker.js b/packages/io/src/ImageDataFromChunks.worker.js index 1ab76362..0a3c5e09 100644 --- a/packages/io/src/ImageDataFromChunks.worker.js +++ b/packages/io/src/ImageDataFromChunks.worker.js @@ -7,7 +7,7 @@ import { ElementGetter, getSize, testLittleEndian, -} from '@itk-viewer/wasm-utils/dtypeUtils.js'; +} from '@itk-viewer/utils/dtypeUtils.js'; const haveSharedArrayBuffer = typeof self.SharedArrayBuffer === 'function'; diff --git a/packages/io/src/MultiscaleSpatialImage.ts b/packages/io/src/MultiscaleSpatialImage.ts index 3512c33d..15b6b075 100644 --- a/packages/io/src/MultiscaleSpatialImage.ts +++ b/packages/io/src/MultiscaleSpatialImage.ts @@ -10,8 +10,8 @@ import { import { ImageType, TypedArray } from 'itk-wasm'; import WebworkerPromise from 'webworker-promise'; -import { getDtype } from '@itk-viewer/wasm-utils/dtypeUtils.js'; - +import { getDtype } from '@itk-viewer/utils/dtypeUtils.js'; +import { Bounds, ReadonlyBounds } from '@itk-viewer/utils/bounding-box.js'; import { componentTypeToTypedArray } from './componentTypeToTypedArray.js'; import { chunk, @@ -23,9 +23,7 @@ import { } from './dimensionUtils.js'; import { transformBounds } from './transformBounds.js'; import { - Bounds, Extent, - ReadonlyBounds, ReadOnlyDimensionBounds, ScaleInfo, SpatialDimensions, diff --git a/packages/io/src/ZarrMultiscaleSpatialImage.ts b/packages/io/src/ZarrMultiscaleSpatialImage.ts index a8981926..1bca621c 100644 --- a/packages/io/src/ZarrMultiscaleSpatialImage.ts +++ b/packages/io/src/ZarrMultiscaleSpatialImage.ts @@ -2,7 +2,7 @@ import { ImageType, PixelTypes } from 'itk-wasm'; import PQueue from 'p-queue'; import { bloscZarrDecompress } from '@itk-viewer/blosc-zarr/bloscZarrDecompress.js'; -import { getComponentType } from '@itk-viewer/wasm-utils/dtypeUtils.js'; +import { getComponentType } from '@itk-viewer/utils/dtypeUtils.js'; import MultiscaleSpatialImage from './MultiscaleSpatialImage.js'; import { ZarrStoreParser } from './ZarrStoreParser.js'; diff --git a/packages/io/src/dimensionUtils.ts b/packages/io/src/dimensionUtils.ts index 5c9bcdeb..ea0ecd58 100644 --- a/packages/io/src/dimensionUtils.ts +++ b/packages/io/src/dimensionUtils.ts @@ -1,4 +1,4 @@ -import { Bounds, Dimension, SpatialDimensions } from './types.js'; +import { Dimension, SpatialDimensions } from './types.js'; export const CXYZT = Object.freeze(['c', 'x', 'y', 'z', 't'] as const); // viewer indexing @@ -43,14 +43,3 @@ export const nonNullable = (value: T): value is NonNullable => { }; export const XYZ = Object.freeze(['x', 'y', 'z']) as SpatialDimensions; - -const INIT_BOUNDS = Object.freeze([ - Number.MAX_VALUE, - -Number.MAX_VALUE, // X - Number.MAX_VALUE, - -Number.MAX_VALUE, // Y - Number.MAX_VALUE, - -Number.MAX_VALUE, // Z -] as Bounds); - -export const createBounds = () => [...INIT_BOUNDS] as Bounds; diff --git a/packages/io/src/transformBounds.ts b/packages/io/src/transformBounds.ts index 54c77acf..8a3eba46 100644 --- a/packages/io/src/transformBounds.ts +++ b/packages/io/src/transformBounds.ts @@ -1,5 +1,6 @@ import { ReadonlyMat4, vec3 } from 'gl-matrix'; -import type { Bounds, ReadonlyBounds, Vector3 } from './types.js'; +import { ReadonlyBounds, Bounds } from '@itk-viewer/utils/bounding-box.js'; +import type { Vector3 } from './types.js'; // from vtk.js/Sources/Common/DataModel/BoundingBox // Computes the two corners with minimal and maximal coordinates diff --git a/packages/io/src/types.ts b/packages/io/src/types.ts index 5f1e52a5..f511f81d 100644 --- a/packages/io/src/types.ts +++ b/packages/io/src/types.ts @@ -4,15 +4,6 @@ import { TypedArray } from 'itk-wasm'; export type ValueOf = T[keyof T]; export type Awaitable = Promise | T; -export type Bounds = [number, number, number, number, number, number]; -export type ReadonlyBounds = readonly [ - number, - number, - number, - number, - number, - number, -]; export type Extent = [number, number, number, number, number, number]; export type Range = [number, number]; export type ReadonlyRange = readonly [number, number]; diff --git a/packages/remote-viewport/package.json b/packages/remote-viewport/package.json index aaddaed6..9a9059a9 100644 --- a/packages/remote-viewport/package.json +++ b/packages/remote-viewport/package.json @@ -27,6 +27,7 @@ "dependencies": { "@itk-viewer/io": "workspace:^", "@itk-viewer/viewer": "workspace:^", + "@itk-viewer/utils": "workspace:^", "@itk-wasm/htj2k": "2.1.0", "gl-matrix": "^3.4.3", "imjoy-rpc": "^0.5.46", diff --git a/packages/remote-viewport/src/remote-machine.ts b/packages/remote-viewport/src/remote-machine.ts index 4e70851c..046a7221 100644 --- a/packages/remote-viewport/src/remote-machine.ts +++ b/packages/remote-viewport/src/remote-machine.ts @@ -17,12 +17,10 @@ import { getBytes, worldBoundsToIndexBounds, } from '@itk-viewer/io/MultiscaleSpatialImage.js'; -import { Bounds, ReadOnlyDimensionBounds } from '@itk-viewer/io/types.js'; -import { - XYZ, - createBounds, - ensuredDims, -} from '@itk-viewer/io/dimensionUtils.js'; +import { ReadOnlyDimensionBounds } from '@itk-viewer/io/types.js'; + +import { createBounds, Bounds } from '@itk-viewer/utils/bounding-box.js'; +import { XYZ, ensuredDims } from '@itk-viewer/io/dimensionUtils.js'; import { toMat4 } from '@itk-viewer/viewer/camera.js'; const MAX_IMAGE_BYTES_DEFAULT = 4000 * 1000 * 1000; // 4000 MB diff --git a/packages/remote-viewport/src/remote-viewport.ts b/packages/remote-viewport/src/remote-viewport.ts index 17f95c1d..b26196a6 100644 --- a/packages/remote-viewport/src/remote-viewport.ts +++ b/packages/remote-viewport/src/remote-viewport.ts @@ -2,16 +2,15 @@ import { createActor, fromPromise } from 'xstate'; import { hyphaWebsocketClient } from 'imjoy-rpc'; import { ReadonlyMat4, mat4, vec3 } from 'gl-matrix'; import { decode, Image } from '@itk-wasm/htj2k'; -import { RendererEntries, remoteMachine, Context } from './remote-machine.js'; +export type { Image } from '@itk-wasm/htj2k'; +import { Bounds } from '@itk-viewer/utils/bounding-box.js'; import { XYZ } from '@itk-viewer/io/dimensionUtils.js'; import { MultiscaleSpatialImage, worldBoundsToIndexBounds, } from '@itk-viewer/io/MultiscaleSpatialImage.js'; -import { Bounds } from '@itk-viewer/io/types.js'; import { transformBounds } from '@itk-viewer/io/transformBounds.js'; - -export type { Image } from '@itk-wasm/htj2k'; +import { RendererEntries, remoteMachine, Context } from './remote-machine.js'; // Should match constant in agave-renderer::renderer.py const RENDERER_SERVICE_ID = 'agave-renderer'; diff --git a/packages/wasm-utils/CHANGELOG.md b/packages/utils/CHANGELOG.md similarity index 100% rename from packages/wasm-utils/CHANGELOG.md rename to packages/utils/CHANGELOG.md diff --git a/packages/wasm-utils/package.json b/packages/utils/package.json similarity index 96% rename from packages/wasm-utils/package.json rename to packages/utils/package.json index 86860949..f73ee0a8 100644 --- a/packages/wasm-utils/package.json +++ b/packages/utils/package.json @@ -1,5 +1,5 @@ { - "name": "@itk-viewer/wasm-utils", + "name": "@itk-viewer/utils", "version": "0.1.2", "description": "Utils for io and itk-wasm packages", "type": "module", diff --git a/packages/wasm-utils/src/bounding-box.ts b/packages/utils/src/bounding-box.ts similarity index 100% rename from packages/wasm-utils/src/bounding-box.ts rename to packages/utils/src/bounding-box.ts diff --git a/packages/wasm-utils/src/dtypeUtils.js b/packages/utils/src/dtypeUtils.js similarity index 100% rename from packages/wasm-utils/src/dtypeUtils.js rename to packages/utils/src/dtypeUtils.js diff --git a/packages/wasm-utils/tsconfig.build.json b/packages/utils/tsconfig.build.json similarity index 100% rename from packages/wasm-utils/tsconfig.build.json rename to packages/utils/tsconfig.build.json diff --git a/packages/viewer/package.json b/packages/viewer/package.json index cf07d77e..dbff1f31 100644 --- a/packages/viewer/package.json +++ b/packages/viewer/package.json @@ -46,7 +46,7 @@ }, "dependencies": { "@itk-viewer/io": "workspace:^", - "@itk-viewer/wasm-utils": "workspace:^", + "@itk-viewer/utils": "workspace:^", "gl-matrix": "^3.4.3", "xstate": "5.5.2" } diff --git a/packages/viewer/src/camera.ts b/packages/viewer/src/camera.ts index 726ee1c4..d0bcdf11 100644 --- a/packages/viewer/src/camera.ts +++ b/packages/viewer/src/camera.ts @@ -4,7 +4,7 @@ import { createBounds, getCorners, getLength, -} from '@itk-viewer/wasm-utils/bounding-box.js'; +} from '@itk-viewer/utils/bounding-box.js'; import { ReadonlyVec3, mat4, vec3, quat, ReadonlyQuat } from 'gl-matrix'; import { ActorRefFrom, AnyActorRef, assign, createActor, setup } from 'xstate'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9895aa7..8dbc84b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,9 +65,9 @@ importers: packages/blosc-zarr: dependencies: - '@itk-viewer/wasm-utils': + '@itk-viewer/utils': specifier: workspace:^ - version: link:../wasm-utils + version: link:../utils itk-wasm: specifier: 1.0.0-b.160 version: 1.0.0-b.160 @@ -87,6 +87,9 @@ importers: '@itk-viewer/remote-viewport': specifier: workspace:^ version: link:../remote-viewport + '@itk-viewer/utils': + specifier: workspace:^ + version: link:../utils '@itk-viewer/viewer': specifier: workspace:^ version: link:../viewer @@ -164,9 +167,9 @@ importers: '@itk-viewer/blosc-zarr': specifier: workspace:^ version: link:../blosc-zarr - '@itk-viewer/wasm-utils': + '@itk-viewer/utils': specifier: workspace:^ - version: link:../wasm-utils + version: link:../utils axios: specifier: ^1.6.3 version: 1.6.3 @@ -195,6 +198,9 @@ importers: '@itk-viewer/io': specifier: workspace:^ version: link:../io + '@itk-viewer/utils': + specifier: workspace:^ + version: link:../utils '@itk-viewer/viewer': specifier: workspace:^ version: link:../viewer @@ -255,14 +261,24 @@ importers: specifier: ^5.0.8 version: 5.0.10 + packages/utils: + dependencies: + itk-wasm: + specifier: 1.0.0-b.160 + version: 1.0.0-b.160 + devDependencies: + typescript: + specifier: ^5.3.3 + version: 5.3.3 + packages/viewer: dependencies: '@itk-viewer/io': specifier: workspace:^ version: link:../io - '@itk-viewer/wasm-utils': + '@itk-viewer/utils': specifier: workspace:^ - version: link:../wasm-utils + version: link:../utils gl-matrix: specifier: ^3.4.3 version: 3.4.3 @@ -305,16 +321,6 @@ importers: specifier: ^5.0.10 version: 5.0.10 - packages/wasm-utils: - dependencies: - itk-wasm: - specifier: 1.0.0-b.160 - version: 1.0.0-b.160 - devDependencies: - typescript: - specifier: ^5.3.3 - version: 5.3.3 - packages: /@aashutoshrathi/word-wrap@1.2.6: From a057fe78ee55b24c789947450ab07ec7e142e5a2 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Tue, 30 Jan 2024 16:39:14 -0500 Subject: [PATCH 3/9] fix(view-2d-vtkjs): fix tests by setting container And passing parent on actor input --- packages/viewer/src/view-2d.ts | 3 ++- packages/vtkjs/src/view-2d-vtkjs.cy.ts | 29 ++++++++++++++------- packages/vtkjs/src/view-2d-vtkjs.machine.ts | 19 +++++++++----- packages/vtkjs/src/view-2d-vtkjs.ts | 12 ++++++--- 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/packages/viewer/src/view-2d.ts b/packages/viewer/src/view-2d.ts index 1c40fe72..03ec8f1c 100644 --- a/packages/viewer/src/view-2d.ts +++ b/packages/viewer/src/view-2d.ts @@ -96,9 +96,10 @@ export const view2d = setup({ spawn, context: { spawned, camera }, event: { logic, onActor }, + self, }) => { // @ts-expect-error cannot spawn actor of type that is not in setup() - const child = spawn(logic); + const child = spawn(logic, { input: { parent: self } }); if (camera) child.send({ type: 'setCamera', camera }); const id = Object.keys(spawned).length.toString(); onActor(child); diff --git a/packages/vtkjs/src/view-2d-vtkjs.cy.ts b/packages/vtkjs/src/view-2d-vtkjs.cy.ts index b3ebc2ff..2c5c697f 100644 --- a/packages/vtkjs/src/view-2d-vtkjs.cy.ts +++ b/packages/vtkjs/src/view-2d-vtkjs.cy.ts @@ -1,4 +1,4 @@ -import { createActor } from 'xstate'; +import { createActor, createMachine } from 'xstate'; import { setPipelineWorkerUrl, setPipelinesBaseUrl } from 'itk-wasm'; import { createLogic } from './view-2d-vtkjs.js'; import { ZarrMultiscaleSpatialImage } from '@itk-viewer/io/ZarrMultiscaleSpatialImage.js'; @@ -15,13 +15,24 @@ describe('View 2D vtk.js', () => { expect(createLogic()).to.be.ok; }); - it('takes imageBuild event', async () => { - const render = createActor(createLogic()).start(); - - const multiscale = await ZarrMultiscaleSpatialImage.fromUrl( - new URL('/astronaut.zarr', document.location.origin), - ); - const image = await multiscale.getImage(2); - render.send({ type: 'imageBuilt', image }); + it('takes imageBuilt event', () => { + const parent = createActor(createMachine({})).start(); + const render = createActor(createLogic(), { input: { parent } }).start(); + cy.mount('
'); + cy.get('#view-2d-vtkjs-container') + .then((button) => { + render.send({ type: 'setContainer', container: button[0] }); + }) + .then(() => { + return ZarrMultiscaleSpatialImage.fromUrl( + new URL('/astronaut.zarr', document.location.origin), + ); + }) + .then((multiscale) => { + return multiscale.getImage(2); + }) + .then((image) => { + render.send({ type: 'imageBuilt', image }); + }); }); }); diff --git a/packages/vtkjs/src/view-2d-vtkjs.machine.ts b/packages/vtkjs/src/view-2d-vtkjs.machine.ts index dcc51481..d9896462 100644 --- a/packages/vtkjs/src/view-2d-vtkjs.machine.ts +++ b/packages/vtkjs/src/view-2d-vtkjs.machine.ts @@ -1,4 +1,4 @@ -import { assign, sendParent, setup } from 'xstate'; +import { AnyActorRef, assign, sendTo, setup } from 'xstate'; import GenericRenderWindow, { vtkGenericRenderWindow, } from '@kitware/vtk.js/Rendering/Misc/GenericRenderWindow.js'; @@ -8,6 +8,7 @@ import { Camera, Pose } from '@itk-viewer/viewer/camera.js'; export type Context = { rendererContainer: vtkGenericRenderWindow; camera: Camera | undefined; + parent: AnyActorRef; }; export type SetContainerEvent = { @@ -17,6 +18,7 @@ export type SetContainerEvent = { export const view2dLogic = setup({ types: {} as { + input: { parent: AnyActorRef }; context: Context; events: | SetContainerEvent @@ -37,14 +39,21 @@ export const view2dLogic = setup({ applyCameraPose: (_, __: { pose: Pose; parallelScaleRatio: number }) => { throw new Error('Function not implemented.'); }, + forwardToParent: sendTo( + ({ context }) => context.parent, + ({ event }) => { + return event; + }, + ), }, }).createMachine({ - context: () => { + context: ({ input: { parent } }) => { return { rendererContainer: GenericRenderWindow.newInstance({ listenWindowResize: false, }), camera: undefined, + parent, }; }, id: 'view2dVtkjs', @@ -56,11 +65,7 @@ export const view2dLogic = setup({ actions: [{ type: 'setContainer' }], }, setResolution: { - actions: [ - sendParent(({ event }) => { - return event; - }), - ], + actions: ['forwardToParent'], }, imageBuilt: { actions: [{ type: 'imageBuilt' }], diff --git a/packages/vtkjs/src/view-2d-vtkjs.ts b/packages/vtkjs/src/view-2d-vtkjs.ts index 1aa9b785..7667edd5 100644 --- a/packages/vtkjs/src/view-2d-vtkjs.ts +++ b/packages/vtkjs/src/view-2d-vtkjs.ts @@ -116,10 +116,14 @@ const createImplementation = () => { addedActorToRenderer = true; renderer!.addActor(actor!); - const snap = context.camera!.getSnapshot(); - toMat4(viewMat, snap.context.pose); - const cameraVtk = renderer!.getActiveCamera(); - cameraVtk.setViewMatrix(viewMat as mat4); + const snap = context.camera?.getSnapshot(); + if (snap) { + toMat4(viewMat, snap.context.pose); + const cameraVtk = renderer!.getActiveCamera(); + cameraVtk.setViewMatrix(viewMat as mat4); + } else { + renderer!.resetCamera(); + } } render(); }, From 107a3a9e65d5fc5d2c4502462fc34d6d2c1124bc Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Tue, 30 Jan 2024 17:09:14 -0500 Subject: [PATCH 4/9] chore(package): don't publish vtk-js-transfer-function-example --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3867053f..ef944c47 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "cy:component": "cypress run --component", "cy:component:chrome": "cypress run --component --browser chrome", "clean": "git clean -fdx", - "ci:publish": "pnpm publish -r --access public" + "ci:publish": "pnpm --filter=!vtk-js-transfer-function-example publish -r --access public" }, "devDependencies": { "@changesets/cli": "^2.27.1", From c38d7e15a6e9a6f427c4ede98527e9a1b339fcf6 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Tue, 30 Jan 2024 17:16:57 -0500 Subject: [PATCH 5/9] chore: delete temp file and prettierignore changesets --- .changeset/clever-peaches-do.md | 16 ++++++++-------- .prettierignore | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.changeset/clever-peaches-do.md b/.changeset/clever-peaches-do.md index 7826867a..22361fd7 100644 --- a/.changeset/clever-peaches-do.md +++ b/.changeset/clever-peaches-do.md @@ -1,12 +1,12 @@ --- -"@itk-viewer/remote-viewport": patch -"@itk-viewer/blosc-zarr": patch -"@itk-viewer/arcball": patch -"@itk-viewer/element": patch -"@itk-viewer/viewer": patch -"@itk-viewer/utils": patch -"@itk-viewer/vtkjs": patch -"@itk-viewer/io": patch +'@itk-viewer/remote-viewport': patch +'@itk-viewer/blosc-zarr': patch +'@itk-viewer/arcball': patch +'@itk-viewer/element': patch +'@itk-viewer/viewer': patch +'@itk-viewer/utils': patch +'@itk-viewer/vtkjs': patch +'@itk-viewer/io': patch --- Add orthographic camera and zooming to 2D view. diff --git a/.prettierignore b/.prettierignore index 9721bf45..b379999a 100644 --- a/.prettierignore +++ b/.prettierignore @@ -6,3 +6,4 @@ micromamba/* venv/* packages/blosc-zarr/* !packages/blosc-zarr/bloscZarrDecompress.js +.changesets/* From 00936cfffefb790b9ff4ea924e7ca5dffc69d032 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Wed, 31 Jan 2024 11:44:29 -0500 Subject: [PATCH 6/9] feat(camera): add enableRotation to fix orientation of 2d camera --- packages/viewer/src/camera.ts | 21 ++++++++++++++++++--- packages/viewer/src/view-2d.ts | 4 ++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/packages/viewer/src/camera.ts b/packages/viewer/src/camera.ts index d0bcdf11..983e8e60 100644 --- a/packages/viewer/src/camera.ts +++ b/packages/viewer/src/camera.ts @@ -35,8 +35,8 @@ const copyPose = (out: Pose, source: ReadonlyPose) => { }; export const toMat4 = (() => { - const scratch0 = new Float32Array(16); - const scratch1 = new Float32Array(16); + const scratch0 = new Float32Array(4); + const scratch1 = new Float32Array(3); const matTemp = mat4.create(); return (out: mat4, pose: ReadonlyPose) => { scratch1[0] = scratch1[1] = 0.0; @@ -53,6 +53,7 @@ export const toMat4 = (() => { type Context = { pose: Pose; + enableRotation: boolean; verticalFieldOfView: number; parallelScaleRatio: number; // distance to parallelScale poseWatchers: Array; @@ -69,6 +70,7 @@ export const cameraMachine = setup({ events: | { type: 'watchPose'; watcher: AnyActorRef } | { type: 'watchPoseStop'; watcher: AnyActorRef } + | { type: 'setEnableRotation'; enable: boolean } | SetPoseEvent; }, actions: { @@ -90,6 +92,7 @@ export const cameraMachine = setup({ initial: 'active', context: { pose: createPose(), + enableRotation: true, parallelScaleRatio: 1, verticalFieldOfView: 50, poseWatchers: [], @@ -101,10 +104,17 @@ export const cameraMachine = setup({ actions: [ assign({ pose: ({ event: { pose }, context }) => { - return copyPose(context.pose, pose); + const clampedPose = { + ...pose, + rotation: context.enableRotation + ? pose.rotation + : context.pose.rotation, + }; + return copyPose(context.pose, clampedPose); }, parallelScaleRatio: ({ event: { pose }, context }) => { const { distance, parallelScale = undefined } = pose; + // parallelScale updated during reset, not during normal camera movement if (parallelScale === undefined) return context.parallelScaleRatio; return parallelScale / distance; @@ -146,6 +156,11 @@ export const cameraMachine = setup({ }), ], }, + setEnableRotation: { + actions: assign({ + enableRotation: ({ event }) => event.enable, + }), + }, }, }, }, diff --git a/packages/viewer/src/view-2d.ts b/packages/viewer/src/view-2d.ts index 03ec8f1c..b2635b04 100644 --- a/packages/viewer/src/view-2d.ts +++ b/packages/viewer/src/view-2d.ts @@ -78,6 +78,10 @@ export const view2d = setup({ type: 'setPose', pose, }); + camera.send({ + type: 'setEnableRotation', + enable: false, + }); }, }, }).createMachine({ From f94cc2dd1a9176274cc65fe6203381066f4816d5 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Wed, 31 Jan 2024 13:30:36 -0500 Subject: [PATCH 7/9] feat(element): Add compare example with linked camera --- packages/element/examples/compare.html | 31 ++++++++++++++++++++++ packages/element/examples/compare.ts | 25 +++++++++++++++++ packages/element/examples/view-2d.ts | 2 -- packages/element/src/itk-viewer-element.ts | 5 +--- 4 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 packages/element/examples/compare.html create mode 100644 packages/element/examples/compare.ts diff --git a/packages/element/examples/compare.html b/packages/element/examples/compare.html new file mode 100644 index 00000000..24624284 --- /dev/null +++ b/packages/element/examples/compare.html @@ -0,0 +1,31 @@ + + + + + + + itk-view-2d + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/element/examples/compare.ts b/packages/element/examples/compare.ts new file mode 100644 index 00000000..3dcabb3c --- /dev/null +++ b/packages/element/examples/compare.ts @@ -0,0 +1,25 @@ +import { ZarrMultiscaleSpatialImage } from '@itk-viewer/io/ZarrMultiscaleSpatialImage.js'; +import { setPipelineWorkerUrl, setPipelinesBaseUrl } from 'itk-wasm'; + +const pipelineWorkerUrl = '/itk/web-workers/itk-wasm-pipeline.min.worker.js'; +setPipelineWorkerUrl(pipelineWorkerUrl); +const pipelineBaseUrl = '/itk/pipelines'; +setPipelinesBaseUrl(pipelineBaseUrl); + +document.addEventListener('DOMContentLoaded', async function () { + const [v0, v1] = Array.from(document.querySelectorAll('itk-viewport')).map( + (el) => el.getActor(), + ); + const camera = v0?.getSnapshot()?.context?.camera; + if (!camera) throw new Error('Could not get camera'); + v1?.send({ type: 'setCamera', camera }); + + const imagePath = '/ome-ngff-prototypes/single_image/v0.4/zyx.ome.zarr'; + const url = new URL(imagePath, document.location.origin); + const image = await ZarrMultiscaleSpatialImage.fromUrl(url); + + const viewerElement = document.querySelector('itk-viewer'); + if (!viewerElement) throw new Error('Could not find element'); + const viewer = viewerElement.getActor(); + viewer.send({ type: 'setImage', image, name: 'image' }); +}); diff --git a/packages/element/examples/view-2d.ts b/packages/element/examples/view-2d.ts index 98d78d85..4e523093 100644 --- a/packages/element/examples/view-2d.ts +++ b/packages/element/examples/view-2d.ts @@ -8,13 +8,11 @@ setPipelinesBaseUrl(pipelineBaseUrl); document.addEventListener('DOMContentLoaded', async function () { const imagePath = '/ome-ngff-prototypes/single_image/v0.4/zyx.ome.zarr'; - // const imagePath = '/astronaut.zarr'; const url = new URL(imagePath, document.location.origin); const image = await ZarrMultiscaleSpatialImage.fromUrl(url); const viewerElement = document.querySelector('itk-viewer'); if (!viewerElement) throw new Error('Could not find element'); const viewer = viewerElement.getActor(); - viewer.send({ type: 'setImage', image, name: 'image' }); }); diff --git a/packages/element/src/itk-viewer-element.ts b/packages/element/src/itk-viewer-element.ts index 719de1ca..0e9450e2 100644 --- a/packages/element/src/itk-viewer-element.ts +++ b/packages/element/src/itk-viewer-element.ts @@ -18,10 +18,7 @@ export class ItkViewer extends LitElement { } render() { - return html` -

Viewer

- - `; + return html``; } } From cfe5406b622bc695177c7a6c2fc6b0634f0aeaeb Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Wed, 31 Jan 2024 13:50:34 -0500 Subject: [PATCH 8/9] test(element): remove Viewer exists assertion --- packages/element/examples/compare.html | 2 +- packages/element/src/itk-image-info-viewport.cy.ts | 2 -- packages/element/src/itk-viewer-element.cy.ts | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/element/examples/compare.html b/packages/element/examples/compare.html index 24624284..b8bff9f6 100644 --- a/packages/element/examples/compare.html +++ b/packages/element/examples/compare.html @@ -4,7 +4,7 @@ - itk-view-2d + Compare diff --git a/packages/element/src/itk-image-info-viewport.cy.ts b/packages/element/src/itk-image-info-viewport.cy.ts index d664cbb9..657090b8 100644 --- a/packages/element/src/itk-image-info-viewport.cy.ts +++ b/packages/element/src/itk-image-info-viewport.cy.ts @@ -10,8 +10,6 @@ describe('ImageInfoViewport', () => { `); - - cy.get('itk-viewer').shadow().contains('Viewer'); }); it('has image info', () => { diff --git a/packages/element/src/itk-viewer-element.cy.ts b/packages/element/src/itk-viewer-element.cy.ts index b553abed..45fd4608 100644 --- a/packages/element/src/itk-viewer-element.cy.ts +++ b/packages/element/src/itk-viewer-element.cy.ts @@ -5,6 +5,5 @@ import './itk-viewer-element'; describe('Lit mount', () => { it('mounts', () => { cy.mount<'itk-viewer'>(html``); - cy.get('itk-viewer').shadow().contains('Viewer'); }); }); From ab5836a05e163e081d25abd8137d9c8d878b861c Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Wed, 31 Jan 2024 14:31:53 -0500 Subject: [PATCH 9/9] fix(camera): fresh context for each actor, not just machine --- packages/viewer/src/camera.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/viewer/src/camera.ts b/packages/viewer/src/camera.ts index 983e8e60..ec73dee9 100644 --- a/packages/viewer/src/camera.ts +++ b/packages/viewer/src/camera.ts @@ -90,13 +90,13 @@ export const cameraMachine = setup({ }).createMachine({ id: 'camera', initial: 'active', - context: { + context: () => ({ pose: createPose(), enableRotation: true, parallelScaleRatio: 1, verticalFieldOfView: 50, poseWatchers: [], - }, + }), states: { active: { on: { @@ -195,8 +195,8 @@ export const reset3d = ( // compute the radius of the enclosing sphere radius = Math.sqrt(radius) * 0.5; - const angle = verticalFieldOfView * (Math.PI / 180); // to radians - const distance = radius / Math.sin(angle * 0.5); + const radians = verticalFieldOfView * (Math.PI / 180); + const distance = radius / Math.sin(radians * 0.5); return { center, rotation: pose.rotation, distance }; }; @@ -227,10 +227,11 @@ export const reset2d = ( const xLength = getLength(viewBounds, 0); const yLength = getLength(viewBounds, 1); + // compute half the width or height of the viewport const parallelScale = 0.5 * Math.max(yLength, xLength / aspect); - const angle = verticalFieldOfView * (Math.PI / 180); // to radians - const distance = parallelScale / Math.tan(angle * 0.5); + const radians = verticalFieldOfView * (Math.PI / 180); + const distance = parallelScale / Math.tan(radians * 0.5); return { center, rotation: pose.rotation, distance, parallelScale }; };