diff --git a/.babelrc b/.babelrc index 3836f5a..5de969b 100644 --- a/.babelrc +++ b/.babelrc @@ -6,6 +6,7 @@ "plugins": [ ["@babel/plugin-proposal-decorators", { "legacy": true }], ["@babel/plugin-proposal-class-properties", { "loose": true }], + ["@babel/plugin-proposal-private-methods", { "loose": true }], ["@babel/plugin-transform-runtime", { "regenerator": true }], "@babel/proposal-object-rest-spread" ] diff --git a/package-lock.json b/package-lock.json index ce4ec5b..daf5797 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,26 +53,26 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", - "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", "dev": true }, "node_modules/@babel/core": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.16.tgz", - "integrity": "sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", + "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.16", + "@babel/generator": "^7.14.0", "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.16", - "@babel/parser": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -89,12 +89,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", - "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", + "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", "dev": true, "dependencies": { - "@babel/types": "^7.13.16", + "@babel/types": "^7.14.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -134,15 +134,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", - "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz", + "integrity": "sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ==", "dev": true, "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13" }, "peerDependencies": { @@ -239,19 +240,19 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", - "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "node_modules/@babel/helper-optimise-call-expression": { @@ -320,9 +321,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, "node_modules/@babel/helper-validator-option": { @@ -344,31 +345,31 @@ } }, "node_modules/@babel/helpers": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.17.tgz", - "integrity": "sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "dependencies": { "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.17", - "@babel/types": "^7.13.17" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "node_modules/@babel/parser": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", - "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", + "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -418,6 +419,19 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", + "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, "node_modules/@babel/plugin-proposal-decorators": { "version": "7.13.15", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.15.tgz", @@ -566,6 +580,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", @@ -606,6 +635,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-decorators": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz", @@ -726,6 +767,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", @@ -930,12 +983,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", + "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" }, @@ -944,14 +997,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", - "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-simple-access": "^7.13.12", "babel-plugin-dynamic-import-node": "^2.3.3" }, "peerDependencies": { @@ -975,12 +1028,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0" }, "peerDependencies": { @@ -1190,18 +1243,19 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.15.tgz", - "integrity": "sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.0.tgz", + "integrity": "sha512-GWRCdBv2whxqqaSi7bo/BEXf070G/fWFMEdCnmoRg2CZJy4GK06ovFuEjJrZhDRXYgBsYtxVbG8GUHvw+UWBkQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-compilation-targets": "^7.13.13", + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-option": "^7.12.17", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", "@babel/plugin-proposal-async-generator-functions": "^7.13.15", "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.13.11", "@babel/plugin-proposal-dynamic-import": "^7.13.8", "@babel/plugin-proposal-export-namespace-from": "^7.12.13", "@babel/plugin-proposal-json-strings": "^7.13.8", @@ -1212,9 +1266,11 @@ "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", "@babel/plugin-proposal-optional-chaining": "^7.13.12", "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -1224,14 +1280,15 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", "@babel/plugin-syntax-top-level-await": "^7.12.13", "@babel/plugin-transform-arrow-functions": "^7.13.0", "@babel/plugin-transform-async-to-generator": "^7.13.0", "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.13.16", "@babel/plugin-transform-classes": "^7.13.0", "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", "@babel/plugin-transform-dotall-regex": "^7.12.13", "@babel/plugin-transform-duplicate-keys": "^7.12.13", "@babel/plugin-transform-exponentiation-operator": "^7.12.13", @@ -1239,10 +1296,10 @@ "@babel/plugin-transform-function-name": "^7.12.13", "@babel/plugin-transform-literals": "^7.12.13", "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.13.0", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-amd": "^7.14.0", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-modules-umd": "^7.14.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", "@babel/plugin-transform-new-target": "^7.12.13", "@babel/plugin-transform-object-super": "^7.12.13", @@ -1258,7 +1315,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.14", + "@babel/types": "^7.14.0", "babel-plugin-polyfill-corejs2": "^0.2.0", "babel-plugin-polyfill-corejs3": "^0.2.0", "babel-plugin-polyfill-regenerator": "^0.2.0", @@ -1300,9 +1357,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.17.tgz", - "integrity": "sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" @@ -1320,28 +1377,28 @@ } }, "node_modules/@babel/traverse": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz", - "integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.16", + "@babel/generator": "^7.14.0", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.16", - "@babel/types": "^7.13.17", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "node_modules/@babel/types": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz", - "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", + "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, @@ -1452,9 +1509,9 @@ "peer": true }, "node_modules/@types/node": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.0.tgz", - "integrity": "sha512-YN1d+ae2MCb4U0mMa+Zlb5lWTdpFShbAj5nmte6lel27waMMBfivrm0prC16p/Di3DyTrmerrYUT8/145HXxVw==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", + "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -1669,9 +1726,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.1.tgz", - "integrity": "sha512-z716cpm5TX4uzOzILx8PavOE6C6DKshHDw1aQN52M/yNSqE9s5O8SMfyhCCfCJ3HmTL0NkVOi+8a/55T7YB3bg==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.2.tgz", + "integrity": "sha512-VrMS8kxT0e7J1EX0p6rI/E0FbfOVcvBpbIqHThFv+f8YrZIlMfVotYcXKVPmTvPW8sW5miJzfUFrrvthUZg8VQ==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1987,14 +2044,14 @@ } }, "node_modules/browserslist": { - "version": "4.16.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.5.tgz", - "integrity": "sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001214", + "caniuse-lite": "^1.0.30001219", "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.719", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", "node-releases": "^1.1.71" }, @@ -2068,9 +2125,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001218", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001218.tgz", - "integrity": "sha512-0ASydOWSy3bB88FbDpJSTt+PfDwnMqrym3yRZfqG8EXSQ06OZhF+q5wgYP/EN+jJMERItNcDQUqMyNjzZ+r5+Q==", + "version": "1.0.30001220", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001220.tgz", + "integrity": "sha512-pjC2T4DIDyGAKTL4dMvGUQaMUHRmhvPpAgNNTa14jaBWHu+bLQgvpFqElxh9L4829Fdx0PlKiMp3wnYldRtECA==", "dev": true }, "node_modules/caseless": { @@ -2373,12 +2430,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.0.tgz", - "integrity": "sha512-3wsN9YZJohOSDCjVB0GequOyHax8zFiogSX3XWLE28M1Ew7dTU57tgHjIylSBKSIouwmLBp3g61sKMz/q3xEGA==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", + "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", "dev": true, "dependencies": { - "browserslist": "^4.16.4", + "browserslist": "^4.16.5", "semver": "7.0.0" }, "funding": { @@ -2666,9 +2723,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.722", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.722.tgz", - "integrity": "sha512-aAsc906l0RBsVTsGTK+KirVfey9eNtxyejdkbNzkISGxb7AFna3Kf0qvsp8tMttzBt9Bz3HddtYQ+++/PZtRYA==", + "version": "1.3.725", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz", + "integrity": "sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw==", "dev": true }, "node_modules/emoji-regex": { @@ -4013,9 +4070,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.5.0.tgz", - "integrity": "sha512-SIbuLMv6jsk1FnLIU5OUG/+VMGUprEjM1+o2trOAx8i5KOKMrhyezb1dJ4Ugsykb8Jgq8/w5NEopy6escV9G7g==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", + "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", "dev": true, "dependencies": { "loader-utils": "^2.0.0", @@ -5069,9 +5126,9 @@ "dev": true }, "node_modules/resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz", + "integrity": "sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA==", "dev": true, "dependencies": { "adjust-sourcemap-loader": "3.0.0", @@ -6252,9 +6309,9 @@ } }, "node_modules/webpack": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.36.0.tgz", - "integrity": "sha512-HdOhLXClUEwTnzQnzpSG9iL00ej23ojvfnGpF49ba0MkuAT2q+WhQilHFFJHOIVRBqbzakQ1vCWQV2K+QLX0Qw==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.36.2.tgz", + "integrity": "sha512-XJumVnnGoH2dV+Pk1VwgY4YT6AiMKpVoudUFCNOXMIVrEKPUgEwdIfWPjIuGLESAiS8EdIHX5+TiJz/5JccmRg==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.0", @@ -6674,26 +6731,26 @@ } }, "@babel/compat-data": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", - "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", "dev": true }, "@babel/core": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.16.tgz", - "integrity": "sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", + "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.16", + "@babel/generator": "^7.14.0", "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.16", - "@babel/parser": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -6703,12 +6760,12 @@ } }, "@babel/generator": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", - "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", + "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", "dev": true, "requires": { - "@babel/types": "^7.13.16", + "@babel/types": "^7.14.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -6745,15 +6802,16 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", - "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz", + "integrity": "sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ==", "dev": true, "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13" } }, @@ -6841,19 +6899,19 @@ } }, "@babel/helper-module-transforms": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", - "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/helper-optimise-call-expression": { @@ -6922,9 +6980,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, "@babel/helper-validator-option": { @@ -6946,31 +7004,31 @@ } }, "@babel/helpers": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.17.tgz", - "integrity": "sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "requires": { "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.17", - "@babel/types": "^7.13.17" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", - "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", + "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { @@ -7005,6 +7063,16 @@ "@babel/helper-plugin-utils": "^7.13.0" } }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", + "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + } + }, "@babel/plugin-proposal-decorators": { "version": "7.13.15", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.15.tgz", @@ -7120,6 +7188,18 @@ "@babel/helper-plugin-utils": "^7.13.0" } }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + } + }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", @@ -7148,6 +7228,15 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, "@babel/plugin-syntax-decorators": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz", @@ -7238,6 +7327,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, "@babel/plugin-syntax-top-level-await": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", @@ -7394,25 +7492,25 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", + "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", - "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-simple-access": "^7.13.12", "babel-plugin-dynamic-import-node": "^2.3.3" } }, @@ -7430,12 +7528,12 @@ } }, "@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0" } }, @@ -7594,18 +7692,19 @@ } }, "@babel/preset-env": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.15.tgz", - "integrity": "sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.0.tgz", + "integrity": "sha512-GWRCdBv2whxqqaSi7bo/BEXf070G/fWFMEdCnmoRg2CZJy4GK06ovFuEjJrZhDRXYgBsYtxVbG8GUHvw+UWBkQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-compilation-targets": "^7.13.13", + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-option": "^7.12.17", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", "@babel/plugin-proposal-async-generator-functions": "^7.13.15", "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.13.11", "@babel/plugin-proposal-dynamic-import": "^7.13.8", "@babel/plugin-proposal-export-namespace-from": "^7.12.13", "@babel/plugin-proposal-json-strings": "^7.13.8", @@ -7616,9 +7715,11 @@ "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", "@babel/plugin-proposal-optional-chaining": "^7.13.12", "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -7628,14 +7729,15 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", "@babel/plugin-syntax-top-level-await": "^7.12.13", "@babel/plugin-transform-arrow-functions": "^7.13.0", "@babel/plugin-transform-async-to-generator": "^7.13.0", "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.13.16", "@babel/plugin-transform-classes": "^7.13.0", "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", "@babel/plugin-transform-dotall-regex": "^7.12.13", "@babel/plugin-transform-duplicate-keys": "^7.12.13", "@babel/plugin-transform-exponentiation-operator": "^7.12.13", @@ -7643,10 +7745,10 @@ "@babel/plugin-transform-function-name": "^7.12.13", "@babel/plugin-transform-literals": "^7.12.13", "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.13.0", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-amd": "^7.14.0", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-modules-umd": "^7.14.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", "@babel/plugin-transform-new-target": "^7.12.13", "@babel/plugin-transform-object-super": "^7.12.13", @@ -7662,7 +7764,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.14", + "@babel/types": "^7.14.0", "babel-plugin-polyfill-corejs2": "^0.2.0", "babel-plugin-polyfill-corejs3": "^0.2.0", "babel-plugin-polyfill-regenerator": "^0.2.0", @@ -7695,9 +7797,9 @@ } }, "@babel/runtime": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.17.tgz", - "integrity": "sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -7715,28 +7817,28 @@ } }, "@babel/traverse": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz", - "integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.16", + "@babel/generator": "^7.14.0", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.16", - "@babel/types": "^7.13.17", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz", - "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", + "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, @@ -7831,9 +7933,9 @@ "peer": true }, "@types/node": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.0.tgz", - "integrity": "sha512-YN1d+ae2MCb4U0mMa+Zlb5lWTdpFShbAj5nmte6lel27waMMBfivrm0prC16p/Di3DyTrmerrYUT8/145HXxVw==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", + "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==", "dev": true }, "@types/normalize-package-data": { @@ -8035,9 +8137,9 @@ "dev": true }, "acorn": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.1.tgz", - "integrity": "sha512-z716cpm5TX4uzOzILx8PavOE6C6DKshHDw1aQN52M/yNSqE9s5O8SMfyhCCfCJ3HmTL0NkVOi+8a/55T7YB3bg==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.2.tgz", + "integrity": "sha512-VrMS8kxT0e7J1EX0p6rI/E0FbfOVcvBpbIqHThFv+f8YrZIlMfVotYcXKVPmTvPW8sW5miJzfUFrrvthUZg8VQ==", "dev": true }, "adjust-sourcemap-loader": { @@ -8282,14 +8384,14 @@ } }, "browserslist": { - "version": "4.16.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.5.tgz", - "integrity": "sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001214", + "caniuse-lite": "^1.0.30001219", "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.719", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", "node-releases": "^1.1.71" } @@ -8340,9 +8442,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001218", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001218.tgz", - "integrity": "sha512-0ASydOWSy3bB88FbDpJSTt+PfDwnMqrym3yRZfqG8EXSQ06OZhF+q5wgYP/EN+jJMERItNcDQUqMyNjzZ+r5+Q==", + "version": "1.0.30001220", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001220.tgz", + "integrity": "sha512-pjC2T4DIDyGAKTL4dMvGUQaMUHRmhvPpAgNNTa14jaBWHu+bLQgvpFqElxh9L4829Fdx0PlKiMp3wnYldRtECA==", "dev": true }, "caseless": { @@ -8588,12 +8690,12 @@ } }, "core-js-compat": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.0.tgz", - "integrity": "sha512-3wsN9YZJohOSDCjVB0GequOyHax8zFiogSX3XWLE28M1Ew7dTU57tgHjIylSBKSIouwmLBp3g61sKMz/q3xEGA==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", + "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", "dev": true, "requires": { - "browserslist": "^4.16.4", + "browserslist": "^4.16.5", "semver": "7.0.0" }, "dependencies": { @@ -8803,9 +8905,9 @@ } }, "electron-to-chromium": { - "version": "1.3.722", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.722.tgz", - "integrity": "sha512-aAsc906l0RBsVTsGTK+KirVfey9eNtxyejdkbNzkISGxb7AFna3Kf0qvsp8tMttzBt9Bz3HddtYQ+++/PZtRYA==", + "version": "1.3.725", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz", + "integrity": "sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw==", "dev": true }, "emoji-regex": { @@ -9856,9 +9958,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.5.0.tgz", - "integrity": "sha512-SIbuLMv6jsk1FnLIU5OUG/+VMGUprEjM1+o2trOAx8i5KOKMrhyezb1dJ4Ugsykb8Jgq8/w5NEopy6escV9G7g==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", + "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -10655,9 +10757,9 @@ "dev": true }, "resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz", + "integrity": "sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA==", "dev": true, "requires": { "adjust-sourcemap-loader": "3.0.0", @@ -11562,9 +11664,9 @@ } }, "webpack": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.36.0.tgz", - "integrity": "sha512-HdOhLXClUEwTnzQnzpSG9iL00ej23ojvfnGpF49ba0MkuAT2q+WhQilHFFJHOIVRBqbzakQ1vCWQV2K+QLX0Qw==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.36.2.tgz", + "integrity": "sha512-XJumVnnGoH2dV+Pk1VwgY4YT6AiMKpVoudUFCNOXMIVrEKPUgEwdIfWPjIuGLESAiS8EdIHX5+TiJz/5JccmRg==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", diff --git a/src/js/clip/Selection.js b/src/js/clip/Selection.js index e6e7bce..adabc0e 100644 --- a/src/js/clip/Selection.js +++ b/src/js/clip/Selection.js @@ -9,6 +9,10 @@ import { Layer } from '../layer/Layer'; import { Group } from 'three/src/objects/Group'; export class Selection extends Layer { + visible; + opacity; + type; + limit; limitLow; limitHigh; box; @@ -18,6 +22,7 @@ export class Selection extends Layer { faces; map; scale; + boxLines; constructor(parameters, low, high) { super(); @@ -92,6 +97,12 @@ export class Selection extends Layer { this.emit('add'); } + onRemove(map) { + map.scene.remove(this.displayMeshes); + map.scene.remove(this.touchMeshes); + } + + build(app_scene) { // app_scene.add(this.boxMesh); app_scene.add(this.displayMeshes); @@ -99,7 +110,7 @@ export class Selection extends Layer { } setWireframeMode(wireframe) { - return; + return wireframe; } setVisible(visible) { @@ -175,17 +186,18 @@ export class Selection extends Layer { let unif = uniforms.clipping; unif.clippingLow.value.copy(this.limitLow); unif.clippingHigh.value.copy(this.limitHigh); + unif.clippingScale.value = this.scale; - if (this.map.layers) { - for (const [key, layer] of Object.entries(this.map.layers)) { - if (layer.uniforms ) { - let scale = Number(this.scale); - layer.uniforms.clipping.clippingLow.value.copy(this.limitLow); - layer.uniforms.clipping.clippingHigh.value.copy(this.limitHigh); - layer.uniforms.clipping.clippingScale.value = scale; - } - } - } + // if (this.map.layers) { + // for (const [key, layer] of Object.entries(this.map.layers)) { + // if (layer.uniforms ) { + // let scale = Number(this.scale); + // layer.uniforms.clipping.clippingLow.value.copy(this.limitLow); + // layer.uniforms.clipping.clippingHigh.value.copy(this.limitHigh); + // layer.uniforms.clipping.clippingScale.value = scale; + // } + // } + // } } setValue(axis, value) { diff --git a/src/js/clip/SelectionBoxFace.js b/src/js/clip/SelectionBoxFace.js index 98a5edb..5137c00 100644 --- a/src/js/clip/SelectionBoxFace.js +++ b/src/js/clip/SelectionBoxFace.js @@ -9,7 +9,6 @@ export class SelectionBoxFace { let frontFaceGeometry = this.fontFaceGeometry = new PlaneGeometry(v0, v1, v2, v3); // frontFaceGeometry.dynamic = true; selection.meshGeometries.push(frontFaceGeometry); - let frontFaceMesh = new Mesh(frontFaceGeometry, material.Invisible); frontFaceMesh.axis = axis; frontFaceMesh.guardian = this; @@ -19,7 +18,6 @@ export class SelectionBoxFace { let backFaceGeometry = this.backFaceGeometry = new PlaneGeometry(v3, v2, v1, v0); // backFaceGeometry.dynamic = true; selection.meshGeometries.push(backFaceGeometry); - let backFaceMesh = new Mesh(backFaceGeometry, material.BoxBackFace); selection.displayMeshes.add(backFaceMesh); diff --git a/src/js/clip/material.js b/src/js/clip/material.js index c12c65c..5c0168e 100644 --- a/src/js/clip/material.js +++ b/src/js/clip/material.js @@ -3,7 +3,7 @@ import { LineBasicMaterial } from 'three/src/materials/LineBasicMaterial'; import { ShaderMaterial } from 'three/src/materials/ShaderMaterial'; import { uniforms } from "./uniforms"; import { shader } from './shader'; -import { DoubleSide } from 'three/src/constants'; +import { DoubleSide, BackSide } from 'three/src/constants'; let capMaterial = new ShaderMaterial({ uniforms: uniforms.caps, @@ -11,18 +11,27 @@ let capMaterial = new ShaderMaterial({ fragmentShader: shader.fragment }); -let frontStencilMaterial = new ShaderMaterial( { - uniforms: uniforms.clipping, - vertexShader: shader.vertexClipping, +let frontStencilMaterial = new ShaderMaterial({ + uniforms: uniforms.clipping, + vertexShader: shader.vertexClipping, fragmentShader: shader.fragmentClippingFront, - // colorWrite: false, - // depthWrite: false, -} ); + colorWrite: false, + depthWrite: false, +}); + +let backStencilMaterial = new ShaderMaterial({ + uniforms: uniforms.clipping, + vertexShader: shader.vertexClipping, + fragmentShader: shader.fragmentClippingFront, + colorWrite: false, + depthWrite: false, + side: BackSide +}); // beige: // let BoxBackFace = new MeshBasicMaterial({ color: 0xEEDDCC, transparent: true }); let BoxBackFace = new MeshBasicMaterial({ color: 0xf8f8ff, transparent: true, opacity: 0.5 }); -// black box grid: +// black box grid: mouse grey: // let BoxWireframe = new LineBasicMaterial({ color: 0x000000, linewidth: 2 }); let BoxWireframe = new LineBasicMaterial({ color: 0x6f6f6f, linewidth: 3 }); @@ -38,6 +47,7 @@ let Invisible = new ShaderMaterial({ export { capMaterial, frontStencilMaterial, + backStencilMaterial, BoxBackFace, BoxWireframe, BoxWireActive, diff --git a/src/js/clip/uniforms.js b/src/js/clip/uniforms.js index 62b1ffe..79c8462 100644 --- a/src/js/clip/uniforms.js +++ b/src/js/clip/uniforms.js @@ -4,12 +4,19 @@ import { Color } from 'three/src/math/Color'; let uniforms = { clipping: { + // light blue: color: { type: "c", value: new Color(0x3d9ecb) }, clippingLow: { type: "v3", value: new Vector3(0, 0, 0) }, - clippingHigh: { type: "v3", value: new Vector3(0, 0, 0) } + clippingHigh: { type: "v3", value: new Vector3(0, 0, 0) }, + // additional parameter for scaling + clippingScale: { type: "f", value: 1.0 }, + // topography + map: { type: 't', value: null }, + percent: { type: "f", value: 1 } }, caps: { + // red color: { type: "c", value: new Color(0xf83610) } } diff --git a/src/js/layer/TinLayer.ts b/src/js/layer/TinLayer.ts index c4a4be6..7845e0a 100644 --- a/src/js/layer/TinLayer.ts +++ b/src/js/layer/TinLayer.ts @@ -18,6 +18,7 @@ import { Vector2 } from 'three/src/math/Vector2'; import { Matrix4 } from 'three/src/math/Matrix4'; import { Box3 } from 'three/src/math/Box3'; import { PlaneGeometry } from 'three/src/geometries/PlaneGeometry'; +import { uniforms } from '../clip/uniforms'; const POINTURL = 'https://geusegdi01.geus.dk/geom3d/data/nodes/'; const EDGEURL = 'https://geusegdi01.geus.dk/geom3d/data/triangles/'; @@ -38,16 +39,18 @@ class TinLayer extends Layer { featuregeom_id: number; color: string; mainMesh; - uniforms = { - clipping: { - clippingScale: { type: "f", value: 1.0 }, - color: { type: "c", value: null }, - clippingLow: { type: "v3", value: new Vector3(0, 0, 0) }, - clippingHigh: { type: "v3", value: new Vector3(0, 0, 0) }, - map: { type: 't', value: null }, - percent: { type: "f", value: 1 } - } - }; + geometry: BufferGeometry; + uniforms; + // uniforms = { + // clipping: { + // clippingScale: { type: "f", value: 1.0 }, + // color: { type: "c", value: null }, + // clippingLow: { type: "v3", value: new Vector3(0, 0, 0) }, + // clippingHigh: { type: "v3", value: new Vector3(0, 0, 0) }, + // map: { type: 't', value: null }, + // percent: { type: "f", value: 1 } + // } + // }; public baseExtent = { min: { x: 0, y: 0 }, max: { x: 0, y: 0 } @@ -89,6 +92,7 @@ class TinLayer extends Layer { this.scale = 1; this.objectGroup = new Group(); this.q = true; + this.uniforms = uniforms; } setWireframeMode(wireframe) { @@ -298,7 +302,7 @@ class TinLayer extends Layer { } async build(app_scene) { - let geometry = new BufferGeometry(); + let geometry = this.geometry = new BufferGeometry(); let vertices = await (this.points(this.featuregeom_id)); let positions = new Float32BufferAttribute(vertices, 3); @@ -344,17 +348,18 @@ class TinLayer extends Layer { let color = parseInt(this.color, 16); if (this.name == "Topography") { - let width = this.baseExtent.max.x - this.baseExtent.min.x; - let height = this.baseExtent.max.y - this.baseExtent.min.y; - let planeGeometry = new PlaneGeometry(width, height, 298, 134) - let planeMaterial = new MeshLambertMaterial({ color: 0xecf0f1, side: DoubleSide }); - let planeMesh = new Mesh(planeGeometry, planeMaterial); - let center = new Vector3((this.baseExtent.min.x + this.baseExtent.max.x) / 2, (this.baseExtent.min.y + this.baseExtent.max.y) / 2, 0); - planeMesh.position.x = center.x; - planeMesh.position.y = center.y; - - this._addObject(planeMesh, false); + // //add bounding box of layer: + // let width = this.baseExtent.max.x - this.baseExtent.min.x; + // let height = this.baseExtent.max.y - this.baseExtent.min.y; + // let planeGeometry = new PlaneGeometry(width, height, 298, 134) + // let planeMaterial = new MeshLambertMaterial({ color: 0xecf0f1, side: DoubleSide }); + // let planeMesh = new Mesh(planeGeometry, planeMaterial); + // let center = new Vector3((this.baseExtent.min.x + this.baseExtent.max.x) / 2, (this.baseExtent.min.y + this.baseExtent.max.y) / 2, 0); + // planeMesh.position.x = center.x; + // planeMesh.position.y = center.y; + // this._addObject(planeMesh, false); + // load image: let image = this.images[0]; if (image.texture === undefined) { @@ -368,16 +373,15 @@ class TinLayer extends Layer { if (image.type == "wms") { image.texture = await this.loadTextureWms(image.url, image); } - } - this.uniforms.clipping.clippingScale = { type: "f", value: 1.0 }; - this.uniforms.clipping.clippingLow = { type: "v3", value: new Vector3(0, 0, 0) }; - this.uniforms.clipping.clippingHigh = { type: "v3", value: new Vector3(0, 0, 0) }; + // this.uniforms.clipping.clippingScale = { type: "f", value: 1.0 }; + // this.uniforms.clipping.clippingLow = { type: "v3", value: new Vector3(0, 0, 0) }; + // this.uniforms.clipping.clippingHigh = { type: "v3", value: new Vector3(0, 0, 0) }; this.uniforms.clipping.map = { type: 't', value: image.texture }; this.uniforms.clipping.percent = { type: "f", value: 0.7 }; - //calculate UV coordinates, if uv attribute is not present, it will be added + //calculate UV coordinates for projecting image, if uv attribute is not present, it will be added // https://jsfiddle.net/mmalex/pcjbysn1/ // https://stackoverflow.com/questions/20774648/three-js-generate-uv-coordinate this.applyBoxUV(geometry, new Matrix4()); @@ -392,24 +396,17 @@ class TinLayer extends Layer { // }); this.material = new ShaderMaterial({ transparent: true, - side: DoubleSide, - uniforms: this.uniforms.clipping, + // side: DoubleSide, + uniforms: this.uniforms.clipping, vertexShader: shader.vertexClipping, fragmentShader: shader.fragmentClippingFront, }); - } else { - // let uniforms = this.uniforms.clipping = { - // clippingScale: { type: "f", value: 1.0 }, - // color: { type: "c", value: new Color(color) }, - // clippingLow: { type: "v3", value: new Vector3(0, 0, 0) }, - // clippingHigh: { type: "v3", value: new Vector3(0, 0, 0) } - // } - // }; - this.uniforms.clipping.clippingScale = { type: "f", value: 1.0 }; - this.uniforms.clipping.color = { type: "c", value: new Color(color) }; - this.uniforms.clipping.clippingLow = { type: "v3", value: new Vector3(0, 0, 0) }; - this.uniforms.clipping.clippingHigh = { type: "v3", value: new Vector3(0, 0, 0) }; + } else { + // this.uniforms.clipping.clippingScale = { type: "f", value: 1.0 }; + // this.uniforms.clipping.color = { type: "c", value: new Color(color) }; + // this.uniforms.clipping.clippingLow = { type: "v3", value: new Vector3(0, 0, 0) }; + // this.uniforms.clipping.clippingHigh = { type: "v3", value: new Vector3(0, 0, 0) }; this.material = new MyMeshStandardMaterial({ color: color, @@ -418,6 +415,7 @@ class TinLayer extends Layer { flatShading: true, side: DoubleSide }, this.uniforms.clipping); + // }, this.uniforms.clipping); } this.materialsArray.push(this.material); diff --git a/src/js/main.js b/src/js/main.js index 5e13962..2290494 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -4,7 +4,7 @@ import { WebGLRenderer } from 'three/src/renderers/WebGLRenderer'; import { Scene } from 'three/src/scenes/Scene'; import { Vector3 } from 'three/src/math/Vector3'; import { GridLayer } from './layer/GridLayer'; -import { DemLayer } from './layer/DemLayer'; +// import { DemLayer } from './layer/DemLayer'; import { Map } from './core/Map'; import * as domEvent from './core/domEvent'; import { Coordinates } from './controls/Coordinates'; @@ -20,11 +20,14 @@ import * as browser from './core/browser'; import * as domUtil from './core/domUtil'; import { PickingTool } from './clip/PickingTool'; import { ShowModal } from './components/ShowModal'; +import * as material from './clip/material'; +import { Group } from 'three/src/objects/Group'; import { Selection } from './clip/Selection'; import _ from "lodash"; import '../css/page_bulma.scss'; /* style loader will import it */ +import { TinLayer } from './layer/TinLayer'; class Application { @@ -56,15 +59,12 @@ class Application { this.downloadButton = document.querySelector('#menu-dowload-button'); this.menuIcon = document.querySelector('#menu-icon'); this.navigation = document.getElementsByClassName('navigation')[0]; - // this.addEventListeners(); let parentContainer = document.getElementById("app"); this.dialog = new ShowModal("Help", parentContainer, { klass: "fm_about" }); // this.dialog = new MobileDialog("Help", container, { klass: "fm_about" }); this.aboutIcon = document.querySelector('#menu-about-icon'); - - // this.createScene(); // this.addEventListeners(); } @@ -97,6 +97,7 @@ class Application { this.renderer.setSize(this.width, this.height); this.renderer.autoClear = false; this.renderer.setClearColor(0x000000, 0.0); // second param is opacity, 0 => transparent + // this.renderer.setClearColor( 0xffffff ); // enable clipping // let Empty = Object.freeze([]); @@ -107,8 +108,8 @@ class Application { /* Scene: that will hold all our elements such as objects, cameras and lights. */ this.scene = new Scene(); this.capsScene = new Scene(); - // this.backStencil = new Scene(); - // this.frontStencil = new Scene(); + this.backStencil = new Scene(); + this.frontStencil = new Scene(); this._buildDefaultLights(this.scene); //app.scene.autoUpdate = false; //// show axes in the screen @@ -163,18 +164,46 @@ class Application { this.mapTitle.innerHTML += map.title; map.on('ready', () => { this.selectionBox.setUniforms(); + + + this.capsScene.add(this.selectionBox.boxMesh); + // this.scene.add(this.selection.displayMeshes); + // this.scene.add(this.selection.touchMeshes); + this.map.addLayer(this.selectionBox); + + let frontGroup = new Group(); + for (var i in map.layers) { + let layer = map.layers[i]; + if (layer instanceof TinLayer && layer.name != "Topography") { + let mesh = new Mesh(layer.geometry.clone(), material.frontStencilMaterial); + frontGroup.add(mesh); + } + } + frontGroup.updateMatrix(); + // let frontMesh = new Mesh(frontGroup, material.frontStencilMaterial); + this.frontStencil.add(frontGroup); + + let backGroup = new Group(); + for (var i in map.layers) { + let layer = map.layers[i]; + if (layer instanceof TinLayer && layer.name != "Topography") { + let mesh = new Mesh(layer.geometry.clone(), material.backStencilMaterial); + backGroup.add(mesh); + } + } + backGroup.updateMatrix(); + // let frontMesh = new Mesh(frontGroup, material.frontStencilMaterial); + this.backStencil.add(backGroup); + this.animate(); }, this); this.selectionBox = new Selection( - // new Vector3(-7, -14, -14), - // new Vector3(14, 9, 3) { name: 'Slicing Box' }, new Vector3(this.map.x.min, this.map.y.min, this.map.z.min), new Vector3(this.map.x.max, this.map.y.max, this.map.z.max) ); - this.map.addLayer(this.selectionBox); - + // this.map.addLayer(this.selectionBox); this.map.picking = new PickingTool(this.map.size, this.map.center, this); @@ -185,7 +214,7 @@ class Application { //add map controls: if (util.hasTouch() == false) { - let coordinates = new Coordinates({ camera: this.map.camera, crs: "EPSG:3034" }).addTo(this.map); + new Coordinates({ camera: this.map.camera, crs: "EPSG:3034" }).addTo(this.map); // coordinates.addListener('onPoint', (args) => { // let vector = args[0]; // this.queryMarker.position.set(vector.x, vector.y, vector.z); @@ -195,7 +224,7 @@ class Application { } this.northArrow = new NorthArrow({ headLength: 1, headWidth: 1 }).addTo(this.map); - + this.gridlayer = new GridLayer({ center: this.map.center, name: "coordinate grid", appWidth: this.width, appHeight: this.height }); this.map.addLayer(this.gridlayer); @@ -212,14 +241,6 @@ class Application { //slider for scaling z value this.slider = new SliderControl({ layers: this.map.layers }).addTo(this.map); - //slice on x and y axes: - // this.slicer = new SlicerControl({ parentDiv: 'slicer-control' }).addTo(this.map); - - - this.capsScene.add(this.selectionBox.boxMesh); - // this.scene.add(this.selection.displayMeshes); - // this.scene.add(this.selection.touchMeshes); - this.start(); } @@ -242,7 +263,6 @@ class Application { let layer = this.map._layers[key]; layer.setWireframeMode(wireframe); } - this.wireframeMode = wireframe; this.animate(); } @@ -308,36 +328,36 @@ class Application { this.renderer.clear(); // The HTML5 Canvas's 'webgl' context obtained from the canvas where the renderer will draw. - let gl = this.renderer.context; + let gl = this.renderer.getContext(); if (this.showCaps && gl != undefined) { - // enable stencil test - gl.enable(gl.STENCIL_TEST); + gl.enable(gl.STENCIL_TEST); + // this.renderer.state.setStencilFunc( true ); // gl.stencilFunc( gl.ALWAYS, 1, 0xff ); // gl.stencilOp( gl.REPLACE, gl.REPLACE, gl.REPLACE ); - - this.renderer.state.setStencilTest(true); - - gl.StencilFunc(gl.ALWAYS, 1, 0xff); - gl.StencilOp(gl.KEEP, gl.KEEP, gl.INCR); - // this.renderer.render(this.backStencil, this.camera); + + gl.stencilFunc(gl.ALWAYS, 1, 0xff); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR); + this.renderer.render(this.backStencil, this.map.camera); gl.stencilFunc(gl.ALWAYS, 1, 0xff); - gl.StencilOp(gl.KEEP, gl.KEEP, gl.DECR); - // this.renderer.render(this.frontStencil, this.camera); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR); + this.renderer.render(this.frontStencil, this.map.camera); - gl.StencilFunc(gl.EQUAL, 1, 0xff); - gl.StencilOp(gl.KEEP, gl.KEEP, gl.KEEP); - this.renderer.render(this.capsScene, this.camera); - - this.renderer.state.setStencilTest(false); + gl.stencilFunc(gl.EQUAL, 1, 0xff); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); + this.renderer.render(this.capsScene, this.map.camera); // disable stencil test gl.disable(gl.STENCIL_TEST); + // gl.stencilMask(0); + // this.renderer.state.setStencilFunc( false ); } + this.renderer.render(this.scene, this.map.camera); + this.northArrow.animate(); this.gridlayer.animate(); } @@ -358,11 +378,6 @@ class Application { this.dialog.show(); }, this); - // domEvent.on(this.menuIcon, 'click', function (e) { - // e.preventDefault(); - // this.navigation.classList.toggle("active"); - // }, this); - const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0); // Check if there are any navbar burgers if ($navbarBurgers.length > 0) { @@ -409,24 +424,6 @@ class Application { } downloadMapImage() { - // if(!this.$imageInput.files[0]) { - // this.$imageInput.parentElement.classList.add('has-error'); - // return; - // } - // if(this.$bottomTextInput.value === '') { - // this.$imageInput.parentElement.classList.remove('has-error'); - // this.$bottomTextInput.parentElement.classList.add('has-error'); - // return; - // } - // this.$imageInput.parentElement.classList.remove('has-error'); - // this.$bottomTextInput.parentElement.classList.remove('has-error'); - - // const imageSource = this.renderer.domElement.toDataURL('image/png'); - // const att = document.createAttribute('href'); - // att.value = imageSource.replace(/^data:image\/[^;]/, 'data:application/octet-stream'); - // this.downloadButton.setAttributeNode(att); - // this.renderer.preserveDrawingBuffer = true; - // this.renderer.render(this.scene, this.camera); this.saveCanvasImage(this.renderer.domElement); } @@ -437,14 +434,10 @@ class Application { var binStr = atob(canvas.toDataURL("image/png").split(',')[1]); var len = binStr.length; var arr = new Uint8Array(len); - for (var i = 0; i < len; i++) { arr[i] = binStr.charCodeAt(i); } - this.saveBlob(new Blob([arr], { type: "image/png" })); - - } saveBlob(blob) {