diff --git a/index.html b/index.html
index c4ecfdc..f5eea84 100644
--- a/index.html
+++ b/index.html
@@ -11,7 +11,7 @@
-
+
@@ -52,7 +52,7 @@
c2.769,0.502,5.056,1.75,6.865,3.751c1.807,1.999,2.71,4.539,2.71,7.616C254.326,269.095,253.684,271.288,252.394,273.174z">
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/package-lock.json b/package-lock.json
index 935fb04..727384e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -44,7 +44,7 @@
"eslint-import-resolver-alias": "^1.1.2",
"eslint-import-resolver-webpack": "^0.13.1",
"eslint-plugin-import": "^2.25.1",
- "html-loader": "^5.0.0",
+ "html-loader": "^0.5.1",
"html-webpack-plugin": "^5.3.2",
"jest": "^27.2.5",
"less": "^3.13.1",
@@ -2926,12 +2926,6 @@
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
- "node_modules/@leichtgewicht/ip-codec": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
- "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
- "dev": true
- },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
@@ -3169,9 +3163,9 @@
"dev": true
},
"node_modules/@types/http-proxy": {
- "version": "1.17.14",
- "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz",
- "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==",
+ "version": "1.17.8",
+ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz",
+ "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==",
"dev": true,
"dependencies": {
"@types/node": "*"
@@ -3233,15 +3227,6 @@
"integrity": "sha512-dxcOx8801kMo3KlU+C+/ctWrzREAH7YvoF3aoVpRdqgs+Kf7flp+PJDN/EX5bME3suDUZHsxes9hpvBmzYlWbA==",
"dev": true
},
- "node_modules/@types/node-forge": {
- "version": "1.3.11",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
- "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/prettier": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz",
@@ -3313,9 +3298,9 @@
"dev": true
},
"node_modules/@types/ws": {
- "version": "8.5.10",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz",
- "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==",
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz",
+ "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==",
"dev": true,
"dependencies": {
"@types/node": "*"
@@ -3894,6 +3879,19 @@
"node": ">= 6.0.0"
}
},
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -4057,6 +4055,12 @@
"integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=",
"dev": true
},
+ "node_modules/array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "dev": true
+ },
"node_modules/array-includes": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
@@ -4135,6 +4139,15 @@
"get-intrinsic": "^1.1.3"
}
},
+ "node_modules/ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/ast-types-flow": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
@@ -4151,6 +4164,15 @@
"node": ">=8"
}
},
+ "node_modules/async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -4497,15 +4519,12 @@
}
},
"node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/body-parser": {
@@ -4565,14 +4584,18 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
- "node_modules/bonjour-service": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
- "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==",
+ "node_modules/bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
"dev": true,
"dependencies": {
- "fast-deep-equal": "^3.1.3",
- "multicast-dns": "^7.2.5"
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
}
},
"node_modules/boolbase": {
@@ -4592,12 +4615,12 @@
}
},
"node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"dependencies": {
- "fill-range": "^7.1.1"
+ "fill-range": "^7.0.1"
},
"engines": {
"node": ">=8"
@@ -4666,6 +4689,12 @@
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"dev": true
},
+ "node_modules/buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
"node_modules/bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -4697,21 +4726,15 @@
}
},
"node_modules/camel-case": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
- "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
"dev": true,
"dependencies": {
- "pascal-case": "^3.1.2",
- "tslib": "^2.0.3"
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
}
},
- "node_modules/camel-case/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
- "dev": true
- },
"node_modules/camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
@@ -4765,9 +4788,9 @@
}
},
"node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
"dev": true,
"dependencies": {
"anymatch": "~3.1.2",
@@ -4781,9 +4804,6 @@
"engines": {
"node": ">= 8.10.0"
},
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
"optionalDependencies": {
"fsevents": "~2.3.2"
}
@@ -4830,6 +4850,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -4898,13 +4927,10 @@
}
},
"node_modules/commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
- "dev": true,
- "engines": {
- "node": ">=14"
- }
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "dev": true
},
"node_modules/commondir": {
"version": "1.0.1",
@@ -4964,9 +4990,9 @@
"dev": true
},
"node_modules/connect-history-api-fallback": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
- "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
"dev": true,
"engines": {
"node": ">=0.8"
@@ -5362,6 +5388,23 @@
"integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
"dev": true
},
+ "node_modules/deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+ "dev": true,
+ "dependencies": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
@@ -5413,6 +5456,28 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/del": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
+ "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==",
+ "dev": true,
+ "dependencies": {
+ "globby": "^11.0.1",
+ "graceful-fs": "^4.2.4",
+ "is-glob": "^4.0.1",
+ "is-path-cwd": "^2.2.0",
+ "is-path-inside": "^3.0.2",
+ "p-map": "^4.0.0",
+ "rimraf": "^3.0.2",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -5476,16 +5541,29 @@
"node": ">=8"
}
},
+ "node_modules/dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
"node_modules/dns-packet": {
- "version": "5.6.1",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
- "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
+ "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
"dev": true,
"dependencies": {
- "@leichtgewicht/ip-codec": "^2.0.1"
- },
- "engines": {
- "node": ">=6"
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "dependencies": {
+ "buffer-indexof": "^1.0.0"
}
},
"node_modules/doctrine": {
@@ -5828,6 +5906,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/es6-templates": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz",
+ "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=",
+ "dev": true,
+ "dependencies": {
+ "recast": "~0.11.12",
+ "through": "~2.3.6"
+ }
+ },
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -6831,6 +6919,12 @@
"integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
"dev": true
},
+ "node_modules/fastparse": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
+ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
+ "dev": true
+ },
"node_modules/fastq": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
@@ -6879,9 +6973,9 @@
"integrity": "sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg=="
},
"node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
@@ -7392,89 +7486,37 @@
"dev": true
},
"node_modules/html-loader": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz",
- "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==",
- "dev": true,
- "dependencies": {
- "html-minifier-terser": "^7.2.0",
- "parse5": "^7.1.2"
- },
- "engines": {
- "node": ">= 18.12.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.0.0"
- }
- },
- "node_modules/html-loader/node_modules/clean-css": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
- "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz",
+ "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==",
"dev": true,
"dependencies": {
- "source-map": "~0.6.0"
- },
- "engines": {
- "node": ">= 10.0"
- }
- },
- "node_modules/html-loader/node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
+ "es6-templates": "^0.2.3",
+ "fastparse": "^1.1.1",
+ "html-minifier": "^3.5.8",
+ "loader-utils": "^1.1.0",
+ "object-assign": "^4.1.1"
}
},
- "node_modules/html-loader/node_modules/html-minifier-terser": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz",
- "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==",
+ "node_modules/html-minifier": {
+ "version": "3.5.21",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
+ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
"dev": true,
"dependencies": {
- "camel-case": "^4.1.2",
- "clean-css": "~5.3.2",
- "commander": "^10.0.0",
- "entities": "^4.4.0",
- "param-case": "^3.0.4",
- "relateurl": "^0.2.7",
- "terser": "^5.15.1"
+ "camel-case": "3.0.x",
+ "clean-css": "4.2.x",
+ "commander": "2.17.x",
+ "he": "1.2.x",
+ "param-case": "2.1.x",
+ "relateurl": "0.2.x",
+ "uglify-js": "3.4.x"
},
"bin": {
- "html-minifier-terser": "cli.js"
+ "html-minifier": "cli.js"
},
"engines": {
- "node": "^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/html-loader/node_modules/parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "dev": true,
- "dependencies": {
- "entities": "^4.4.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/html-loader/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">=4"
}
},
"node_modules/html-minifier-terser": {
@@ -7498,6 +7540,16 @@
"node": ">=6"
}
},
+ "node_modules/html-minifier-terser/node_modules/camel-case": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
+ "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
+ "dev": true,
+ "dependencies": {
+ "pascal-case": "^3.1.2",
+ "tslib": "^2.0.3"
+ }
+ },
"node_modules/html-minifier-terser/node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -7507,6 +7559,16 @@
"node": ">= 6"
}
},
+ "node_modules/html-minifier-terser/node_modules/param-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
+ "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
"node_modules/html-minifier-terser/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -7539,6 +7601,12 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
+ "node_modules/html-minifier-terser/node_modules/tslib": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
+ "dev": true
+ },
"node_modules/html-webpack-plugin": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz",
@@ -7665,12 +7733,12 @@
}
},
"node_modules/http-proxy-middleware": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
- "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz",
+ "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==",
"dev": true,
"dependencies": {
- "@types/http-proxy": "^1.17.8",
+ "@types/http-proxy": "^1.17.5",
"http-proxy": "^1.18.1",
"is-glob": "^4.0.1",
"is-plain-obj": "^3.0.0",
@@ -7678,14 +7746,6 @@
},
"engines": {
"node": ">=12.0.0"
- },
- "peerDependencies": {
- "@types/express": "^4.17.13"
- },
- "peerDependenciesMeta": {
- "@types/express": {
- "optional": true
- }
}
},
"node_modules/https-proxy-agent": {
@@ -7811,6 +7871,15 @@
"node": ">=0.8.19"
}
},
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -7848,6 +7917,12 @@
"node": ">= 0.10"
}
},
+ "node_modules/ip": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
+ "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==",
+ "dev": true
+ },
"node_modules/ipaddr.js": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
@@ -8058,6 +8133,24 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-plain-obj": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
@@ -10197,16 +10290,6 @@
"language-subtag-registry": "^0.3.20"
}
},
- "node_modules/launch-editor": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz",
- "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==",
- "dev": true,
- "dependencies": {
- "picocolors": "^1.0.0",
- "shell-quote": "^1.8.1"
- }
- },
"node_modules/less": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz",
@@ -10416,6 +10499,12 @@
"loose-envify": "cli.js"
}
},
+ "node_modules/lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
"node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -10680,6 +10769,18 @@
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true
},
+ "node_modules/mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
"node_modules/mouse-wheel-zoom": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/mouse-wheel-zoom/-/mouse-wheel-zoom-1.1.5.tgz",
@@ -10692,18 +10793,24 @@
"dev": true
},
"node_modules/multicast-dns": {
- "version": "7.2.5",
- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
- "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
"dev": true,
"dependencies": {
- "dns-packet": "^5.2.2",
+ "dns-packet": "^1.3.1",
"thunky": "^1.0.2"
},
"bin": {
"multicast-dns": "cli.js"
}
},
+ "node_modules/multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
"node_modules/nanoid": {
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
@@ -10757,6 +10864,15 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
+ "node_modules/no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dev": true,
+ "dependencies": {
+ "lower-case": "^1.1.1"
+ }
+ },
"node_modules/node-forge": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
@@ -10831,7 +10947,6 @@
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true,
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -10844,6 +10959,22 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
@@ -11058,6 +11189,21 @@
"node": ">=8"
}
},
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/p-retry": {
"version": "4.6.1",
"resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz",
@@ -11081,21 +11227,14 @@
}
},
"node_modules/param-case": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
- "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
"dev": true,
"dependencies": {
- "dot-case": "^3.0.4",
- "tslib": "^2.0.3"
+ "no-case": "^2.2.0"
}
},
- "node_modules/param-case/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
- "dev": true
- },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -11248,6 +11387,29 @@
"node": ">=8"
}
},
+ "node_modules/portfinder": {
+ "version": "1.0.28",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
+ "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
+ "dev": true,
+ "dependencies": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.5"
+ },
+ "engines": {
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/portfinder/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
"node_modules/postcss": {
"version": "8.4.31",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
@@ -11400,6 +11562,15 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -11621,6 +11792,34 @@
"node": ">=8.10.0"
}
},
+ "node_modules/recast": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
+ "dev": true,
+ "dependencies": {
+ "ast-types": "0.9.6",
+ "esprima": "~3.1.0",
+ "private": "~0.1.5",
+ "source-map": "~0.5.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/recast/node_modules/esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/rechoir": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
@@ -11961,13 +12160,12 @@
"dev": true
},
"node_modules/selfsigned": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
- "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz",
+ "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==",
"dev": true,
"dependencies": {
- "@types/node-forge": "^1.3.0",
- "node-forge": "^1"
+ "node-forge": "^1.2.0"
},
"engines": {
"node": ">=10"
@@ -12168,15 +12366,6 @@
"node": ">=8"
}
},
- "node_modules/shell-quote": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
- "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -12782,6 +12971,12 @@
"integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
"dev": true
},
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
"node_modules/thunky": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
@@ -12989,6 +13184,37 @@
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
},
+ "node_modules/uglify-js": {
+ "version": "3.4.10",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
+ "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "~2.19.0",
+ "source-map": "~0.6.1"
+ },
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/uglify-js/node_modules/commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ },
+ "node_modules/uglify-js/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -13091,6 +13317,12 @@
"browserslist": ">= 4.21.0"
}
},
+ "node_modules/upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -13497,41 +13729,40 @@
}
},
"node_modules/webpack-dev-server": {
- "version": "4.15.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
- "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
+ "version": "4.7.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz",
+ "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==",
"dev": true,
"dependencies": {
"@types/bonjour": "^3.5.9",
"@types/connect-history-api-fallback": "^1.3.5",
- "@types/express": "^4.17.13",
"@types/serve-index": "^1.9.1",
- "@types/serve-static": "^1.13.10",
"@types/sockjs": "^0.3.33",
- "@types/ws": "^8.5.5",
+ "@types/ws": "^8.2.2",
"ansi-html-community": "^0.0.8",
- "bonjour-service": "^1.0.11",
- "chokidar": "^3.5.3",
+ "bonjour": "^3.5.0",
+ "chokidar": "^3.5.2",
"colorette": "^2.0.10",
"compression": "^1.7.4",
- "connect-history-api-fallback": "^2.0.0",
+ "connect-history-api-fallback": "^1.6.0",
"default-gateway": "^6.0.3",
- "express": "^4.17.3",
+ "del": "^6.0.0",
+ "express": "^4.17.1",
"graceful-fs": "^4.2.6",
"html-entities": "^2.3.2",
- "http-proxy-middleware": "^2.0.3",
+ "http-proxy-middleware": "^2.0.0",
"ipaddr.js": "^2.0.1",
- "launch-editor": "^2.6.0",
"open": "^8.0.9",
"p-retry": "^4.5.0",
- "rimraf": "^3.0.2",
+ "portfinder": "^1.0.28",
"schema-utils": "^4.0.0",
- "selfsigned": "^2.1.1",
+ "selfsigned": "^2.0.0",
"serve-index": "^1.9.1",
- "sockjs": "^0.3.24",
+ "sockjs": "^0.3.21",
"spdy": "^4.0.2",
- "webpack-dev-middleware": "^5.3.4",
- "ws": "^8.13.0"
+ "strip-ansi": "^7.0.0",
+ "webpack-dev-middleware": "^5.3.0",
+ "ws": "^8.1.0"
},
"bin": {
"webpack-dev-server": "bin/webpack-dev-server.js"
@@ -13539,17 +13770,10 @@
"engines": {
"node": ">= 12.13.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
"peerDependencies": {
"webpack": "^4.37.0 || ^5.0.0"
},
"peerDependenciesMeta": {
- "webpack": {
- "optional": true
- },
"webpack-cli": {
"optional": true
}
@@ -13583,6 +13807,18 @@
"ajv": "^8.8.2"
}
},
+ "node_modules/webpack-dev-server/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
"node_modules/webpack-dev-server/node_modules/colorette": {
"version": "2.0.16",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
@@ -13610,21 +13846,36 @@
"node": ">= 12.13.0"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/strip-ansi": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
+ "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/webpack-dev-server/node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.0.tgz",
+ "integrity": "sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==",
"dev": true,
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
+ "utf-8-validate": "^5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
@@ -13887,9 +14138,9 @@
}
},
"node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
+ "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
"dev": true,
"engines": {
"node": ">=8.3.0"
@@ -16139,12 +16390,6 @@
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
- "@leichtgewicht/ip-codec": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
- "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
- "dev": true
- },
"@nodelib/fs.scandir": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
@@ -16369,9 +16614,9 @@
"dev": true
},
"@types/http-proxy": {
- "version": "1.17.14",
- "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz",
- "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==",
+ "version": "1.17.8",
+ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz",
+ "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -16433,15 +16678,6 @@
"integrity": "sha512-dxcOx8801kMo3KlU+C+/ctWrzREAH7YvoF3aoVpRdqgs+Kf7flp+PJDN/EX5bME3suDUZHsxes9hpvBmzYlWbA==",
"dev": true
},
- "@types/node-forge": {
- "version": "1.3.11",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
- "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
"@types/prettier": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz",
@@ -16513,9 +16749,9 @@
"dev": true
},
"@types/ws": {
- "version": "8.5.10",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz",
- "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==",
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz",
+ "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -16947,6 +17183,16 @@
"debug": "4"
}
},
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -17067,6 +17313,12 @@
"integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=",
"dev": true
},
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "dev": true
+ },
"array-includes": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
@@ -17124,6 +17376,12 @@
"get-intrinsic": "^1.1.3"
}
},
+ "ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
+ "dev": true
+ },
"ast-types-flow": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
@@ -17137,6 +17395,15 @@
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true
},
+ "async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -17397,9 +17664,9 @@
"dev": true
},
"binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
},
"body-parser": {
@@ -17451,14 +17718,18 @@
}
}
},
- "bonjour-service": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
- "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==",
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
"dev": true,
"requires": {
- "fast-deep-equal": "^3.1.3",
- "multicast-dns": "^7.2.5"
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
}
},
"boolbase": {
@@ -17478,12 +17749,12 @@
}
},
"braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
- "fill-range": "^7.1.1"
+ "fill-range": "^7.0.1"
}
},
"browser-process-hrtime": {
@@ -17529,6 +17800,12 @@
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"dev": true
},
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -17551,21 +17828,13 @@
"dev": true
},
"camel-case": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
- "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
"dev": true,
"requires": {
- "pascal-case": "^3.1.2",
- "tslib": "^2.0.3"
- },
- "dependencies": {
- "tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
- "dev": true
- }
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
}
},
"camelcase": {
@@ -17598,9 +17867,9 @@
"dev": true
},
"chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
"dev": true,
"requires": {
"anymatch": "~3.1.2",
@@ -17648,6 +17917,12 @@
}
}
},
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -17706,9 +17981,9 @@
}
},
"commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
"dev": true
},
"commondir": {
@@ -17765,9 +18040,9 @@
"dev": true
},
"connect-history-api-fallback": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
- "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
"dev": true
},
"content-disposition": {
@@ -18050,6 +18325,20 @@
"integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
"dev": true
},
+ "deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+ "dev": true,
+ "requires": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ }
+ },
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
@@ -18086,6 +18375,22 @@
"object-keys": "^1.1.1"
}
},
+ "del": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
+ "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==",
+ "dev": true,
+ "requires": {
+ "globby": "^11.0.1",
+ "graceful-fs": "^4.2.4",
+ "is-glob": "^4.0.1",
+ "is-path-cwd": "^2.2.0",
+ "is-path-inside": "^3.0.2",
+ "p-map": "^4.0.0",
+ "rimraf": "^3.0.2",
+ "slash": "^3.0.0"
+ }
+ },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -18130,13 +18435,29 @@
"path-type": "^4.0.0"
}
},
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
"dns-packet": {
- "version": "5.6.1",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
- "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
+ "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
+ "dev": true,
+ "requires": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
"dev": true,
"requires": {
- "@leichtgewicht/ip-codec": "^2.0.1"
+ "buffer-indexof": "^1.0.0"
}
},
"doctrine": {
@@ -18408,6 +18729,16 @@
"is-symbol": "^1.0.2"
}
},
+ "es6-templates": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz",
+ "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=",
+ "dev": true,
+ "requires": {
+ "recast": "~0.11.12",
+ "through": "~2.3.6"
+ }
+ },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -19169,6 +19500,12 @@
"integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
"dev": true
},
+ "fastparse": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
+ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
+ "dev": true
+ },
"fastq": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
@@ -19211,9 +19548,9 @@
"integrity": "sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg=="
},
"fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
@@ -19593,60 +19930,31 @@
"dev": true
},
"html-loader": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz",
- "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz",
+ "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==",
"dev": true,
"requires": {
- "html-minifier-terser": "^7.2.0",
- "parse5": "^7.1.2"
- },
- "dependencies": {
- "clean-css": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
- "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",
- "dev": true,
- "requires": {
- "source-map": "~0.6.0"
- }
- },
- "entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true
- },
- "html-minifier-terser": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz",
- "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==",
- "dev": true,
- "requires": {
- "camel-case": "^4.1.2",
- "clean-css": "~5.3.2",
- "commander": "^10.0.0",
- "entities": "^4.4.0",
- "param-case": "^3.0.4",
- "relateurl": "^0.2.7",
- "terser": "^5.15.1"
- }
- },
- "parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "dev": true,
- "requires": {
- "entities": "^4.4.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
+ "es6-templates": "^0.2.3",
+ "fastparse": "^1.1.1",
+ "html-minifier": "^3.5.8",
+ "loader-utils": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "html-minifier": {
+ "version": "3.5.21",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
+ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
+ "dev": true,
+ "requires": {
+ "camel-case": "3.0.x",
+ "clean-css": "4.2.x",
+ "commander": "2.17.x",
+ "he": "1.2.x",
+ "param-case": "2.1.x",
+ "relateurl": "0.2.x",
+ "uglify-js": "3.4.x"
}
},
"html-minifier-terser": {
@@ -19664,12 +19972,32 @@
"terser": "^4.6.3"
},
"dependencies": {
+ "camel-case": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
+ "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
+ "dev": true,
+ "requires": {
+ "pascal-case": "^3.1.2",
+ "tslib": "^2.0.3"
+ }
+ },
"commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
"dev": true
},
+ "param-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
+ "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
+ "dev": true,
+ "requires": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -19694,6 +20022,12 @@
"dev": true
}
}
+ },
+ "tslib": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
+ "dev": true
}
}
},
@@ -19792,12 +20126,12 @@
}
},
"http-proxy-middleware": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
- "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz",
+ "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==",
"dev": true,
"requires": {
- "@types/http-proxy": "^1.17.8",
+ "@types/http-proxy": "^1.17.5",
"http-proxy": "^1.18.1",
"is-glob": "^4.0.1",
"is-plain-obj": "^3.0.0",
@@ -19888,6 +20222,12 @@
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -19919,6 +20259,12 @@
"integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
"dev": true
},
+ "ip": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
+ "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==",
+ "dev": true
+ },
"ipaddr.js": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
@@ -20048,6 +20394,18 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
"is-plain-obj": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
@@ -21642,16 +22000,6 @@
"language-subtag-registry": "^0.3.20"
}
},
- "launch-editor": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz",
- "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==",
- "dev": true,
- "requires": {
- "picocolors": "^1.0.0",
- "shell-quote": "^1.8.1"
- }
- },
"less": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz",
@@ -21813,6 +22161,12 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -22008,6 +22362,15 @@
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true
},
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
"mouse-wheel-zoom": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/mouse-wheel-zoom/-/mouse-wheel-zoom-1.1.5.tgz",
@@ -22020,15 +22383,21 @@
"dev": true
},
"multicast-dns": {
- "version": "7.2.5",
- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
- "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
"dev": true,
"requires": {
- "dns-packet": "^5.2.2",
+ "dns-packet": "^1.3.1",
"thunky": "^1.0.2"
}
},
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
"nanoid": {
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
@@ -22067,6 +22436,15 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dev": true,
+ "requires": {
+ "lower-case": "^1.1.1"
+ }
+ },
"node-forge": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
@@ -22125,14 +22503,23 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true,
- "peer": true
+ "dev": true
},
"object-inspect": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
},
+ "object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
@@ -22287,6 +22674,15 @@
"p-limit": "^2.2.0"
}
},
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
"p-retry": {
"version": "4.6.1",
"resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz",
@@ -22304,21 +22700,12 @@
"dev": true
},
"param-case": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
- "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
"dev": true,
"requires": {
- "dot-case": "^3.0.4",
- "tslib": "^2.0.3"
- },
- "dependencies": {
- "tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
- "dev": true
- }
+ "no-case": "^2.2.0"
}
},
"parent-module": {
@@ -22445,6 +22832,28 @@
"find-up": "^4.0.0"
}
},
+ "portfinder": {
+ "version": "1.0.28",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
+ "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
"postcss": {
"version": "8.4.31",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
@@ -22544,6 +22953,12 @@
}
}
},
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -22720,6 +23135,26 @@
"picomatch": "^2.2.1"
}
},
+ "recast": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
+ "dev": true,
+ "requires": {
+ "ast-types": "0.9.6",
+ "esprima": "~3.1.0",
+ "private": "~0.1.5",
+ "source-map": "~0.5.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ }
+ }
+ },
"rechoir": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
@@ -22973,13 +23408,12 @@
"dev": true
},
"selfsigned": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
- "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz",
+ "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==",
"dev": true,
"requires": {
- "@types/node-forge": "^1.3.0",
- "node-forge": "^1"
+ "node-forge": "^1.2.0"
}
},
"semver": {
@@ -23153,12 +23587,6 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
- "shell-quote": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
- "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
- "dev": true
- },
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -23624,6 +24052,12 @@
"integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
"dev": true
},
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
"thunky": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
@@ -23785,6 +24219,30 @@
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
},
+ "uglify-js": {
+ "version": "3.4.10",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
+ "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.19.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
"unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -23846,6 +24304,12 @@
"picocolors": "^1.0.0"
}
},
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -24199,41 +24663,40 @@
}
},
"webpack-dev-server": {
- "version": "4.15.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
- "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
+ "version": "4.7.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz",
+ "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==",
"dev": true,
"requires": {
"@types/bonjour": "^3.5.9",
"@types/connect-history-api-fallback": "^1.3.5",
- "@types/express": "^4.17.13",
"@types/serve-index": "^1.9.1",
- "@types/serve-static": "^1.13.10",
"@types/sockjs": "^0.3.33",
- "@types/ws": "^8.5.5",
+ "@types/ws": "^8.2.2",
"ansi-html-community": "^0.0.8",
- "bonjour-service": "^1.0.11",
- "chokidar": "^3.5.3",
+ "bonjour": "^3.5.0",
+ "chokidar": "^3.5.2",
"colorette": "^2.0.10",
"compression": "^1.7.4",
- "connect-history-api-fallback": "^2.0.0",
+ "connect-history-api-fallback": "^1.6.0",
"default-gateway": "^6.0.3",
- "express": "^4.17.3",
+ "del": "^6.0.0",
+ "express": "^4.17.1",
"graceful-fs": "^4.2.6",
"html-entities": "^2.3.2",
- "http-proxy-middleware": "^2.0.3",
+ "http-proxy-middleware": "^2.0.0",
"ipaddr.js": "^2.0.1",
- "launch-editor": "^2.6.0",
"open": "^8.0.9",
"p-retry": "^4.5.0",
- "rimraf": "^3.0.2",
+ "portfinder": "^1.0.28",
"schema-utils": "^4.0.0",
- "selfsigned": "^2.1.1",
+ "selfsigned": "^2.0.0",
"serve-index": "^1.9.1",
- "sockjs": "^0.3.24",
+ "sockjs": "^0.3.21",
"spdy": "^4.0.2",
- "webpack-dev-middleware": "^5.3.4",
- "ws": "^8.13.0"
+ "strip-ansi": "^7.0.0",
+ "webpack-dev-middleware": "^5.3.0",
+ "ws": "^8.1.0"
},
"dependencies": {
"ajv": {
@@ -24257,6 +24720,12 @@
"fast-deep-equal": "^3.1.3"
}
},
+ "ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true
+ },
"colorette": {
"version": "2.0.16",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
@@ -24281,10 +24750,19 @@
"ajv-keywords": "^5.0.0"
}
},
+ "strip-ansi": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
+ "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ },
"ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.0.tgz",
+ "integrity": "sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==",
"dev": true,
"requires": {}
}
@@ -24450,9 +24928,9 @@
}
},
"ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
+ "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
"dev": true,
"requires": {}
},
diff --git a/package.json b/package.json
index 9425edc..7c27dbd 100644
--- a/package.json
+++ b/package.json
@@ -29,7 +29,7 @@
"eslint-import-resolver-alias": "^1.1.2",
"eslint-import-resolver-webpack": "^0.13.1",
"eslint-plugin-import": "^2.25.1",
- "html-loader": "^5.0.0",
+ "html-loader": "^0.5.1",
"html-webpack-plugin": "^5.3.2",
"jest": "^27.2.5",
"less": "^3.13.1",
diff --git a/sources/constants.js b/sources/constants.js
index bc6b830..507d4ee 100644
--- a/sources/constants.js
+++ b/sources/constants.js
@@ -184,30 +184,11 @@ export default {
NULL_OPTION_VALUE: "unknown",
MISSING_KEY_VALUE: "missing key",
- DEFAULT_RIBBON_IMAGE_ICON_WIDTH: 14,
- DEFAULT_RIBBON_IMAGE_ICON_HEIGHT: 14,
- DEFAULT_RIBBON_ICON_CONTAINER_WIDTH: 18,
- DEFAULT_RIBBON_ICON_CONTAINER_HEIGHT: 18,
DEFAULT_GALLERY_IMAGE_ICON_WIDTH: 18,
DEFAULT_GALLERY_IMAGE_ICON_HEIGHT: 18,
DEFAULT_GALLERY_IMAGE_ICON_CONTAINER_WIDTH: 22,
DEFAULT_GALLERY_IMAGE_ICON_CONTAINER_HEIGHT: 22,
DEFAULT_GALLERY_IMAGE_NAME_FONT_SIZE: 14,
DEFAULT_GALLERY_IMAGE_WIDTH: 180,
- DEFAULT_GALLERY_IMAGE_HEIGHT: 123,
-
- // MultiLesion
- MULTI_LESION_GROUP_BY: {
- TIME: "Time Point",
- TYPE: "Modality",
- COMBINATION: "Time Point and Modality",
- NO_GROUP: "No group"
- },
- MULTI_LESION_SIDE: {
- LEFT: "left",
- RIGHT: "right",
- },
- MULTI_LESION_TYPE_PRIORITY: {
- FIRST: "dermoscopic"
- },
+ DEFAULT_GALLERY_IMAGE_HEIGHT: 123
};
diff --git a/sources/models/lesionWindowImagesUrls.js b/sources/models/lesionWindowImagesUrls.js
deleted file mode 100644
index cdad7ba..0000000
--- a/sources/models/lesionWindowImagesUrls.js
+++ /dev/null
@@ -1,47 +0,0 @@
-let prevImagesUrl = "";
-let nextImagesUrl = "";
-let currImagesUrl = "";
-let offset = 0;
-
-function setCurrImagesUrl(url) {
- currImagesUrl = url;
-}
-
-function getCurrImagesUrl() {
- return currImagesUrl;
-}
-
-function setNextImagesUrl(url) {
- nextImagesUrl = url;
-}
-
-function getNextImagesUrl() {
- return nextImagesUrl;
-}
-
-function setPrevImagesUrl(url) {
- prevImagesUrl = url;
-}
-
-function getPrevImagesUrl() {
- return prevImagesUrl;
-}
-
-function getOffset() {
- return offset;
-}
-
-function setOffset(newOffset) {
- offset = newOffset;
-}
-
-export default {
- getCurrImagesUrl,
- setCurrImagesUrl,
- getNextImagesUrl,
- setNextImagesUrl,
- getPrevImagesUrl,
- setPrevImagesUrl,
- getOffset,
- setOffset,
-};
diff --git a/sources/models/lesionsModel.js b/sources/models/lesionsModel.js
deleted file mode 100644
index 947666f..0000000
--- a/sources/models/lesionsModel.js
+++ /dev/null
@@ -1,360 +0,0 @@
-const lesionsMap = new Map();
-let currentItem;
-let leftMode;
-let rightMode;
-let leftImage;
-let rightImage;
-/** @type {webix.DataCollection} */
-const currentLeftImagesCollection = new webix.DataCollection();
-/** @type {webix.DataCollection} */
-const currentRightImagesCollection = new webix.DataCollection();
-
-function getLesionByID(lesionID) {
- return lesionsMap.get(lesionID);
-}
-
-function setLesions(lesions) {
- if (Array.isArray(lesions)) {
- lesions.push(...lesions);
- }
- lesions.forEach((l) => {
- lesionsMap.set(l.id, l);
- });
-}
-
-function getLesionImagesCount(lesionID) {
- const lesion = getLesionByID(lesionID);
- return lesion?.images_count ?? 0;
-}
-
-function getLesionAnchorImageID(lesionID) {
- const lesion = getLesionByID(lesionID);
- return lesion?.index_image_id;
-}
-
-function checkIsImageAnchor(image) {
- const lesionID = getItemLesionID(image);
- if (lesionID) {
- const lesionAnchorImageID = getAnchorImageID(lesionID);
- return lesionAnchorImageID === getItemID(image);
- }
- return false;
-}
-
-function getLesionModalitiesCount(lesionID) {
- const lesion = getLesionByID(lesionID);
- const images = lesion.images;
- const lesionModalitiesCount = images.reduce((modalities, img) => {
- const imgModality = getImageModality(img);
- if (modalities.includes(imgModality)) {
- return modalities;
- }
- modalities.push(imgModality);
- return modalities;
- }, [])?.length;
- return lesionModalitiesCount;
-}
-
-function getImagesWithModalityCount(item) {
- const lesionID = getItemLesionID(item);
- if (lesionID) {
- const lesion = getLesionByID(lesionID);
- const modality = getItemModality(item);
- const images = lesion.images;
- const lesionModalityImagesCount = images.filter(i => getImageModality(i) === modality).length;
- return lesionModalityImagesCount;
- }
- return 0;
-}
-
-function getLesionTimePoints(lesionID) {
- const lesion = getLesionByID(lesionID);
- const images = lesion?.images;
- const lesionTimePoints = images?.reduce((timePoints, img) => {
- const imgTimePoint = getImageTimePoint(img);
- if (timePoints.includes(imgTimePoint)) {
- return timePoints;
- }
- timePoints.push(imgTimePoint);
- return timePoints;
- }, []);
- return lesionTimePoints;
-}
-
-function getLesionTimePointsCount(lesionID) {
- const lesionTimePoints = getLesionTimePoints(lesionID);
- return lesionTimePoints.length;
-}
-
-function getImagesWithTimePointsCount(item) {
- const lesionID = getItemLesionID(item);
- if (lesionID) {
- const lesion = getLesionByID(lesionID);
- const timePoint = getItemTimePoint(item);
- const images = lesion?.images;
- const lesionTimePointsImagesCount = images
- .filter(i => getImageTimePoint(i) === timePoint).length;
- return lesionTimePointsImagesCount;
- }
- return 0;
-}
-
-function getLesionImages(lesionID) {
- const lesion = getLesionByID(lesionID);
- return lesion?.images;
-}
-
-function getModalityImages(lesionID, modality) {
- const lesionImages = getLesionImages(lesionID);
- return lesionImages?.filter(i => getImageModality(i) === modality);
-}
-
-function getTimePointImages(lesionID, timePoint) {
- const lesionImages = getLesionImages(lesionID);
- return lesionImages?.filter(i => getImageTimePoint(i) === timePoint);
-}
-
-// combine is time point and modality
-function getCombineImages(lesionID, timePoint, modality) {
- const lesionImages = getLesionImages(lesionID);
- return lesionImages?.filter((i) => {
- const result = getImageTimePoint(i) === timePoint && getImageModality(i) === modality;
- return result;
- });
-}
-
-function getAnchorImageID(lesionID) {
- const lesion = getLesionByID(lesionID);
- return lesion?.index_image_id;
-}
-
-function getFirstNonAnchorImage(lesionID, anchorImageID) {
- const timePoints = getLesionTimePoints(lesionID);
- const lesionImages = getLesionImages(lesionID);
- const anchorImage = lesionImages.find(i => getItemID(i) === anchorImageID);
- const anchorTimePoint = getImageTimePoint(anchorImage);
- const sortedTimePoints = timePoints.sort((a, b) => a - b);
- const firstTimePoint = sortedTimePoints[0];
- let nonAnchorImage;
- if (timePoints.length === 1) {
- nonAnchorImage = lesionImages.find(i => anchorImageID !== getItemID(i))
- ?? lesionImages[0];
- }
- else if (anchorTimePoint === firstTimePoint) {
- const secondTimePoint = sortedTimePoints[1];
- nonAnchorImage = lesionImages.find(i => getImageTimePoint(i) === secondTimePoint);
- }
- else {
- nonAnchorImage = lesionImages.find(i => getImageTimePoint(i) === firstTimePoint);
- }
- return nonAnchorImage;
-}
-
-function getImageTimePoint(image) {
- return image?.metadata?.clinical?.acquisition_day;
-}
-
-function getImageModality(image) {
- return image?.metadata?.acquisition?.image_type;
-}
-
-function getItemLesionID(item) {
- return item?.metadata?.clinical?.lesion_id;
-}
-
-function checkMultipleModality(lesionID) {
- const lesionModalitiesCount = getLesionModalitiesCount(lesionID);
- return lesionModalitiesCount > 1;
-}
-
-function getCurrentItem() {
- return currentItem;
-}
-
-function setCurrentItem(item) {
- currentItem = item;
-}
-
-function getItemID(item) {
- return item?.isic_id;
-}
-
-function getItemTimePoint(item) {
- return item?.metadata?.clinical?.acquisition_day;
-}
-
-function getItemModality(item) {
- return item?.metadata?.acquisition?.image_type;
-}
-
-function getUploadDay(item) {
- return item?.contribution_day;
-}
-
-function getLeftMode() {
- return leftMode;
-}
-
-function setLeftMode(mode) {
- leftMode = mode;
-}
-
-function getRightMode() {
- return rightMode;
-}
-
-function setRightMode(mode) {
- rightMode = mode;
-}
-
-function getLeftImage() {
- return leftImage;
-}
-
-function setLeftImage(image) {
- leftImage = image;
-}
-
-function getRightImage() {
- return rightImage;
-}
-
-function setRightImage(image) {
- rightImage = image;
-}
-
-function groupByTimePoint(images) {
- const imagesGroups = Object.groupBy(images, i => getImageTimePoint(i));
- return imagesGroups;
-}
-
-function groupByModality(images) {
- const imagesGroups = Object.groupBy(images, i => getImageModality(i));
- return imagesGroups;
-}
-
-function groupByTimePointAndModality(images) {
- const timePointGroups = Object.groupBy(images, i => getImageTimePoint(i));
- const timePointKeys = Object.keys(timePointGroups);
- const imagesGroups = {};
- timePointKeys.forEach((tpk) => {
- const modalityGroups = Object.groupBy(timePointGroups[tpk], i => getImageModality(i));
- const modalityKeys = Object.keys(modalityGroups);
- modalityKeys.forEach((mk) => {
- imagesGroups[`${tpk} and ${mk}`] = modalityGroups[mk];
- });
- });
- return imagesGroups;
-}
-
-function groupByID(images) {
- const imagesGroups = Object.groupBy(images, i => getItemID(i));
- return imagesGroups;
-}
-
-function setCurrentLeftImages(images) {
- currentLeftImagesCollection.clearAll();
- currentLeftImagesCollection.parse(images);
-}
-
-function getCurrentLeftImages() {
- return currentLeftImagesCollection.serialize();
-}
-
-function setCurrentRightImages(images) {
- currentRightImagesCollection.clearAll();
- currentRightImagesCollection.parse(images);
-}
-
-function getCurrentRightImages() {
- return currentRightImagesCollection.serialize();
-}
-
-function getNextLeftImage(image) {
- const currentImage = currentLeftImagesCollection.find(
- i => getItemID(i) === getItemID(image),
- true
- );
- const nextImageId = currentLeftImagesCollection.getNextId(currentImage.id)
- ?? currentLeftImagesCollection.getFirstId();
- const nextImage = currentLeftImagesCollection.getItem(nextImageId);
- return nextImage;
-}
-
-function getNextRightImage(image) {
- const currentImage = currentRightImagesCollection.find(
- i => getItemID(i) === getItemID(image),
- true
- );
- const nextImageId = currentRightImagesCollection.getNextId(currentImage.id)
- ?? currentRightImagesCollection.getFirstId();
- const nextImage = currentRightImagesCollection.getItem(nextImageId);
- return nextImage;
-}
-
-function getPrevLeftImage(image) {
- const currentImage = currentLeftImagesCollection.find(
- i => getItemID(i) === getItemID(image),
- true
- );
- const prevImageId = currentLeftImagesCollection.getPrevId(currentImage.id)
- ?? currentLeftImagesCollection.getLastId();
- const prevImage = currentLeftImagesCollection.getItem(prevImageId);
- return prevImage;
-}
-
-function getPrevRightImage(image) {
- const currentImage = currentRightImagesCollection.find(
- i => getItemID(i) === getItemID(image),
- true
- );
- const prevImageId = currentRightImagesCollection.getPrevId(currentImage.id)
- ?? currentRightImagesCollection.getLastId();
- const prevImage = currentRightImagesCollection.getItem(prevImageId);
- return prevImage;
-}
-
-export default {
- setLesions,
- getLesionImagesCount,
- getLesionModalitiesCount,
- getModalityImages,
- getImagesWithModalityCount,
- getLesionTimePointsCount,
- getLesionAnchorImageID,
- getLesionImages,
- getTimePointImages,
- getCombineImages,
- getImagesWithTimePointsCount,
- getAnchorImageID,
- getItemLesionID,
- checkMultipleModality,
- getCurrentItem,
- setCurrentItem,
- getItemID,
- getItemTimePoint,
- getItemModality,
- getUploadDay,
- getLeftMode,
- setLeftMode,
- getRightMode,
- setRightMode,
- getLeftImage,
- setLeftImage,
- getRightImage,
- setRightImage,
- checkIsImageAnchor,
- getFirstNonAnchorImage,
- groupByModality,
- groupByTimePoint,
- groupByTimePointAndModality,
- groupByID,
- setCurrentLeftImages,
- getCurrentLeftImages,
- setCurrentRightImages,
- getCurrentRightImages,
- getPrevLeftImage,
- getNextLeftImage,
- getPrevRightImage,
- getNextRightImage,
-};
diff --git a/sources/models/state.js b/sources/models/state.js
index 2e100f0..7bd851e 100644
--- a/sources/models/state.js
+++ b/sources/models/state.js
@@ -29,11 +29,7 @@ const state = {
toolbarValues: {}
};
},
- imagesOffset: 0,
- filteredImages: {
- isImagesFiltered: false,
- filteredImagesCount: 0
- }
+ imagesOffset: 0
};
export default state;
diff --git a/sources/services/ajaxActions.js b/sources/services/ajaxActions.js
index 316466c..ecb2220 100644
--- a/sources/services/ajaxActions.js
+++ b/sources/services/ajaxActions.js
@@ -66,7 +66,6 @@ class AjaxActions {
async _ajaxGet(url, params) {
const headers = await getAuthHeaders();
- headers["Content-Type"] = "application/json";
if (!params) {
params = {};
}
@@ -249,28 +248,6 @@ class AjaxActions {
}
return null;
}
-
- async getLesions(/* sourceParams */) {
- try {
- const result = await this._ajaxGet(`${API_URL}lesions/`);
- return this._parseData(result);
- }
- catch (error) {
- parseError(error);
- return [];
- }
- }
-
- async getLesionByID(lesionID) {
- try {
- const result = await this._ajaxGet(`${API_URL}lesion/${lesionID}`);
- return this._parseData(result);
- }
- catch (error) {
- parseError(error);
- return [];
- }
- }
}
const instance = new AjaxActions();
diff --git a/sources/services/gallery/gallery.js b/sources/services/gallery/gallery.js
index 209f4af..78b4d6e 100644
--- a/sources/services/gallery/gallery.js
+++ b/sources/services/gallery/gallery.js
@@ -35,7 +35,6 @@ class GalleryService {
imageWindowMetadata,
metadataWindow,
metadataWindowMetadata,
- multiImageLesionWindow,
filtersForm,
appliedFiltersList,
unselectLink,
@@ -67,7 +66,6 @@ class GalleryService {
this._imageWindowMetadata = imageWindowMetadata;
this._metadataWindow = metadataWindow;
this._metadataWindowMetadata = metadataWindowMetadata;
- this._multiImageLesionWindow = multiImageLesionWindow;
this._filtersForm = filtersForm;
this._appliedFiltersList = appliedFiltersList;
this._imagesSelectionTemplate = unselectLink;
@@ -442,9 +440,7 @@ class GalleryService {
const filtered = state.imagesTotalCounts.passedFilters.filtered;
this._updateContentHeaderTemplate({
rangeStart: offset + 1,
- rangeFinish: currentCount && offset + limit >= currentCount
- ? currentCount
- : offset + limit,
+ rangeFinish: currentCount && offset + limit >= currentCount ? currentCount : offset + limit,
totalCount: count,
currentCount,
filtered
@@ -640,16 +636,6 @@ class GalleryService {
}
};
- this._imagesDataview.on_click["layer-group"] = (e, id) => {
- if (this._multiImageLesionWindow) {
- const currentItem = this._imagesDataview.getItem(id);
- this._view.$scope.setMultiLesionMode(
- currentItem,
- );
- this._multiImageLesionWindow.show();
- }
- };
-
// -->add onClick property for template
this._imagesSelectionTemplate?.define("onClick", {
"unselect-images-link": () => {
@@ -1153,12 +1139,6 @@ class GalleryService {
}
_updateContentHeaderTemplate(ranges) {
- if (ranges.filtered) {
- state.filteredImages.isImagesFiltered = true;
- if (ranges.currentCount) {
- state.filteredImages.filteredImagesCount = ranges.currentCount;
- }
- }
const values = webix.copy(ranges);
this._contentHeaderTemplate?.setValues(values, true); // true -> unchange existing values
this._contentHeaderTemplate?.refresh();
@@ -1482,7 +1462,7 @@ class GalleryService {
_searchEventsMethods(eventMethod) {
this._searchInput.detachEvent("onEnter");
- this._searchInput.on_click["gallery-search-filter"] = eventMethod;
+ this._searchInput.on_click["fa-search"] = eventMethod;
this._searchInput.attachEvent("onEnter", eventMethod);
}
diff --git a/sources/services/gallery/multiimageLesionWindow.js b/sources/services/gallery/multiimageLesionWindow.js
deleted file mode 100644
index 00e586e..0000000
--- a/sources/services/gallery/multiimageLesionWindow.js
+++ /dev/null
@@ -1,667 +0,0 @@
-import constants from "../../constants";
-import galleryImagesUrls from "../../models/galleryImagesUrls";
-import lesionWindowImagesUrls from "../../models/lesionWindowImagesUrls";
-import lesionsModel from "../../models/lesionsModel";
-import util from "../../utils/util";
-import metadataPart from "../../views/subviews/gallery/parts/metadata";
-import multiImageLesionWindow from "../../views/subviews/gallery/windows/multiImageLesionWindow";
-import ajax from "../ajaxActions";
-import authService from "../auth";
-import searchButtonModel from "./searchButtonModel";
-
-const MOVE = {
- next: "next",
- prev: "prev",
-};
-
-export default class MultiLesionWindowService {
- constructor(
- galleryService,
- ) {
- /** @type {import("./gallery").default} */
- this._galleryService = galleryService;
- this._window = $$(multiImageLesionWindow.getWindowID());
- /** @type {webix.ui.list} */
- this._topSlider = $$(multiImageLesionWindow.getTopSliderID());
- /** @type {webix.ui.list} */
- this._leftSlider = $$(multiImageLesionWindow.getLeftSliderID());
- /** @type {webix.ui.list} */
- this._rightSlider = $$(multiImageLesionWindow.getRightSliderID());
- this._leftFooter = $$(multiImageLesionWindow.getLeftFooterID());
- this._rightFooter = $$(multiImageLesionWindow.getRightFooterID());
- this._leftGroup = $$(multiImageLesionWindow.getLeftDropDownFilterID());
- this._rightGroup = $$(multiImageLesionWindow.getRightDropDownFilterID());
- this._leftImageLabel = $$(multiImageLesionWindow.getLeftImageNameLabelID());
- this._rightImageLabel = $$(multiImageLesionWindow.getRightImageNameLabelID());
- this._rightContainer = $$(multiImageLesionWindow.getRightContainerID());
- /** @type {webix.ui.template} */
- this._leftImage = $$(multiImageLesionWindow.getLeftImageID());
- /** @type {webix.ui.template} */
- this._rightImage = $$(multiImageLesionWindow.getRightImageID());
- this._fullScreenButton = $$(multiImageLesionWindow.getFullScreenButtonID());
- this._windowedButton = $$(multiImageLesionWindow.getWindowedButtonID());
- /** @type {webix.ui.search} */
- this._searchInput = $$(multiImageLesionWindow.getSearchID());
- this._prevPageButton = $$(multiImageLesionWindow.getPrevPageButtonID());
- this._nextPageButton = $$(multiImageLesionWindow.getNextPageButtonID());
- /** @type {webix.ui.layout} */
- this._leftAnchorIcon = $$(multiImageLesionWindow.getLeftAnchorIconID());
- this._rightAnchorIcon = $$(multiImageLesionWindow.getRightAnchorIconID());
- this._topPanel = $$(multiImageLesionWindow.getTopPanelID());
- this._expandButton = $$(multiImageLesionWindow.getExpandButtonID());
- this._collapseButton = $$(multiImageLesionWindow.getCollapseButtonID());
- this._fullscreen = false;
- this.init();
- }
-
- async init() {
- this._leftImage.attachEvent("onBeforeRender", this.updateImage);
- this._leftImage.attachEvent("onAfterLoad", this.updateImage);
-
- this._rightImage.attachEvent("onBeforeRender", this.updateImage);
- this._rightImage.attachEvent("onAfterLoad", this.updateImage);
-
- this._fullScreenButton.attachEvent("onItemClick", () => { this.changeWindowMode(); });
- this._windowedButton.attachEvent("onItemClick", () => { this.changeWindowMode(); });
-
- this._searchInput.on_click["lesionWindow__filter-search"] = this.searchImagesByQueryHandler.bind(this);
- this._searchInput.on_click["lesionWindow__fa-times"] = () => {
- if (this._searchInput.getValue() !== "") {
- this._searchInput.setValue("");
- this._searchInput.callEvent("onEnter");
- }
- };
- this._searchInput.attachEvent("onEnter", this.searchImagesByQueryHandler.bind(this));
- this._searchInput.attachEvent("onViewShow", this.searchImagesByQueryHandler.bind(this));
- this._searchInput.attachEvent("onAfterRender", () => {
- const inputNode = this._searchInput.$view.getElementsByClassName("webix_el_box")[0];
- const tooltipText = "Clear search value";
- searchButtonModel.createTimesSearchButton(
- this._searchInput,
- null,
- inputNode,
- tooltipText,
- true
- );
- });
-
- const navButtonClickHandler = util.debounce(async (navigate) => {
- let url = navigate === MOVE.prev
- ? lesionWindowImagesUrls.getPrevImagesUrl()
- : lesionWindowImagesUrls.getNextImagesUrl();
- if (url) {
- this._topSlider.showProgress();
- lesionWindowImagesUrls.setCurrImagesUrl(url);
- const result = await ajax.getImagesByUrl(url);
- lesionWindowImagesUrls.setPrevImagesUrl(result.previous);
- lesionWindowImagesUrls.setNextImagesUrl(result.next);
- this._topSlider.clearAll();
- this._topSlider.parse(result.results);
- this._topSlider.hideProgress();
- }
- }, 100);
- this._prevPageButton.attachEvent("onItemClick", navButtonClickHandler.bind(this, MOVE.prev));
- this._nextPageButton.attachEvent("onItemClick", navButtonClickHandler.bind(this, MOVE.next));
-
- const clearWindow = () => {
- this._leftSlider.clearAll();
- this._rightSlider.clearAll();
- this._topSlider.clearAll();
- this._searchInput.setValue("");
- if (this._window.config.fullscreen) {
- this.changeWindowMode();
- }
- };
- this._window.attachEvent("onHide", clearWindow);
- this._window.attachEvent("onShow", this.searchImagesByQueryHandler.bind(this));
- this._window.attachEvent("onShow", () => {
- this._leftGroup.setValue(constants.MULTI_LESION_GROUP_BY.TIME);
- this._rightGroup.setValue(constants.MULTI_LESION_GROUP_BY.TIME);
- const leftImage = lesionsModel.getLeftImage();
- const leftLesionId = lesionsModel.getItemLesionID(leftImage);
- const LeftLesionImages = lesionsModel.getLesionImages(leftLesionId);
- const leftType = this._leftGroup.getValue();
- const leftImagesGroups = this.groupImages(LeftLesionImages, leftType);
- if (leftImagesGroups.length === 1) {
- this._leftGroup.setValue(constants.MULTI_LESION_GROUP_BY.TYPE);
- this._leftGroup.refresh();
- }
-
- const rightImage = lesionsModel.getRightImage();
- const rightLesionId = lesionsModel.getItemLesionID(rightImage);
- const rightLesionImages = lesionsModel.getLesionImages(rightLesionId);
- const rightType = this._rightGroup.getValue();
- const rightImagesGroups = this.groupImages(rightLesionImages, rightType);
- if (rightImagesGroups.length === 1) {
- this._rightGroup.setValue(constants.MULTI_LESION_GROUP_BY.TYPE);
- this._rightGroup.refresh();
- }
-
- if (this._topPanel.isVisible()) {
- this._collapseButton.hide();
- this._topPanel.hide();
- this._expandButton.show();
- }
- });
-
- const leftGroupByHandler = () => {
- const leftImage = lesionsModel.getLeftImage();
- this.fillLeftPanel(leftImage);
- };
-
- this._leftGroup.attachEvent("onChange", leftGroupByHandler.bind(this));
-
- const rightGroupByHandler = () => {
- const rightImage = lesionsModel.getRightImage();
- this.fillRightPanel(rightImage);
- };
-
- this._rightGroup.attachEvent("onChange", rightGroupByHandler.bind(this));
-
- this._rightSlider.attachEvent("onBeforeDrop", () => false);
- this._topSlider.attachEvent("onBeforeDrop", () => false);
- this._leftSlider.attachEvent("onBeforeDrop", () => false);
- const leftImageView = this._leftImage.$view;
- const rightImageView = this._rightImage.getNode();
- webix.DragControl.addDrop(leftImageView, {$drop: (/* source, target, event */) => {
- const dnd = webix.DragControl.getContext();
- const item = dnd.from.getItem(dnd.start);
- const image = item.firstImage ?? item;
- const lesionID = lesionsModel.getItemLesionID(image);
- if (lesionID) {
- lesionsModel.setLeftImage(image);
- this.fillLeftPanel(image);
- }
- else {
- webix.message("There are no lesions attached to this image");
- }
- }});
- webix.DragControl.addDrop(rightImageView, {$drop: (/* source, target, event */) => {
- const dnd = webix.DragControl.getContext();
- const item = dnd.from.getItem(dnd.start);
- const image = item.firstImage ?? item;
- const lesionID = lesionsModel.getItemLesionID(image);
- if (lesionID) {
- lesionsModel.setRightImage(image);
- this.fillRightPanel(image);
- }
- else {
- webix.message("There are no lesions attached to this image");
- }
- }});
-
- const changeImage = (side, move) => {
- if (side === constants.MULTI_LESION_SIDE.LEFT) {
- const currentImage = lesionsModel.getLeftImage();
- const newImage = move === MOVE.prev
- ? lesionsModel.getPrevLeftImage(currentImage)
- : lesionsModel.getNextLeftImage(currentImage);
- if (newImage) {
- this.fillLeftPanel(newImage);
- }
- }
- if (side === constants.MULTI_LESION_SIDE.RIGHT) {
- const currentImage = lesionsModel.getRightImage();
- const newImage = move === MOVE.prev
- ? lesionsModel.getPrevRightImage(currentImage)
- : lesionsModel.getNextRightImage(currentImage);
- if (newImage) {
- this.fillRightPanel(newImage);
- }
- }
- };
-
- this._leftImage.define("onClick", {
- prev: () => {
- changeImage(constants.MULTI_LESION_SIDE.LEFT, MOVE.prev);
- },
- next: () => {
- changeImage(constants.MULTI_LESION_SIDE.LEFT, MOVE.next);
- }
- });
-
- this._rightImage.define("onClick", {
- prev: () => {
- changeImage(constants.MULTI_LESION_SIDE.RIGHT, MOVE.prev);
- },
- next: () => {
- changeImage(constants.MULTI_LESION_SIDE.RIGHT, MOVE.next);
- }
- });
-
- this._topSlider.on_click["resize-icon"] = (e, id) => {
- const currentItem = this._topSlider.getItem(id);
- this._galleryService._imageWindowTemplateWithoutControls?.hide();
- this._galleryService._imageWindowTemplate?.show();
- this._galleryService._setImageWindowValues(currentItem);
- if (this._galleryService._imageWindow) {
- this._galleryService._eventForHideMessages(this._galleryService._imageWindow);
- this._galleryService._imageWindow.show();
- }
- };
-
- this._topSlider.on_click["info-icon"] = async (e, id) => {
- try {
- const currentItem = this._topSlider.getItem(id);
- const image = await ajax.getImageItem(currentItem.isic_id);
- if (this._galleryService._metadataWindowMetadata) {
- webix.ui([metadataPart.getConfig("metadata-window-metadata", image, currentItem)], this._galleryService._metadataWindowMetadata); // [] - because we rebuild only rows of this._imageWindowMetadata
- }
- else {
- webix.ui([metadataPart.getConfig("metadata-window-metadata", image, currentItem)]); // [] - because we rebuild only rows of this._imageWindowMetadata
- }
- if (this._galleryService._metadataWindow) {
- this._galleryService._eventForHideMessages(this._galleryService._metadataWindow);
- this._galleryService._metadataWindow.show();
- }
- }
- catch (error) {
- if (!this._galleryService._view.$destructed) {
- webix.message("ShowMetadata: Something went wrong");
- }
- }
- };
-
- this._topSlider.on_click["diagnosis-icon"] = (e, id) => {
- const currentItem = this._topSlider.getItem(id);
- const url = `${constants.URL_MULTIRATER}?id=${currentItem.isic_id}&sid=${currentItem.studyId}&uid=${authService.getToken()}`;
- util.openInNewTab(url);
- };
-
- this._topSlider.on_click["batch-icon"] = async (e, id) => {
- const currentItem = this._topSlider.getItem(id);
- const currentItemId = currentItem.isic_id;
- const url = await ajax.getDownloadUrl(
- constants.DOWNLOAD_ZIP_SINGLE_IMAGE,
- `isic_id:${currentItemId}`,
- currentItemId
- );
- if (url) {
- util.downloadByLink(url, `${currentItemId}.zip`);
- }
- };
-
- this._topSlider.on_click["layer-group"] = (e, id) => {
- if (this._window) {
- const currentItem = this._topSlider.getItem(id);
- this.setMultiLesionState(
- currentItem,
- );
- }
- };
-
- this._collapseButton.attachEvent("onViewShow", () => {
- this._searchInput.show();
- });
-
- this._expandButton.attachEvent("onViewShow", () => {
- this._searchInput.hide();
- });
-
- webix.extend(this._topSlider, webix.ProgressBar);
- }
-
- async ready() {
- const data = await ajax.getLesions();
- if (data) {
- lesionsModel.setLesions(data.results);
- }
- }
-
- async updateImage(obj) {
- if (typeof galleryImagesUrls.getNormalImageUrl(obj?.isic_id) === "undefined") {
- if (obj?.isic_id) {
- const item = await ajax.getImageItem(obj.isic_id);
- galleryImagesUrls.setNormalImageUrl(obj.isic_id, item.files.full.url);
- this.refresh();
- }
- }
- return true;
- }
-
- setMultiLesionState(item) {
- lesionsModel.setCurrentItem(item);
- const lesionID = lesionsModel.getItemLesionID(item);
- const lesionImages = webix.copy(lesionsModel.getLesionImages(lesionID));
- const itemID = lesionsModel.getItemID(item);
- const anchorImageID = lesionsModel.getAnchorImageID(lesionID);
- this._rightContainer.show();
- let rightGroupType = this._rightGroup.getValue();
- let imageForRightPanel;
- if (itemID === anchorImageID) {
- imageForRightPanel = lesionsModel.getFirstNonAnchorImage(lesionID, anchorImageID);
- }
- else {
- imageForRightPanel = item;
- }
- lesionsModel.setRightImage(imageForRightPanel);
- if (rightGroupType === "") {
- this._rightGroup.setValue(constants.MULTI_LESION_GROUP_BY.TIME);
- rightGroupType = this._rightGroup.getValue();
- }
- this.fillRightPanel(imageForRightPanel);
-
- let leftGroupType = this._leftGroup.getValue();
- if (leftGroupType === "") {
- this._leftGroup.setValue(constants.MULTI_LESION_GROUP_BY.TYPE);
- leftGroupType = this._leftGroup.getValue();
- }
- const anchorImg = lesionImages.find(i => lesionsModel.getItemID(i) === anchorImageID);
- this.fillLeftPanel(anchorImg);
- }
-
- parseImages(item, lesionID, isRightSide) {
- const lesionImages = lesionsModel.getLesionImages(lesionID);
- if (isRightSide === true) {
- let rightGroupType = this._rightGroup.getValue();
- const rightImagesGroups = this.groupImages(lesionImages, rightGroupType);
- const sortedImages = this.sortImages(rightImagesGroups, rightGroupType, item);
- lesionsModel.setCurrentRightImages(sortedImages);
- this._rightSlider.clearAll();
- this._rightSlider.parse(rightImagesGroups);
- this._rightSlider.unselectAll();
- const groupToSelect = this.findItemToSelect(rightImagesGroups, item);
- this._rightSlider.select(groupToSelect.id);
- }
- else {
- let leftGroupType = this._leftGroup.getValue();
- const leftImagesGroups = this.groupImages(lesionImages, leftGroupType);
- const sortedImages = this.sortImages(leftImagesGroups, leftGroupType, item);
- lesionsModel.setCurrentLeftImages(sortedImages);
- this._leftSlider.clearAll();
- this._leftSlider.parse(leftImagesGroups);
- this._leftSlider.unselectAll();
- const groupToSelect = this.findItemToSelect(leftImagesGroups, item);
- this._leftSlider.select(groupToSelect.id);
- }
- }
-
- changeWindowMode() {
- if (this._fullscreen) {
- this._fullscreen = false;
- this._window.define("width", 1240);
- this._window.define("height", 750);
- this._window.define("position", "center");
- this._fullScreenButton.show();
- this._windowedButton.hide();
- }
- else {
- this._fullscreen = true;
- this._window.define("width", window.innerWidth);
- this._window.define("height", window.innerHeight);
- this._window.define("position", "center");
- this._fullScreenButton.hide();
- this._windowedButton.show();
- }
- this.searchImagesByQueryHandler();
- }
-
- async searchImagesByQueryHandler() {
- let searchValue = this._searchInput.getValue().trim();
- this._searchInput.setValue(searchValue);
- let filteredImages = [];
- const filter = searchValue !== ""
- ? this.buildCondition(searchValue)
- : null;
- const limit = Math.ceil(this._topSlider.$width / 174) - 1;
- this._topSlider.define("type", {width: this._topSlider.$width / limit, height: 104});
- const sourceParams = {
- limit,
- filter
- };
- this._topSlider.showProgress();
- let foundImages = {};
- try {
- foundImages = await ajax.getImages(sourceParams);
- }
- catch (e) {
- this._topSlider.hideProgress();
- return;
- }
- lesionWindowImagesUrls.setPrevImagesUrl(foundImages?.previous);
- lesionWindowImagesUrls.setNextImagesUrl(foundImages?.next);
- try {
- const allImagesArray = webix.copy(foundImages?.results ?? []);
- const foundImagesCount = foundImages.count ?? 0;
- allImagesArray.forEach((imageObj) => {
- filteredImages.push(imageObj);
- });
- if (foundImagesCount > 0) {
- this._topSlider.clearAll();
- this._topSlider.parse(filteredImages);
- }
- else {
- webix.alert(`Image with name "${searchValue}" was not found`);
- }
- this._topSlider.hideProgress();
- }
- catch (error) {
- if (!this._view.$destructed) {
- webix.alert(`Image with name "${searchValue}" was not found`);
- webix.message("Search Images: Something went wrong");
- this._topSlider.hideProgress();
- }
- }
- }
-
- async getImagesByUrl(url) {
- const result = ajax.getImagesByUrl(url);
- lesionWindowImagesUrls.setCurrImagesUrl(url);
- lesionWindowImagesUrls.setNextImagesUrl(url);
- lesionWindowImagesUrls.setPrevImagesUrl(url);
- return result.results;
- }
-
- fillRightPanel(image) {
- lesionsModel.setRightImage(image);
- this._rightFooter.parse(image);
- this.setAnchorIcon(image, constants.MULTI_LESION_SIDE.RIGHT);
- const imageID = lesionsModel.getItemID(image);
- this._rightImageLabel.define("label", imageID.toUpperCase());
- this._rightImageLabel.refresh();
- const lesionID = lesionsModel.getItemLesionID(image);
- this.parseImages(image, lesionID, true);
- this._rightImage.parse(image);
- }
-
- fillLeftPanel(image) {
- lesionsModel.setLeftImage(image);
- this._leftFooter.parse(image);
- this.setAnchorIcon(image, constants.MULTI_LESION_SIDE.LEFT);
- const imageID = lesionsModel.getItemID(image);
- this._leftImageLabel.define("label", imageID.toUpperCase());
- this._leftImageLabel.refresh();
- const lesionID = lesionsModel.getItemLesionID(image);
- this.parseImages(image, lesionID, false);
- this._leftImage.parse(image);
- }
-
- buildCondition(filter) {
- const searchValues = filter.split(" OR ");
- const conditions = searchValues.map((str) => {
- const values = str.split(" AND ");
- return values.map((v) => {
- if (v.includes(":")) {
- return v;
- }
- return `isic_id:${v}`;
- }).join(" AND ");
- });
- return conditions.join(" OR ");
- }
-
- groupImages(images, type) {
- let imagesGroupsObj;
- switch (type) {
- case constants.MULTI_LESION_GROUP_BY.TIME:
- imagesGroupsObj = lesionsModel.groupByTimePoint(images);
- break;
- case constants.MULTI_LESION_GROUP_BY.TYPE:
- imagesGroupsObj = lesionsModel.groupByModality(images);
- break;
- case constants.MULTI_LESION_GROUP_BY.COMBINATION:
- imagesGroupsObj = lesionsModel.groupByTimePointAndModality(images);
- break;
- default:
- imagesGroupsObj = lesionsModel.groupByID(images);
- }
- const imagesGroupsObjectKeys = Object.keys(imagesGroupsObj);
- const result = imagesGroupsObjectKeys.map((k) => {
- const imgsGroup = {
- firstImage: imagesGroupsObj[k][0],
- groupBy: type,
- groupValue: k,
- images: imagesGroupsObj[k],
- };
- return imgsGroup;
- });
- return result;
- }
-
- sortImages(imagesGroups, groupType, item) {
- let images;
- if (groupType === constants.MULTI_LESION_GROUP_BY.NO_GROUP) {
- images = imagesGroups.map(g => g.images[0]);
- imagesGroups.sort((a, b) => {
- const aValue = lesionsModel.getItemID(a.images[0]);
- const bValue = lesionsModel.getItemID(b.images[0]);
- const result = aValue.localeCompare(bValue);
- return result;
- });
- }
- else {
- switch (groupType) {
- case constants.MULTI_LESION_GROUP_BY.TIME:
- imagesGroups.sort((a, b) => {
- const aValue = a.groupValue;
- const bValue = b.groupValue;
- return Number(aValue) - Number(bValue);
- });
- break;
- case constants.MULTI_LESION_GROUP_BY.TYPE:
- imagesGroups.sort((a, b) => {
- const aValue = a.groupValue;
- if (aValue === constants.MULTI_LESION_TYPE_PRIORITY.FIRST) {
- return -1;
- }
- const bValue = b.groupValue;
- if (bValue === constants.MULTI_LESION_TYPE_PRIORITY.FIRST) {
- return 1;
- }
- return aValue.localeCompare(bValue);
- });
- break;
- case constants.MULTI_LESION_GROUP_BY.COMBINATION:
- imagesGroups.sort((a, b) => {
- const aValue = a.groupValue;
- const bValue = b.groupValue;
- return aValue.localeCompare(bValue);
- });
- break;
- default:
- imagesGroups.sort((a, b) => {
- const aValue = a.value;
- const bValue = b.value;
- return aValue.localeCompare(bValue);
- });
- }
- const currentImagesGroup = imagesGroups.find((g) => {
- const found = g.images
- .find(i => lesionsModel.getItemID(item) === lesionsModel.getItemID(i));
- return found;
- });
- images = [...currentImagesGroup.images];
- }
- if (images.length === 1) {
- return images;
- }
- const sortedImages = images.sort((a, b) => {
- let result;
- let aValue;
- let bValue;
- switch (groupType) {
- case constants.MULTI_LESION_GROUP_BY.TIME:
- aValue = lesionsModel.getItemModality(a);
- if (aValue === constants.MULTI_LESION_TYPE_PRIORITY.FIRST) {
- result = -1;
- }
- else {
- bValue = lesionsModel.getItemModality(b);
- if (bValue === constants.MULTI_LESION_TYPE_PRIORITY.FIRST) {
- result = 1;
- }
- else {
- result = aValue.localeCompare(bValue);
- }
- if (result === 0) {
- aValue = lesionsModel.getItemID(a);
- bValue = lesionsModel.getItemID(b);
- result = aValue.localeCompare(bValue);
- }
- }
- break;
- case constants.MULTI_LESION_GROUP_BY.TYPE:
- aValue = lesionsModel.getItemTimePoint(a);
- bValue = lesionsModel.getItemTimePoint(b);
- result = Number(aValue) - Number(bValue);
- if (result === 0) {
- aValue = lesionsModel.getItemID(a);
- bValue = lesionsModel.getItemID(b);
- result = aValue.localeCompare(bValue);
- }
- break;
- case constants.MULTI_LESION_GROUP_BY.COMBINATION:
- aValue = lesionsModel.getItemID(a);
- bValue = lesionsModel.getItemID(b);
- result = aValue.localeCompare(bValue);
- break;
- default:
- aValue = lesionsModel.getItemID(a);
- bValue = lesionsModel.getItemID(b);
- result = aValue.localeCompare(bValue);
- }
- return result;
- });
- return sortedImages;
- }
-
- setAnchorIcon(image, side) {
- if (lesionsModel.checkIsImageAnchor(image)) {
- switch (side) {
- case constants.MULTI_LESION_SIDE.LEFT:
- this._leftAnchorIcon.show();
- break;
- case constants.MULTI_LESION_SIDE.RIGHT:
- this._rightAnchorIcon.show();
- break;
- default:
- break;
- }
- }
- else {
- switch (side) {
- case constants.MULTI_LESION_SIDE.LEFT:
- this._leftAnchorIcon.hide();
- break;
- case constants.MULTI_LESION_SIDE.RIGHT:
- this._rightAnchorIcon.hide();
- break;
- default:
- break;
- }
- }
- }
-
- findItemToSelect(groups, image) {
- const groupToSelect = groups.find((obj) => {
- if (obj.images) {
- if (obj.images.find(i => lesionsModel.getItemID(i) === lesionsModel.getItemID(image))) {
- return true;
- }
- return false;
- }
- return lesionsModel.getItemID(obj) === lesionsModel.getItemID(image);
- });
- return groupToSelect;
- }
-}
diff --git a/sources/services/gallery/searchButtonModel.js b/sources/services/gallery/searchButtonModel.js
index 75d699b..09d6fe7 100644
--- a/sources/services/gallery/searchButtonModel.js
+++ b/sources/services/gallery/searchButtonModel.js
@@ -24,7 +24,7 @@ function createHintForSearchTimesButton(elementNodeForTooltip, tooltipClassName,
const linkProps = this.getBoundingClientRect();
const tooltipProps = tooltipWrap.getBoundingClientRect();
const topPos = linkProps.top - (tooltipProps.height + padding);
- tooltipWrap.setAttribute("style", `top:${topPos}px;left:${linkProps.left}px;z-index: 1010`); // z-index: 1010 to show tooltip in modal window background
+ tooltipWrap.setAttribute("style", `top:${topPos}px;left:${linkProps.left}px;`);
}
elementNodeForTooltip.addEventListener("mouseover", mouseOverHandler);
elementNodeForTooltip.addEventListener("mouseout", () => {
@@ -39,12 +39,11 @@ function createTimesSearchButton(
tooltipText,
nameFilter
) {
- const className = `clear-input-${webix.uid()}`;
inputNode.lastChild.style.paddingRight = "26px";
const timesSpan = document.createElement("span");
inputNode.appendChild(timesSpan);
const timesButtonNode = inputNode.lastChild;
- timesButtonNode.setAttribute("class", `search-times-button webix_input_icon fas fa-times ${className}`);
+ timesButtonNode.setAttribute("class", "search-times-button webix_input_icon fas fa-times");
timesButtonNode.setAttribute("style", "height:26px; padding-top:6px;");
const tootipTextForTimesButton = `${tooltipText}`;
const tooltipClassNameForTimesButton = "tooltip";
@@ -53,12 +52,10 @@ function createTimesSearchButton(
tooltipClassNameForTimesButton,
tootipTextForTimesButton
);
- searchInput.on_click[className] = () => {
+ searchInput.on_click["fa-times"] = () => {
if (searchInput.getValue() !== "") {
searchInput.setValue("");
- if (appliedFilterModel) {
- appliedFilterModel?.setFilterValue("");
- }
+ appliedFilterModel.setFilterValue("");
if (nameFilter) {
searchInput.callEvent("onEnter");
}
diff --git a/sources/styles/common.less b/sources/styles/common.less
index be49af4..525e157 100644
--- a/sources/styles/common.less
+++ b/sources/styles/common.less
@@ -250,54 +250,6 @@ a, .link {
}
}
-.collapser-vertical {
- .box-shadow2(0 1px 4px 0 rgba(0,0,0,0.12), 0 2px 4px 0 rgba(0,0,0,0.04));
-
- .collapser-btn {
- border: none;
- cursor: pointer;
- .webix_template {
- position: relative;
- }
- .webix_icon {
- font-weight: 600;
- text-align: center;
- position: absolute;
- left: 50%;
- }
- }
-}
-
-/* gallery-images-badge */
-.gallery-images-badge {
- background-color: #3C87CB;
- font-size: 8px;
- line-height: 10px;
- text-align: center;
- color: #FFFFFF;
- border: 1px;
- border-radius: 10px;
- height: 13px;
- width: 13px;
- padding: 2px;
- text-align: center;
- position: absolute;
- right: -5px;
- top: -5px;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.gallery-images-badge_1 {
- top: -5px;
- right: -5px;
-}
-
-.gallery-images-badge_2 {
- top: -5px;
- right: 13px;
-}
/* tooltip */
.tooltip-container {
diff --git a/sources/styles/pages.less b/sources/styles/pages.less
index f303d83..8e40465 100644
--- a/sources/styles/pages.less
+++ b/sources/styles/pages.less
@@ -1215,34 +1215,6 @@
border-radius: 5px;
}
-.gallery-image.framed-image, .gallery-image.framed-image2, .gallery-image.framed-image3 {
- position: absolute
-}
-
-.gallery-image.framed-image {
- top: -13px;
- left: -10px;
- background: transparent;
- z-index: 2;
- border: 1px solid black;
- box-shadow: 2px 2px rgb(100, 100, 100);
-}
-
-.gallery-image.framed-image2 {
- top: -8px;
- left: -5px;
- z-index: 1;
- border: 1px solid black;
- box-shadow: 2px 2px rgb(100, 100, 100);
-}
-
-.gallery-image.framed-image3 {
- top: 0px;
- left: 0px;
- z-index: 0;
- filter: blur(2px)
-}
-
/* gallery-images-dataview-mobile */
.gallery-images-dataview-mobile {
.webix_dataview_item {
@@ -1363,19 +1335,13 @@
width: 100%;
}
-.gallery-images-button-elem, .gallery-images-button-elem-disabled {
+.gallery-images-button-elem {
display: inline-block;
vertical-align: top;
width: 22px;
height: 22px;
margin: 0 4px;
}
-.gallery-images-button-elem-disabled {
- pointer-events: none;
-}
-.gallery-images-button-elem-disabled:active {
- pointer-events: none;
-}
.gallery-images-button {
display: block;
line-height: 0;
diff --git a/sources/styles/popups.less b/sources/styles/popups.less
index 8f2129a..00cbab1 100644
--- a/sources/styles/popups.less
+++ b/sources/styles/popups.less
@@ -12,17 +12,6 @@
.box-sizing(border-box);
padding-left: 14px;
}
-
- .window-header-toolbar2 {
- .window-header-toolbar2__title {
- .webix_template {
- display: flex;
- .window-header-toolbar-text_title {
- align-self: center;
- }
- }
- }
- }
}
.window-close-button {
@@ -199,17 +188,6 @@
display: flex;
align-items: center;
justify-content: center;
- user-select: none;
- height: 100%;
- .zoomable-image {
- max-height:100%;
- max-width:100%;
- object-fit: contain;
- }
-}
-
-.prev, .next {
- user-select: none;
}
/*========== Metadata popup =============*/
@@ -244,230 +222,3 @@
.webix_modal_box {
font-family: @main-font;
}
-
-/*========= Multi image lesion window =========*/
-.multi-image-lesion-search-block {
- display: flex;
- align-content: center;
-}
-.multi-image-lesion-window-body {
- .lesion-controls {
- background-color: #E1E7F0;
- }
- .left-image-panel-container, .right-image-panel-container {
- position: relative;
- .absolute-centered-image-template {
- position: absolute;
- top: 0;
- left: 0;
- .next, .prev {
- border-radius: 50%;
- background: rgba(255, 255, 255, 0.3);
- padding: 0;
- width: 40px;
- height: 40px;
- padding: 0px;
- text-align: center;
- line-height: 40px;
- }
- }
- .vertical-slider-left, .vertical-slider-right {
- position: absolute;
- border: none;
- z-index: 10;
- top: 0px;
- }
- // scroll start
- --sb-track-color: #ffffff;
- --sb-thumb-color: #bbc0cb;
- --sb-size: 8px;
- .vertical-slider-left::-webkit-scrollbar, .vertical-slider-right::-webkit-scrollbar {
- width: var(--sb-size);
- }
- .vertical-slider-left::-webkit-scrollbar-track, .vertical-slider-right::-webkit-scrollbar-track {
- background: var(--sb-track-color);
- border-radius: 3px;
- }
- .vertical-slider-left::-webkit-scrollbar-thumb, .vertical-slider-right::-webkit-scrollbar-thumb {
- background: var(--sb-thumb-color);
- border-radius: 3px;
- border: 1px solid #ffffff;
- }
- @supports not selector(::-webkit-scrollbar) {
- .vertical-slider-left, .vertical-slider-right {
- scrollbar-color: var(--sb-thumb-color)
- var(--sb-track-color);
- opacity: 0.1;
- }
- }
- // scroll end
- .vertical-slider-left {
- right: 10;
- }
-
- .vertical-slider-right {
- left: 10
- }
- }
-
- .left-image-panel-container {
- .absolute-centered-image-template {
- .next {
- right: 90px;
- }
- .prev {
- left: 10px;
- }
- }
- }
-
- .right-image-panel-container {
- .absolute-centered-image-template {
- .prev {
- left: 90px;
- }
- .next {
- right: 10px;
- }
- }
- }
-
- .container {
- position: relative;
- .vertical-slider-left, .vertical-slider-right {
- position: absolute;
- border: none;
- z-index: 10;
- top: 0px;
- width: 80px !important;
- background: transparent;
- .webix_list_item.webix_selected {
- border-color: #46C03C;
- }
- .webix_list_item{
- background-color: white;
- margin-top: 5px;
- margin-bottom: 5px;
- padding-left: 0px;
- padding-right: 0px;
- padding-top: 0px;
- border: solid 2px white;
- .ribbon-image-elem {
- position: absolute;
- width: 15px;
- height: 15px;
- bottom: 0px;
- right: 5px;
- border-radius: 7.5px;
- background: rgba(0, 0, 0, 0.3);
- .gallery-images-button {
- position: absolute;
- top: 7.5px;
- left: 2px;
- width: 10px;
- height: 10px;
- background: transparent;
- border: none;
- font-size: 10px;
- padding: 0px;
- color: white;
- }
- }
- }
- }
- // scroll start
- --sb-track-color: transparent;
- --sb-thumb-color: transparent;
- --sb-size: 8px;
- .vertical-slider-left::-webkit-scrollbar, .vertical-slider-right::-webkit-scrollbar {
- width: var(--sb-size);
- }
- .vertical-slider-left::-webkit-scrollbar-track, .vertical-slider-right::-webkit-scrollbar-track {
- background: var(--sb-track-color);
- border-radius: 0px;
- }
- .vertical-slider-left::-webkit-scrollbar-thumb, .vertical-slider-right::-webkit-scrollbar-thumb {
- background: var(--sb-thumb-color);
- border-radius: 3px;
- border: 1px solid transparent;
- }
- @supports not selector(::-webkit-scrollbar) {
- .vertical-slider-left, .vertical-slider-right {
- scrollbar-color: var(--sb-thumb-color)
- var(--sb-track-color);
- }
- }
- // scroll end
- .vertical-slider-left {
- right: 10px;
- }
-
- .vertical-slider-right {
- left: 10px;
- }
-
- .multi-image-lesion-window__image-label {
- font: Roboto;
- font-weight: 500;
- font-size: 14px;
- line-height: 16px;
- }
-
- .footer-template {
- border: 0px;
- .webix_template {
- display: flex;
- align-items: center;
- .footer-container-wide {
- width: 100%;
- display: grid;
- grid-template-columns: auto auto auto auto;
- .footer-item {
- min-width: 240px;
- .footer-item__name {
- color: #6F747F;
- }
- .footer-item__value {
- color: black;
- }
- }
- }
- .footer-container-narrow{
- min-width: 435px;
- width: calc(100%);
- display: grid;
- grid-template-columns: auto auto;
- grid-template-rows: auto auto;
- overflow: hidden;
- .footer-item {
- overflow: hidden;
- min-width: 200px;
- padding-bottom: 5px;
- .footer-item__name {
- color: #6F747F;
- min-width: 210px;
- }
- .footer-item__value {
- color: black;
- }
- }
- }
- }
- }
-
- }
- .multilesion-filter-dropdown {
- .webix_inp_static {
- border: none;
- padding-left: 0px;
- }
- .webix_input_icon.wxi-menu-down, .webix_input_icon.wxi-menu-down:focus {
- outline: none;
- color: @main-color-light;
- background-color: transparent;
- }
- }
- .multilesion-top-list {
- border: none;
- }
-}
diff --git a/sources/views/components/collapser.js b/sources/views/components/collapser.js
index d30b0ea..37cce08 100644
--- a/sources/views/components/collapser.js
+++ b/sources/views/components/collapser.js
@@ -19,103 +19,21 @@ function changeDataviewItemDimensions(collapsedView) {
function getConfig(collapsedViewId, config) {
const BTN_CLOSED_STATE_ID = `collapser-btn-closed-${webix.uid()}`;
const BTN_OPENED_STATE_ID = `collapser-btn-opened-${webix.uid()}`;
- let openedSpan;
- let closedSpan;
- switch (config.type) {
- case "left":
- openedSpan = "";
- closedSpan = "";
- break;
- case "right":
- openedSpan = "";
- closedSpan = "";
- break;
- case "top":
- openedSpan = "";
- closedSpan = "";
- break;
- case "bottom":
- openedSpan = "";
- closedSpan = "";
- break;
- default:
- openedSpan = "";
- closedSpan = "";
- }
- if (config.type === "top" || config.type === "bottom") {
- return {
- css: "collapser-vertical",
- height: 23,
- cols: [
- {
- view: "template",
- template: openedSpan,
- css: "collapser-btn",
- id: BTN_OPENED_STATE_ID,
- state: "wasOpened",
- hidden: config && config.closed,
- onClick: {
- // eslint-disable-next-line func-names
- "collapser-btn": function (thisButton) {
- const thisCollapsedButton = this?.config ? this : thisButton;
- const collapsedView = $$(collapsedViewId);
- collapsedView.hide();
- thisCollapsedButton.hide();
- $$(BTN_CLOSED_STATE_ID).show();
- webix.ui.resize();
- if (collapsedViewId === constants.ID_GALLERY_RIGHT_PANEL) {
- util.setHiddenGalleryCartList(true);
- }
- else if (collapsedViewId === constants.ID_GALLERY_LEFT_PANEL) {
- util.setHiddenGalleryLeftPanel(true);
- }
- changeDataviewItemDimensions(collapsedView);
- }
- }
- },
- {
- view: "template",
- template: closedSpan,
- css: "collapser-btn",
- id: BTN_CLOSED_STATE_ID,
- state: "wasClosed",
- hidden: !(config && config.closed),
- onClick: {
- // eslint-disable-next-line func-names
- "collapser-btn": function (thisButton) {
- const thisCollapsedButton = this?.config ? this : thisButton;
- const collapsedView = $$(collapsedViewId);
- collapsedView.show();
- thisCollapsedButton.hide();
- $$(BTN_OPENED_STATE_ID).show();
- webix.ui.resize();
- if (collapsedViewId === constants.ID_GALLERY_RIGHT_PANEL) {
- util.setHiddenGalleryCartList(false);
- }
- else if (collapsedViewId === constants.ID_GALLERY_LEFT_PANEL) {
- util.setHiddenGalleryLeftPanel(false);
- }
- changeDataviewItemDimensions(collapsedView);
- }
- }
- }
- ]
- };
- }
return {
css: "collapser",
width: 23,
rows: [
{
view: "template",
- template: openedSpan,
+ template: config && config.type === "left" ?
+ "" :
+ "",
css: "collapser-btn",
id: BTN_OPENED_STATE_ID,
state: "wasOpened",
hidden: config && config.closed,
onClick: {
- // eslint-disable-next-line func-names
"collapser-btn": function (thisButton) {
const thisCollapsedButton = this?.config ? this : thisButton;
const collapsedView = $$(collapsedViewId);
@@ -135,13 +53,14 @@ function getConfig(collapsedViewId, config) {
},
{
view: "template",
- template: closedSpan,
+ template: config && config.type === "left" ?
+ "" :
+ "",
css: "collapser-btn",
id: BTN_CLOSED_STATE_ID,
state: "wasClosed",
hidden: !(config && config.closed),
onClick: {
- // eslint-disable-next-line func-names
"collapser-btn": function (thisButton) {
const thisCollapsedButton = this?.config ? this : thisButton;
const collapsedView = $$(collapsedViewId);
diff --git a/sources/views/components/svgIcon.js b/sources/views/components/svgIcon.js
deleted file mode 100644
index 7b6396a..0000000
--- a/sources/views/components/svgIcon.js
+++ /dev/null
@@ -1,27 +0,0 @@
-webix.protoUI({
- name: "svgIcon",
- $cssName: "icon",
- defaults: {
- template(obj, view) {
- const min = Math.min(obj.awidth, obj.aheight);
- const top = Math.round((view.$height - obj.aheight) / 2);
- const inner = ``;
-
- const lineHeight = obj.aheight !== min ? obj.aheight : 0;
- return `${inner}
- ${obj.tooltip}
- ${obj.badge || obj.badge === 0 ? `${obj.badge}` : ""}
-
`;
- }
- }
-}, webix.ui.icon);
-
-function wrapIconWithSpan(elementClass, icon, active) {
- return `
-
- `;
-}
diff --git a/sources/views/subviews/gallery/gallery.js b/sources/views/subviews/gallery/gallery.js
index 41bac56..6d770c8 100644
--- a/sources/views/subviews/gallery/gallery.js
+++ b/sources/views/subviews/gallery/gallery.js
@@ -4,11 +4,9 @@ import constants from "../../../constants";
import "../../components/activeList";
import galleryImagesUrls from "../../../models/galleryImagesUrls";
import selectedImages from "../../../models/selectedGalleryImages";
-import state from "../../../models/state";
import ajax from "../../../services/ajaxActions";
import authService from "../../../services/auth";
import GalleryService from "../../../services/gallery/gallery";
-import MultiLesionWindowService from "../../../services/gallery/multiimageLesionWindow";
import searchButtonModel from "../../../services/gallery/searchButtonModel";
import util from "../../../utils/util";
import collapser from "../../components/collapser";
@@ -19,7 +17,6 @@ import dataview from "./parts/galleryDataview";
import pager from "./parts/galleryPager";
import imageWindow from "./windows/imageWindow";
import metadataWindow from "./windows/metadataWindow";
-import multiImageLesionWindow from "./windows/multiImageLesionWindow";
const ID_PAGER = "gallery-pager-id";
const ID_DATAVIEW = "gallery-dataview-id";
@@ -146,11 +143,11 @@ export default class GalleryView extends JetView {
template(obj) {
const rangeHtml = `Shown images: ${obj.rangeStart || ""}-${obj.rangeFinish || ""}.`;
const totalAmountHtml = `Total amount of images: ${obj.totalCount || ""}.`;
- const filteredAmountHtml = `Filtered images: ${state.filteredImages.filteredImagesCount || 0}`;
+ const filteredAmountHtml = `Filtered images: ${obj.currentCount || 0}`;
let result = "";
if (obj.filtered) {
result = ` ${filteredAmountHtml} ${totalAmountHtml}`;
- if (obj.rangeFinish - obj.rangeStart < state.filteredImages.filteredImagesCount) {
+ if (obj.rangeFinish - obj.rangeStart < obj.currentCount) {
result = `${rangeHtml} ${result}`;
}
}
@@ -329,10 +326,6 @@ export default class GalleryView extends JetView {
null,
this.removeParam.bind(this)
));
- this.multiImageLesionWindow = this.ui(multiImageLesionWindow.getConfig(
- "MULTI-IMAGE LESION CASE STUDY",
- () => {}
- ));
this.metadataWindow = this.ui(metadataWindow.getConfig(ID_METADATA_WINDOW));
const contextMenuConfig = contextMenu.getConfig(ID_GALLERY_CONTEXT_MENU);
this.galleryContextMenu = this.ui(contextMenuConfig);
@@ -361,7 +354,6 @@ export default class GalleryView extends JetView {
$$(imageWindow.getMetadataLayoutId()),
this.metadataWindow,
$$(metadataWindow.getMetadataLayoutId()),
- this.multiImageLesionWindow,
filtersForm,
this.getAppliedFiltersList(),
this.imagesSelectionTemplate,
@@ -384,12 +376,6 @@ export default class GalleryView extends JetView {
null, // portraitClearAllFiltersTemplate
null // landscapeClearAllFiltersTemplate
);
-
- // multi lesion
- this._multiImageLesionService = new MultiLesionWindowService(
- this._galleryService
- );
- this._multiImageLesionService.ready();
}
async ready() {
@@ -680,8 +666,4 @@ export default class GalleryView extends JetView {
this.setParam("image", "", true);
}
}
-
- setMultiLesionMode(item) {
- this._multiImageLesionService.setMultiLesionState(item);
- }
}
diff --git a/sources/views/subviews/gallery/parts/filterPanel.js b/sources/views/subviews/gallery/parts/filterPanel.js
index 4384a2e..3d8aa01 100644
--- a/sources/views/subviews/gallery/parts/filterPanel.js
+++ b/sources/views/subviews/gallery/parts/filterPanel.js
@@ -36,7 +36,7 @@ function getConfig(config) {
const searchField = {
view: "search",
- icon: "fas fa-search gallery-search-filter",
+ icon: "fas fa-search",
id: ID_SEARCH_FIELD,
name: NAME_SEARCH_FIELD,
value: `${appliedFiltersModel.getFilterValue()}`,
diff --git a/sources/views/subviews/gallery/parts/galleryDataview.js b/sources/views/subviews/gallery/parts/galleryDataview.js
index bddc71a..05af097 100644
--- a/sources/views/subviews/gallery/parts/galleryDataview.js
+++ b/sources/views/subviews/gallery/parts/galleryDataview.js
@@ -1,7 +1,6 @@
import "../../../components/activeDataview";
import constants from "../../../../constants";
import galleryImageUrl from "../../../../models/galleryImagesUrls";
-import lesionsModel from "../../../../models/lesionsModel";
import selectedImages from "../../../../models/selectedGalleryImages";
import state from "../../../../models/state";
import util from "../../../../utils/util";
@@ -90,20 +89,12 @@ const dataview = {
datathrottle: 500,
onContext: {},
template(obj, common) {
- const lesionID = lesionsModel.getItemLesionID(obj);
- const lesionModalitiesCount = lesionID
- ? lesionsModel.getLesionModalitiesCount(lesionID)
- : null;
- const lesionTimePointsCount = lesionID
- ? lesionsModel.getLesionTimePointsCount(lesionID)
- : null;
const imageIconDimensions = util.getImageIconDimensions();
let flagForStudies = selectedImages.getStudyFlag();
// TODO check this when if study works
if (flagForStudies) {
// eslint-disable-next-line no-use-before-define
let dataviewConfig = $$(getIdFromConfig());
- // TODO: find out why we use find
// eslint-disable-next-line array-callback-return
dataviewConfig.find((config) => {
if (selectedImages.isSelectedInStudies(config.isic_id)) {
@@ -121,21 +112,6 @@ const dataview = {
Multirater
` : "";
- const lesionIconElementClass = lesionID
- ? "gallery-images-button-elem"
- : "gallery-images-button-elem-disabled";
- const lesionIcon = `
-
-
-
- Lesion
- ${lesionModalitiesCount ?? 0}
- Lesion modalities count
- ${lesionTimePointsCount ?? 0}
- Lesion time points count
-
`;
const starHtml = obj.hasAnnotations ? "" : "";
if (typeof galleryImageUrl.getPreviewImageUrl(obj.isic_id) === "undefined") {
galleryImageUrl.setPreviewImageUrl(
@@ -175,7 +151,6 @@ const dataview = {
Download ZIP
- ${lesionIcon}
${diagnosisIcon}
diff --git a/sources/views/subviews/gallery/parts/mobileFilterPanel.js b/sources/views/subviews/gallery/parts/mobileFilterPanel.js
index a7c5bb0..7391d44 100644
--- a/sources/views/subviews/gallery/parts/mobileFilterPanel.js
+++ b/sources/views/subviews/gallery/parts/mobileFilterPanel.js
@@ -65,7 +65,7 @@ function getConfig(config) {
const searchField = {
view: "search",
- icon: "fas fa-search gallery-search-filter",
+ icon: "fas fa-search",
id: ID_SEARCH_FIELD,
name: NAME_SEARCH_FIELD,
value: `${appliedFiltersModel.getFilterValue()}`,
diff --git a/sources/views/subviews/gallery/windows/multiImageLesionWindow.js b/sources/views/subviews/gallery/windows/multiImageLesionWindow.js
deleted file mode 100644
index 0e1b75a..0000000
--- a/sources/views/subviews/gallery/windows/multiImageLesionWindow.js
+++ /dev/null
@@ -1,738 +0,0 @@
-import constants from "../../../../constants";
-import appliedFiltersModel from "../../../../models/appliedFilters";
-import galleryImageUrl from "../../../../models/galleryImagesUrls";
-import lesionsModel from "../../../../models/lesionsModel";
-import util from "../../../../utils/util";
-import collapser from "../../../components/collapser";
-import "../../../components/svgIcon";
-
-const ID_MULTI_IMAGE_LESION_WINDOW = `multi-image-lesion-window-id-${webix.uid()}`;
-const ID_LEFT_IMAGE_NAME_LABEL = `image-name-id-${webix.uid()}`;
-const ID_RIGHT_IMAGE_NAME_LABEL = `image-name-id-${webix.uid()}`;
-const ID_TOP_PANEL = `top-panel-id-${webix.uid()}`;
-const ID_TOP_SLIDER = `top-slider-id-${webix.uid()}`;
-const ID_PREV_PAGE_BUTTON = `prev-page-button-id-${webix.uid()}`;
-const ID_NEXT_PAGE_BUTTON = `next-page-button-id-${webix.uid()}`;
-const ID_RIGHT_CONTAINER = `container-id-${webix.uid()}`;
-const ID_LEFT_DROP_DOWN_FILTER = `left-drop-down-filter-${webix.uid()}`;
-const ID_RIGHT_DROP_DOWN_FILTER = `right-drop-down-filter-${webix.uid()}`;
-const ID_LEFT_FOOTER = `footer-id-${webix.uid()}`;
-const ID_RIGHT_FOOTER = `footer-id-${webix.uid()}`;
-const ID_LEFT_SLIDER = `slider-id-${webix.uid()}`;
-const ID_RIGHT_SLIDER = `slider-id-${webix.uid()}`;
-const ID_LEFT_IMAGE = `image-id-${webix.uid()}`;
-const ID_RIGHT_IMAGE = `image-id-${webix.uid()}`;
-const ID_BUTTON_FULL_SCREEN = `button-full-screen-id-${webix.uid()}`;
-const ID_BUTTON_WINDOWED = `button-windowed-id-${webix.uid()}`;
-const ID_SEARCH = `search-id-${webix.uid()}`;
-const ID_LEFT_ANCHOR_ICON = `left-anchor-icon-id-${webix.uid()}`;
-const ID_RIGHT_ANCHOR_ICON = `right-anchor-icon-id-${webix.uid()}`;
-
-let expandButtonID;
-let collapseButtonID;
-
-function getConfig(windowTitle, closeCallback) {
- const topSlider = getTopSlider(
- ID_TOP_PANEL,
- ID_TOP_SLIDER,
- ID_PREV_PAGE_BUTTON,
- ID_NEXT_PAGE_BUTTON
- );
- const topSliderCollapser = collapser.getConfig(ID_TOP_PANEL, {type: "top", closed: true});
- // TODO: find alternatives
- collapseButtonID = topSliderCollapser.cols[0].id;
- expandButtonID = topSliderCollapser.cols[1].id;
- const leftSlider = getVerticalSlider(ID_LEFT_SLIDER, constants.MULTI_LESION_SIDE.LEFT);
- const rightSlider = getVerticalSlider(ID_RIGHT_SLIDER, constants.MULTI_LESION_SIDE.RIGHT);
-
- /** @type {webix.ui.labelConfig} */
- const leftImageLabel = getImageLabel(ID_LEFT_IMAGE_NAME_LABEL);
- const rightImageLabel = getImageLabel(ID_RIGHT_IMAGE_NAME_LABEL);
-
- const leftAnchorIcon = {
- view: "icon",
- id: ID_LEFT_ANCHOR_ICON,
- width: 20,
- height: 20,
- icon: "fas fa-anchor"
- };
-
- const rightAnchorIcon = {
- view: "icon",
- id: ID_RIGHT_ANCHOR_ICON,
- width: 20,
- height: 20,
- icon: "fas fa-anchor"
- };
-
- /** @type {webix.ui.richselectConfig} */
- const leftGroupDropdown = {
- view: "richselect",
- id: ID_LEFT_DROP_DOWN_FILTER,
- css: "multilesion-filter-dropdown",
- label: "Group by:",
- labelAlign: "left",
- width: 270,
- height: 24,
- labelWidth: 75,
- value: constants.MULTI_LESION_GROUP_BY.TIME,
- // TODO: check options
- options: [
- constants.MULTI_LESION_GROUP_BY.TIME,
- constants.MULTI_LESION_GROUP_BY.TYPE,
- constants.MULTI_LESION_GROUP_BY.COMBINATION,
- constants.MULTI_LESION_GROUP_BY.NO_GROUP,
- ]
- };
-
- const rightGroupDropdown = {
- view: "richselect",
- id: ID_RIGHT_DROP_DOWN_FILTER,
- css: "multilesion-filter-dropdown",
- label: "Group by:",
- labelAlign: "left",
- width: 270,
- height: 30,
- labelWidth: 75,
- value: constants.MULTI_LESION_GROUP_BY.TIME,
- // TODO: check options
- options: [
- constants.MULTI_LESION_GROUP_BY.TIME,
- constants.MULTI_LESION_GROUP_BY.TYPE,
- constants.MULTI_LESION_GROUP_BY.COMBINATION,
- constants.MULTI_LESION_GROUP_BY.NO_GROUP,
- ]
- };
-
- const leftTemplateViewer = getTemplateViewer(
- ID_LEFT_IMAGE,
- true,
- constants.MULTI_LESION_SIDE.LEFT
- );
-
- const rightTemplateViewer = getTemplateViewer(
- ID_RIGHT_IMAGE,
- true,
- constants.MULTI_LESION_SIDE.RIGHT
- );
-
- /** @type {webix.ui.toolbarConfig} */
- const leftToolbar = {
- height: 60,
- cols: [
- {width: 20},
- leftImageLabel,
- {width: 5},
- leftAnchorIcon,
- {
- gravity: 1,
- minWidth: 10
- },
- {
- rows: [
- {gravity: 1},
- leftGroupDropdown,
- {gravity: 1},
- ]
- },
- {width: 100}
- ]
- };
-
- /** @type {webix.ui.toolbarConfig} */
- const rightToolbar = {
- height: 60,
- cols: [
- {width: 100},
- {
- rows: [
- {gravity: 1},
- rightGroupDropdown,
- {gravity: 1},
- ]
- },
- {gravity: 1},
- rightImageLabel,
- {width: 5},
- rightAnchorIcon,
- {gravity: 1},
- ],
- };
-
- const leftFooter = getFooter(ID_LEFT_FOOTER, constants.MULTI_LESION_SIDE.LEFT);
- const rightFooter = getFooter(ID_RIGHT_FOOTER, constants.MULTI_LESION_SIDE.RIGHT);
-
- const leftImageContainer = {
- css: "container",
- cols: [
- {
- rows: [
- leftToolbar,
- {
- css: "left-image-panel-container",
- cols: [
- leftTemplateViewer,
- ]
- },
- {
- cols: [
- {width: 10},
- leftFooter
- ]
- }
- ]
- },
- {
- width: 1,
- cols: [
- leftSlider
- ]
- }
- ]
- };
-
- const rightImageContainer = {
- id: ID_RIGHT_CONTAINER,
- css: "container",
- cols: [
- {
- width: 1,
- cols: [
- rightSlider
- ]
- },
- {
- rows: [
- rightToolbar,
- {
- css: "right-image-panel-container",
- cols: [
- rightTemplateViewer,
- ]
- },
- rightFooter
- ]
- }
- ]
- };
-
- return {
- view: "window",
- id: ID_MULTI_IMAGE_LESION_WINDOW,
- width: 1240,
- height: 750,
- css: "window-with-header",
- modal: true,
- fullscreen: false,
- position: "center",
- headHeight: 48,
- move: false,
- head: {
- view: "toolbar",
- css: "window-header-toolbar2",
- borderless: true,
- type: "clean",
- height: 48,
- cols: [
- {
- template: `` || "",
- css: "window-header-toolbar-text main-subtitle4 window-header-toolbar2__title",
- borderless: true,
- autoheight: true,
- },
- {gravity: 0.001},
- {
- view: "search",
- icon: "fas fa-search lesionWindow__filter-search",
- id: ID_SEARCH,
- name: "multilesionSearchName",
- value: `${appliedFiltersModel.getFilterValue()}`,
- css: "multi-image-lesion-search-block",
- placeholder: "Search images",
- hidden: true,
- inputHeight: 38,
- width: 634,
- },
- {width: 20},
- {
- view: "button",
- id: ID_BUTTON_FULL_SCREEN,
- label: "Full Screen",
- css: "window-header-toolbar2__fullscreen-button",
- type: "icon",
- icon: "fas fa-expand",
- width: 120,
- height: 32,
- },
- {
- view: "button",
- id: ID_BUTTON_WINDOWED,
- hidden: true,
- label: "Windowed",
- css: "window-header-toolbar2__fullscreen-button",
- type: "icon",
- icon: "fas fa-compress",
- width: 120,
- height: 32,
- },
- {width: 20},
- {
- view: "button",
- css: "window-close-button",
- label: '',
- type: "htmlbutton",
- width: 30,
- align: "right",
- on: {
- onItemClick() {
- this.getTopParentView().hide();
- if (typeof closeCallback === "function") {
- closeCallback();
- }
- }
- }
- },
- {width: 5}
- ]
- },
- body: {
- css: "multi-image-lesion-window-body",
- rows: [
- topSlider,
- topSliderCollapser,
- {height: 10},
- {
- cols: [
- leftImageContainer,
- rightImageContainer
- ]
- }
- ]
- }
- };
-}
-
-/**
- * Description placeholder
- *
- * @returns {webix.ui.listConfig}
- */
-function getTopSlider(topPanelID, sliderID, prevButtonID, nextButtonID) {
- return {
- id: topPanelID,
- hidden: true,
- cols: [
- {width: 20},
- {
- view: "icon",
- id: prevButtonID,
- width: 24,
- icon: "fas fa-chevron-left",
- css: "navigation-button"
- },
- {
- view: "list",
- id: sliderID,
- layout: "x",
- css: "multilesion-top-list",
- scroll: false,
- select: false,
- drag: true,
- height: 134,
- type: {
- height: 104
- },
- template(obj, /* common */) {
- const lesionID = lesionsModel.getItemLesionID(obj);
- const lesionModalitiesCount = lesionID
- ? lesionsModel.getLesionModalitiesCount(lesionID)
- : null;
- const lesionTimePointsCount = lesionID
- ? lesionsModel.getLesionTimePointsCount(lesionID)
- : null;
- const imageIconDimensions = {
- iconContainerDimensions: {
- width: constants.DEFAULT_RIBBON_ICON_CONTAINER_WIDTH,
- height: constants.DEFAULT_RIBBON_ICON_CONTAINER_HEIGHT
- },
- iconDimensions: {
- width: constants.DEFAULT_RIBBON_IMAGE_ICON_WIDTH,
- height: constants.DEFAULT_RIBBON_IMAGE_ICON_HEIGHT
- }
- };
- const lesionIconElementClass = lesionID
- ? "gallery-images-button-elem"
- : "gallery-images-button-elem-disabled";
- const diagnosisIcon = obj.hasAnnotations ?
- `
-
-
-
- Multirater
-
` : "";
- const lesionIcon = `
-
-
-
- Lesion
- ${lesionModalitiesCount ?? 0}
- Modalities count
- ${lesionTimePointsCount ?? 0}
- Time points count
-
`;
- const starHtml = obj.hasAnnotations ? "" : "";
- if (typeof galleryImageUrl.getPreviewImageUrl(lesionsModel.getItemID(obj)) === "undefined") {
- galleryImageUrl.setPreviewImageUrl(
- lesionsModel.getItemID(obj),
- obj.files.thumbnail_256.url
- ); // to prevent sending query more than 1 time
- }
- return `
-
- ${starHtml}
-
-
`;
- },
- },
- {
- view: "icon",
- id: nextButtonID,
- width: 24,
- icon: "fas fa-chevron-right",
- css: "navigation-button"
- },
- {width: 20}
- ]
- };
-}
-
-function getVerticalSlider(id, side) {
- return {
- view: "list",
- id,
- layout: "y",
- drag: true,
- select: false,
- type: {
- width: 62,
- height: 42,
- },
- css: `vertical-slider-${side}`,
- width: 1,
- /**
- *
- * @param {Object} obj
- * @param {obj} obj.firstImage
- * @param {string} obj.groupBy
- * @param {string | number} obj.groupValue
- * @param {Array} obj.images
- * @returns
- */
- template(obj, /* common */) {
- let images;
- let multipleFlag = false;
- if (obj.images) {
- images = obj.images;
- multipleFlag = obj.images.length > 1;
- }
- const lesionID = lesionsModel.getItemLesionID(images[0]);
- const anchorImageID = lesionsModel.getAnchorImageID(lesionID);
- const anchorIcon = lesionsModel.getItemID(images) === anchorImageID
- ? `
-
-
`
- : "";
- images.forEach((i) => {
- if (typeof galleryImageUrl.getPreviewImageUrl(lesionsModel.getItemID(i)) === "undefined") {
- galleryImageUrl.setPreviewImageUrl(
- lesionsModel.getItemID(i),
- i.files.thumbnail_256.url
- ); // to prevent sending query more than 1 time
- }
- });
- return ``;
- }
- };
-}
-
-
-/**
- * Description placeholder
- *
- * @param {boolean} showButtons
- * @returns {webix.ui.templateConfig}
- */
-function getTemplateViewer(id, showButtons, side) {
- return {
- view: "template",
- id,
- css: "absolute-centered-image-template",
- template(obj) {
- const imageUrl = galleryImageUrl.getNormalImageUrl(lesionsModel.getItemID(obj)) || "";
- const lesionsImages = side === constants.MULTI_LESION_SIDE.LEFT
- ? lesionsModel.getCurrentLeftImages()
- : lesionsModel.getCurrentRightImages();
- return `
-
-
- ${showButtons && lesionsImages.length > 1 ? '❮❯' : ""}
- `;
- },
- borderless: true
- };
-}
-
-function getImageLabel(imageNameId) {
- return {
- view: "label",
- css: "multi-image-lesion-window__image-label",
- width: 100,
- id: imageNameId,
- label: ""
- };
-}
-
-function footerTemplateFunction(obj, /* common */) {
- const lesionID = lesionsModel.getItemLesionID(obj);
- const lesionImagesCount = lesionID
- ? lesionsModel.getLesionImagesCount(lesionID)
- : "";
- const lesionTimePointsCount = lesionID
- ? lesionsModel.getLesionTimePointsCount(lesionID)
- : "";
- let multipleModalities;
- let timePoint;
- let modality;
- if (lesionID) {
- multipleModalities = lesionsModel.checkMultipleModality(lesionID) ? "Yes" : "No";
- timePoint = lesionsModel.getItemTimePoint(obj);
- modality = lesionsModel.getItemModality(obj);
- }
- else {
- multipleModalities = "";
- }
- const container = $$(ID_RIGHT_CONTAINER).isVisible()
- ? "