diff --git a/example/package-lock.json b/example/package-lock.json
index b2255813..40ffcbfb 100644
--- a/example/package-lock.json
+++ b/example/package-lock.json
@@ -1,341 +1,341 @@
-{
- "name": "react-volume-viewer-example",
- "version": "0.0.0",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "react-volume-viewer-example",
- "version": "0.0.0",
- "dependencies": {
- "react": "file:../node_modules/react",
- "react-dom": "file:../node_modules/react-dom",
- "react-scripts": "file:../node_modules/react-scripts",
- "react-volume-viewer": "file:.."
- }
- },
- "..": {
- "version": "0.3.0",
- "license": "MIT",
- "dependencies": {
- "@reach/listbox": "^0.16.2",
- "aframe": "^1.2.0",
- "aframe-event-set-component": "^5.0.0",
- "aframe-orbit-controls": "^1.3.0",
- "d3-scale": "^4.0.2",
- "rc-slider": "^9.7.4"
- },
- "devDependencies": {
- "@babel/core": "^7.0.0",
- "@rollup/plugin-babel": "^5.2.0",
- "@rollup/plugin-commonjs": "^21.0.0",
- "@rollup/plugin-node-resolve": "^13.0.6",
- "@rollup/plugin-url": "^6.1.0",
- "babel-eslint": "^10.0.3",
- "babel-preset-stage-0": "^6.24.1",
- "cross-env": "^7.0.3",
- "eslint-config-react-app": "^7.0.0",
- "gh-pages": "^3.2.3",
- "npm-run-all": "^4.1.5",
- "prettier": "^2.4.1",
- "prop-types": "^15.7.2",
- "react": "^17.0.0",
- "react-dom": "^17.0.0",
- "react-scripts": "^5.0.0",
- "rollup": "^2.59.0",
- "rollup-plugin-peer-deps-external": "^2.2.4",
- "rollup-plugin-postcss": "^4.0.1",
- "styled-components": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "react": "^17.0.0",
- "react-dom": "^17.0.0",
- "styled-components": "^5.0.0"
- }
- },
- "../node_modules/react": {
- "version": "17.0.2",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "../node_modules/react-dom": {
- "version": "17.0.2",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "scheduler": "^0.20.2"
- },
- "peerDependencies": {
- "react": "17.0.2"
- }
- },
- "../node_modules/react-scripts": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.16.0",
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
- "@svgr/webpack": "^5.5.0",
- "babel-jest": "^27.4.2",
- "babel-loader": "^8.2.3",
- "babel-plugin-named-asset-import": "^0.3.8",
- "babel-preset-react-app": "^10.0.1",
- "bfj": "^7.0.2",
- "browserslist": "^4.18.1",
- "camelcase": "^6.2.1",
- "case-sensitive-paths-webpack-plugin": "^2.4.0",
- "css-loader": "^6.5.1",
- "css-minimizer-webpack-plugin": "^3.2.0",
- "dotenv": "^10.0.0",
- "dotenv-expand": "^5.1.0",
- "eslint": "^8.3.0",
- "eslint-config-react-app": "^7.0.0",
- "eslint-webpack-plugin": "^3.1.1",
- "file-loader": "^6.2.0",
- "fs-extra": "^10.0.0",
- "html-webpack-plugin": "^5.5.0",
- "identity-obj-proxy": "^3.0.0",
- "jest": "^27.4.3",
- "jest-resolve": "^27.4.2",
- "jest-watch-typeahead": "^1.0.0",
- "mini-css-extract-plugin": "^2.4.5",
- "postcss": "^8.4.4",
- "postcss-flexbugs-fixes": "^5.0.2",
- "postcss-loader": "^6.2.1",
- "postcss-normalize": "^10.0.1",
- "postcss-preset-env": "^7.0.1",
- "prompts": "^2.4.2",
- "react-app-polyfill": "^3.0.0",
- "react-dev-utils": "^12.0.0",
- "react-refresh": "^0.11.0",
- "resolve": "^1.20.0",
- "resolve-url-loader": "^4.0.0",
- "sass-loader": "^12.3.0",
- "semver": "^7.3.5",
- "source-map-loader": "^3.0.0",
- "style-loader": "^3.3.1",
- "tailwindcss": "^3.0.2",
- "terser-webpack-plugin": "^5.2.5",
- "webpack": "^5.64.4",
- "webpack-dev-server": "^4.6.0",
- "webpack-manifest-plugin": "^4.0.2",
- "workbox-webpack-plugin": "^6.4.1"
- },
- "bin": {
- "react-scripts": "bin/react-scripts.js"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "optionalDependencies": {
- "fsevents": "^2.3.2"
- },
- "peerDependencies": {
- "react": ">= 16",
- "typescript": "^3.2.1 || ^4"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/react": {
- "resolved": "../node_modules/react",
- "link": true
- },
- "node_modules/react-dom": {
- "resolved": "../node_modules/react-dom",
- "link": true
- },
- "node_modules/react-scripts": {
- "resolved": "../node_modules/react-scripts",
- "link": true
- },
- "node_modules/react-volume-viewer": {
- "resolved": "..",
- "link": true
- }
- },
- "dependencies": {
- "react": {
- "version": "file:../node_modules/react",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "react-dom": {
- "version": "file:../node_modules/react-dom",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "scheduler": "^0.20.2"
- }
- },
- "react-scripts": {
- "version": "file:../node_modules/react-scripts",
- "requires": {
- "@babel/core": "^7.16.0",
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
- "@svgr/webpack": "^5.5.0",
- "babel-jest": "^27.4.2",
- "babel-loader": "^8.2.3",
- "babel-plugin-named-asset-import": "^0.3.8",
- "babel-preset-react-app": "^10.0.1",
- "bfj": "^7.0.2",
- "browserslist": "^4.18.1",
- "camelcase": "^6.2.1",
- "case-sensitive-paths-webpack-plugin": "^2.4.0",
- "css-loader": "^6.5.1",
- "css-minimizer-webpack-plugin": "^3.2.0",
- "dotenv": "^10.0.0",
- "dotenv-expand": "^5.1.0",
- "eslint": "^8.3.0",
- "eslint-config-react-app": "^7.0.0",
- "eslint-webpack-plugin": "^3.1.1",
- "file-loader": "^6.2.0",
- "fs-extra": "^10.0.0",
- "fsevents": "^2.3.2",
- "html-webpack-plugin": "^5.5.0",
- "identity-obj-proxy": "^3.0.0",
- "jest": "^27.4.3",
- "jest-resolve": "^27.4.2",
- "jest-watch-typeahead": "^1.0.0",
- "mini-css-extract-plugin": "^2.4.5",
- "postcss": "^8.4.4",
- "postcss-flexbugs-fixes": "^5.0.2",
- "postcss-loader": "^6.2.1",
- "postcss-normalize": "^10.0.1",
- "postcss-preset-env": "^7.0.1",
- "prompts": "^2.4.2",
- "react-app-polyfill": "^3.0.0",
- "react-dev-utils": "^12.0.0",
- "react-refresh": "^0.11.0",
- "resolve": "^1.20.0",
- "resolve-url-loader": "^4.0.0",
- "sass-loader": "^12.3.0",
- "semver": "^7.3.5",
- "source-map-loader": "^3.0.0",
- "style-loader": "^3.3.1",
- "tailwindcss": "^3.0.2",
- "terser-webpack-plugin": "^5.2.5",
- "webpack": "^5.64.4",
- "webpack-dev-server": "^4.6.0",
- "webpack-manifest-plugin": "^4.0.2",
- "workbox-webpack-plugin": "^6.4.1"
- }
- },
- "react-volume-viewer": {
- "version": "file:..",
- "requires": {
- "@babel/core": "^7.0.0",
- "@reach/listbox": "^0.16.2",
- "@rollup/plugin-babel": "^5.2.0",
- "@rollup/plugin-commonjs": "^21.0.0",
- "@rollup/plugin-node-resolve": "^13.0.6",
- "@rollup/plugin-url": "^6.1.0",
- "aframe": "^1.2.0",
- "aframe-event-set-component": "^5.0.0",
- "aframe-orbit-controls": "^1.3.0",
- "babel-eslint": "^10.0.3",
- "babel-preset-stage-0": "^6.24.1",
- "cross-env": "^7.0.3",
- "d3-scale": "^4.0.2",
- "eslint-config-react-app": "^7.0.0",
- "gh-pages": "^3.2.3",
- "npm-run-all": "^4.1.5",
- "prettier": "^2.4.1",
- "prop-types": "^15.7.2",
- "rc-slider": "^9.7.4",
- "react": "^17.0.0",
- "react-dom": "^17.0.0",
- "react-scripts": "^5.0.0",
- "rollup": "^2.59.0",
- "rollup-plugin-peer-deps-external": "^2.2.4",
- "rollup-plugin-postcss": "^4.0.1",
- "styled-components": "^5.0.0"
- },
- "dependencies": {
- "react": {
- "version": "17.0.2",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "react-dom": {
- "version": "17.0.2",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "scheduler": "^0.20.2"
- }
- },
- "react-scripts": {
- "version": "5.0.0",
- "requires": {
- "@babel/core": "^7.16.0",
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
- "@svgr/webpack": "^5.5.0",
- "babel-jest": "^27.4.2",
- "babel-loader": "^8.2.3",
- "babel-plugin-named-asset-import": "^0.3.8",
- "babel-preset-react-app": "^10.0.1",
- "bfj": "^7.0.2",
- "browserslist": "^4.18.1",
- "camelcase": "^6.2.1",
- "case-sensitive-paths-webpack-plugin": "^2.4.0",
- "css-loader": "^6.5.1",
- "css-minimizer-webpack-plugin": "^3.2.0",
- "dotenv": "^10.0.0",
- "dotenv-expand": "^5.1.0",
- "eslint": "^8.3.0",
- "eslint-config-react-app": "^7.0.0",
- "eslint-webpack-plugin": "^3.1.1",
- "file-loader": "^6.2.0",
- "fs-extra": "^10.0.0",
- "fsevents": "^2.3.2",
- "html-webpack-plugin": "^5.5.0",
- "identity-obj-proxy": "^3.0.0",
- "jest": "^27.4.3",
- "jest-resolve": "^27.4.2",
- "jest-watch-typeahead": "^1.0.0",
- "mini-css-extract-plugin": "^2.4.5",
- "postcss": "^8.4.4",
- "postcss-flexbugs-fixes": "^5.0.2",
- "postcss-loader": "^6.2.1",
- "postcss-normalize": "^10.0.1",
- "postcss-preset-env": "^7.0.1",
- "prompts": "^2.4.2",
- "react-app-polyfill": "^3.0.0",
- "react-dev-utils": "^12.0.0",
- "react-refresh": "^0.11.0",
- "resolve": "^1.20.0",
- "resolve-url-loader": "^4.0.0",
- "sass-loader": "^12.3.0",
- "semver": "^7.3.5",
- "source-map-loader": "^3.0.0",
- "style-loader": "^3.3.1",
- "tailwindcss": "^3.0.2",
- "terser-webpack-plugin": "^5.2.5",
- "webpack": "^5.64.4",
- "webpack-dev-server": "^4.6.0",
- "webpack-manifest-plugin": "^4.0.2",
- "workbox-webpack-plugin": "^6.4.1"
- }
- }
- }
- }
- }
-}
+{
+ "name": "react-volume-viewer-example",
+ "version": "0.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "react-volume-viewer-example",
+ "version": "0.0.0",
+ "dependencies": {
+ "react": "file:../node_modules/react",
+ "react-dom": "file:../node_modules/react-dom",
+ "react-scripts": "file:../node_modules/react-scripts",
+ "react-volume-viewer": "file:.."
+ }
+ },
+ "..": {
+ "version": "0.3.1",
+ "license": "MIT",
+ "dependencies": {
+ "@reach/listbox": "^0.16.2",
+ "aframe": "^1.2.0",
+ "d3-scale": "^4.0.2",
+ "rc-slider": "^9.7.4"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.0.0",
+ "@rollup/plugin-babel": "^5.2.0",
+ "@rollup/plugin-commonjs": "^21.0.0",
+ "@rollup/plugin-node-resolve": "^13.0.6",
+ "@rollup/plugin-url": "^6.1.0",
+ "babel-eslint": "^10.0.3",
+ "babel-preset-stage-0": "^6.24.1",
+ "cross-env": "^7.0.3",
+ "eslint-config-react-app": "^7.0.0",
+ "gh-pages": "^3.2.3",
+ "npm-run-all": "^4.1.5",
+ "prettier": "^2.4.1",
+ "prop-types": "^15.7.2",
+ "react": "^17.0.0",
+ "react-dom": "^17.0.0",
+ "react-scripts": "^5.0.0",
+ "rollup": "^2.59.0",
+ "rollup-plugin-peer-deps-external": "^2.2.4",
+ "rollup-plugin-postcss": "^4.0.1",
+ "styled-components": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": "^17.0.0",
+ "react-dom": "^17.0.0",
+ "styled-components": "^5.0.0"
+ }
+ },
+ "../node_modules/react": {
+ "version": "17.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "../node_modules/react-dom": {
+ "version": "17.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "scheduler": "^0.20.2"
+ },
+ "peerDependencies": {
+ "react": "17.0.2"
+ }
+ },
+ "../node_modules/react-scripts": {
+ "version": "5.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.16.0",
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
+ "@svgr/webpack": "^5.5.0",
+ "babel-jest": "^27.4.2",
+ "babel-loader": "^8.2.3",
+ "babel-plugin-named-asset-import": "^0.3.8",
+ "babel-preset-react-app": "^10.0.1",
+ "bfj": "^7.0.2",
+ "browserslist": "^4.18.1",
+ "camelcase": "^6.2.1",
+ "case-sensitive-paths-webpack-plugin": "^2.4.0",
+ "css-loader": "^6.5.1",
+ "css-minimizer-webpack-plugin": "^3.2.0",
+ "dotenv": "^10.0.0",
+ "dotenv-expand": "^5.1.0",
+ "eslint": "^8.3.0",
+ "eslint-config-react-app": "^7.0.0",
+ "eslint-webpack-plugin": "^3.1.1",
+ "file-loader": "^6.2.0",
+ "fs-extra": "^10.0.0",
+ "html-webpack-plugin": "^5.5.0",
+ "identity-obj-proxy": "^3.0.0",
+ "jest": "^27.4.3",
+ "jest-resolve": "^27.4.2",
+ "jest-watch-typeahead": "^1.0.0",
+ "mini-css-extract-plugin": "^2.4.5",
+ "postcss": "^8.4.4",
+ "postcss-flexbugs-fixes": "^5.0.2",
+ "postcss-loader": "^6.2.1",
+ "postcss-normalize": "^10.0.1",
+ "postcss-preset-env": "^7.0.1",
+ "prompts": "^2.4.2",
+ "react-app-polyfill": "^3.0.0",
+ "react-dev-utils": "^12.0.0",
+ "react-refresh": "^0.11.0",
+ "resolve": "^1.20.0",
+ "resolve-url-loader": "^4.0.0",
+ "sass-loader": "^12.3.0",
+ "semver": "^7.3.5",
+ "source-map-loader": "^3.0.0",
+ "style-loader": "^3.3.1",
+ "tailwindcss": "^3.0.2",
+ "terser-webpack-plugin": "^5.2.5",
+ "webpack": "^5.64.4",
+ "webpack-dev-server": "^4.6.0",
+ "webpack-manifest-plugin": "^4.0.2",
+ "workbox-webpack-plugin": "^6.4.1"
+ },
+ "bin": {
+ "react-scripts": "bin/react-scripts.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ },
+ "peerDependencies": {
+ "react": ">= 16",
+ "typescript": "^3.2.1 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react": {
+ "resolved": "../node_modules/react",
+ "link": true
+ },
+ "node_modules/react-dom": {
+ "resolved": "../node_modules/react-dom",
+ "link": true
+ },
+ "node_modules/react-scripts": {
+ "resolved": "../node_modules/react-scripts",
+ "link": true
+ },
+ "node_modules/react-volume-viewer": {
+ "resolved": "..",
+ "link": true
+ }
+ },
+ "dependencies": {
+ "react": {
+ "version": "file:../node_modules/react",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "react-dom": {
+ "version": "file:../node_modules/react-dom",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "scheduler": "^0.20.2"
+ }
+ },
+ "react-scripts": {
+ "version": "file:../node_modules/react-scripts",
+ "requires": {
+ "@babel/core": "^7.16.0",
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
+ "@svgr/webpack": "^5.5.0",
+ "babel-jest": "^27.4.2",
+ "babel-loader": "^8.2.3",
+ "babel-plugin-named-asset-import": "^0.3.8",
+ "babel-preset-react-app": "^10.0.1",
+ "bfj": "^7.0.2",
+ "browserslist": "^4.18.1",
+ "camelcase": "^6.2.1",
+ "case-sensitive-paths-webpack-plugin": "^2.4.0",
+ "css-loader": "^6.5.1",
+ "css-minimizer-webpack-plugin": "^3.2.0",
+ "dotenv": "^10.0.0",
+ "dotenv-expand": "^5.1.0",
+ "eslint": "^8.3.0",
+ "eslint-config-react-app": "^7.0.0",
+ "eslint-webpack-plugin": "^3.1.1",
+ "file-loader": "^6.2.0",
+ "fs-extra": "^10.0.0",
+ "fsevents": "^2.3.2",
+ "html-webpack-plugin": "^5.5.0",
+ "identity-obj-proxy": "^3.0.0",
+ "jest": "^27.4.3",
+ "jest-resolve": "^27.4.2",
+ "jest-watch-typeahead": "^1.0.0",
+ "mini-css-extract-plugin": "^2.4.5",
+ "postcss": "^8.4.4",
+ "postcss-flexbugs-fixes": "^5.0.2",
+ "postcss-loader": "^6.2.1",
+ "postcss-normalize": "^10.0.1",
+ "postcss-preset-env": "^7.0.1",
+ "prompts": "^2.4.2",
+ "react": "^17.0.2",
+ "react-app-polyfill": "^3.0.0",
+ "react-dev-utils": "^12.0.0",
+ "react-dom": "^17.0.2",
+ "react-refresh": "^0.11.0",
+ "resolve": "^1.20.0",
+ "resolve-url-loader": "^4.0.0",
+ "sass-loader": "^12.3.0",
+ "semver": "^7.3.5",
+ "source-map-loader": "^3.0.0",
+ "style-loader": "^3.3.1",
+ "tailwindcss": "^3.0.2",
+ "terser-webpack-plugin": "^5.2.5",
+ "webpack": "^5.64.4",
+ "webpack-dev-server": "^4.6.0",
+ "webpack-manifest-plugin": "^4.0.2",
+ "workbox-webpack-plugin": "^6.4.1"
+ }
+ },
+ "react-volume-viewer": {
+ "version": "file:..",
+ "requires": {
+ "@babel/core": "^7.0.0",
+ "@reach/listbox": "^0.16.2",
+ "@rollup/plugin-babel": "^5.2.0",
+ "@rollup/plugin-commonjs": "^21.0.0",
+ "@rollup/plugin-node-resolve": "^13.0.6",
+ "@rollup/plugin-url": "^6.1.0",
+ "aframe": "^1.2.0",
+ "babel-eslint": "^10.0.3",
+ "babel-preset-stage-0": "^6.24.1",
+ "cross-env": "^7.0.3",
+ "d3-scale": "^4.0.2",
+ "eslint-config-react-app": "^7.0.0",
+ "gh-pages": "^3.2.3",
+ "npm-run-all": "^4.1.5",
+ "prettier": "^2.4.1",
+ "prop-types": "^15.7.2",
+ "rc-slider": "^9.7.4",
+ "react": "^17.0.0",
+ "react-dom": "^17.0.0",
+ "react-scripts": "^5.0.0",
+ "rollup": "^2.59.0",
+ "rollup-plugin-peer-deps-external": "^2.2.4",
+ "rollup-plugin-postcss": "^4.0.1",
+ "styled-components": "^5.0.0"
+ },
+ "dependencies": {
+ "react": {
+ "version": "17.0.2",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "react-dom": {
+ "version": "17.0.2",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "scheduler": "^0.20.2"
+ }
+ },
+ "react-scripts": {
+ "version": "5.0.0",
+ "requires": {
+ "@babel/core": "^7.16.0",
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
+ "@svgr/webpack": "^5.5.0",
+ "babel-jest": "^27.4.2",
+ "babel-loader": "^8.2.3",
+ "babel-plugin-named-asset-import": "^0.3.8",
+ "babel-preset-react-app": "^10.0.1",
+ "bfj": "^7.0.2",
+ "browserslist": "^4.18.1",
+ "camelcase": "^6.2.1",
+ "case-sensitive-paths-webpack-plugin": "^2.4.0",
+ "css-loader": "^6.5.1",
+ "css-minimizer-webpack-plugin": "^3.2.0",
+ "dotenv": "^10.0.0",
+ "dotenv-expand": "^5.1.0",
+ "eslint": "^8.3.0",
+ "eslint-config-react-app": "^7.0.0",
+ "eslint-webpack-plugin": "^3.1.1",
+ "file-loader": "^6.2.0",
+ "fs-extra": "^10.0.0",
+ "fsevents": "^2.3.2",
+ "html-webpack-plugin": "^5.5.0",
+ "identity-obj-proxy": "^3.0.0",
+ "jest": "^27.4.3",
+ "jest-resolve": "^27.4.2",
+ "jest-watch-typeahead": "^1.0.0",
+ "mini-css-extract-plugin": "^2.4.5",
+ "postcss": "^8.4.4",
+ "postcss-flexbugs-fixes": "^5.0.2",
+ "postcss-loader": "^6.2.1",
+ "postcss-normalize": "^10.0.1",
+ "postcss-preset-env": "^7.0.1",
+ "prompts": "^2.4.2",
+ "react": "^17.0.2",
+ "react-app-polyfill": "^3.0.0",
+ "react-dev-utils": "^12.0.0",
+ "react-dom": "^17.0.2",
+ "react-refresh": "^0.11.0",
+ "resolve": "^1.20.0",
+ "resolve-url-loader": "^4.0.0",
+ "sass-loader": "^12.3.0",
+ "semver": "^7.3.5",
+ "source-map-loader": "^3.0.0",
+ "style-loader": "^3.3.1",
+ "tailwindcss": "^3.0.2",
+ "terser-webpack-plugin": "^5.2.5",
+ "webpack": "^5.64.4",
+ "webpack-dev-server": "^4.6.0",
+ "webpack-manifest-plugin": "^4.0.2",
+ "workbox-webpack-plugin": "^6.4.1"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/example/src/App.js b/example/src/App.js
index 6f052ce9..16a38d47 100644
--- a/example/src/App.js
+++ b/example/src/App.js
@@ -99,7 +99,7 @@ function App() {
}
const StyledVolumeViewer = styled(VolumeViewer)`
- height: 75vh;
+ height: 76vh;
`;
const Main = styled.main`
diff --git a/package-lock.json b/package-lock.json
index b4f3c00e..de0dba7b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,8 +11,6 @@
"dependencies": {
"@reach/listbox": "^0.16.2",
"aframe": "^1.2.0",
- "aframe-event-set-component": "^5.0.0",
- "aframe-orbit-controls": "^1.3.0",
"d3-scale": "^4.0.2",
"rc-slider": "^9.7.4"
},
@@ -69,9 +67,9 @@
}
},
"node_modules/@babel/core": {
- "version": "7.16.10",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.10.tgz",
- "integrity": "sha512-pbiIdZbCiMx/MM6toR+OfXarYix3uz0oVsnNtfdAGTcCTu3w/JGF8JhirevXLBJUu0WguSZI12qpKnx7EeMyLA==",
+ "version": "7.16.12",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz",
+ "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.16.7",
@@ -79,7 +77,7 @@
"@babel/helper-compilation-targets": "^7.16.7",
"@babel/helper-module-transforms": "^7.16.7",
"@babel/helpers": "^7.16.7",
- "@babel/parser": "^7.16.10",
+ "@babel/parser": "^7.16.12",
"@babel/template": "^7.16.7",
"@babel/traverse": "^7.16.10",
"@babel/types": "^7.16.8",
@@ -514,9 +512,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.16.10",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.10.tgz",
- "integrity": "sha512-Sm/S9Or6nN8uiFsQU1yodyDW3MWXQhFeqzMPM+t8MJjM+pLsnFVxFZzkpXKvUXh+Gz9cbMoYYs484+Jw/NTEFQ==",
+ "version": "7.16.12",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz",
+ "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -2042,9 +2040,9 @@
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz",
- "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz",
+ "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==",
"dev": true,
"dependencies": {
"@humanwhocodes/object-schema": "^1.2.1",
@@ -3685,9 +3683,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "17.0.10",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.10.tgz",
- "integrity": "sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==",
+ "version": "17.0.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz",
+ "integrity": "sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw==",
"dev": true
},
"node_modules/@types/parse-json": {
@@ -3800,14 +3798,14 @@
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.0.tgz",
- "integrity": "sha512-XXVKnMsq2fuu9K2KsIxPUGqb6xAImz8MEChClbXmE3VbveFtBUU5bzM6IPVWqzyADIgdkS2Ws/6Xo7W2TeZWjQ==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.1.tgz",
+ "integrity": "sha512-xN3CYqFlyE/qOcy978/L0xLR2HlcAGIyIK5sMOasxaaAPfQRj/MmMV6OC3I7NZO84oEUdWCOju34Z9W8E0pFDQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.10.0",
- "@typescript-eslint/type-utils": "5.10.0",
- "@typescript-eslint/utils": "5.10.0",
+ "@typescript-eslint/scope-manager": "5.10.1",
+ "@typescript-eslint/type-utils": "5.10.1",
+ "@typescript-eslint/utils": "5.10.1",
"debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
@@ -3848,12 +3846,12 @@
}
},
"node_modules/@typescript-eslint/experimental-utils": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.10.0.tgz",
- "integrity": "sha512-GeQAPqQMI5DVMGOUwGbSR+NdsirryyKOgUFRTWInhlsKUArns/MVnXmPpzxfrzB1nU36cT5WJAwmfCsjoaVBWg==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.10.1.tgz",
+ "integrity": "sha512-Ryeb8nkJa/1zKl8iujNtJC8tgj6PgaY0sDUnrTqbmC70nrKKkZaHfiRDTcqICmCSCEQyLQcJAoh0AukLaIaGTw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/utils": "5.10.0"
+ "@typescript-eslint/utils": "5.10.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -3867,14 +3865,14 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.0.tgz",
- "integrity": "sha512-pJB2CCeHWtwOAeIxv8CHVGJhI5FNyJAIpx5Pt72YkK3QfEzt6qAlXZuyaBmyfOdM62qU0rbxJzNToPTVeJGrQw==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.1.tgz",
+ "integrity": "sha512-GReo3tjNBwR5RnRO0K2wDIDN31cM3MmDtgyQ85oAxAmC5K3j/g85IjP+cDfcqDsDDBf1HNKQAD0WqOYL8jXqUA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.10.0",
- "@typescript-eslint/types": "5.10.0",
- "@typescript-eslint/typescript-estree": "5.10.0",
+ "@typescript-eslint/scope-manager": "5.10.1",
+ "@typescript-eslint/types": "5.10.1",
+ "@typescript-eslint/typescript-estree": "5.10.1",
"debug": "^4.3.2"
},
"engines": {
@@ -3894,13 +3892,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.0.tgz",
- "integrity": "sha512-tgNgUgb4MhqK6DoKn3RBhyZ9aJga7EQrw+2/OiDk5hKf3pTVZWyqBi7ukP+Z0iEEDMF5FDa64LqODzlfE4O/Dg==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.1.tgz",
+ "integrity": "sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.10.0",
- "@typescript-eslint/visitor-keys": "5.10.0"
+ "@typescript-eslint/types": "5.10.1",
+ "@typescript-eslint/visitor-keys": "5.10.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -3911,12 +3909,12 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.0.tgz",
- "integrity": "sha512-TzlyTmufJO5V886N+hTJBGIfnjQDQ32rJYxPaeiyWKdjsv2Ld5l8cbS7pxim4DeNs62fKzRSt8Q14Evs4JnZyQ==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.1.tgz",
+ "integrity": "sha512-AfVJkV8uck/UIoDqhu+ptEdBoQATON9GXnhOpPLzkQRJcSChkvD//qsz9JVffl2goxX+ybs5klvacE9vmrQyCw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/utils": "5.10.0",
+ "@typescript-eslint/utils": "5.10.1",
"debug": "^4.3.2",
"tsutils": "^3.21.0"
},
@@ -3937,9 +3935,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.0.tgz",
- "integrity": "sha512-wUljCgkqHsMZbw60IbOqT/puLfyqqD5PquGiBo1u1IS3PLxdi3RDGlyf032IJyh+eQoGhz9kzhtZa+VC4eWTlQ==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.1.tgz",
+ "integrity": "sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -3950,13 +3948,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.0.tgz",
- "integrity": "sha512-x+7e5IqfwLwsxTdliHRtlIYkgdtYXzE0CkFeV6ytAqq431ZyxCFzNMNR5sr3WOlIG/ihVZr9K/y71VHTF/DUQA==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.1.tgz",
+ "integrity": "sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.10.0",
- "@typescript-eslint/visitor-keys": "5.10.0",
+ "@typescript-eslint/types": "5.10.1",
+ "@typescript-eslint/visitor-keys": "5.10.1",
"debug": "^4.3.2",
"globby": "^11.0.4",
"is-glob": "^4.0.3",
@@ -3992,15 +3990,15 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.0.tgz",
- "integrity": "sha512-IGYwlt1CVcFoE2ueW4/ioEwybR60RAdGeiJX/iDAw0t5w0wK3S7QncDwpmsM70nKgGTuVchEWB8lwZwHqPAWRg==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.1.tgz",
+ "integrity": "sha512-RRmlITiUbLuTRtn/gcPRi4202niF+q7ylFLCKu4c+O/PcpRvZ/nAUwQ2G00bZgpWkhrNLNnvhZLbDn8Ml0qsQw==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.10.0",
- "@typescript-eslint/types": "5.10.0",
- "@typescript-eslint/typescript-estree": "5.10.0",
+ "@typescript-eslint/scope-manager": "5.10.1",
+ "@typescript-eslint/types": "5.10.1",
+ "@typescript-eslint/typescript-estree": "5.10.1",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
},
@@ -4038,12 +4036,12 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.0.tgz",
- "integrity": "sha512-GMxj0K1uyrFLPKASLmZzCuSddmjZVbVj3Ouy5QVuIGKZopxvOr24JsS7gruz6C3GExE01mublZ3mIBOaon9zuQ==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.1.tgz",
+ "integrity": "sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/types": "5.10.1",
"eslint-visitor-keys": "^3.0.0"
},
"engines": {
@@ -4374,32 +4372,6 @@
"npm": "^2.15.9"
}
},
- "node_modules/aframe-event-set-component": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/aframe-event-set-component/-/aframe-event-set-component-5.0.0.tgz",
- "integrity": "sha512-O9Bhs8Qu2cEilXQ6F2xUxxJIbaZEA2atdIxTwq5qPHRHaIa+8ZghkirUBicNs92aHR9QQwk6ZnRx+SmBXi+B9Q==",
- "dependencies": {
- "debug": "^2.6.9"
- }
- },
- "node_modules/aframe-event-set-component/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/aframe-event-set-component/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/aframe-orbit-controls": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/aframe-orbit-controls/-/aframe-orbit-controls-1.3.0.tgz",
- "integrity": "sha512-xRrarJR1kaGy6F0YS4iFBN4jaobeUDKu+C0dasJLEB1k3RZ+GsxSs6W7WmVOEQjMmuzDNDNV2TIsE/PK/hlx/w=="
- },
"node_modules/aframe/node_modules/debug": {
"version": "2.2.0",
"resolved": "git+ssh://git@github.com/ngokevin/debug.git#ef5f8e66d49ce8bc64c6f282c15f8b7164409e3a",
@@ -4494,12 +4466,6 @@
"ajv": "^6.9.1"
}
},
- "node_modules/alphanum-sort": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
- "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
- "dev": true
- },
"node_modules/an-array": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz",
@@ -5918,9 +5884,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001300",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz",
- "integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==",
+ "version": "1.0.30001303",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001303.tgz",
+ "integrity": "sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ==",
"dev": true,
"funding": {
"type": "opencollective",
@@ -6041,9 +6007,9 @@
"integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
},
"node_modules/clean-css": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz",
- "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==",
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz",
+ "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==",
"dev": true,
"dependencies": {
"source-map": "~0.6.0"
@@ -6733,12 +6699,12 @@
}
},
"node_modules/cssnano": {
- "version": "5.0.15",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.15.tgz",
- "integrity": "sha512-ppZsS7oPpi2sfiyV5+i+NbB/3GtQ+ab2Vs1azrZaXWujUSN4o+WdTxlCZIMcT9yLW3VO/5yX3vpyDaQ1nIn8CQ==",
+ "version": "5.0.16",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz",
+ "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==",
"dev": true,
"dependencies": {
- "cssnano-preset-default": "^5.1.10",
+ "cssnano-preset-default": "^5.1.11",
"lilconfig": "^2.0.3",
"yaml": "^1.10.2"
},
@@ -6754,40 +6720,40 @@
}
},
"node_modules/cssnano-preset-default": {
- "version": "5.1.10",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.10.tgz",
- "integrity": "sha512-BcpSzUVygHMOnp9uG5rfPzTOCb0GAHQkqtUQx8j1oMNF9A1Q8hziOOhiM4bdICpmrBIU85BE64RD5XGYsVQZNA==",
+ "version": "5.1.11",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz",
+ "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==",
"dev": true,
"dependencies": {
"css-declaration-sorter": "^6.0.3",
- "cssnano-utils": "^3.0.0",
+ "cssnano-utils": "^3.0.1",
"postcss-calc": "^8.2.0",
- "postcss-colormin": "^5.2.3",
- "postcss-convert-values": "^5.0.2",
- "postcss-discard-comments": "^5.0.1",
- "postcss-discard-duplicates": "^5.0.1",
- "postcss-discard-empty": "^5.0.1",
- "postcss-discard-overridden": "^5.0.2",
- "postcss-merge-longhand": "^5.0.4",
- "postcss-merge-rules": "^5.0.4",
- "postcss-minify-font-values": "^5.0.2",
- "postcss-minify-gradients": "^5.0.4",
- "postcss-minify-params": "^5.0.3",
- "postcss-minify-selectors": "^5.1.1",
- "postcss-normalize-charset": "^5.0.1",
+ "postcss-colormin": "^5.2.4",
+ "postcss-convert-values": "^5.0.3",
+ "postcss-discard-comments": "^5.0.2",
+ "postcss-discard-duplicates": "^5.0.2",
+ "postcss-discard-empty": "^5.0.2",
+ "postcss-discard-overridden": "^5.0.3",
+ "postcss-merge-longhand": "^5.0.5",
+ "postcss-merge-rules": "^5.0.5",
+ "postcss-minify-font-values": "^5.0.3",
+ "postcss-minify-gradients": "^5.0.5",
+ "postcss-minify-params": "^5.0.4",
+ "postcss-minify-selectors": "^5.1.2",
+ "postcss-normalize-charset": "^5.0.2",
"postcss-normalize-display-values": "^5.0.2",
- "postcss-normalize-positions": "^5.0.2",
- "postcss-normalize-repeat-style": "^5.0.2",
- "postcss-normalize-string": "^5.0.2",
+ "postcss-normalize-positions": "^5.0.3",
+ "postcss-normalize-repeat-style": "^5.0.3",
+ "postcss-normalize-string": "^5.0.3",
"postcss-normalize-timing-functions": "^5.0.2",
- "postcss-normalize-unicode": "^5.0.2",
+ "postcss-normalize-unicode": "^5.0.3",
"postcss-normalize-url": "^5.0.4",
- "postcss-normalize-whitespace": "^5.0.2",
- "postcss-ordered-values": "^5.0.3",
+ "postcss-normalize-whitespace": "^5.0.3",
+ "postcss-ordered-values": "^5.0.4",
"postcss-reduce-initial": "^5.0.2",
- "postcss-reduce-transforms": "^5.0.2",
+ "postcss-reduce-transforms": "^5.0.3",
"postcss-svgo": "^5.0.3",
- "postcss-unique-selectors": "^5.0.2"
+ "postcss-unique-selectors": "^5.0.3"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
@@ -6797,9 +6763,9 @@
}
},
"node_modules/cssnano-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.0.tgz",
- "integrity": "sha512-Pzs7/BZ6OgT+tXXuF12DKR8SmSbzUeVYCtMBbS8lI0uAm3mrYmkyqCXXPsQESI6kmLfEVBppbdVY/el3hg3nAA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz",
+ "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==",
"dev": true,
"engines": {
"node": "^10 || ^12 || >=14.0"
@@ -7444,9 +7410,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.49",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.49.tgz",
- "integrity": "sha512-k/0t1TRfonHIp8TJKfjBu2cKj8MqYTiEpOhci+q7CVEE5xnCQnx1pTa+V8b/sdhe4S3PR4p4iceEQWhGrKQORQ==",
+ "version": "1.4.56",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.56.tgz",
+ "integrity": "sha512-0k/S0FQqRRpJbX7YUjwCcLZ8D42RqGKtaiq90adXBOYgTIWwLA/g3toO8k9yEpqU8iC4QyaWYYWSTBIna8WV4g==",
"dev": true
},
"node_modules/email-addresses": {
@@ -7795,9 +7761,9 @@
}
},
"node_modules/eslint-module-utils": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz",
- "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==",
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
+ "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
"dev": true,
"dependencies": {
"debug": "^3.2.7",
@@ -8004,9 +7970,9 @@
}
},
"node_modules/eslint-plugin-testing-library": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.0.3.tgz",
- "integrity": "sha512-tKZ9G+HnIOnYAhXeoBCiAT8LOdU3m1VquBTKsBW/5zAaB30vq7gC60DIayPfMJt8EZBlqPVzGqSN57sIFmTunQ==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.0.4.tgz",
+ "integrity": "sha512-zA/NfAENCsJXujvwwiap5gsqLp2U6X7m2XA5nOksl4zzb6GpUmRNAleCll58rEP0brFVj7DZBprlIlMGIhoC7Q==",
"dev": true,
"dependencies": {
"@typescript-eslint/experimental-utils": "^5.9.0"
@@ -8687,9 +8653,9 @@
}
},
"node_modules/flatted": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz",
- "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==",
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
"dev": true
},
"node_modules/flatten-vertex-data": {
@@ -9630,12 +9596,12 @@
}
},
"node_modules/http-proxy-middleware": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz",
- "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz",
+ "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==",
"dev": true,
"dependencies": {
- "@types/http-proxy": "^1.17.5",
+ "@types/http-proxy": "^1.17.8",
"http-proxy": "^1.18.1",
"is-glob": "^4.0.1",
"is-plain-obj": "^3.0.0",
@@ -9643,6 +9609,9 @@
},
"engines": {
"node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "@types/express": "^4.17.13"
}
},
"node_modules/https-proxy-agent": {
@@ -12822,9 +12791,9 @@
}
},
"node_modules/mini-css-extract-plugin": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.2.tgz",
- "integrity": "sha512-Lwgq9qLNyBK6yNLgzssXnq4r2+mB9Mz3cJWlM8kseysHIvTicFhDNimFgY94jjqlwhNzLPsq8wv4X+vOHtMdYA==",
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz",
+ "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==",
"dev": true,
"dependencies": {
"schema-utils": "^4.0.0"
@@ -13758,9 +13727,9 @@
}
},
"node_modules/pirates": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz",
- "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
+ "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
"dev": true,
"engines": {
"node": ">= 6"
@@ -13988,9 +13957,9 @@
}
},
"node_modules/postcss-calc": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz",
- "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==",
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.3.tgz",
+ "integrity": "sha512-EGM2EBBWqP57N0E7N7WOLT116PJ39dwHVU01WO4XPPQLJfkL2xVgkMZ+TZvCfapj/uJH07UEfKHQNPHzSw/14Q==",
"dev": true,
"dependencies": {
"postcss-selector-parser": "^6.0.2",
@@ -14046,9 +14015,9 @@
}
},
"node_modules/postcss-colormin": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.3.tgz",
- "integrity": "sha512-dra4xoAjub2wha6RUXAgadHEn2lGxbj8drhFcIGLOMn914Eu7DkPUurugDXgstwttCYkJtZ/+PkWRWdp3UHRIA==",
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz",
+ "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==",
"dev": true,
"dependencies": {
"browserslist": "^4.16.6",
@@ -14064,12 +14033,12 @@
}
},
"node_modules/postcss-convert-values": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.2.tgz",
- "integrity": "sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz",
+ "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==",
"dev": true,
"dependencies": {
- "postcss-value-parser": "^4.1.0"
+ "postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
@@ -14136,9 +14105,9 @@
}
},
"node_modules/postcss-discard-comments": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz",
- "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz",
+ "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==",
"dev": true,
"engines": {
"node": "^10 || ^12 || >=14.0"
@@ -14148,9 +14117,9 @@
}
},
"node_modules/postcss-discard-duplicates": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz",
- "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz",
+ "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==",
"dev": true,
"engines": {
"node": "^10 || ^12 || >=14.0"
@@ -14160,9 +14129,9 @@
}
},
"node_modules/postcss-discard-empty": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz",
- "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz",
+ "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==",
"dev": true,
"engines": {
"node": "^10 || ^12 || >=14.0"
@@ -14172,9 +14141,9 @@
}
},
"node_modules/postcss-discard-overridden": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.2.tgz",
- "integrity": "sha512-+56BLP6NSSUuWUXjRgAQuho1p5xs/hU5Sw7+xt9S3JSg+7R6+WMGnJW7Hre/6tTuZ2xiXMB42ObkiZJ2hy/Pew==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz",
+ "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==",
"dev": true,
"engines": {
"node": "^10 || ^12 || >=14.0"
@@ -14418,13 +14387,13 @@
}
},
"node_modules/postcss-merge-longhand": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz",
- "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz",
+ "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==",
"dev": true,
"dependencies": {
- "postcss-value-parser": "^4.1.0",
- "stylehacks": "^5.0.1"
+ "postcss-value-parser": "^4.2.0",
+ "stylehacks": "^5.0.2"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
@@ -14434,14 +14403,14 @@
}
},
"node_modules/postcss-merge-rules": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.4.tgz",
- "integrity": "sha512-yOj7bW3NxlQxaERBB0lEY1sH5y+RzevjbdH4DBJurjKERNpknRByFNdNe+V72i5pIZL12woM9uGdS5xbSB+kDQ==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz",
+ "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==",
"dev": true,
"dependencies": {
"browserslist": "^4.16.6",
"caniuse-api": "^3.0.0",
- "cssnano-utils": "^3.0.0",
+ "cssnano-utils": "^3.0.1",
"postcss-selector-parser": "^6.0.5"
},
"engines": {
@@ -14452,9 +14421,9 @@
}
},
"node_modules/postcss-minify-font-values": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.2.tgz",
- "integrity": "sha512-R6MJZryq28Cw0AmnyhXrM7naqJZZLoa1paBltIzh2wM7yb4D45TLur+eubTQ4jCmZU9SGeZdWsc5KcSoqTMeTg==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz",
+ "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -14467,13 +14436,13 @@
}
},
"node_modules/postcss-minify-gradients": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.4.tgz",
- "integrity": "sha512-RVwZA7NC4R4J76u8X0Q0j+J7ItKUWAeBUJ8oEEZWmtv3Xoh19uNJaJwzNpsydQjk6PkuhRrK+YwwMf+c+68EYg==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz",
+ "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==",
"dev": true,
"dependencies": {
"colord": "^2.9.1",
- "cssnano-utils": "^3.0.0",
+ "cssnano-utils": "^3.0.1",
"postcss-value-parser": "^4.2.0"
},
"engines": {
@@ -14484,14 +14453,13 @@
}
},
"node_modules/postcss-minify-params": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.3.tgz",
- "integrity": "sha512-NY92FUikE+wralaiVexFd5gwb7oJTIDhgTNeIw89i1Ymsgt4RWiPXfz3bg7hDy4NL6gepcThJwOYNtZO/eNi7Q==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz",
+ "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==",
"dev": true,
"dependencies": {
- "alphanum-sort": "^1.0.2",
"browserslist": "^4.16.6",
- "cssnano-utils": "^3.0.0",
+ "cssnano-utils": "^3.0.1",
"postcss-value-parser": "^4.2.0"
},
"engines": {
@@ -14502,12 +14470,11 @@
}
},
"node_modules/postcss-minify-selectors": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.1.tgz",
- "integrity": "sha512-TOzqOPXt91O2luJInaVPiivh90a2SIK5Nf1Ea7yEIM/5w+XA5BGrZGUSW8aEx9pJ/oNj7ZJBhjvigSiBV+bC1Q==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz",
+ "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==",
"dev": true,
"dependencies": {
- "alphanum-sort": "^1.0.2",
"postcss-selector-parser": "^6.0.5"
},
"engines": {
@@ -14648,9 +14615,9 @@
}
},
"node_modules/postcss-normalize-charset": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz",
- "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz",
+ "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==",
"dev": true,
"engines": {
"node": "^10 || ^12 || >=14.0"
@@ -14675,9 +14642,9 @@
}
},
"node_modules/postcss-normalize-positions": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.2.tgz",
- "integrity": "sha512-tqghWFVDp2btqFg1gYob1etPNxXLNh3uVeWgZE2AQGh6b2F8AK2Gj36v5Vhyh+APwIzNjmt6jwZ9pTBP+/OM8g==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz",
+ "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -14690,9 +14657,9 @@
}
},
"node_modules/postcss-normalize-repeat-style": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.2.tgz",
- "integrity": "sha512-/rIZn8X9bBzC7KvY4iKUhXUGW3MmbXwfPF23jC9wT9xTi7kAvgj8sEgwxjixBmoL6MVa4WOgxNz2hAR6wTK8tw==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz",
+ "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -14705,9 +14672,9 @@
}
},
"node_modules/postcss-normalize-string": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.2.tgz",
- "integrity": "sha512-zaI1yzwL+a/FkIzUWMQoH25YwCYxi917J4pYm1nRXtdgiCdnlTkx5eRzqWEC64HtRa06WCJ9TIutpb6GmW4gFw==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz",
+ "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -14735,9 +14702,9 @@
}
},
"node_modules/postcss-normalize-unicode": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.2.tgz",
- "integrity": "sha512-3y/V+vjZ19HNcTizeqwrbZSUsE69ZMRHfiiyLAJb7C7hJtYmM4Gsbajy7gKagu97E8q5rlS9k8FhojA8cpGhWw==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz",
+ "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==",
"dev": true,
"dependencies": {
"browserslist": "^4.16.6",
@@ -14767,9 +14734,9 @@
}
},
"node_modules/postcss-normalize-whitespace": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.2.tgz",
- "integrity": "sha512-CXBx+9fVlzSgbk0IXA/dcZn9lXixnQRndnsPC5ht3HxlQ1bVh77KQDL1GffJx1LTzzfae8ftMulsjYmO2yegxA==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz",
+ "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -14782,12 +14749,12 @@
}
},
"node_modules/postcss-ordered-values": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.3.tgz",
- "integrity": "sha512-T9pDS+P9bWeFvqivXd5ACzQmrCmHjv3ZP+djn8E1UZY7iK79pFSm7i3WbKw2VSmFmdbMm8sQ12OPcNpzBo3Z2w==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz",
+ "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==",
"dev": true,
"dependencies": {
- "cssnano-utils": "^3.0.0",
+ "cssnano-utils": "^3.0.1",
"postcss-value-parser": "^4.2.0"
},
"engines": {
@@ -14912,9 +14879,9 @@
}
},
"node_modules/postcss-reduce-transforms": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.2.tgz",
- "integrity": "sha512-25HeDeFsgiPSUx69jJXZn8I06tMxLQJJNF5h7i9gsUg8iP4KOOJ8EX8fj3seeoLt3SLU2YDD6UPnDYVGUO7DEA==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz",
+ "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@@ -15035,12 +15002,11 @@
}
},
"node_modules/postcss-unique-selectors": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.2.tgz",
- "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz",
+ "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==",
"dev": true,
"dependencies": {
- "alphanum-sort": "^1.0.2",
"postcss-selector-parser": "^6.0.5"
},
"engines": {
@@ -15455,9 +15421,9 @@
}
},
"node_modules/rc-util": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.16.1.tgz",
- "integrity": "sha512-kSCyytvdb3aRxQacS/71ta6c+kBWvM1v8/2h9d/HaNWauc3qB8pLnF20PJ8NajkNN8gb+rR1l0eWO+D4Pz+LLQ==",
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.17.0.tgz",
+ "integrity": "sha512-HWuTIKzBeZQQ7IBqdokE0wMp/xx39/KfUJ0gcquBigoldDCrf3YBcWFHrrQlJG7sI82Wg8mwp1uAKV3zMGfAgg==",
"dependencies": {
"@babel/runtime": "^7.12.5",
"react-is": "^16.12.0",
@@ -16099,12 +16065,12 @@
"integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
},
"node_modules/resolve": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz",
- "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==",
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
"dev": true,
"dependencies": {
- "is-core-module": "^2.8.0",
+ "is-core-module": "^2.8.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -16249,9 +16215,9 @@
}
},
"node_modules/rollup": {
- "version": "2.64.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.64.0.tgz",
- "integrity": "sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==",
+ "version": "2.66.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.66.1.tgz",
+ "integrity": "sha512-crSgLhSkLMnKr4s9iZ/1qJCplgAgrRY+igWv8KhG/AjKOJ0YX/WpmANyn8oxrw+zenF3BXWDLa7Xl/QZISH+7w==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
@@ -17322,12 +17288,12 @@
}
},
"node_modules/stylehacks": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz",
- "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz",
+ "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==",
"dev": true,
"dependencies": {
- "browserslist": "^4.16.0",
+ "browserslist": "^4.16.6",
"postcss-selector-parser": "^6.0.4"
},
"engines": {
@@ -17532,20 +17498,20 @@
"integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ=="
},
"node_modules/tailwindcss": {
- "version": "3.0.15",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.15.tgz",
- "integrity": "sha512-bT2iy7FtjwgsXik4ZoJnHXR+SRCiGR1W95fVqpLZebr64m4ahwUwRbIAc5w5+2fzr1YF4Ct2eI7dojMRRl8sVQ==",
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.17.tgz",
+ "integrity": "sha512-OiHUsmOKQQEg/ocXaLIjk/kOz8EK2jF6iPuc1bQ4NsmhYl7sk70UDsGV02AJvBAAiJhinPCkDR8egT9qY+ulCw==",
"dev": true,
"dependencies": {
"arg": "^5.0.1",
"chalk": "^4.1.2",
- "chokidar": "^3.5.2",
+ "chokidar": "^3.5.3",
"color-name": "^1.1.4",
"cosmiconfig": "^7.0.1",
"detective": "^5.2.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
- "fast-glob": "^3.2.7",
+ "fast-glob": "^3.2.11",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
"normalize-path": "^3.0.0",
@@ -18334,9 +18300,9 @@
}
},
"node_modules/webpack": {
- "version": "5.66.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.66.0.tgz",
- "integrity": "sha512-NJNtGT7IKpGzdW7Iwpn/09OXz9inIkeIQ/ibY6B+MdV1x6+uReqz/5z1L89ezWnpPDWpXF0TY5PCYKQdWVn8Vg==",
+ "version": "5.67.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz",
+ "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==",
"dev": true,
"dependencies": {
"@types/eslint-scope": "^3.7.0",
@@ -18362,7 +18328,7 @@
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.1.3",
"watchpack": "^2.3.1",
- "webpack-sources": "^3.2.2"
+ "webpack-sources": "^3.2.3"
},
"bin": {
"webpack": "bin/webpack.js"
@@ -19414,9 +19380,9 @@
"dev": true
},
"@babel/core": {
- "version": "7.16.10",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.10.tgz",
- "integrity": "sha512-pbiIdZbCiMx/MM6toR+OfXarYix3uz0oVsnNtfdAGTcCTu3w/JGF8JhirevXLBJUu0WguSZI12qpKnx7EeMyLA==",
+ "version": "7.16.12",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz",
+ "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.16.7",
@@ -19424,7 +19390,7 @@
"@babel/helper-compilation-targets": "^7.16.7",
"@babel/helper-module-transforms": "^7.16.7",
"@babel/helpers": "^7.16.7",
- "@babel/parser": "^7.16.10",
+ "@babel/parser": "^7.16.12",
"@babel/template": "^7.16.7",
"@babel/traverse": "^7.16.10",
"@babel/types": "^7.16.8",
@@ -19748,9 +19714,9 @@
}
},
"@babel/parser": {
- "version": "7.16.10",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.10.tgz",
- "integrity": "sha512-Sm/S9Or6nN8uiFsQU1yodyDW3MWXQhFeqzMPM+t8MJjM+pLsnFVxFZzkpXKvUXh+Gz9cbMoYYs484+Jw/NTEFQ==",
+ "version": "7.16.12",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz",
+ "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==",
"dev": true
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
@@ -20793,9 +20759,9 @@
}
},
"@humanwhocodes/config-array": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz",
- "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz",
+ "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==",
"dev": true,
"requires": {
"@humanwhocodes/object-schema": "^1.2.1",
@@ -22004,9 +21970,9 @@
"dev": true
},
"@types/node": {
- "version": "17.0.10",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.10.tgz",
- "integrity": "sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==",
+ "version": "17.0.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz",
+ "integrity": "sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw==",
"dev": true
},
"@types/parse-json": {
@@ -22119,14 +22085,14 @@
"dev": true
},
"@typescript-eslint/eslint-plugin": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.0.tgz",
- "integrity": "sha512-XXVKnMsq2fuu9K2KsIxPUGqb6xAImz8MEChClbXmE3VbveFtBUU5bzM6IPVWqzyADIgdkS2Ws/6Xo7W2TeZWjQ==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.1.tgz",
+ "integrity": "sha512-xN3CYqFlyE/qOcy978/L0xLR2HlcAGIyIK5sMOasxaaAPfQRj/MmMV6OC3I7NZO84oEUdWCOju34Z9W8E0pFDQ==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.10.0",
- "@typescript-eslint/type-utils": "5.10.0",
- "@typescript-eslint/utils": "5.10.0",
+ "@typescript-eslint/scope-manager": "5.10.1",
+ "@typescript-eslint/type-utils": "5.10.1",
+ "@typescript-eslint/utils": "5.10.1",
"debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
@@ -22147,61 +22113,61 @@
}
},
"@typescript-eslint/experimental-utils": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.10.0.tgz",
- "integrity": "sha512-GeQAPqQMI5DVMGOUwGbSR+NdsirryyKOgUFRTWInhlsKUArns/MVnXmPpzxfrzB1nU36cT5WJAwmfCsjoaVBWg==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.10.1.tgz",
+ "integrity": "sha512-Ryeb8nkJa/1zKl8iujNtJC8tgj6PgaY0sDUnrTqbmC70nrKKkZaHfiRDTcqICmCSCEQyLQcJAoh0AukLaIaGTw==",
"dev": true,
"requires": {
- "@typescript-eslint/utils": "5.10.0"
+ "@typescript-eslint/utils": "5.10.1"
}
},
"@typescript-eslint/parser": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.0.tgz",
- "integrity": "sha512-pJB2CCeHWtwOAeIxv8CHVGJhI5FNyJAIpx5Pt72YkK3QfEzt6qAlXZuyaBmyfOdM62qU0rbxJzNToPTVeJGrQw==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.1.tgz",
+ "integrity": "sha512-GReo3tjNBwR5RnRO0K2wDIDN31cM3MmDtgyQ85oAxAmC5K3j/g85IjP+cDfcqDsDDBf1HNKQAD0WqOYL8jXqUA==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.10.0",
- "@typescript-eslint/types": "5.10.0",
- "@typescript-eslint/typescript-estree": "5.10.0",
+ "@typescript-eslint/scope-manager": "5.10.1",
+ "@typescript-eslint/types": "5.10.1",
+ "@typescript-eslint/typescript-estree": "5.10.1",
"debug": "^4.3.2"
}
},
"@typescript-eslint/scope-manager": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.0.tgz",
- "integrity": "sha512-tgNgUgb4MhqK6DoKn3RBhyZ9aJga7EQrw+2/OiDk5hKf3pTVZWyqBi7ukP+Z0iEEDMF5FDa64LqODzlfE4O/Dg==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.1.tgz",
+ "integrity": "sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.10.0",
- "@typescript-eslint/visitor-keys": "5.10.0"
+ "@typescript-eslint/types": "5.10.1",
+ "@typescript-eslint/visitor-keys": "5.10.1"
}
},
"@typescript-eslint/type-utils": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.0.tgz",
- "integrity": "sha512-TzlyTmufJO5V886N+hTJBGIfnjQDQ32rJYxPaeiyWKdjsv2Ld5l8cbS7pxim4DeNs62fKzRSt8Q14Evs4JnZyQ==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.1.tgz",
+ "integrity": "sha512-AfVJkV8uck/UIoDqhu+ptEdBoQATON9GXnhOpPLzkQRJcSChkvD//qsz9JVffl2goxX+ybs5klvacE9vmrQyCw==",
"dev": true,
"requires": {
- "@typescript-eslint/utils": "5.10.0",
+ "@typescript-eslint/utils": "5.10.1",
"debug": "^4.3.2",
"tsutils": "^3.21.0"
}
},
"@typescript-eslint/types": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.0.tgz",
- "integrity": "sha512-wUljCgkqHsMZbw60IbOqT/puLfyqqD5PquGiBo1u1IS3PLxdi3RDGlyf032IJyh+eQoGhz9kzhtZa+VC4eWTlQ==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.1.tgz",
+ "integrity": "sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.0.tgz",
- "integrity": "sha512-x+7e5IqfwLwsxTdliHRtlIYkgdtYXzE0CkFeV6ytAqq431ZyxCFzNMNR5sr3WOlIG/ihVZr9K/y71VHTF/DUQA==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.1.tgz",
+ "integrity": "sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.10.0",
- "@typescript-eslint/visitor-keys": "5.10.0",
+ "@typescript-eslint/types": "5.10.1",
+ "@typescript-eslint/visitor-keys": "5.10.1",
"debug": "^4.3.2",
"globby": "^11.0.4",
"is-glob": "^4.0.3",
@@ -22221,15 +22187,15 @@
}
},
"@typescript-eslint/utils": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.0.tgz",
- "integrity": "sha512-IGYwlt1CVcFoE2ueW4/ioEwybR60RAdGeiJX/iDAw0t5w0wK3S7QncDwpmsM70nKgGTuVchEWB8lwZwHqPAWRg==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.1.tgz",
+ "integrity": "sha512-RRmlITiUbLuTRtn/gcPRi4202niF+q7ylFLCKu4c+O/PcpRvZ/nAUwQ2G00bZgpWkhrNLNnvhZLbDn8Ml0qsQw==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.10.0",
- "@typescript-eslint/types": "5.10.0",
- "@typescript-eslint/typescript-estree": "5.10.0",
+ "@typescript-eslint/scope-manager": "5.10.1",
+ "@typescript-eslint/types": "5.10.1",
+ "@typescript-eslint/typescript-estree": "5.10.1",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
},
@@ -22253,12 +22219,12 @@
}
},
"@typescript-eslint/visitor-keys": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.0.tgz",
- "integrity": "sha512-GMxj0K1uyrFLPKASLmZzCuSddmjZVbVj3Ouy5QVuIGKZopxvOr24JsS7gruz6C3GExE01mublZ3mIBOaon9zuQ==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.1.tgz",
+ "integrity": "sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.10.0",
+ "@typescript-eslint/types": "5.10.1",
"eslint-visitor-keys": "^3.0.0"
},
"dependencies": {
@@ -22553,34 +22519,6 @@
}
}
},
- "aframe-event-set-component": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/aframe-event-set-component/-/aframe-event-set-component-5.0.0.tgz",
- "integrity": "sha512-O9Bhs8Qu2cEilXQ6F2xUxxJIbaZEA2atdIxTwq5qPHRHaIa+8ZghkirUBicNs92aHR9QQwk6ZnRx+SmBXi+B9Q==",
- "requires": {
- "debug": "^2.6.9"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "aframe-orbit-controls": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/aframe-orbit-controls/-/aframe-orbit-controls-1.3.0.tgz",
- "integrity": "sha512-xRrarJR1kaGy6F0YS4iFBN4jaobeUDKu+C0dasJLEB1k3RZ+GsxSs6W7WmVOEQjMmuzDNDNV2TIsE/PK/hlx/w=="
- },
"agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
@@ -22648,12 +22586,6 @@
"dev": true,
"requires": {}
},
- "alphanum-sort": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
- "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
- "dev": true
- },
"an-array": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz",
@@ -23845,9 +23777,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001300",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz",
- "integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==",
+ "version": "1.0.30001303",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001303.tgz",
+ "integrity": "sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ==",
"dev": true
},
"cardboard-vr-display": {
@@ -23940,9 +23872,9 @@
"integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
},
"clean-css": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz",
- "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==",
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz",
+ "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==",
"dev": true,
"requires": {
"source-map": "~0.6.0"
@@ -24446,57 +24378,57 @@
"dev": true
},
"cssnano": {
- "version": "5.0.15",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.15.tgz",
- "integrity": "sha512-ppZsS7oPpi2sfiyV5+i+NbB/3GtQ+ab2Vs1azrZaXWujUSN4o+WdTxlCZIMcT9yLW3VO/5yX3vpyDaQ1nIn8CQ==",
+ "version": "5.0.16",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz",
+ "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==",
"dev": true,
"requires": {
- "cssnano-preset-default": "^5.1.10",
+ "cssnano-preset-default": "^5.1.11",
"lilconfig": "^2.0.3",
"yaml": "^1.10.2"
}
},
"cssnano-preset-default": {
- "version": "5.1.10",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.10.tgz",
- "integrity": "sha512-BcpSzUVygHMOnp9uG5rfPzTOCb0GAHQkqtUQx8j1oMNF9A1Q8hziOOhiM4bdICpmrBIU85BE64RD5XGYsVQZNA==",
+ "version": "5.1.11",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz",
+ "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==",
"dev": true,
"requires": {
"css-declaration-sorter": "^6.0.3",
- "cssnano-utils": "^3.0.0",
+ "cssnano-utils": "^3.0.1",
"postcss-calc": "^8.2.0",
- "postcss-colormin": "^5.2.3",
- "postcss-convert-values": "^5.0.2",
- "postcss-discard-comments": "^5.0.1",
- "postcss-discard-duplicates": "^5.0.1",
- "postcss-discard-empty": "^5.0.1",
- "postcss-discard-overridden": "^5.0.2",
- "postcss-merge-longhand": "^5.0.4",
- "postcss-merge-rules": "^5.0.4",
- "postcss-minify-font-values": "^5.0.2",
- "postcss-minify-gradients": "^5.0.4",
- "postcss-minify-params": "^5.0.3",
- "postcss-minify-selectors": "^5.1.1",
- "postcss-normalize-charset": "^5.0.1",
+ "postcss-colormin": "^5.2.4",
+ "postcss-convert-values": "^5.0.3",
+ "postcss-discard-comments": "^5.0.2",
+ "postcss-discard-duplicates": "^5.0.2",
+ "postcss-discard-empty": "^5.0.2",
+ "postcss-discard-overridden": "^5.0.3",
+ "postcss-merge-longhand": "^5.0.5",
+ "postcss-merge-rules": "^5.0.5",
+ "postcss-minify-font-values": "^5.0.3",
+ "postcss-minify-gradients": "^5.0.5",
+ "postcss-minify-params": "^5.0.4",
+ "postcss-minify-selectors": "^5.1.2",
+ "postcss-normalize-charset": "^5.0.2",
"postcss-normalize-display-values": "^5.0.2",
- "postcss-normalize-positions": "^5.0.2",
- "postcss-normalize-repeat-style": "^5.0.2",
- "postcss-normalize-string": "^5.0.2",
+ "postcss-normalize-positions": "^5.0.3",
+ "postcss-normalize-repeat-style": "^5.0.3",
+ "postcss-normalize-string": "^5.0.3",
"postcss-normalize-timing-functions": "^5.0.2",
- "postcss-normalize-unicode": "^5.0.2",
+ "postcss-normalize-unicode": "^5.0.3",
"postcss-normalize-url": "^5.0.4",
- "postcss-normalize-whitespace": "^5.0.2",
- "postcss-ordered-values": "^5.0.3",
+ "postcss-normalize-whitespace": "^5.0.3",
+ "postcss-ordered-values": "^5.0.4",
"postcss-reduce-initial": "^5.0.2",
- "postcss-reduce-transforms": "^5.0.2",
+ "postcss-reduce-transforms": "^5.0.3",
"postcss-svgo": "^5.0.3",
- "postcss-unique-selectors": "^5.0.2"
+ "postcss-unique-selectors": "^5.0.3"
}
},
"cssnano-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.0.tgz",
- "integrity": "sha512-Pzs7/BZ6OgT+tXXuF12DKR8SmSbzUeVYCtMBbS8lI0uAm3mrYmkyqCXXPsQESI6kmLfEVBppbdVY/el3hg3nAA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz",
+ "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==",
"dev": true,
"requires": {}
},
@@ -25002,9 +24934,9 @@
}
},
"electron-to-chromium": {
- "version": "1.4.49",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.49.tgz",
- "integrity": "sha512-k/0t1TRfonHIp8TJKfjBu2cKj8MqYTiEpOhci+q7CVEE5xnCQnx1pTa+V8b/sdhe4S3PR4p4iceEQWhGrKQORQ==",
+ "version": "1.4.56",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.56.tgz",
+ "integrity": "sha512-0k/S0FQqRRpJbX7YUjwCcLZ8D42RqGKtaiq90adXBOYgTIWwLA/g3toO8k9yEpqU8iC4QyaWYYWSTBIna8WV4g==",
"dev": true
},
"email-addresses": {
@@ -25360,9 +25292,9 @@
}
},
"eslint-module-utils": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz",
- "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==",
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
+ "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
"dev": true,
"requires": {
"debug": "^3.2.7",
@@ -25517,9 +25449,9 @@
"requires": {}
},
"eslint-plugin-testing-library": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.0.3.tgz",
- "integrity": "sha512-tKZ9G+HnIOnYAhXeoBCiAT8LOdU3m1VquBTKsBW/5zAaB30vq7gC60DIayPfMJt8EZBlqPVzGqSN57sIFmTunQ==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.0.4.tgz",
+ "integrity": "sha512-zA/NfAENCsJXujvwwiap5gsqLp2U6X7m2XA5nOksl4zzb6GpUmRNAleCll58rEP0brFVj7DZBprlIlMGIhoC7Q==",
"dev": true,
"requires": {
"@typescript-eslint/experimental-utils": "^5.9.0"
@@ -25944,9 +25876,9 @@
}
},
"flatted": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz",
- "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==",
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
"dev": true
},
"flatten-vertex-data": {
@@ -26650,12 +26582,12 @@
}
},
"http-proxy-middleware": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz",
- "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz",
+ "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==",
"dev": true,
"requires": {
- "@types/http-proxy": "^1.17.5",
+ "@types/http-proxy": "^1.17.8",
"http-proxy": "^1.18.1",
"is-glob": "^4.0.1",
"is-plain-obj": "^3.0.0",
@@ -29039,9 +28971,9 @@
}
},
"mini-css-extract-plugin": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.2.tgz",
- "integrity": "sha512-Lwgq9qLNyBK6yNLgzssXnq4r2+mB9Mz3cJWlM8kseysHIvTicFhDNimFgY94jjqlwhNzLPsq8wv4X+vOHtMdYA==",
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz",
+ "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==",
"dev": true,
"requires": {
"schema-utils": "^4.0.0"
@@ -29742,9 +29674,9 @@
}
},
"pirates": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz",
- "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
+ "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
"dev": true
},
"pkg-dir": {
@@ -29911,9 +29843,9 @@
"requires": {}
},
"postcss-calc": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz",
- "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==",
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.3.tgz",
+ "integrity": "sha512-EGM2EBBWqP57N0E7N7WOLT116PJ39dwHVU01WO4XPPQLJfkL2xVgkMZ+TZvCfapj/uJH07UEfKHQNPHzSw/14Q==",
"dev": true,
"requires": {
"postcss-selector-parser": "^6.0.2",
@@ -29948,9 +29880,9 @@
}
},
"postcss-colormin": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.3.tgz",
- "integrity": "sha512-dra4xoAjub2wha6RUXAgadHEn2lGxbj8drhFcIGLOMn914Eu7DkPUurugDXgstwttCYkJtZ/+PkWRWdp3UHRIA==",
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz",
+ "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==",
"dev": true,
"requires": {
"browserslist": "^4.16.6",
@@ -29960,12 +29892,12 @@
}
},
"postcss-convert-values": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.2.tgz",
- "integrity": "sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz",
+ "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==",
"dev": true,
"requires": {
- "postcss-value-parser": "^4.1.0"
+ "postcss-value-parser": "^4.2.0"
}
},
"postcss-custom-media": {
@@ -30003,30 +29935,30 @@
}
},
"postcss-discard-comments": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz",
- "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz",
+ "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==",
"dev": true,
"requires": {}
},
"postcss-discard-duplicates": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz",
- "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz",
+ "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==",
"dev": true,
"requires": {}
},
"postcss-discard-empty": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz",
- "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz",
+ "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==",
"dev": true,
"requires": {}
},
"postcss-discard-overridden": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.2.tgz",
- "integrity": "sha512-+56BLP6NSSUuWUXjRgAQuho1p5xs/hU5Sw7+xt9S3JSg+7R6+WMGnJW7Hre/6tTuZ2xiXMB42ObkiZJ2hy/Pew==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz",
+ "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==",
"dev": true,
"requires": {}
},
@@ -30168,66 +30100,64 @@
"requires": {}
},
"postcss-merge-longhand": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz",
- "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz",
+ "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==",
"dev": true,
"requires": {
- "postcss-value-parser": "^4.1.0",
- "stylehacks": "^5.0.1"
+ "postcss-value-parser": "^4.2.0",
+ "stylehacks": "^5.0.2"
}
},
"postcss-merge-rules": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.4.tgz",
- "integrity": "sha512-yOj7bW3NxlQxaERBB0lEY1sH5y+RzevjbdH4DBJurjKERNpknRByFNdNe+V72i5pIZL12woM9uGdS5xbSB+kDQ==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz",
+ "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==",
"dev": true,
"requires": {
"browserslist": "^4.16.6",
"caniuse-api": "^3.0.0",
- "cssnano-utils": "^3.0.0",
+ "cssnano-utils": "^3.0.1",
"postcss-selector-parser": "^6.0.5"
}
},
"postcss-minify-font-values": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.2.tgz",
- "integrity": "sha512-R6MJZryq28Cw0AmnyhXrM7naqJZZLoa1paBltIzh2wM7yb4D45TLur+eubTQ4jCmZU9SGeZdWsc5KcSoqTMeTg==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz",
+ "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==",
"dev": true,
"requires": {
"postcss-value-parser": "^4.2.0"
}
},
"postcss-minify-gradients": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.4.tgz",
- "integrity": "sha512-RVwZA7NC4R4J76u8X0Q0j+J7ItKUWAeBUJ8oEEZWmtv3Xoh19uNJaJwzNpsydQjk6PkuhRrK+YwwMf+c+68EYg==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz",
+ "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==",
"dev": true,
"requires": {
"colord": "^2.9.1",
- "cssnano-utils": "^3.0.0",
+ "cssnano-utils": "^3.0.1",
"postcss-value-parser": "^4.2.0"
}
},
"postcss-minify-params": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.3.tgz",
- "integrity": "sha512-NY92FUikE+wralaiVexFd5gwb7oJTIDhgTNeIw89i1Ymsgt4RWiPXfz3bg7hDy4NL6gepcThJwOYNtZO/eNi7Q==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz",
+ "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==",
"dev": true,
"requires": {
- "alphanum-sort": "^1.0.2",
"browserslist": "^4.16.6",
- "cssnano-utils": "^3.0.0",
+ "cssnano-utils": "^3.0.1",
"postcss-value-parser": "^4.2.0"
}
},
"postcss-minify-selectors": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.1.tgz",
- "integrity": "sha512-TOzqOPXt91O2luJInaVPiivh90a2SIK5Nf1Ea7yEIM/5w+XA5BGrZGUSW8aEx9pJ/oNj7ZJBhjvigSiBV+bC1Q==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz",
+ "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==",
"dev": true,
"requires": {
- "alphanum-sort": "^1.0.2",
"postcss-selector-parser": "^6.0.5"
}
},
@@ -30313,9 +30243,9 @@
}
},
"postcss-normalize-charset": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz",
- "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz",
+ "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==",
"dev": true,
"requires": {}
},
@@ -30329,27 +30259,27 @@
}
},
"postcss-normalize-positions": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.2.tgz",
- "integrity": "sha512-tqghWFVDp2btqFg1gYob1etPNxXLNh3uVeWgZE2AQGh6b2F8AK2Gj36v5Vhyh+APwIzNjmt6jwZ9pTBP+/OM8g==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz",
+ "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==",
"dev": true,
"requires": {
"postcss-value-parser": "^4.2.0"
}
},
"postcss-normalize-repeat-style": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.2.tgz",
- "integrity": "sha512-/rIZn8X9bBzC7KvY4iKUhXUGW3MmbXwfPF23jC9wT9xTi7kAvgj8sEgwxjixBmoL6MVa4WOgxNz2hAR6wTK8tw==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz",
+ "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==",
"dev": true,
"requires": {
"postcss-value-parser": "^4.2.0"
}
},
"postcss-normalize-string": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.2.tgz",
- "integrity": "sha512-zaI1yzwL+a/FkIzUWMQoH25YwCYxi917J4pYm1nRXtdgiCdnlTkx5eRzqWEC64HtRa06WCJ9TIutpb6GmW4gFw==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz",
+ "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==",
"dev": true,
"requires": {
"postcss-value-parser": "^4.2.0"
@@ -30365,9 +30295,9 @@
}
},
"postcss-normalize-unicode": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.2.tgz",
- "integrity": "sha512-3y/V+vjZ19HNcTizeqwrbZSUsE69ZMRHfiiyLAJb7C7hJtYmM4Gsbajy7gKagu97E8q5rlS9k8FhojA8cpGhWw==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz",
+ "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==",
"dev": true,
"requires": {
"browserslist": "^4.16.6",
@@ -30385,21 +30315,21 @@
}
},
"postcss-normalize-whitespace": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.2.tgz",
- "integrity": "sha512-CXBx+9fVlzSgbk0IXA/dcZn9lXixnQRndnsPC5ht3HxlQ1bVh77KQDL1GffJx1LTzzfae8ftMulsjYmO2yegxA==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz",
+ "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==",
"dev": true,
"requires": {
"postcss-value-parser": "^4.2.0"
}
},
"postcss-ordered-values": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.3.tgz",
- "integrity": "sha512-T9pDS+P9bWeFvqivXd5ACzQmrCmHjv3ZP+djn8E1UZY7iK79pFSm7i3WbKw2VSmFmdbMm8sQ12OPcNpzBo3Z2w==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz",
+ "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==",
"dev": true,
"requires": {
- "cssnano-utils": "^3.0.0",
+ "cssnano-utils": "^3.0.1",
"postcss-value-parser": "^4.2.0"
}
},
@@ -30487,9 +30417,9 @@
}
},
"postcss-reduce-transforms": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.2.tgz",
- "integrity": "sha512-25HeDeFsgiPSUx69jJXZn8I06tMxLQJJNF5h7i9gsUg8iP4KOOJ8EX8fj3seeoLt3SLU2YDD6UPnDYVGUO7DEA==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz",
+ "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==",
"dev": true,
"requires": {
"postcss-value-parser": "^4.2.0"
@@ -30577,12 +30507,11 @@
}
},
"postcss-unique-selectors": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.2.tgz",
- "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz",
+ "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==",
"dev": true,
"requires": {
- "alphanum-sort": "^1.0.2",
"postcss-selector-parser": "^6.0.5"
}
},
@@ -30886,9 +30815,9 @@
}
},
"rc-util": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.16.1.tgz",
- "integrity": "sha512-kSCyytvdb3aRxQacS/71ta6c+kBWvM1v8/2h9d/HaNWauc3qB8pLnF20PJ8NajkNN8gb+rR1l0eWO+D4Pz+LLQ==",
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.17.0.tgz",
+ "integrity": "sha512-HWuTIKzBeZQQ7IBqdokE0wMp/xx39/KfUJ0gcquBigoldDCrf3YBcWFHrrQlJG7sI82Wg8mwp1uAKV3zMGfAgg==",
"requires": {
"@babel/runtime": "^7.12.5",
"react-is": "^16.12.0",
@@ -31382,12 +31311,12 @@
"integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
},
"resolve": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz",
- "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==",
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
"dev": true,
"requires": {
- "is-core-module": "^2.8.0",
+ "is-core-module": "^2.8.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
@@ -31480,9 +31409,9 @@
}
},
"rollup": {
- "version": "2.64.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.64.0.tgz",
- "integrity": "sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==",
+ "version": "2.66.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.66.1.tgz",
+ "integrity": "sha512-crSgLhSkLMnKr4s9iZ/1qJCplgAgrRY+igWv8KhG/AjKOJ0YX/WpmANyn8oxrw+zenF3BXWDLa7Xl/QZISH+7w==",
"dev": true,
"requires": {
"fsevents": "~2.3.2"
@@ -32307,12 +32236,12 @@
}
},
"stylehacks": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz",
- "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz",
+ "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==",
"dev": true,
"requires": {
- "browserslist": "^4.16.0",
+ "browserslist": "^4.16.6",
"postcss-selector-parser": "^6.0.4"
}
},
@@ -32483,20 +32412,20 @@
"integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ=="
},
"tailwindcss": {
- "version": "3.0.15",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.15.tgz",
- "integrity": "sha512-bT2iy7FtjwgsXik4ZoJnHXR+SRCiGR1W95fVqpLZebr64m4ahwUwRbIAc5w5+2fzr1YF4Ct2eI7dojMRRl8sVQ==",
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.17.tgz",
+ "integrity": "sha512-OiHUsmOKQQEg/ocXaLIjk/kOz8EK2jF6iPuc1bQ4NsmhYl7sk70UDsGV02AJvBAAiJhinPCkDR8egT9qY+ulCw==",
"dev": true,
"requires": {
"arg": "^5.0.1",
"chalk": "^4.1.2",
- "chokidar": "^3.5.2",
+ "chokidar": "^3.5.3",
"color-name": "^1.1.4",
"cosmiconfig": "^7.0.1",
"detective": "^5.2.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
- "fast-glob": "^3.2.7",
+ "fast-glob": "^3.2.11",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
"normalize-path": "^3.0.0",
@@ -33087,9 +33016,9 @@
"dev": true
},
"webpack": {
- "version": "5.66.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.66.0.tgz",
- "integrity": "sha512-NJNtGT7IKpGzdW7Iwpn/09OXz9inIkeIQ/ibY6B+MdV1x6+uReqz/5z1L89ezWnpPDWpXF0TY5PCYKQdWVn8Vg==",
+ "version": "5.67.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz",
+ "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==",
"dev": true,
"requires": {
"@types/eslint-scope": "^3.7.0",
@@ -33115,7 +33044,7 @@
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.1.3",
"watchpack": "^2.3.1",
- "webpack-sources": "^3.2.2"
+ "webpack-sources": "^3.2.3"
},
"dependencies": {
"@types/estree": {
diff --git a/package.json b/package.json
index 6d7ef055..1525ded3 100644
--- a/package.json
+++ b/package.json
@@ -28,8 +28,6 @@
"dependencies": {
"@reach/listbox": "^0.16.2",
"aframe": "^1.2.0",
- "aframe-event-set-component": "^5.0.0",
- "aframe-orbit-controls": "^1.3.0",
"d3-scale": "^4.0.2",
"rc-slider": "^9.7.4"
},
diff --git a/src/Aframe/ccvLibVolumeShader.js b/src/Aframe/Shader.js
similarity index 99%
rename from src/Aframe/ccvLibVolumeShader.js
rename to src/Aframe/Shader.js
index 20ef86a3..31a16f91 100644
--- a/src/Aframe/ccvLibVolumeShader.js
+++ b/src/Aframe/Shader.js
@@ -1,25 +1,27 @@
-THREE.ShaderLib["ccvLibVolumeRenderShader"] = {
+/* globals THREE */
+
+THREE.ShaderLib["ModelShader"] = {
uniforms: {
- slice: { value: 1.0 },
- dim: { value: 1.0 },
- clipPlane: { value: new THREE.Matrix4() },
+ box_max: { value: new THREE.Vector3(1, 1, 1) },
+ box_min: { value: new THREE.Vector3(0, 0, 0) },
+ channel: { value: 1 },
clipping: { value: false },
- threshold: { value: 1 },
+ clipPlane: { value: new THREE.Matrix4() },
+ controllerPoseMatrix: { value: new THREE.Matrix4() },
+ depth: { value: null },
+ dim: { value: 1.0 },
+ grabMesh: { value: false },
+ intensity: { value: 1.0 },
multiplier: { value: 1 },
+ P_inv: { value: new THREE.Matrix4() },
+ slice: { value: 1.0 },
step_size: { value: new THREE.Vector3(1, 1, 1) },
- channel: { value: 1 },
+ threshold: { value: 1 },
+ u_data: { value: null },
u_lut: { value: null },
useLut: { value: true },
viewPort: { value: new THREE.Vector2() },
- P_inv: { value: new THREE.Matrix4() },
- u_data: { value: null },
- depth: { value: null },
zScale: { value: 1.0 },
- controllerPoseMatrix: { value: new THREE.Matrix4() },
- grabMesh: { value: false },
- box_min: { value: new THREE.Vector3(0, 0, 0) },
- box_max: { value: new THREE.Vector3(1, 1, 1) },
- intensity: { value: 1.0 },
},
vertexShader: [
diff --git a/src/Aframe/arcball-camera.js b/src/Aframe/arcball-camera.js
index 7c9270ee..48fc6409 100644
--- a/src/Aframe/arcball-camera.js
+++ b/src/Aframe/arcball-camera.js
@@ -1,7 +1,7 @@
-/* globals AFRAME THREE*/
+/* globals AFRAME THREE*/
import "./arcball-controller.js";
-let bind = AFRAME.utils.bind;
+const bind = AFRAME.utils.bind;
AFRAME.registerComponent("arcball-camera", {
dependencies: ["camera"],
@@ -11,80 +11,54 @@ AFRAME.registerComponent("arcball-camera", {
},
init: function () {
- let el = this.el;
- this.vrcam = document.querySelector("#camera");
+ const el = this.el;
+
+ this.oldPosition = new THREE.Vector3();
+ this.oldMatrix = new THREE.Matrix4();
+ this.meshObjectHandler = document.getElementById("volumeCube").object3D;
+
+ // Create controls
this.controls = new THREE.TrackballControls(
el.getObject3D("camera"),
el.sceneEl.renderer.domElement
);
-
- this.meshObjectHandler = document.getElementById("volumeCube").object3D;
this.controls.rotateSpeed = 1.0;
this.controls.zoomSpeed = 1.2;
this.controls.panSpeed = 0.8;
- this.oldPosition = new THREE.Vector3();
- this.oldMatrix = new THREE.Matrix4();
-
- this.debugPosition = false;
-
- this.bindMethods();
- this.onWindowResize = this.onWindowResize.bind(this);
+ // Bind functions and add event listeners
+ this.onEnterVR = bind(this.onEnterVR, this);
+ this.onExitVR = bind(this.onExitVR, this);
el.sceneEl.addEventListener("enter-vr", this.onEnterVR);
el.sceneEl.addEventListener("exit-vr", this.onExitVR);
- window.addEventListener("resize", this.onWindowResize, false);
-
+ // Move camera to initial position
el.getObject3D("camera").position.copy(this.data.initialPosition);
-
- // Set the pointer to grab/grabbing when over the vr canvas
- const aCanvas = document.querySelector(".a-canvas");
- aCanvas.style.cursor = "grab";
-
- document.addEventListener("mousedown", () => {
- aCanvas.style.cursor = "grabbing";
- });
- document.addEventListener("mouseup", () => {
- aCanvas.style.cursor = "grab";
- });
- },
-
- onWindowResize() {},
-
- bindMethods: function () {
- this.onEnterVR = bind(this.onEnterVR, this);
- this.onExitVR = bind(this.onExitVR, this);
},
onEnterVR: function () {
- let el = this.el;
- this.debugPosition = true;
+ const el = this.el;
if (
!AFRAME.utils.device.checkHeadsetConnected() &&
!AFRAME.utils.device.isMobile()
) {
return;
}
+
this.controls.enabled = false;
if (el.hasAttribute("look-controls")) {
el.setAttribute("look-controls", "enabled", true);
+
+ // Store position from before VR and move to origin
this.oldMatrix.copy(this.meshObjectHandler.matrixWorld);
this.oldPosition.copy(el.getObject3D("camera").position);
el.getObject3D("camera").position.set(0, 0, 0);
}
},
- update: function (oldData) {
- let controls = this.controls;
- controls.rotateSpeed = 1.0;
- controls.zoomSpeed = 1.2;
- controls.panSpeed = 0.8;
- },
-
onExitVR: function () {
- console.log("exit VR");
- let el = this.el;
- this.debugPosition = false;
+ const el = this.el;
+
if (
!AFRAME.utils.device.checkHeadsetConnected() &&
!AFRAME.utils.device.isMobile()
@@ -92,12 +66,7 @@ AFRAME.registerComponent("arcball-camera", {
return;
}
this.controls.enabled = true;
- el.getObject3D("camera").position.set(0, 0, 2);
- console.log(
- "this.meshObjectHandler.el.getAttribute('loader').meshPosition"
- );
- let mesh = this.meshObjectHandler.el.getAttribute("loader").meshPosition;
- console.log(mesh);
+ el.getObject3D("camera").position.set(this.oldPosition);
if (el.hasAttribute("look-controls")) {
el.setAttribute("look-controls", "enabled", false);
@@ -108,8 +77,6 @@ AFRAME.registerComponent("arcball-camera", {
if (this.controls.enabled) {
this.controls.update();
}
- if (this.debugPosition) {
- }
},
remove: function () {
diff --git a/src/Aframe/buttons-check.js b/src/Aframe/buttons-check.js
index a5ec82b0..c176caa3 100644
--- a/src/Aframe/buttons-check.js
+++ b/src/Aframe/buttons-check.js
@@ -1,4 +1,6 @@
/* globals AFRAME */
+
+// TODO: Change vars to triggerDown and gripDown
AFRAME.registerComponent("buttons-check", {
schema: {
clipPlane: { type: "boolean", default: false },
@@ -6,22 +8,33 @@ AFRAME.registerComponent("buttons-check", {
},
init: function () {
- this.el.addEventListener("gripdown", (evt) => {
- this.data.clipPlane = true;
- });
-
- this.el.addEventListener("gripup", (evt) => {
- this.data.clipPlane = false;
- });
+ this.onGripDown = this.onGripDown.bind(this);
+ this.onGripUp = this.onGripDown.bind(this);
+ this.onTriggerDown = this.onTriggerDown.bind(this);
+ this.onTriggerUp = this.onTriggerUp.bind(this);
+ this.el.addEventListener("gripdown", this.onGripDown);
+ this.el.addEventListener("gripup", this.onGripUp);
+ this.el.addEventListener("triggerdown", this.onTriggerDown);
+ this.el.addEventListener("triggerup", this.onTriggerUp);
+ },
- this.el.addEventListener("triggerdown", (evt) => {
- this.data.grabObject = true;
- console.log(this.data.grabObject);
- });
+ remove: function () {
+ this.el.removeEventListener("gripdown", this.onGripDown);
+ this.el.removeEventListener("gripup", this.onGripUp);
+ this.el.removeEventListener("triggerdown", this.onTriggerDown);
+ this.el.removeEventListener("triggerup", this.onTriggerUp);
+ },
- this.el.addEventListener("triggerup", (evt) => {
- this.data.grabObject = false;
- console.log(this.data.grabObject);
- });
+ onGripDown: function (e) {
+ this.data.clipPlane = true;
+ },
+ onGripUp: function (e) {
+ this.data.clipPlane = false;
+ },
+ onTriggerDown: function (e) {
+ this.data.grabObject = true;
+ },
+ onTriggerUp: function (e) {
+ this.data.grabObject = false;
},
});
diff --git a/src/Aframe/collider-check.js b/src/Aframe/collider-check.js
new file mode 100644
index 00000000..34a6af8a
--- /dev/null
+++ b/src/Aframe/collider-check.js
@@ -0,0 +1,22 @@
+/* globals AFRAME */
+
+AFRAME.registerComponent("collider-check", {
+ dependencies: ["raycaster", "buttons-check"],
+
+ schema: {
+ intersecting: { type: "boolean", default: false },
+ },
+
+ init: function () {
+ this.onCollide = this.onCollide.bind(this);
+ this.el.addEventListener("raycaster-intersection", this.onCollide);
+ },
+
+ onCollide: function (e) {
+ this.data.intersecting = true;
+ },
+
+ remove: function () {
+ this.el.removeEventListener("raycaster-intersection", this.onCollide);
+ },
+});
diff --git a/src/Aframe/cursor-listener.js b/src/Aframe/cursor-listener.js
deleted file mode 100644
index 69bce3fa..00000000
--- a/src/Aframe/cursor-listener.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/* globals AFRAME */
-
-// Component to change to a sequential color on click.
-AFRAME.registerComponent("cursor-listener", {
- init: function () {
- this.lastIndex = -1;
- this.COLORS = ["red", "green", "blue"];
- this.dragging = false;
- this.cameraHandler = document.getElementById("camera").object3D;
- this.onMousedown = this.onMousedown.bind(this);
- this.onMouseUp = this.onMouseUp.bind(this);
- this.onMouseMove = this.onMouseMove.bind(this);
-
- this.el.addEventListener("mousedown", function (evt) {
- this.dragging = true;
- });
-
- this.el.addEventListener("mousemove ", function (evt) {
- if (this.dragging === true) {
- console.log("dragging at: ", evt.detail.intersection.point);
- }
- });
- this.el.addEventListener("mouseup ", function (evt) {
- this.dragging = false;
- });
- },
-
- onMousedown: function (evt) {
- this.dragging = true;
- },
-
- onMouseMove: function (evt) {
- if (this.dragging === true) {
- console.log("dragging at: ", evt.detail.intersection.point);
- }
- },
-
- onMouseUp: function (evt) {
- this.dragging = false;
- console.log("mouseup at: ", evt.detail.intersection.point);
- },
-});
diff --git a/src/Aframe/entity-collider-check.js b/src/Aframe/entity-collider-check.js
new file mode 100644
index 00000000..492cb6a4
--- /dev/null
+++ b/src/Aframe/entity-collider-check.js
@@ -0,0 +1,20 @@
+/* globals AFRAME */
+
+AFRAME.registerComponent("entity-collider-check", {
+ schema: {
+ intersected: { type: "boolean", default: false },
+ },
+
+ init: function () {
+ this.onCollide = this.onCollide.bind(this);
+ this.el.addEventListener("raycaster-intersected", this.onCollide);
+ },
+
+ remove: function () {
+ this.el.removeEventListener("raycaster-intersected", this.onCollide);
+ },
+
+ onCollide: function (e) {
+ this.data.intersected = true;
+ },
+});
diff --git a/src/Aframe/loader.js b/src/Aframe/loader.js
deleted file mode 100644
index ce374436..00000000
--- a/src/Aframe/loader.js
+++ /dev/null
@@ -1,647 +0,0 @@
-/* globals AFRAME THREE */
-import "./ccvLibVolumeShader.js";
-let bind = AFRAME.utils.bind;
-
-AFRAME.registerComponent("collider-check", {
- dependencies: ["raycaster", "buttons-check"],
-
- schema: {
- intersecting: { type: "boolean", default: false },
- },
-
- init: function () {
- this.onCollide = this.onCollide.bind(this);
- this.el.addEventListener("raycaster-intersection", this.onCollide);
- },
-
- onCollide: function (event) {
- this.data.intersecting = true;
- },
-});
-
-AFRAME.registerComponent("entity-collider-check", {
- schema: {
- intersected: { type: "boolean", default: false },
- },
-
- init: function () {
- this.onCollide = this.onCollide.bind(this);
- this.el.addEventListener("raycaster-intersected", this.onCollide);
- },
-
- onCollide: function (event) {
- this.data.intersected = true;
- console.log("entity-intersected");
- },
-});
-
-AFRAME.registerComponent("loader", {
- schema: {
- rayCollided: { type: "boolean", default: false },
- modelLoaded: { type: "boolean", default: false },
- meshPosition: { type: "vec3", default: { x: 0, y: 0, z: 0 } },
- alphaXDataArray: { type: "array" },
- alphaYDataArray: { type: "array" },
- colorMap: { type: "string", default: "" },
- path: { type: "string", default: "" },
- slices: { type: "number", default: 55 },
- x_spacing: { type: "number", default: 2.0 },
- y_spacing: { type: "number", default: 2.0 },
- z_spacing: { type: "number", default: 1.0 },
- useTransferFunction: { type: "boolean", default: false },
- channel: { type: "number", default: 1 },
- intensity: { type: "number", default: 1.0 },
- },
-
- init: function () {
- this.objectPose = new THREE.Matrix4();
- this.controllerPose = new THREE.Matrix4();
- this.tempMatrix = new THREE.Matrix4();
- this.onCollide = this.onCollide.bind(this);
- this.grabbed = false;
- this.onSelectStart = this.onSelectStart.bind(this);
- this.onClearCollide = this.onClearCollide.bind(this);
- this.loadModel = this.loadModel.bind(this);
- this.updateTransferTexture = this.updateTransferTexture.bind(this);
- this.updateDataChannel = this.updateDataChannel.bind(this);
- this.updateColorMapping = this.updateColorMapping.bind(this);
- this.debugScene = this.debugScene.bind(this);
-
- this.updateOpacityData = this.updateOpacityData.bind(this);
- this.colorMapNeedsUpdate = false;
- this.currentColorMap = this.data.colorMap;
-
- this.el.addEventListener("raycaster-intersected", this.onCollide);
- this.el.addEventListener(
- "raycaster-intersected-cleared",
- this.onClearCollide
- );
-
- this.colorTransferMap = new Map();
-
- this.group = new THREE.Group();
-
- this.isVrModeOn = false;
-
- this.sceneHandler = this.el.sceneEl;
- this.group = new THREE.Group();
-
- this.controllerHandler = document.getElementById("rhand").object3D;
- this.controllerHandler.el.addEventListener(
- "selectstart",
- this.onSelectStart
- );
-
- this.clipPlaneListenerHandler = document.getElementById(
- "clipplane2DListener"
- ).object3D;
- this.clip2DPlaneRendered = false;
-
- this.clipPlaneHandler = document.getElementById("clipplane2D").object3D;
-
- this.controllerHandler.matrixAutoUpdate = false;
- this.grabState =
- this.controllerHandler.el.getAttribute("buttons-check").grabObject;
- let clipplane2D = document.getElementById("clipplane2D");
- if (clipplane2D !== undefined) {
- this.clipplane2DHandler = clipplane2D.object3D;
- }
-
- // save mesh vr position and rotation on swich between desktop and vr
- this.vrPosition = new THREE.Vector3(0, 0, 0);
- this.vrRotation = new THREE.Vector3(0, 0, 0);
- this.debugVRPos = false;
- // bind onenterVR and onexitVR
- this.bindMethods();
- this.el.sceneEl.addEventListener("enter-vr", this.onEnterVR);
- this.el.sceneEl.addEventListener("exit-vr", this.onExitVR);
-
- this.opacityControlPoints = [0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0];
-
- let jet_values = [
- [0, 0, 0.5],
- [0, 0, 1],
- [0, 0.5, 1],
- [0, 1, 1],
- [0.5, 1, 0.5],
- [1, 1, 0],
- [1, 0.5, 0],
- [1, 0, 0],
- [0.5, 0, 0],
- ];
-
- const pData = [];
- this.alphaData = [];
- this.newAlphaData = [];
- const indices = [];
- const zeroArray = [0, 0, 0, 0];
-
- //setting up control points
- for (let i = 0; i < 9; i++) {
- const index = i * 28;
- while (pData.length < index) {
- pData.push(zeroArray);
- }
-
- pData.push([
- jet_values[i][0] * 255,
- jet_values[i][1] * 255,
- jet_values[i][2] * 255,
- this.opacityControlPoints[i] * 255,
- ]);
- indices.push(index);
- }
-
- //interpolation between opacity control points
- for (let j = 0; j < 9 - 1; j++) {
- const dDataA = pData[indices[j + 1]][3] - pData[indices[j]][3];
- const dIndex = indices[j + 1] - indices[j];
- const dDataIncA = dDataA / dIndex;
- for (let idx = indices[j] + 1; idx < indices[j + 1]; idx++) {
- let alpha = pData[idx - 1][3] + dDataIncA;
- this.alphaData[idx] = alpha;
- }
- }
-
- // interpolation between colors control points
- for (let j = 0; j < 9 - 1; j++) {
- const dDataR = pData[indices[j + 1]][0] - pData[indices[j]][0];
- const dDataG = pData[indices[j + 1]][1] - pData[indices[j]][1];
- const dDataB = pData[indices[j + 1]][2] - pData[indices[j]][2];
- const dDataA = pData[indices[j + 1]][3] - pData[indices[j]][3];
- const dIndex = indices[j + 1] - indices[j];
-
- const dDataIncR = dDataR / dIndex;
- const dDataIncG = dDataG / dIndex;
- const dDataIncB = dDataB / dIndex;
- const dDataIncA = dDataA / dIndex;
-
- for (let idx = indices[j] + 1; idx < indices[j + 1]; idx++) {
- const alpha = pData[idx - 1][3] + dDataIncA;
- this.alphaData[idx] = alpha;
- pData[idx] = [
- pData[idx - 1][0] + dDataIncR,
- pData[idx - 1][1] + dDataIncG,
- pData[idx - 1][2] + dDataIncB,
- alpha,
- ];
- }
- }
-
- this.canvas = this.el.sceneEl.canvas;
-
- this.printedLog = false;
-
- let cameraEl = document.querySelector("#camera");
- cameraEl.setAttribute("camera", "active", true);
- },
-
- debugScene: function (evt) {},
-
- updateTransferTexture: function () {
- if (this.colorTransferMap.has(this.currentColorMap)) {
- const colorTransfer = this.colorTransferMap.get(
- this.currentColorMap
- ).data;
- if (colorTransfer) {
- const imageTransferData = new Uint8Array(4 * 256);
- for (let i = 0; i < 256; i++) {
- imageTransferData[i * 4 + 0] = colorTransfer[i * 3 + 0];
- imageTransferData[i * 4 + 1] = colorTransfer[i * 3 + 1];
- imageTransferData[i * 4 + 2] = colorTransfer[i * 3 + 2];
- imageTransferData[i * 4 + 3] = this.newAlphaData[i];
- }
- const transferTexture = new THREE.DataTexture(
- imageTransferData,
- 256,
- 1,
- THREE.RGBAFormat
- );
- transferTexture.needsUpdate = true;
-
- if (this.el.getObject3D("mesh") !== undefined) {
- let material = this.el.getObject3D("mesh").material;
- // Shader script uses channel 6 for color mapping
- material.uniforms.channel.value = 6;
- material.uniforms.u_lut.value = transferTexture;
- material.uniforms.useLut.value = this.data.useTransferFunction;
- material.needsUpdate = true;
- }
- }
- }
- },
-
- updateDataChannel: function () {
- if (this.el.getObject3D("mesh") !== undefined) {
- let material = this.el.getObject3D("mesh").material;
- material.uniforms.channel.value = this.data.channel;
- material.uniforms.useLut.value = this.data.useTransferFunction;
- material.needsUpdate = true;
- }
- },
-
- bindMethods: function () {
- this.onEnterVR = bind(this.onEnterVR, this);
- this.onExitVR = bind(this.onExitVR, this);
- },
-
- onEnterVR: function () {},
-
- onExitVR: function () {
- if (this.el.getObject3D("mesh") !== undefined) {
- console.log("loader onExitVR 1: ");
- console.log(this.el.getObject3D("mesh").position);
-
- this.data.meshPosition.x = this.el.getObject3D("mesh").position.x;
- this.data.meshPosition.y = this.el.getObject3D("mesh").position.y;
- this.data.meshPosition.z = this.el.getObject3D("mesh").position.z;
-
- console.log("loader onExitVR this.data.meshPosition 1 : ");
- console.log(this.data.meshPosition);
-
- this.vrRotation = this.el.getObject3D("mesh").rotation;
- this.el.getObject3D("mesh").position.copy(new THREE.Vector3());
- console.log("loader onExitVR this.data.meshPosition 2 : ");
- console.log(this.data.meshPosition);
-
- this.el.getObject3D("mesh").rotation.set(0, 0, 0);
-
- console.log("loader onExitVR 2: ");
- console.log(this.el.getObject3D("mesh").position);
- this.debugVRPos = true;
- }
- },
-
- loadModel: function () {
- let currentVolume = this.el.getObject3D("mesh");
- const { x_spacing, y_spacing, z_spacing, slices, path } = this.data;
- if (currentVolume !== undefined) {
- //clear mesh
- this.el.removeObject3D("mesh");
- currentVolume = undefined;
- }
-
- if (path !== "") {
- const el = this.el;
- const data = this.data;
- const canvasWidth = this.canvas.width;
- const canvasHeight = this.canvas.height;
-
- const useTransferFunction = this.data.useTransferFunction;
- const intensity = this.data.intensity;
-
- const updateColorMapping = this.updateColorMapping;
- const updateDataChannel = this.updateDataChannel;
-
- //load as 2D texture
- new THREE.TextureLoader().load(
- path,
- function (texture) {
- const dim = Math.ceil(Math.sqrt(slices));
- const spacing = [x_spacing, y_spacing, z_spacing];
-
- const volumeScale = [
- 1.0 / ((texture.image.width / dim) * spacing[0]),
- 1.0 / ((texture.image.height / dim) * spacing[1]),
- 1.0 / (slices * spacing[2]),
- ];
-
- const zScale = volumeScale[0] / volumeScale[2];
-
- texture.minFilter = texture.magFilter = THREE.LinearFilter;
- texture.unpackAlignment = 1;
- texture.needsUpdate = true;
-
- // Material
- const shader = THREE.ShaderLib["ccvLibVolumeRenderShader"];
- const uniforms = THREE.UniformsUtils.clone(shader.uniforms);
- uniforms["u_data"].value = texture;
- uniforms["u_lut"].value = null;
- uniforms["clipPlane"].value = new THREE.Matrix4();
- uniforms["clipping"].value = false;
- uniforms["threshold"].value = 1;
- uniforms["multiplier"].value = 1;
- uniforms["slice"].value = slices;
- uniforms["dim"].value = dim;
-
- if (!useTransferFunction) {
- uniforms["channel"].value = 6;
- uniforms["useLut"].value = false;
- } else {
- uniforms["channel"].value = 1;
- uniforms["useLut"].value = true;
- }
- uniforms["step_size"].value = new THREE.Vector3(
- 1 / 100,
- 1 / 100,
- 1 / 100
- );
-
- uniforms["viewPort"].value = new THREE.Vector2(
- canvasWidth,
- canvasHeight
- );
- uniforms["P_inv"].value = new THREE.Matrix4();
- uniforms["depth"].value = null;
- uniforms["zScale"].value = zScale;
- uniforms["controllerPoseMatrix"].value = new THREE.Matrix4();
- uniforms["grabMesh"].value = false;
- uniforms["box_min"].value = new THREE.Vector3(0, 0, 0);
- uniforms["box_max"].value = new THREE.Vector3(1, 1, 1);
- uniforms["intensity"].value = intensity;
-
- const material = new THREE.ShaderMaterial({
- uniforms: uniforms,
- transparent: true,
- vertexShader: shader.vertexShader,
- fragmentShader: shader.fragmentShader,
- side: THREE.BackSide, // The volume shader uses the backface as its "reference point"
- });
-
- // Mesh
- const geometry = new THREE.BoxGeometry(1, 1, 1);
-
- el.setObject3D("mesh", new THREE.Mesh(geometry, material));
- data.modelLoaded = true;
- material.needsUpdate = true;
-
- //this steps needs the model to be uploaded first
- if (useTransferFunction) {
- updateColorMapping();
- } else {
- updateDataChannel();
- }
- },
- function () {},
- function () {
- console.log("Could not load the data, Data not found");
- }
- );
- }
- },
-
- onCollide: function (event) {
- this.data.rayCollided = true;
- },
-
- onClearCollide: function (event) {
- this.data.rayCollided = false;
- },
- onSelectStart: function (event) {
- console.log("onSelectStart");
- },
-
- remove: function () {
- // Do something the component or its entity is detached.
- },
-
- updateColorMapping: function () {
- if (!this.colorTransferMap.has(this.currentColorMap)) {
- const colorCanvas = document.createElement("canvas");
-
- const imgWidth = 255;
- const imgHeight = 15;
- const newColorMap = {
- img: document.createElement("img"),
- width: imgWidth,
- height: imgHeight,
- data: null,
- };
-
- // Re-inject local image with semi-colon
- if (this.currentColorMap.startsWith("data:image/png")) {
- this.currentColorMap =
- this.currentColorMap.substring(0, 14) +
- ";" +
- this.currentColorMap.substring(14);
- }
-
- newColorMap.img.src = this.currentColorMap;
- this.colorTransferMap.set(this.currentColorMap, newColorMap);
- const mappedColorMap = newColorMap;
-
- const updateTransferTexture = this.updateTransferTexture;
- newColorMap.img.onload = function (data) {
- colorCanvas.height = imgHeight;
- colorCanvas.width = imgWidth;
- const colorContext = colorCanvas.getContext("2d");
- colorContext.drawImage(newColorMap.img, 0, 0);
- const colorData = colorContext.getImageData(0, 0, imgWidth, 1).data;
- const colorTransfer = new Uint8Array(3 * 256);
- for (let i = 0; i < 256; i++) {
- colorTransfer[i * 3] = colorData[i * 4];
- colorTransfer[i * 3 + 1] = colorData[i * 4 + 1];
- colorTransfer[i * 3 + 2] = colorData[i * 4 + 2];
- }
- mappedColorMap.data = colorTransfer;
-
- updateTransferTexture();
- };
- } else {
- this.updateTransferTexture();
- }
- },
-
- update: function (oldData) {
- if (oldData === undefined) {
- return;
- }
-
- if (this.data.useTransferFunction) {
- // this part updates the opacity control points
- //comparing javascript arrays
- if (
- (this.data.alphaXDataArray !== undefined &&
- JSON.stringify(oldData.alphaXDataArray) !==
- JSON.stringify(this.data.alphaXDataArray)) ||
- (this.data.alphaYDataArray !== undefined &&
- JSON.stringify(oldData.alphaYDataArray) !==
- JSON.stringify(this.data.alphaYDataArray))
- ) {
- this.updateOpacityData(
- this.data.alphaXDataArray,
- this.data.alphaYDataArray
- );
- this.updateTransferTexture();
- } else if (oldData.colorMap !== this.data.colorMap) {
- this.currentColorMap = this.data.colorMap;
- this.updateColorMapping();
- }
- } else {
- // Data using channels
- if (
- this.data.channel !== undefined &&
- oldData.channel !== this.data.channel
- ) {
- this.updateDataChannel();
- }
- }
-
- if (oldData.path !== this.data.path) {
- this.loadModel();
- }
- },
-
- updateOpacityData: function (arrayX, arrayY) {
- this.newAlphaData = [];
-
- for (let i = 0; i <= arrayX.length - 2; i++) {
- const scaledColorInit = arrayX[i] * 255;
- const scaledColorEnd = arrayX[i + 1] * 255;
-
- const scaledAplhaInit = arrayY[i] * 255;
- const scaledAlphaEnd = arrayY[i + 1] * 255;
-
- const deltaX = scaledColorEnd - scaledColorInit;
-
- for (let j = 1 / deltaX; j < 1; j += 1 / deltaX) {
- // linear interpolation
- this.newAlphaData.push(scaledAplhaInit * (1 - j) + scaledAlphaEnd * j);
- }
- }
- },
-
- getMesh: function () {
- return this.el.getObject3D("mesh");
- },
-
- tick: function (time, timeDelta) {
- // Do something on every scene tick or frame.
- if (this.debugVRPos) {
- this.debugVRPos = false;
- }
-
- const isVrModeActive = this.sceneHandler.is("vr-mode");
- if (this.data.modelLoaded) {
- if (this.clipPlaneListenerHandler !== undefined && !isVrModeActive) {
- if (
- this.clipPlaneListenerHandler.el.getAttribute("render-2d-clipplane")
- .activateClipPlane &&
- !this.clip2DPlaneRendered
- ) {
- this.clip2DPlaneRendered = true;
- } else if (
- !this.clipPlaneListenerHandler.el.getAttribute("render-2d-clipplane")
- .activateClipPlane &&
- this.clip2DPlaneRendered
- ) {
- this.clip2DPlaneRendered = false;
-
- if (this.el.getObject3D("mesh") !== undefined) {
- const material = this.el.getObject3D("mesh").material;
- material.uniforms.box_min.value = new THREE.Vector3(0, 0, 0);
- material.uniforms.box_max.value = new THREE.Vector3(1, 1, 1);
- }
- }
-
- if (this.clip2DPlaneRendered) {
- if (this.el.getObject3D("mesh") !== undefined) {
- const material = this.el.getObject3D("mesh").material;
-
- if (material !== undefined) {
- const sliceX = this.clipPlaneListenerHandler.el.getAttribute(
- "render-2d-clipplane"
- ).clipX;
- const sliceY = this.clipPlaneListenerHandler.el.getAttribute(
- "render-2d-clipplane"
- ).clipY;
- const sliceZ = this.clipPlaneListenerHandler.el.getAttribute(
- "render-2d-clipplane"
- ).clipZ;
-
- material.uniforms.box_min.value = new THREE.Vector3(
- sliceX.x,
- sliceY.x,
- sliceZ.x
- );
- material.uniforms.box_max.value = new THREE.Vector3(
- sliceX.y,
- sliceY.y,
- sliceZ.y
- );
- }
- }
- }
- } else if (this.controllerHandler !== undefined && isVrModeActive) {
- if (
- !this.controllerHandler.el.getAttribute("buttons-check").grabObject &&
- this.grabbed
- ) {
- this.el
- .getObject3D("mesh")
- .matrix.premultiply(this.controllerHandler.matrixWorld);
- this.el
- .getObject3D("mesh")
- .matrix.decompose(
- this.el.getObject3D("mesh").position,
- this.el.getObject3D("mesh").quaternion,
- this.el.getObject3D("mesh").scale
- );
- this.el.object3D.add(this.el.getObject3D("mesh"));
-
- this.grabbed = false;
- }
-
- // grab mesh
- if (
- this.controllerHandler.el.getAttribute("buttons-check").grabObject &&
- this.data.rayCollided &&
- !this.grabbed
- ) {
- const inverseControllerPos = new THREE.Matrix4();
- inverseControllerPos.getInverse(this.controllerHandler.matrixWorld);
- this.el.getObject3D("mesh").matrix.premultiply(inverseControllerPos);
- this.el
- .getObject3D("mesh")
- .matrix.decompose(
- this.el.getObject3D("mesh").position,
- this.el.getObject3D("mesh").quaternion,
- this.el.getObject3D("mesh").scale
- );
- this.controllerHandler.add(this.el.getObject3D("mesh"));
-
- this.grabbed = true;
- }
-
- this.updateMeshClipMatrix(this.controllerHandler.matrixWorld);
- }
- }
-
- if (this.el.getObject3D("mesh") !== undefined) {
- this.data.meshPosition = this.el.getObject3D("mesh").position;
- }
- },
-
- updateMeshClipMatrix: function (currentSpaceClipMatrix) {
- const volumeMatrix = this.el.getObject3D("mesh").matrixWorld;
- //material for setting the clipPlane and clipping value
- const material = this.el.getObject3D("mesh").material;
-
- //scalematrix for zscaling
- const scaleMatrix = new THREE.Matrix4();
- scaleMatrix.makeScale(1, 1, material.uniforms.zScale.value);
-
- //translationmatrix to cube-coordinates ranging from 0 -1
- const translationMatrix = new THREE.Matrix4();
- translationMatrix.makeTranslation(-0.5, -0.5, -0.5);
-
- //inverse of the clipMatrix
- const currentSpaceClipMatrix_inverse = new THREE.Matrix4();
- currentSpaceClipMatrix_inverse.getInverse(currentSpaceClipMatrix);
-
- //outputmatrix - controller_inverse * volume * scale * translation
- const clipMatrix = new THREE.Matrix4();
- clipMatrix.multiplyMatrices(currentSpaceClipMatrix_inverse, volumeMatrix);
- clipMatrix.multiplyMatrices(clipMatrix, scaleMatrix);
- clipMatrix.multiplyMatrices(clipMatrix, translationMatrix);
-
- //set uniforms of shader
- const isVrModeActive = this.sceneHandler.is("vr-mode");
- const doClip =
- isVrModeActive &&
- this.controllerHandler.el.getAttribute("buttons-check").clipPlane &&
- !this.grabbed;
- material.uniforms.clipPlane.value = clipMatrix;
- material.uniforms.clipping.value = doClip;
- },
-});
diff --git a/src/Aframe/model.js b/src/Aframe/model.js
new file mode 100644
index 00000000..5f0e61db
--- /dev/null
+++ b/src/Aframe/model.js
@@ -0,0 +1,376 @@
+/* globals AFRAME THREE */
+
+import "./Shader.js";
+import {
+ DEFAULT_TRANSFER_FUNCTION,
+ DEFAULT_MODEL,
+ DEFAULT_COLOR_MAP,
+ DEFAULT_SLIDERS,
+} from "../constants/constants";
+
+const bind = AFRAME.utils.bind;
+
+// TODO: The function in THREE.TextureLoader().load (loadModel) needs to run asynchronously
+// Before loadColorMap, updateClipping, updateTransferTexture, etc.
+// TODO: colorMapData should {[name]: colorMapData}
+// Check if color map has already been loaded before - then there's no need to load the data again
+
+AFRAME.registerComponent("model", {
+ dependencies: ["render-2d-clipplane", "buttons-check"],
+ schema: {
+ colorMap: { parse: JSON.parse, default: DEFAULT_COLOR_MAP },
+ sliders: { parse: JSON.parse, default: DEFAULT_SLIDERS },
+ transferFunction: { parse: JSON.parse, default: DEFAULT_TRANSFER_FUNCTION },
+ useTransferFunction: { type: "boolean", default: false },
+ channel: { type: "number", default: DEFAULT_MODEL.channel },
+ intensity: { type: "number", default: DEFAULT_MODEL.intensity },
+ path: { type: "string" },
+ slices: { type: "number", default: DEFAULT_MODEL.slices },
+ spacing: { parse: JSON.parse, default: DEFAULT_MODEL.spacing },
+ },
+
+ init: function () {
+ this.scene = this.el.sceneEl;
+ this.canvas = this.scene.canvas;
+ this.alphaData = [];
+ this.colorMapData = [];
+ this.rayCollided = false;
+ this.grabbed = false;
+
+ // Get other entities
+ this.controllerObject = document.getElementById("rhand").object3D;
+ this.controllerObject.matrixAutoUpdate = false;
+ this.clipPlaneListenerHandler = document.getElementById(
+ "clipplane2DListener"
+ ).object3D;
+
+ // Bind functions
+ this.onEnterVR = bind(this.onEnterVR, this);
+ this.onExitVR = bind(this.onExitVR, this);
+ this.onCollide = this.onCollide.bind(this);
+ this.onClearCollide = this.onClearCollide.bind(this);
+ this.getMesh = this.getMesh.bind(this);
+ this.loadModel = this.loadModel.bind(this);
+ this.updateChannel = this.updateChannel.bind(this);
+ this.loadColorMap = this.loadColorMap.bind(this);
+ this.updateClipping = this.updateClipping.bind(this);
+ this.updateTransferTexture = this.updateTransferTexture.bind(this);
+ this.updateOpacityData = this.updateOpacityData.bind(this);
+ this.updateMeshClipMatrix = this.updateMeshClipMatrix.bind(this);
+
+ // Add event listeners
+ this.scene.addEventListener("enter-vr", this.onEnterVR);
+ this.scene.addEventListener("exit-vr", this.onExitVR);
+ this.el.addEventListener("raycaster-intersected", this.onCollide);
+ this.el.addEventListener(
+ "raycaster-intersected-cleared",
+ this.onClearCollide
+ );
+
+ // Activate camera
+ document.getElementById("camera").setAttribute("camera", "active", true);
+
+ // Load data and colorMap
+ this.loadModel();
+ this.loadColorMap();
+ },
+
+ update: function (oldData) {
+ // Update model
+ if (oldData.path !== this.data.path) this.loadModel();
+
+ // Update color map
+ if (oldData.colorMap !== this.data.colorMap) this.loadColorMap();
+
+ // Update clipping
+ if (oldData.sliders !== this.data.sliders) this.updateClipping();
+
+ if (this.data.useTransferFunction) {
+ // Update transfer function
+ if (oldData.transferFunction !== this.data.transferFunction)
+ this.updateOpacityData();
+ } else {
+ // Update channel
+ if (oldData.channel !== this.data.channel) this.updateChannel();
+ }
+ },
+
+ tick: function (time, timeDelta) {
+ const isVrModeActive = this.scene.is("vr-mode");
+ const mesh = this.getMesh();
+
+ // Position is controlled by controllerObject in VR
+ if (this.controllerObject && isVrModeActive) {
+ const grabObject =
+ this.controllerObject.el.getAttribute("buttons-check").grabObject;
+
+ if (this.grabbed && !grabObject) {
+ mesh.matrix.premultiply(this.controllerObject.matrixWorld);
+ mesh.matrix.decompose(mesh.position, mesh.quaternion, mesh.scale);
+ this.el.object3D.add(mesh);
+ this.grabbed = false;
+ }
+
+ // grab mesh
+ if (!this.grabbed && grabObject && this.rayCollided) {
+ const inverseControllerPos = new THREE.Matrix4();
+ inverseControllerPos.getInverse(this.controllerObject.matrixWorld);
+ mesh.matrix.premultiply(inverseControllerPos);
+ mesh.matrix.decompose(mesh.position, mesh.quaternion, mesh.scale);
+ this.controllerObject.add(mesh);
+ this.grabbed = true;
+ }
+ this.updateMeshClipMatrix();
+ }
+ },
+
+ remove: function () {
+ this.scene.removeEventListener("enter-vr", this.onEnterVR);
+ this.scene.removeEventListener("exit-vr", this.onExitVR);
+ this.el.removeEventListener("raycaster-intersected", this.onCollide);
+ this.el.removeEventListener(
+ "raycaster-intersected-cleared",
+ this.onClearCollide
+ );
+ },
+
+ /** EVENT LISTENER FUNCTIONS */
+
+ onEnterVR: function () {},
+
+ onExitVR: function () {
+ const mesh = this.getMesh();
+ if (mesh) {
+ mesh.position.copy(new THREE.Vector3());
+ mesh.rotation.set(0, 0, 0);
+ }
+ },
+
+ onCollide: function (event) {
+ this.rayCollided = true;
+ },
+
+ onClearCollide: function (event) {
+ this.rayCollided = false;
+ },
+
+ /** HELPER FUNCTIONS */
+
+ getMesh: function () {
+ return this.el.getObject3D("mesh");
+ },
+
+ loadModel: function () {
+ const { spacing, slices, path, useTransferFunction, intensity } = this.data;
+
+ // Clear mesh and load new model
+ if (this.getMesh()) this.el.removeObject3D("mesh");
+ new THREE.TextureLoader().load(
+ path,
+ (texture) => {
+ // Create 3D material from texture
+ texture.minFilter = texture.magFilter = THREE.LinearFilter;
+ texture.unpackAlignment = 1;
+ texture.needsUpdate = true;
+
+ const dim = Math.ceil(Math.sqrt(slices));
+ const volumeScale = [
+ 1.0 / ((texture.image.width / dim) * spacing.x),
+ 1.0 / ((texture.image.height / dim) * spacing.y),
+ 1.0 / (slices * spacing.z),
+ ];
+ const zScale = volumeScale[0] / volumeScale[2];
+
+ // Set material properties
+ const shader = THREE.ShaderLib["ModelShader"];
+ const uniforms = THREE.UniformsUtils.clone(shader.uniforms);
+ uniforms.dim.value = dim;
+ uniforms.intensity.value = intensity;
+ uniforms.slice.value = slices;
+ uniforms.step_size.value = new THREE.Vector3(0.01, 0.01, 0.01);
+ uniforms.u_data.value = texture;
+ uniforms.viewPort.value = new THREE.Vector2(
+ this.canvas.width,
+ this.canvas.height
+ );
+ uniforms.zScale.value = zScale;
+ if (useTransferFunction) {
+ uniforms.channel.value = 1;
+ uniforms.useLut.value = true;
+ } else {
+ uniforms.channel.value = 6;
+ uniforms.useLut.value = false;
+ }
+
+ const material = new THREE.ShaderMaterial({
+ uniforms: uniforms,
+ transparent: true,
+ vertexShader: shader.vertexShader,
+ fragmentShader: shader.fragmentShader,
+ side: THREE.BackSide, // The volume shader uses the "backface" as its reference point
+ });
+
+ // Model is a unit box with the file's material
+ const geometry = new THREE.BoxGeometry(1, 1, 1);
+ this.el.setObject3D("mesh", new THREE.Mesh(geometry, material));
+ material.needsUpdate = true;
+
+ // Update colorMapping/data channel once model is loaded
+ if (useTransferFunction) this.loadColorMap();
+ else this.updateChannel();
+ this.updateClipping();
+ },
+ () => {},
+ () => {
+ throw new Error("Could not load the data at", path);
+ }
+ );
+ },
+
+ loadColorMap: function () {
+ const colorMap = this.data.colorMap;
+
+ // Re-inject local image path with semi-colon
+ if (colorMap.path.startsWith("data:image/png")) {
+ colorMap.path =
+ colorMap.path.substring(0, 14) + ";" + colorMap.path.substring(14);
+ }
+
+ // Create and image and canvas
+ const img = document.createElement("img");
+ img.src = colorMap.path;
+ const canvas = document.createElement("canvas");
+ const ctx = canvas.getContext("2d");
+
+ // Draw img on the canvas and read RGB data
+ img.onload = () => {
+ ctx.drawImage(img, 0, 0);
+ const colorData = ctx.getImageData(0, 0, img.width, 1).data;
+ const colorTransfer = new Uint8Array(3 * 256);
+ for (let i = 0; i < 256; i++) {
+ for (let j = 0; j < 3; j++)
+ colorTransfer[i * 3 + j] = colorData[i * 4 + j];
+ }
+ this.colorMapData = colorTransfer;
+
+ this.updateTransferTexture();
+ };
+ },
+
+ updateTransferTexture: function () {
+ const colorMapData = this.colorMapData;
+ const imageTransferData = new Uint8Array(4 * 256);
+ for (let i = 0; i < 256; i++) {
+ for (let j = 0; j < 3; j++)
+ imageTransferData[i * 4 + j] = colorMapData[i * 3 + j];
+ imageTransferData[i * 4 + 3] = this.alphaData[i];
+ }
+
+ const transferTexture = new THREE.DataTexture(
+ imageTransferData,
+ 256,
+ 1,
+ THREE.RGBAFormat
+ );
+ transferTexture.needsUpdate = true;
+
+ // Apply transfer texture
+ const mesh = this.getMesh();
+ if (mesh) {
+ const material = mesh.material;
+ material.uniforms.u_lut.value = transferTexture;
+ material.uniforms.channel.value = this.data.channel;
+ material.uniforms.useLut.value = this.data.useTransferFunction;
+ material.needsUpdate = true;
+ }
+ },
+
+ updateClipping: function () {
+ const mesh = this.getMesh();
+ const activateClipPlane = this.clipPlaneListenerHandler.el.getAttribute(
+ "render-2d-clipplane"
+ ).activateClipPlane;
+
+ if (mesh) {
+ const material = mesh.material;
+ if (activateClipPlane) {
+ const sliders = this.data.sliders;
+ material.uniforms.box_min.value = new THREE.Vector3(
+ sliders.x[0],
+ sliders.y[0],
+ sliders.z[0]
+ );
+ material.uniforms.box_max.value = new THREE.Vector3(
+ sliders.x[1],
+ sliders.y[1],
+ sliders.z[1]
+ );
+ } else {
+ // Ignore sliders
+ material.uniforms.box_min.value = new THREE.Vector3(0, 0, 0);
+ material.uniforms.box_max.value = new THREE.Vector3(1, 1, 1);
+ }
+ }
+ },
+
+ updateChannel: function () {
+ const mesh = this.getMesh();
+ if (mesh) {
+ const material = mesh.material;
+ material.uniforms.channel.value = this.data.channel;
+ material.uniforms.useLut.value = this.data.useTransferFunction;
+ material.needsUpdate = true;
+ }
+ },
+
+ updateOpacityData: function () {
+ this.alphaData = [];
+ const transferFunction = this.data.transferFunction;
+ for (let i = 0; i < transferFunction.length - 1; i++) {
+ const start = transferFunction[i];
+ const end = transferFunction[i + 1];
+ const deltaX = end.x * 255 - start.x * 255;
+
+ // Linear interpolation between points
+ const alphaStart = start.y * 255;
+ const alphaEnd = end.y * 255;
+ for (let j = 1 / deltaX; j < 1; j += 1 / deltaX) {
+ this.alphaData.push(alphaStart * (1 - j) + alphaEnd * j);
+ }
+ }
+ this.updateTransferTexture();
+ },
+
+ updateMeshClipMatrix: function () {
+ const volumeMatrix = this.getMesh().matrixWorld;
+ const material = this.getMesh().material;
+
+ // Matrix for zscaling
+ const scaleMatrix = new THREE.Matrix4();
+ scaleMatrix.makeScale(1, 1, material.uniforms.zScale.value);
+
+ // Translate to cube-coordinates ranging from 0 -1
+ const translationMatrix = new THREE.Matrix4();
+ translationMatrix.makeTranslation(-0.5, -0.5, -0.5);
+
+ // Inverse of the clip matrix
+ const controllerMatrix = this.controllerObject.matrixWorld;
+ const controllerMatrix_inverse = new THREE.Matrix4();
+ controllerMatrix_inverse.copy(controllerMatrix).invert();
+
+ //outputmatrix - controller_inverse * volume * scale * translation
+ const clipMatrix = new THREE.Matrix4();
+ clipMatrix.multiplyMatrices(controllerMatrix_inverse, volumeMatrix);
+ clipMatrix.multiplyMatrices(clipMatrix, scaleMatrix);
+ clipMatrix.multiplyMatrices(clipMatrix, translationMatrix);
+
+ //set uniforms of shader
+ const isVrModeActive = this.scene.is("vr-mode");
+ const isClipped =
+ isVrModeActive &&
+ this.controllerObject.el.getAttribute("buttons-check").clipPlane &&
+ !this.grabbed;
+ material.uniforms.clipPlane.value = clipMatrix;
+ material.uniforms.clipping.value = isClipped;
+ },
+});
diff --git a/src/Aframe/render-2d-clipplane.js b/src/Aframe/render-2d-clipplane.js
index 55dc925e..50845ad6 100644
--- a/src/Aframe/render-2d-clipplane.js
+++ b/src/Aframe/render-2d-clipplane.js
@@ -19,8 +19,6 @@ AFRAME.registerComponent("render-2d-clipplane", {
xBounds: { type: "array", default: [0, 1] },
yBounds: { type: "array", default: [0, 1] },
zBounds: { type: "array", default: [0, 1] },
- currentAxisAngle: { type: "vec3" },
- rotateAngle: { type: "vec3" },
clipX: { type: "vec2" },
clipY: { type: "vec2" },
clipZ: { type: "vec2" },
@@ -35,7 +33,6 @@ AFRAME.registerComponent("render-2d-clipplane", {
this.onKeyDown = this.onKeyDown.bind(this);
this.onKeyUp = this.onKeyUp.bind(this);
this.activate2DClipPlane = this.activate2DClipPlane.bind(this);
-
window.addEventListener("keydown", this.onKeyDown);
window.addEventListener("keyup", this.onKeyUp);
},
@@ -43,16 +40,6 @@ AFRAME.registerComponent("render-2d-clipplane", {
update: function () {},
tick: function (time, timeDelta) {
- // I dont know why I have to save the current angle axis using a temporal variable. Maybe Aframe updates
- // data on a asynchronous call
- this.tempVec.x = this.data.xCLipPlaneRotation;
- this.tempVec.y = this.data.yCLipPlaneRotation;
- this.tempVec.z = this.data.zCLipPlaneRotation;
-
- this.data.currentAxisAngle.x = this.tempVec.x;
- this.data.currentAxisAngle.y = this.tempVec.y;
- this.data.currentAxisAngle.z = this.tempVec.z;
-
this.data.clipX = { x: this.data.xBounds[0], y: this.data.xBounds[1] };
this.data.clipY = { x: this.data.yBounds[0], y: this.data.yBounds[1] };
this.data.clipZ = { x: this.data.zBounds[0], y: this.data.zBounds[1] };
@@ -71,7 +58,8 @@ AFRAME.registerComponent("render-2d-clipplane", {
},
remove: function () {
- this.removeEventListeners();
+ window.removeEventListener("keydown", this.onKeydown);
+ window.removeEventListener("keyup", this.onKeyUp);
},
onKeyDown: function (event) {
@@ -88,9 +76,4 @@ AFRAME.registerComponent("render-2d-clipplane", {
activate2DClipPlane: function (event) {
this.data.isActive = false;
},
-
- removeEventListeners: function () {
- window.removeEventListener("keydown", this.onKeydown);
- window.removeEventListener("keyup", this.onKeyUp);
- },
});
diff --git a/src/components/AframeScene.jsx b/src/components/AframeScene.jsx
index 55735c73..e44a0d85 100644
--- a/src/components/AframeScene.jsx
+++ b/src/components/AframeScene.jsx
@@ -1,14 +1,13 @@
import React from "react";
import "aframe";
-import "aframe-event-set-component";
-import "aframe-orbit-controls";
import "../Aframe/arcball-camera";
import "../Aframe/buttons-check";
-import "../Aframe/cursor-listener";
-import "../Aframe/loader";
+import "../Aframe/model";
import "../Aframe/render-2d-clipplane";
+import "../Aframe/entity-collider-check";
+import "../Aframe/collider-check";
// aframe data is passed as a string
const toAframeString = (obj) => {
@@ -58,6 +57,7 @@ function AframeScene({
})}
/>
+ {/* CLICKABLE PLANE FOR MOUSE INTERACTIONS */}
{/* MODEL */}
p["x"]),
- alphaYDataArray: transferFunction.map((p) => p["y"]),
- colorMap: colorMap.path,
- path: model.path,
- slices: model.slices,
- x_spacing: model.spacing.x,
- y_spacing: model.spacing.y,
- z_spacing: model.spacing.z,
+ model={toAframeString({
+ colorMap: JSON.stringify(colorMap),
+ sliders: JSON.stringify(sliders),
+ transferFunction: JSON.stringify(transferFunction),
useTransferFunction,
channel: model.channel,
intensity: model.intensity,
+ path: model.path,
+ slices: model.slices,
+ spacing: JSON.stringify(model.spacing),
})}
position={model.position}
rotation={model.rotation}
@@ -101,7 +98,7 @@ function AframeScene({
id="camera"
camera="active: true"
look-controls
- arcball-camera="initialPosition:0 0 1"
+ arcball-camera="initialPosition: 0 0 1;"
/>
);
diff --git a/src/components/VolumeViewer.jsx b/src/components/VolumeViewer.jsx
index dbacb298..a2ea067c 100644
--- a/src/components/VolumeViewer.jsx
+++ b/src/components/VolumeViewer.jsx
@@ -143,6 +143,10 @@ VolumeViewer.propTypes = {
/** The model to be displayed and it's related information */
model: PropTypes.shape({
+ /** Channel to load data from (R:1, G:2, B:3)*/
+ channel: PropTypes.number,
+ /** Increase/decrease voxels intensity */
+ intensity: PropTypes.number,
/** Path to the model REQUIRED */
path: PropTypes.string.isRequired,
/** Position of the model in the scene */
@@ -165,10 +169,6 @@ VolumeViewer.propTypes = {
y: PropTypes.number,
z: PropTypes.number,
}),
- /** Channel to load data from (R:1, G:2, B:3)*/
- channel: PropTypes.number,
- /** Increase/decrease voxels intensity */
- intensity: PropTypes.number,
}),
/**
diff --git a/src/constants/constants.js b/src/constants/constants.js
index 893d784e..490eb248 100644
--- a/src/constants/constants.js
+++ b/src/constants/constants.js
@@ -14,14 +14,14 @@ const DEFAULT_COLOR_MAPS = [
const DEFAULT_COLOR_MAP = grayscaleColorMap;
const DEFAULT_MODEL = {
+ channel: 1,
+ intensity: 1.0,
position: "0 0 0",
range: { min: 0, max: 1, unit: "" },
rotation: "0 0 0",
scale: "1 1 1",
slices: 55,
spacing: { x: 2, y: 2, z: 1 },
- channel: 1,
- intensity: 1.0,
};
const DEFAULT_TRANSFER_FUNCTION = [