Commit 69baaa5e5f83d0c6e13d9a8ed0380ea8ff95e9f1

Authored by zhongnanhuang
1 parent 23115b98

feat: update

.umirc.ts
... ... @@ -20,6 +20,11 @@ export default defineConfig({
20 20 changeOrigin: true,
21 21 pathRewrite: { '^/api': '' },
22 22 },
  23 + '/previewApi/': {
  24 + target: 'http://39.108.227.113:8092/',
  25 + changeOrigin: true,
  26 + pathRewrite: { '^/previewApi': '' },
  27 + },
23 28 },
24 29 routes: [
25 30 {
... ...
package-lock.json
... ... @@ -14,6 +14,7 @@
14 14 "@umijs/max": "^4.0.87",
15 15 "antd": "^5.10.2",
16 16 "axios": "^1.6.1",
  17 + "base-64": "^1.0.0",
17 18 "lodash": "^4.17.21",
18 19 "print-js": "^1.6.0"
19 20 },
... ... @@ -27,6 +28,7 @@
27 28 "prettier": "^3.0.3",
28 29 "prettier-plugin-organize-imports": "^3.2.3",
29 30 "prettier-plugin-packagejson": "^2.4.6",
  31 + "react-file-viewer": "^1.2.1",
30 32 "tailwindcss": "^3",
31 33 "ts-gear": "^4.11.7",
32 34 "typescript": "^5.2.2"
... ... @@ -6982,6 +6984,30 @@
6982 6984 "node": ">=0.4.0"
6983 6985 }
6984 6986 },
  6987 + "node_modules/acorn-dynamic-import": {
  6988 + "version": "2.0.2",
  6989 + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
  6990 + "integrity": "sha512-GKp5tQ8h0KMPWIYGRHHXI1s5tUpZixZ3IHF2jAu42wSCf6In/G873s6/y4DdKdhWvzhu1T6mE1JgvnhAKqyYYQ==",
  6991 + "deprecated": "This is probably built in to whatever tool you're using. If you still need it... idk",
  6992 + "dev": true,
  6993 + "peer": true,
  6994 + "dependencies": {
  6995 + "acorn": "^4.0.3"
  6996 + }
  6997 + },
  6998 + "node_modules/acorn-dynamic-import/node_modules/acorn": {
  6999 + "version": "4.0.13",
  7000 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
  7001 + "integrity": "sha512-fu2ygVGuMmlzG8ZeRJ0bvR41nsAkxxhbyk8bZ1SS521Z7vmgJFTQQlfz/Mp/nJexGBz+v8sC9bM6+lNgskt4Ug==",
  7002 + "dev": true,
  7003 + "peer": true,
  7004 + "bin": {
  7005 + "acorn": "bin/acorn"
  7006 + },
  7007 + "engines": {
  7008 + "node": ">=0.4.0"
  7009 + }
  7010 + },
6985 7011 "node_modules/acorn-import-assertions": {
6986 7012 "version": "1.9.0",
6987 7013 "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
... ... @@ -7015,6 +7041,22 @@
7015 7041 "object-assign": "4.x"
7016 7042 }
7017 7043 },
  7044 + "node_modules/adler-32": {
  7045 + "version": "1.1.0",
  7046 + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.1.0.tgz",
  7047 + "integrity": "sha512-lRKKX9RZQBPy6CrdUqiDUsxVcZujjbkkUg++0zLLyi0EwRui+aFyEDJBXRXCqwp+pmmybdZgBNHxOAOQcgdJYg==",
  7048 + "dev": true,
  7049 + "dependencies": {
  7050 + "exit-on-epipe": "~1.0.1",
  7051 + "printj": "~1.1.0"
  7052 + },
  7053 + "bin": {
  7054 + "adler32": "bin/adler32.njs"
  7055 + },
  7056 + "engines": {
  7057 + "node": ">=0.8"
  7058 + }
  7059 + },
7018 7060 "node_modules/ajv": {
7019 7061 "version": "6.12.6",
7020 7062 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
... ... @@ -7257,6 +7299,28 @@
7257 7299 "node": ">=10"
7258 7300 }
7259 7301 },
  7302 + "node_modules/arr-diff": {
  7303 + "version": "4.0.0",
  7304 + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
  7305 + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
  7306 + "dev": true,
  7307 + "optional": true,
  7308 + "peer": true,
  7309 + "engines": {
  7310 + "node": ">=0.10.0"
  7311 + }
  7312 + },
  7313 + "node_modules/arr-flatten": {
  7314 + "version": "1.1.0",
  7315 + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
  7316 + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
  7317 + "dev": true,
  7318 + "optional": true,
  7319 + "peer": true,
  7320 + "engines": {
  7321 + "node": ">=0.10.0"
  7322 + }
  7323 + },
7260 7324 "node_modules/arr-union": {
7261 7325 "version": "3.1.0",
7262 7326 "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
... ... @@ -7311,6 +7375,17 @@
7311 7375 "node": ">=8"
7312 7376 }
7313 7377 },
  7378 + "node_modules/array-unique": {
  7379 + "version": "0.3.2",
  7380 + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
  7381 + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
  7382 + "dev": true,
  7383 + "optional": true,
  7384 + "peer": true,
  7385 + "engines": {
  7386 + "node": ">=0.10.0"
  7387 + }
  7388 + },
7314 7389 "node_modules/array.prototype.flat": {
7315 7390 "version": "1.3.2",
7316 7391 "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
... ... @@ -7450,6 +7525,20 @@
7450 7525 "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
7451 7526 "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg=="
7452 7527 },
  7528 + "node_modules/async-each": {
  7529 + "version": "1.0.6",
  7530 + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz",
  7531 + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==",
  7532 + "dev": true,
  7533 + "funding": [
  7534 + {
  7535 + "type": "individual",
  7536 + "url": "https://paulmillr.com/funding/"
  7537 + }
  7538 + ],
  7539 + "optional": true,
  7540 + "peer": true
  7541 + },
7453 7542 "node_modules/async-validator": {
7454 7543 "version": "4.2.5",
7455 7544 "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
... ... @@ -7468,6 +7557,20 @@
7468 7557 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
7469 7558 "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
7470 7559 },
  7560 + "node_modules/atob": {
  7561 + "version": "2.1.2",
  7562 + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
  7563 + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
  7564 + "dev": true,
  7565 + "optional": true,
  7566 + "peer": true,
  7567 + "bin": {
  7568 + "atob": "bin/atob.js"
  7569 + },
  7570 + "engines": {
  7571 + "node": ">= 4.5.0"
  7572 + }
  7573 + },
7471 7574 "node_modules/atomic-sleep": {
7472 7575 "version": "1.0.0",
7473 7576 "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
... ... @@ -7703,6 +7806,60 @@
7703 7806 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
7704 7807 "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
7705 7808 },
  7809 + "node_modules/base": {
  7810 + "version": "0.11.2",
  7811 + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
  7812 + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
  7813 + "dev": true,
  7814 + "optional": true,
  7815 + "peer": true,
  7816 + "dependencies": {
  7817 + "cache-base": "^1.0.1",
  7818 + "class-utils": "^0.3.5",
  7819 + "component-emitter": "^1.2.1",
  7820 + "define-property": "^1.0.0",
  7821 + "isobject": "^3.0.1",
  7822 + "mixin-deep": "^1.2.0",
  7823 + "pascalcase": "^0.1.1"
  7824 + },
  7825 + "engines": {
  7826 + "node": ">=0.10.0"
  7827 + }
  7828 + },
  7829 + "node_modules/base-64": {
  7830 + "version": "1.0.0",
  7831 + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
  7832 + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
  7833 + },
  7834 + "node_modules/base/node_modules/define-property": {
  7835 + "version": "1.0.0",
  7836 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
  7837 + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
  7838 + "dev": true,
  7839 + "optional": true,
  7840 + "peer": true,
  7841 + "dependencies": {
  7842 + "is-descriptor": "^1.0.0"
  7843 + },
  7844 + "engines": {
  7845 + "node": ">=0.10.0"
  7846 + }
  7847 + },
  7848 + "node_modules/base/node_modules/is-descriptor": {
  7849 + "version": "1.0.3",
  7850 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  7851 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  7852 + "dev": true,
  7853 + "optional": true,
  7854 + "peer": true,
  7855 + "dependencies": {
  7856 + "is-accessor-descriptor": "^1.0.1",
  7857 + "is-data-descriptor": "^1.0.1"
  7858 + },
  7859 + "engines": {
  7860 + "node": ">= 0.4"
  7861 + }
  7862 + },
7706 7863 "node_modules/base64-js": {
7707 7864 "version": "1.5.1",
7708 7865 "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
... ... @@ -7751,6 +7908,17 @@
7751 7908 "node": ">=8"
7752 7909 }
7753 7910 },
  7911 + "node_modules/bindings": {
  7912 + "version": "1.5.0",
  7913 + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
  7914 + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
  7915 + "dev": true,
  7916 + "optional": true,
  7917 + "peer": true,
  7918 + "dependencies": {
  7919 + "file-uri-to-path": "1.0.0"
  7920 + }
  7921 + },
7754 7922 "node_modules/bl": {
7755 7923 "version": "5.1.0",
7756 7924 "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
... ... @@ -7776,6 +7944,12 @@
7776 7944 "node": ">= 6"
7777 7945 }
7778 7946 },
  7947 + "node_modules/bluebird": {
  7948 + "version": "3.4.7",
  7949 + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
  7950 + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==",
  7951 + "dev": true
  7952 + },
7779 7953 "node_modules/bn.js": {
7780 7954 "version": "5.2.1",
7781 7955 "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
... ... @@ -8045,6 +8219,28 @@
8045 8219 "typewise-core": "^1.2"
8046 8220 }
8047 8221 },
  8222 + "node_modules/cache-base": {
  8223 + "version": "1.0.1",
  8224 + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
  8225 + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
  8226 + "dev": true,
  8227 + "optional": true,
  8228 + "peer": true,
  8229 + "dependencies": {
  8230 + "collection-visit": "^1.0.0",
  8231 + "component-emitter": "^1.2.1",
  8232 + "get-value": "^2.0.6",
  8233 + "has-value": "^1.0.0",
  8234 + "isobject": "^3.0.1",
  8235 + "set-value": "^2.0.0",
  8236 + "to-object-path": "^0.3.0",
  8237 + "union-value": "^1.0.0",
  8238 + "unset-value": "^1.0.0"
  8239 + },
  8240 + "engines": {
  8241 + "node": ">=0.10.0"
  8242 + }
  8243 + },
8048 8244 "node_modules/cacheable-request": {
8049 8245 "version": "2.1.4",
8050 8246 "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
... ... @@ -8248,6 +8444,28 @@
8248 8444 "node": ">=0.10.0"
8249 8445 }
8250 8446 },
  8447 + "node_modules/cfb": {
  8448 + "version": "0.12.1",
  8449 + "resolved": "https://registry.npmjs.org/cfb/-/cfb-0.12.1.tgz",
  8450 + "integrity": "sha512-cP+4A0tTqtyza5gJwNwDetZ8FPjl0gPLE7mIxGKyUzOS6HkM23WaAWW/l3t7jIQSMqVXroa09Ey0lo7gV8LNxw==",
  8451 + "dev": true,
  8452 + "dependencies": {
  8453 + "commander": "~2.11.0",
  8454 + "printj": "~1.1.0"
  8455 + },
  8456 + "bin": {
  8457 + "cfb": "bin/cfb.njs"
  8458 + },
  8459 + "engines": {
  8460 + "node": ">=0.8"
  8461 + }
  8462 + },
  8463 + "node_modules/cfb/node_modules/commander": {
  8464 + "version": "2.11.0",
  8465 + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
  8466 + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
  8467 + "dev": true
  8468 + },
8251 8469 "node_modules/chalk": {
8252 8470 "version": "5.3.0",
8253 8471 "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
... ... @@ -8329,6 +8547,23 @@
8329 8547 "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz",
8330 8548 "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA=="
8331 8549 },
  8550 + "node_modules/class-utils": {
  8551 + "version": "0.3.6",
  8552 + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
  8553 + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
  8554 + "dev": true,
  8555 + "optional": true,
  8556 + "peer": true,
  8557 + "dependencies": {
  8558 + "arr-union": "^3.1.0",
  8559 + "define-property": "^0.2.5",
  8560 + "isobject": "^3.0.0",
  8561 + "static-extend": "^0.1.1"
  8562 + },
  8563 + "engines": {
  8564 + "node": ">=0.10.0"
  8565 + }
  8566 + },
8332 8567 "node_modules/classnames": {
8333 8568 "version": "2.3.2",
8334 8569 "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
... ... @@ -8570,12 +8805,70 @@
8570 8805 "mimic-response": "^1.0.0"
8571 8806 }
8572 8807 },
  8808 + "node_modules/co": {
  8809 + "version": "4.6.0",
  8810 + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
  8811 + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
  8812 + "dev": true,
  8813 + "engines": {
  8814 + "iojs": ">= 1.0.0",
  8815 + "node": ">= 0.12.0"
  8816 + }
  8817 + },
8573 8818 "node_modules/code-block-writer": {
8574 8819 "version": "12.0.0",
8575 8820 "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz",
8576 8821 "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==",
8577 8822 "dev": true
8578 8823 },
  8824 + "node_modules/code-point-at": {
  8825 + "version": "1.1.0",
  8826 + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
  8827 + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
  8828 + "dev": true,
  8829 + "peer": true,
  8830 + "engines": {
  8831 + "node": ">=0.10.0"
  8832 + }
  8833 + },
  8834 + "node_modules/codepage": {
  8835 + "version": "1.10.2",
  8836 + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.10.2.tgz",
  8837 + "integrity": "sha512-JzhJ7nYua7rMcJ6I4Cw4h1w7aN/1f5qAQb//QSAaTjTVjEEZ1mBicBWTPLf6RiaBn4dpbEFwqGBoEekOHx9K2Q==",
  8838 + "dev": true,
  8839 + "dependencies": {
  8840 + "commander": "~2.11.0",
  8841 + "exit-on-epipe": "~1.0.1",
  8842 + "voc": "~1.0.0"
  8843 + },
  8844 + "bin": {
  8845 + "codepage": "bin/codepage.njs"
  8846 + },
  8847 + "engines": {
  8848 + "node": ">=0.8"
  8849 + }
  8850 + },
  8851 + "node_modules/codepage/node_modules/commander": {
  8852 + "version": "2.11.0",
  8853 + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
  8854 + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
  8855 + "dev": true
  8856 + },
  8857 + "node_modules/collection-visit": {
  8858 + "version": "1.0.0",
  8859 + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
  8860 + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
  8861 + "dev": true,
  8862 + "optional": true,
  8863 + "peer": true,
  8864 + "dependencies": {
  8865 + "map-visit": "^1.0.0",
  8866 + "object-visit": "^1.0.0"
  8867 + },
  8868 + "engines": {
  8869 + "node": ">=0.10.0"
  8870 + }
  8871 + },
8579 8872 "node_modules/color": {
8580 8873 "version": "3.2.1",
8581 8874 "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
... ... @@ -8629,6 +8922,12 @@
8629 8922 "node": ">= 0.8"
8630 8923 }
8631 8924 },
  8925 + "node_modules/comma-separated-values": {
  8926 + "version": "3.6.4",
  8927 + "resolved": "https://registry.npmjs.org/comma-separated-values/-/comma-separated-values-3.6.4.tgz",
  8928 + "integrity": "sha512-B0mjBHUfu4JqzYM5NurRTBl2QuNqQ9/O62EUfL4+bo2KN81fGsFOFOHbHn5SP65n3lmFPzGLkdg8wfuLKk9HOQ==",
  8929 + "dev": true
  8930 + },
8632 8931 "node_modules/commander": {
8633 8932 "version": "11.1.0",
8634 8933 "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
... ... @@ -8643,6 +8942,17 @@
8643 8942 "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
8644 8943 "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="
8645 8944 },
  8945 + "node_modules/component-emitter": {
  8946 + "version": "1.3.1",
  8947 + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
  8948 + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
  8949 + "dev": true,
  8950 + "optional": true,
  8951 + "peer": true,
  8952 + "funding": {
  8953 + "url": "https://github.com/sponsors/sindresorhus"
  8954 + }
  8955 + },
8646 8956 "node_modules/compute-scroll-into-view": {
8647 8957 "version": "3.1.0",
8648 8958 "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz",
... ... @@ -8756,6 +9066,17 @@
8756 9066 "url": "https://github.com/sponsors/mesqueeb"
8757 9067 }
8758 9068 },
  9069 + "node_modules/copy-descriptor": {
  9070 + "version": "0.1.1",
  9071 + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
  9072 + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
  9073 + "dev": true,
  9074 + "optional": true,
  9075 + "peer": true,
  9076 + "engines": {
  9077 + "node": ">=0.10.0"
  9078 + }
  9079 + },
8759 9080 "node_modules/copy-to-clipboard": {
8760 9081 "version": "3.3.3",
8761 9082 "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
... ... @@ -8824,6 +9145,22 @@
8824 9145 "node": ">= 6"
8825 9146 }
8826 9147 },
  9148 + "node_modules/crc-32": {
  9149 + "version": "1.1.1",
  9150 + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.1.1.tgz",
  9151 + "integrity": "sha512-DWXuRN3Wtu43YRfYZ9r17720WZqM0caEjIfT6Dk1J/3sAxIyyXbUWqIACbz3cjV8l7guJRW+9pZlYMluKJ69wg==",
  9152 + "dev": true,
  9153 + "dependencies": {
  9154 + "exit-on-epipe": "~1.0.1",
  9155 + "printj": "~1.1.0"
  9156 + },
  9157 + "bin": {
  9158 + "crc32": "bin/crc32.njs"
  9159 + },
  9160 + "engines": {
  9161 + "node": ">=0.8"
  9162 + }
  9163 + },
8827 9164 "node_modules/create-ecdh": {
8828 9165 "version": "4.0.4",
8829 9166 "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
... ... @@ -9693,6 +10030,20 @@
9693 10030 "url": "https://github.com/sponsors/ljharb"
9694 10031 }
9695 10032 },
  10033 + "node_modules/define-property": {
  10034 + "version": "0.2.5",
  10035 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
  10036 + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
  10037 + "dev": true,
  10038 + "optional": true,
  10039 + "peer": true,
  10040 + "dependencies": {
  10041 + "is-descriptor": "^0.1.0"
  10042 + },
  10043 + "engines": {
  10044 + "node": ">=0.10.0"
  10045 + }
  10046 + },
9696 10047 "node_modules/defined": {
9697 10048 "version": "1.0.1",
9698 10049 "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
... ... @@ -9995,6 +10346,21 @@
9995 10346 "node": ">=4"
9996 10347 }
9997 10348 },
  10349 + "node_modules/duck": {
  10350 + "version": "0.1.12",
  10351 + "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz",
  10352 + "integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==",
  10353 + "dev": true,
  10354 + "dependencies": {
  10355 + "underscore": "^1.13.1"
  10356 + }
  10357 + },
  10358 + "node_modules/duck/node_modules/underscore": {
  10359 + "version": "1.13.6",
  10360 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
  10361 + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
  10362 + "dev": true
  10363 + },
9998 10364 "node_modules/duplexer": {
9999 10365 "version": "0.1.2",
10000 10366 "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
... ... @@ -10180,7 +10546,7 @@
10180 10546 "version": "0.1.8",
10181 10547 "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
10182 10548 "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
10183   - "optional": true,
  10549 + "devOptional": true,
10184 10550 "dependencies": {
10185 10551 "prr": "~1.0.1"
10186 10552 },
... ... @@ -10911,6 +11277,54 @@
10911 11277 "node": ">=8"
10912 11278 }
10913 11279 },
  11280 + "node_modules/exit-on-epipe": {
  11281 + "version": "1.0.1",
  11282 + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
  11283 + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==",
  11284 + "dev": true,
  11285 + "engines": {
  11286 + "node": ">=0.8"
  11287 + }
  11288 + },
  11289 + "node_modules/expand-brackets": {
  11290 + "version": "2.1.4",
  11291 + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
  11292 + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
  11293 + "dev": true,
  11294 + "optional": true,
  11295 + "peer": true,
  11296 + "dependencies": {
  11297 + "debug": "^2.3.3",
  11298 + "define-property": "^0.2.5",
  11299 + "extend-shallow": "^2.0.1",
  11300 + "posix-character-classes": "^0.1.0",
  11301 + "regex-not": "^1.0.0",
  11302 + "snapdragon": "^0.8.1",
  11303 + "to-regex": "^3.0.1"
  11304 + },
  11305 + "engines": {
  11306 + "node": ">=0.10.0"
  11307 + }
  11308 + },
  11309 + "node_modules/expand-brackets/node_modules/debug": {
  11310 + "version": "2.6.9",
  11311 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  11312 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  11313 + "dev": true,
  11314 + "optional": true,
  11315 + "peer": true,
  11316 + "dependencies": {
  11317 + "ms": "2.0.0"
  11318 + }
  11319 + },
  11320 + "node_modules/expand-brackets/node_modules/ms": {
  11321 + "version": "2.0.0",
  11322 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  11323 + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
  11324 + "dev": true,
  11325 + "optional": true,
  11326 + "peer": true
  11327 + },
10914 11328 "node_modules/ext": {
10915 11329 "version": "1.7.0",
10916 11330 "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
... ... @@ -10974,6 +11388,56 @@
10974 11388 "node": ">=4"
10975 11389 }
10976 11390 },
  11391 + "node_modules/extglob": {
  11392 + "version": "2.0.4",
  11393 + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
  11394 + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
  11395 + "dev": true,
  11396 + "optional": true,
  11397 + "peer": true,
  11398 + "dependencies": {
  11399 + "array-unique": "^0.3.2",
  11400 + "define-property": "^1.0.0",
  11401 + "expand-brackets": "^2.1.4",
  11402 + "extend-shallow": "^2.0.1",
  11403 + "fragment-cache": "^0.2.1",
  11404 + "regex-not": "^1.0.0",
  11405 + "snapdragon": "^0.8.1",
  11406 + "to-regex": "^3.0.1"
  11407 + },
  11408 + "engines": {
  11409 + "node": ">=0.10.0"
  11410 + }
  11411 + },
  11412 + "node_modules/extglob/node_modules/define-property": {
  11413 + "version": "1.0.0",
  11414 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
  11415 + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
  11416 + "dev": true,
  11417 + "optional": true,
  11418 + "peer": true,
  11419 + "dependencies": {
  11420 + "is-descriptor": "^1.0.0"
  11421 + },
  11422 + "engines": {
  11423 + "node": ">=0.10.0"
  11424 + }
  11425 + },
  11426 + "node_modules/extglob/node_modules/is-descriptor": {
  11427 + "version": "1.0.3",
  11428 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  11429 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  11430 + "dev": true,
  11431 + "optional": true,
  11432 + "peer": true,
  11433 + "dependencies": {
  11434 + "is-accessor-descriptor": "^1.0.1",
  11435 + "is-data-descriptor": "^1.0.1"
  11436 + },
  11437 + "engines": {
  11438 + "node": ">= 0.4"
  11439 + }
  11440 + },
10977 11441 "node_modules/extrude-polyline": {
10978 11442 "version": "1.0.6",
10979 11443 "resolved": "https://registry.npmjs.org/extrude-polyline/-/extrude-polyline-1.0.6.tgz",
... ... @@ -11145,6 +11609,14 @@
11145 11609 "node": ">=4"
11146 11610 }
11147 11611 },
  11612 + "node_modules/file-uri-to-path": {
  11613 + "version": "1.0.0",
  11614 + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
  11615 + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
  11616 + "dev": true,
  11617 + "optional": true,
  11618 + "peer": true
  11619 + },
11148 11620 "node_modules/filename-reserved-regex": {
11149 11621 "version": "2.0.0",
11150 11622 "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
... ... @@ -11355,6 +11827,17 @@
11355 11827 "is-callable": "^1.1.3"
11356 11828 }
11357 11829 },
  11830 + "node_modules/for-in": {
  11831 + "version": "1.0.2",
  11832 + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
  11833 + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
  11834 + "dev": true,
  11835 + "optional": true,
  11836 + "peer": true,
  11837 + "engines": {
  11838 + "node": ">=0.10.0"
  11839 + }
  11840 + },
11358 11841 "node_modules/fork-ts-checker-webpack-plugin": {
11359 11842 "version": "8.0.0",
11360 11843 "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz",
... ... @@ -11513,6 +11996,15 @@
11513 11996 "node": ">=12.20.0"
11514 11997 }
11515 11998 },
  11999 + "node_modules/frac": {
  12000 + "version": "1.1.2",
  12001 + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
  12002 + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
  12003 + "dev": true,
  12004 + "engines": {
  12005 + "node": ">=0.8"
  12006 + }
  12007 + },
11516 12008 "node_modules/fraction.js": {
11517 12009 "version": "4.3.7",
11518 12010 "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
... ... @@ -11525,6 +12017,20 @@
11525 12017 "url": "https://github.com/sponsors/rawify"
11526 12018 }
11527 12019 },
  12020 + "node_modules/fragment-cache": {
  12021 + "version": "0.2.1",
  12022 + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
  12023 + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
  12024 + "dev": true,
  12025 + "optional": true,
  12026 + "peer": true,
  12027 + "dependencies": {
  12028 + "map-cache": "^0.2.2"
  12029 + },
  12030 + "engines": {
  12031 + "node": ">=0.10.0"
  12032 + }
  12033 + },
11528 12034 "node_modules/from2": {
11529 12035 "version": "2.3.0",
11530 12036 "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
... ... @@ -12116,6 +12622,79 @@
12116 12622 "url": "https://github.com/sponsors/ljharb"
12117 12623 }
12118 12624 },
  12625 + "node_modules/has-value": {
  12626 + "version": "1.0.0",
  12627 + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
  12628 + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
  12629 + "dev": true,
  12630 + "optional": true,
  12631 + "peer": true,
  12632 + "dependencies": {
  12633 + "get-value": "^2.0.6",
  12634 + "has-values": "^1.0.0",
  12635 + "isobject": "^3.0.0"
  12636 + },
  12637 + "engines": {
  12638 + "node": ">=0.10.0"
  12639 + }
  12640 + },
  12641 + "node_modules/has-values": {
  12642 + "version": "1.0.0",
  12643 + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
  12644 + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
  12645 + "dev": true,
  12646 + "optional": true,
  12647 + "peer": true,
  12648 + "dependencies": {
  12649 + "is-number": "^3.0.0",
  12650 + "kind-of": "^4.0.0"
  12651 + },
  12652 + "engines": {
  12653 + "node": ">=0.10.0"
  12654 + }
  12655 + },
  12656 + "node_modules/has-values/node_modules/is-number": {
  12657 + "version": "3.0.0",
  12658 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
  12659 + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
  12660 + "dev": true,
  12661 + "optional": true,
  12662 + "peer": true,
  12663 + "dependencies": {
  12664 + "kind-of": "^3.0.2"
  12665 + },
  12666 + "engines": {
  12667 + "node": ">=0.10.0"
  12668 + }
  12669 + },
  12670 + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
  12671 + "version": "3.2.2",
  12672 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  12673 + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
  12674 + "dev": true,
  12675 + "optional": true,
  12676 + "peer": true,
  12677 + "dependencies": {
  12678 + "is-buffer": "^1.1.5"
  12679 + },
  12680 + "engines": {
  12681 + "node": ">=0.10.0"
  12682 + }
  12683 + },
  12684 + "node_modules/has-values/node_modules/kind-of": {
  12685 + "version": "4.0.0",
  12686 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
  12687 + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
  12688 + "dev": true,
  12689 + "optional": true,
  12690 + "peer": true,
  12691 + "dependencies": {
  12692 + "is-buffer": "^1.1.5"
  12693 + },
  12694 + "engines": {
  12695 + "node": ">=0.10.0"
  12696 + }
  12697 + },
12119 12698 "node_modules/hash-base": {
12120 12699 "version": "3.1.0",
12121 12700 "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
... ... @@ -12765,6 +13344,16 @@
12765 13344 "node": ">= 0.4"
12766 13345 }
12767 13346 },
  13347 + "node_modules/interpret": {
  13348 + "version": "1.4.0",
  13349 + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
  13350 + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
  13351 + "dev": true,
  13352 + "peer": true,
  13353 + "engines": {
  13354 + "node": ">= 0.10"
  13355 + }
  13356 + },
12768 13357 "node_modules/intl": {
12769 13358 "version": "1.2.5",
12770 13359 "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz",
... ... @@ -12824,6 +13413,30 @@
12824 13413 "resolved": "https://registry.npmjs.org/inversify-inject-decorators/-/inversify-inject-decorators-3.1.0.tgz",
12825 13414 "integrity": "sha512-/seBlVp5bXrLQS3DpKEmlgeZL6C7Tf/QITd+IMQrbBBGuCbxb7k3hRAWu9XSreNpFzLgSboz3sClLSEmGwHphw=="
12826 13415 },
  13416 + "node_modules/invert-kv": {
  13417 + "version": "1.0.0",
  13418 + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
  13419 + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
  13420 + "dev": true,
  13421 + "peer": true,
  13422 + "engines": {
  13423 + "node": ">=0.10.0"
  13424 + }
  13425 + },
  13426 + "node_modules/is-accessor-descriptor": {
  13427 + "version": "1.0.1",
  13428 + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
  13429 + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
  13430 + "dev": true,
  13431 + "optional": true,
  13432 + "peer": true,
  13433 + "dependencies": {
  13434 + "hasown": "^2.0.0"
  13435 + },
  13436 + "engines": {
  13437 + "node": ">= 0.10"
  13438 + }
  13439 + },
12827 13440 "node_modules/is-any-array": {
12828 13441 "version": "2.0.1",
12829 13442 "resolved": "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz",
... ... @@ -12953,6 +13566,20 @@
12953 13566 "url": "https://github.com/sponsors/ljharb"
12954 13567 }
12955 13568 },
  13569 + "node_modules/is-data-descriptor": {
  13570 + "version": "1.0.1",
  13571 + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
  13572 + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
  13573 + "dev": true,
  13574 + "optional": true,
  13575 + "peer": true,
  13576 + "dependencies": {
  13577 + "hasown": "^2.0.0"
  13578 + },
  13579 + "engines": {
  13580 + "node": ">= 0.4"
  13581 + }
  13582 + },
12956 13583 "node_modules/is-date-object": {
12957 13584 "version": "1.0.5",
12958 13585 "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
... ... @@ -12967,6 +13594,21 @@
12967 13594 "url": "https://github.com/sponsors/ljharb"
12968 13595 }
12969 13596 },
  13597 + "node_modules/is-descriptor": {
  13598 + "version": "0.1.7",
  13599 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
  13600 + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
  13601 + "dev": true,
  13602 + "optional": true,
  13603 + "peer": true,
  13604 + "dependencies": {
  13605 + "is-accessor-descriptor": "^1.0.1",
  13606 + "is-data-descriptor": "^1.0.1"
  13607 + },
  13608 + "engines": {
  13609 + "node": ">= 0.4"
  13610 + }
  13611 + },
12970 13612 "node_modules/is-directory": {
12971 13613 "version": "0.3.1",
12972 13614 "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
... ... @@ -13337,6 +13979,13 @@
13337 13979 "url": "https://github.com/sponsors/sindresorhus"
13338 13980 }
13339 13981 },
  13982 + "node_modules/is-utf8": {
  13983 + "version": "0.2.1",
  13984 + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
  13985 + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
  13986 + "dev": true,
  13987 + "peer": true
  13988 + },
13340 13989 "node_modules/is-weakmap": {
13341 13990 "version": "2.0.1",
13342 13991 "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
... ... @@ -13373,6 +14022,17 @@
13373 14022 "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
13374 14023 "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA=="
13375 14024 },
  14025 + "node_modules/is-windows": {
  14026 + "version": "1.0.2",
  14027 + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
  14028 + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
  14029 + "dev": true,
  14030 + "optional": true,
  14031 + "peer": true,
  14032 + "engines": {
  14033 + "node": ">=0.10.0"
  14034 + }
  14035 + },
13376 14036 "node_modules/is-wsl": {
13377 14037 "version": "2.2.0",
13378 14038 "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
... ... @@ -13817,6 +14477,13 @@
13817 14477 "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
13818 14478 "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
13819 14479 },
  14480 + "node_modules/json-loader": {
  14481 + "version": "0.5.7",
  14482 + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
  14483 + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==",
  14484 + "dev": true,
  14485 + "peer": true
  14486 + },
13820 14487 "node_modules/json-parse-better-errors": {
13821 14488 "version": "1.0.2",
13822 14489 "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
... ... @@ -13833,11 +14500,37 @@
13833 14500 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
13834 14501 "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
13835 14502 },
  14503 + "node_modules/json-stable-stringify": {
  14504 + "version": "1.1.1",
  14505 + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz",
  14506 + "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==",
  14507 + "dev": true,
  14508 + "peer": true,
  14509 + "dependencies": {
  14510 + "call-bind": "^1.0.5",
  14511 + "isarray": "^2.0.5",
  14512 + "jsonify": "^0.0.1",
  14513 + "object-keys": "^1.1.1"
  14514 + },
  14515 + "engines": {
  14516 + "node": ">= 0.4"
  14517 + },
  14518 + "funding": {
  14519 + "url": "https://github.com/sponsors/ljharb"
  14520 + }
  14521 + },
13836 14522 "node_modules/json-stable-stringify-without-jsonify": {
13837 14523 "version": "1.0.1",
13838 14524 "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
13839 14525 "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
13840 14526 },
  14527 + "node_modules/json-stable-stringify/node_modules/isarray": {
  14528 + "version": "2.0.5",
  14529 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
  14530 + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
  14531 + "dev": true,
  14532 + "peer": true
  14533 + },
13841 14534 "node_modules/json-stringify-pretty-compact": {
13842 14535 "version": "3.0.0",
13843 14536 "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz",
... ... @@ -13882,6 +14575,16 @@
13882 14575 "graceful-fs": "^4.1.6"
13883 14576 }
13884 14577 },
  14578 + "node_modules/jsonify": {
  14579 + "version": "0.0.1",
  14580 + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
  14581 + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
  14582 + "dev": true,
  14583 + "peer": true,
  14584 + "funding": {
  14585 + "url": "https://github.com/sponsors/ljharb"
  14586 + }
  14587 + },
13885 14588 "node_modules/jsx-ast-utils": {
13886 14589 "version": "3.3.5",
13887 14590 "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
... ... @@ -13896,6 +14599,21 @@
13896 14599 "node": ">=4.0"
13897 14600 }
13898 14601 },
  14602 + "node_modules/jszip": {
  14603 + "version": "2.5.0",
  14604 + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.5.0.tgz",
  14605 + "integrity": "sha512-IRoyf8JSYY3nx+uyh5xPc0qdy8pUDTp2UkHOWYNF/IO/3D8nx7899UlSAjD8rf8wUgOmm0lACWx/GbW3EaxIXQ==",
  14606 + "dev": true,
  14607 + "dependencies": {
  14608 + "pako": "~0.2.5"
  14609 + }
  14610 + },
  14611 + "node_modules/jszip/node_modules/pako": {
  14612 + "version": "0.2.9",
  14613 + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
  14614 + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
  14615 + "dev": true
  14616 + },
13899 14617 "node_modules/kdbush": {
13900 14618 "version": "4.0.2",
13901 14619 "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz",
... ... @@ -13944,6 +14662,19 @@
13944 14662 "node": ">=0.10.0"
13945 14663 }
13946 14664 },
  14665 + "node_modules/lcid": {
  14666 + "version": "1.0.0",
  14667 + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
  14668 + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
  14669 + "dev": true,
  14670 + "peer": true,
  14671 + "dependencies": {
  14672 + "invert-kv": "^1.0.0"
  14673 + },
  14674 + "engines": {
  14675 + "node": ">=0.10.0"
  14676 + }
  14677 + },
13947 14678 "node_modules/less": {
13948 14679 "version": "4.1.3",
13949 14680 "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz",
... ... @@ -14363,6 +15094,49 @@
14363 15094 "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
14364 15095 }
14365 15096 },
  15097 + "node_modules/load-json-file": {
  15098 + "version": "1.1.0",
  15099 + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
  15100 + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
  15101 + "dev": true,
  15102 + "peer": true,
  15103 + "dependencies": {
  15104 + "graceful-fs": "^4.1.2",
  15105 + "parse-json": "^2.2.0",
  15106 + "pify": "^2.0.0",
  15107 + "pinkie-promise": "^2.0.0",
  15108 + "strip-bom": "^2.0.0"
  15109 + },
  15110 + "engines": {
  15111 + "node": ">=0.10.0"
  15112 + }
  15113 + },
  15114 + "node_modules/load-json-file/node_modules/parse-json": {
  15115 + "version": "2.2.0",
  15116 + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
  15117 + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
  15118 + "dev": true,
  15119 + "peer": true,
  15120 + "dependencies": {
  15121 + "error-ex": "^1.2.0"
  15122 + },
  15123 + "engines": {
  15124 + "node": ">=0.10.0"
  15125 + }
  15126 + },
  15127 + "node_modules/load-json-file/node_modules/strip-bom": {
  15128 + "version": "2.0.0",
  15129 + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
  15130 + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
  15131 + "dev": true,
  15132 + "peer": true,
  15133 + "dependencies": {
  15134 + "is-utf8": "^0.2.0"
  15135 + },
  15136 + "engines": {
  15137 + "node": ">=0.10.0"
  15138 + }
  15139 + },
14366 15140 "node_modules/loader-runner": {
14367 15141 "version": "4.3.0",
14368 15142 "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
... ... @@ -14654,6 +15428,23 @@
14654 15428 "loose-envify": "cli.js"
14655 15429 }
14656 15430 },
  15431 + "node_modules/lop": {
  15432 + "version": "0.4.1",
  15433 + "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.1.tgz",
  15434 + "integrity": "sha512-9xyho9why2A2tzm5aIcMWKvzqKsnxrf9B5I+8O30olh6lQU8PH978LqZoI4++37RBgS1Em5i54v1TFs/3wnmXQ==",
  15435 + "dev": true,
  15436 + "dependencies": {
  15437 + "duck": "^0.1.12",
  15438 + "option": "~0.2.1",
  15439 + "underscore": "^1.13.1"
  15440 + }
  15441 + },
  15442 + "node_modules/lop/node_modules/underscore": {
  15443 + "version": "1.13.6",
  15444 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
  15445 + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
  15446 + "dev": true
  15447 + },
14657 15448 "node_modules/lower-case": {
14658 15449 "version": "2.0.2",
14659 15450 "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
... ... @@ -14714,6 +15505,40 @@
14714 15505 "tmpl": "1.0.5"
14715 15506 }
14716 15507 },
  15508 + "node_modules/mammoth": {
  15509 + "version": "1.3.6",
  15510 + "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.3.6.tgz",
  15511 + "integrity": "sha512-hr1HqQg49PAcFDsj1RMHo2l+fxEVocUTbJ37kGoUIV1mt6dn2Wd7T381NdHagnvQ1Jblv0E+BtghEVnxd0sqwQ==",
  15512 + "dev": true,
  15513 + "dependencies": {
  15514 + "argparse": "~1.0.3",
  15515 + "bluebird": "~3.4.0",
  15516 + "jszip": "~2.5.0",
  15517 + "lop": "~0.4.0",
  15518 + "path-is-absolute": "^1.0.0",
  15519 + "sax": "~1.1.1",
  15520 + "underscore": "~1.6.0",
  15521 + "xmlbuilder": "~2.6.4"
  15522 + },
  15523 + "bin": {
  15524 + "mammoth": "bin/mammoth"
  15525 + }
  15526 + },
  15527 + "node_modules/mammoth/node_modules/argparse": {
  15528 + "version": "1.0.10",
  15529 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
  15530 + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
  15531 + "dev": true,
  15532 + "dependencies": {
  15533 + "sprintf-js": "~1.0.2"
  15534 + }
  15535 + },
  15536 + "node_modules/mammoth/node_modules/sax": {
  15537 + "version": "1.1.6",
  15538 + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.6.tgz",
  15539 + "integrity": "sha512-8zci48uUQyfqynGDSkUMD7FCJB96hwLnlZOXlgs1l3TX+LW27t3psSWKUxC0fxVgA86i8tL4NwGcY1h/6t3ESg==",
  15540 + "dev": true
  15541 + },
14717 15542 "node_modules/mana-common": {
14718 15543 "version": "0.3.2",
14719 15544 "resolved": "https://registry.npmjs.org/mana-common/-/mana-common-0.3.2.tgz",
... ... @@ -14727,6 +15552,17 @@
14727 15552 "inversify": "^5.0.1"
14728 15553 }
14729 15554 },
  15555 + "node_modules/map-cache": {
  15556 + "version": "0.2.2",
  15557 + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
  15558 + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
  15559 + "dev": true,
  15560 + "optional": true,
  15561 + "peer": true,
  15562 + "engines": {
  15563 + "node": ">=0.10.0"
  15564 + }
  15565 + },
14730 15566 "node_modules/map-obj": {
14731 15567 "version": "4.3.0",
14732 15568 "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
... ... @@ -14738,6 +15574,20 @@
14738 15574 "url": "https://github.com/sponsors/sindresorhus"
14739 15575 }
14740 15576 },
  15577 + "node_modules/map-visit": {
  15578 + "version": "1.0.0",
  15579 + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
  15580 + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
  15581 + "dev": true,
  15582 + "optional": true,
  15583 + "peer": true,
  15584 + "dependencies": {
  15585 + "object-visit": "^1.0.0"
  15586 + },
  15587 + "engines": {
  15588 + "node": ">=0.10.0"
  15589 + }
  15590 + },
14741 15591 "node_modules/mapbox-gl": {
14742 15592 "version": "1.13.3",
14743 15593 "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.13.3.tgz",
... ... @@ -14872,6 +15722,17 @@
14872 15722 "node": ">= 4.0.0"
14873 15723 }
14874 15724 },
  15725 + "node_modules/memory-fs": {
  15726 + "version": "0.4.1",
  15727 + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
  15728 + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==",
  15729 + "dev": true,
  15730 + "peer": true,
  15731 + "dependencies": {
  15732 + "errno": "^0.1.3",
  15733 + "readable-stream": "^2.0.1"
  15734 + }
  15735 + },
14875 15736 "node_modules/meow": {
14876 15737 "version": "9.0.0",
14877 15738 "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
... ... @@ -15059,6 +15920,35 @@
15059 15920 "node": ">= 6"
15060 15921 }
15061 15922 },
  15923 + "node_modules/mixin-deep": {
  15924 + "version": "1.3.2",
  15925 + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
  15926 + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
  15927 + "dev": true,
  15928 + "optional": true,
  15929 + "peer": true,
  15930 + "dependencies": {
  15931 + "for-in": "^1.0.2",
  15932 + "is-extendable": "^1.0.1"
  15933 + },
  15934 + "engines": {
  15935 + "node": ">=0.10.0"
  15936 + }
  15937 + },
  15938 + "node_modules/mixin-deep/node_modules/is-extendable": {
  15939 + "version": "1.0.1",
  15940 + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
  15941 + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
  15942 + "dev": true,
  15943 + "optional": true,
  15944 + "peer": true,
  15945 + "dependencies": {
  15946 + "is-plain-object": "^2.0.4"
  15947 + },
  15948 + "engines": {
  15949 + "node": ">=0.10.0"
  15950 + }
  15951 + },
15062 15952 "node_modules/mkdirp": {
15063 15953 "version": "1.0.4",
15064 15954 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
... ... @@ -15181,6 +16071,14 @@
15181 16071 "thenify-all": "^1.0.0"
15182 16072 }
15183 16073 },
  16074 + "node_modules/nan": {
  16075 + "version": "2.19.0",
  16076 + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz",
  16077 + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==",
  16078 + "dev": true,
  16079 + "optional": true,
  16080 + "peer": true
  16081 + },
15184 16082 "node_modules/nano-css": {
15185 16083 "version": "5.6.1",
15186 16084 "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.6.1.tgz",
... ... @@ -15217,6 +16115,89 @@
15217 16115 "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
15218 16116 }
15219 16117 },
  16118 + "node_modules/nanomatch": {
  16119 + "version": "1.2.13",
  16120 + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
  16121 + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
  16122 + "dev": true,
  16123 + "optional": true,
  16124 + "peer": true,
  16125 + "dependencies": {
  16126 + "arr-diff": "^4.0.0",
  16127 + "array-unique": "^0.3.2",
  16128 + "define-property": "^2.0.2",
  16129 + "extend-shallow": "^3.0.2",
  16130 + "fragment-cache": "^0.2.1",
  16131 + "is-windows": "^1.0.2",
  16132 + "kind-of": "^6.0.2",
  16133 + "object.pick": "^1.3.0",
  16134 + "regex-not": "^1.0.0",
  16135 + "snapdragon": "^0.8.1",
  16136 + "to-regex": "^3.0.1"
  16137 + },
  16138 + "engines": {
  16139 + "node": ">=0.10.0"
  16140 + }
  16141 + },
  16142 + "node_modules/nanomatch/node_modules/define-property": {
  16143 + "version": "2.0.2",
  16144 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
  16145 + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
  16146 + "dev": true,
  16147 + "optional": true,
  16148 + "peer": true,
  16149 + "dependencies": {
  16150 + "is-descriptor": "^1.0.2",
  16151 + "isobject": "^3.0.1"
  16152 + },
  16153 + "engines": {
  16154 + "node": ">=0.10.0"
  16155 + }
  16156 + },
  16157 + "node_modules/nanomatch/node_modules/extend-shallow": {
  16158 + "version": "3.0.2",
  16159 + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
  16160 + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
  16161 + "dev": true,
  16162 + "optional": true,
  16163 + "peer": true,
  16164 + "dependencies": {
  16165 + "assign-symbols": "^1.0.0",
  16166 + "is-extendable": "^1.0.1"
  16167 + },
  16168 + "engines": {
  16169 + "node": ">=0.10.0"
  16170 + }
  16171 + },
  16172 + "node_modules/nanomatch/node_modules/is-descriptor": {
  16173 + "version": "1.0.3",
  16174 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  16175 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  16176 + "dev": true,
  16177 + "optional": true,
  16178 + "peer": true,
  16179 + "dependencies": {
  16180 + "is-accessor-descriptor": "^1.0.1",
  16181 + "is-data-descriptor": "^1.0.1"
  16182 + },
  16183 + "engines": {
  16184 + "node": ">= 0.4"
  16185 + }
  16186 + },
  16187 + "node_modules/nanomatch/node_modules/is-extendable": {
  16188 + "version": "1.0.1",
  16189 + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
  16190 + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
  16191 + "dev": true,
  16192 + "optional": true,
  16193 + "peer": true,
  16194 + "dependencies": {
  16195 + "is-plain-object": "^2.0.4"
  16196 + },
  16197 + "engines": {
  16198 + "node": ">=0.10.0"
  16199 + }
  16200 + },
15220 16201 "node_modules/natural-compare": {
15221 16202 "version": "1.4.0",
15222 16203 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
... ... @@ -15298,6 +16279,12 @@
15298 16279 "node": ">=10.5.0"
15299 16280 }
15300 16281 },
  16282 + "node_modules/node-ensure": {
  16283 + "version": "0.0.0",
  16284 + "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz",
  16285 + "integrity": "sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw==",
  16286 + "dev": true
  16287 + },
15301 16288 "node_modules/node-fetch": {
15302 16289 "version": "2.7.0",
15303 16290 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
... ... @@ -15510,6 +16497,16 @@
15510 16497 "url": "https://github.com/fb55/nth-check?sponsor=1"
15511 16498 }
15512 16499 },
  16500 + "node_modules/number-is-nan": {
  16501 + "version": "1.0.1",
  16502 + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
  16503 + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
  16504 + "dev": true,
  16505 + "peer": true,
  16506 + "engines": {
  16507 + "node": ">=0.10.0"
  16508 + }
  16509 + },
15513 16510 "node_modules/object-assign": {
15514 16511 "version": "4.1.1",
15515 16512 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
... ... @@ -15518,6 +16515,36 @@
15518 16515 "node": ">=0.10.0"
15519 16516 }
15520 16517 },
  16518 + "node_modules/object-copy": {
  16519 + "version": "0.1.0",
  16520 + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
  16521 + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
  16522 + "dev": true,
  16523 + "optional": true,
  16524 + "peer": true,
  16525 + "dependencies": {
  16526 + "copy-descriptor": "^0.1.0",
  16527 + "define-property": "^0.2.5",
  16528 + "kind-of": "^3.0.3"
  16529 + },
  16530 + "engines": {
  16531 + "node": ">=0.10.0"
  16532 + }
  16533 + },
  16534 + "node_modules/object-copy/node_modules/kind-of": {
  16535 + "version": "3.2.2",
  16536 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  16537 + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
  16538 + "dev": true,
  16539 + "optional": true,
  16540 + "peer": true,
  16541 + "dependencies": {
  16542 + "is-buffer": "^1.1.5"
  16543 + },
  16544 + "engines": {
  16545 + "node": ">=0.10.0"
  16546 + }
  16547 + },
15521 16548 "node_modules/object-hash": {
15522 16549 "version": "3.0.0",
15523 16550 "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
... ... @@ -15558,6 +16585,20 @@
15558 16585 "node": ">= 0.4"
15559 16586 }
15560 16587 },
  16588 + "node_modules/object-visit": {
  16589 + "version": "1.0.1",
  16590 + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
  16591 + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
  16592 + "dev": true,
  16593 + "optional": true,
  16594 + "peer": true,
  16595 + "dependencies": {
  16596 + "isobject": "^3.0.0"
  16597 + },
  16598 + "engines": {
  16599 + "node": ">=0.10.0"
  16600 + }
  16601 + },
15561 16602 "node_modules/object.assign": {
15562 16603 "version": "4.1.5",
15563 16604 "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
... ... @@ -15633,6 +16674,20 @@
15633 16674 "url": "https://github.com/sponsors/ljharb"
15634 16675 }
15635 16676 },
  16677 + "node_modules/object.pick": {
  16678 + "version": "1.3.0",
  16679 + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
  16680 + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
  16681 + "dev": true,
  16682 + "optional": true,
  16683 + "peer": true,
  16684 + "dependencies": {
  16685 + "isobject": "^3.0.1"
  16686 + },
  16687 + "engines": {
  16688 + "node": ">=0.10.0"
  16689 + }
  16690 + },
15636 16691 "node_modules/object.values": {
15637 16692 "version": "1.1.7",
15638 16693 "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
... ... @@ -15717,6 +16772,12 @@
15717 16772 "opener": "bin/opener-bin.js"
15718 16773 }
15719 16774 },
  16775 + "node_modules/option": {
  16776 + "version": "0.2.4",
  16777 + "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz",
  16778 + "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==",
  16779 + "dev": true
  16780 + },
15720 16781 "node_modules/optionator": {
15721 16782 "version": "0.9.3",
15722 16783 "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
... ... @@ -15872,6 +16933,19 @@
15872 16933 "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
15873 16934 "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A=="
15874 16935 },
  16936 + "node_modules/os-locale": {
  16937 + "version": "1.4.0",
  16938 + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
  16939 + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
  16940 + "dev": true,
  16941 + "peer": true,
  16942 + "dependencies": {
  16943 + "lcid": "^1.0.0"
  16944 + },
  16945 + "engines": {
  16946 + "node": ">=0.10.0"
  16947 + }
  16948 + },
15875 16949 "node_modules/os-tmpdir": {
15876 16950 "version": "1.0.2",
15877 16951 "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
... ... @@ -16039,12 +17113,31 @@
16039 17113 "tslib": "^2.0.3"
16040 17114 }
16041 17115 },
  17116 + "node_modules/pascalcase": {
  17117 + "version": "0.1.1",
  17118 + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
  17119 + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
  17120 + "dev": true,
  17121 + "optional": true,
  17122 + "peer": true,
  17123 + "engines": {
  17124 + "node": ">=0.10.0"
  17125 + }
  17126 + },
16042 17127 "node_modules/path-browserify": {
16043 17128 "version": "1.0.1",
16044 17129 "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
16045 17130 "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
16046 17131 "dev": true
16047 17132 },
  17133 + "node_modules/path-dirname": {
  17134 + "version": "1.0.2",
  17135 + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
  17136 + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
  17137 + "dev": true,
  17138 + "optional": true,
  17139 + "peer": true
  17140 + },
16048 17141 "node_modules/path-exists": {
16049 17142 "version": "4.0.0",
16050 17143 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
... ... @@ -16256,6 +17349,17 @@
16256 17349 "polyline-miter-util": "^1.0.1"
16257 17350 }
16258 17351 },
  17352 + "node_modules/posix-character-classes": {
  17353 + "version": "0.1.1",
  17354 + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
  17355 + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
  17356 + "dev": true,
  17357 + "optional": true,
  17358 + "peer": true,
  17359 + "engines": {
  17360 + "node": ">=0.10.0"
  17361 + }
  17362 + },
16259 17363 "node_modules/possible-typed-array-names": {
16260 17364 "version": "1.0.0",
16261 17365 "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
... ... @@ -17092,6 +18196,18 @@
17092 18196 "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.6.0.tgz",
17093 18197 "integrity": "sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg=="
17094 18198 },
  18199 + "node_modules/printj": {
  18200 + "version": "1.1.2",
  18201 + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
  18202 + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==",
  18203 + "dev": true,
  18204 + "bin": {
  18205 + "printj": "bin/printj.njs"
  18206 + },
  18207 + "engines": {
  18208 + "node": ">=0.8"
  18209 + }
  18210 + },
17095 18211 "node_modules/probe.gl": {
17096 18212 "version": "3.6.0",
17097 18213 "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.6.0.tgz",
... ... @@ -17179,7 +18295,7 @@
17179 18295 "version": "1.0.1",
17180 18296 "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
17181 18297 "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
17182   - "optional": true
  18298 + "devOptional": true
17183 18299 },
17184 18300 "node_modules/public-encrypt": {
17185 18301 "version": "4.0.3",
... ... @@ -17994,6 +19110,632 @@
17994 19110 "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
17995 19111 "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
17996 19112 },
  19113 + "node_modules/react-file-viewer": {
  19114 + "version": "1.2.1",
  19115 + "resolved": "https://registry.npmjs.org/react-file-viewer/-/react-file-viewer-1.2.1.tgz",
  19116 + "integrity": "sha512-Hq9irsKkmXNGUOk7FBH/z/Lph4mpp3R4ySnGzhs3UEFVvHExuKhp9qPfoXUJjt/kQI5Qtrj1Y5r/fpDGkSrFyQ==",
  19117 + "dev": true,
  19118 + "dependencies": {
  19119 + "comma-separated-values": "^3.6.4",
  19120 + "mammoth": "1.3.6",
  19121 + "pdfjs-dist": "1.8.357",
  19122 + "prop-types": "^15.5.10",
  19123 + "react-data-grid": "^5.0.5",
  19124 + "react-visibility-sensor": "^5.0.2",
  19125 + "three": "0.85.2",
  19126 + "xlsx": "^0.10.1"
  19127 + },
  19128 + "peerDependencies": {
  19129 + "react": "^16.6.3",
  19130 + "react-dom": "^16.6.3"
  19131 + }
  19132 + },
  19133 + "node_modules/react-file-viewer/node_modules/acorn": {
  19134 + "version": "5.7.4",
  19135 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
  19136 + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
  19137 + "dev": true,
  19138 + "peer": true,
  19139 + "bin": {
  19140 + "acorn": "bin/acorn"
  19141 + },
  19142 + "engines": {
  19143 + "node": ">=0.4.0"
  19144 + }
  19145 + },
  19146 + "node_modules/react-file-viewer/node_modules/ajv": {
  19147 + "version": "4.11.8",
  19148 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
  19149 + "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==",
  19150 + "dev": true,
  19151 + "peer": true,
  19152 + "dependencies": {
  19153 + "co": "^4.6.0",
  19154 + "json-stable-stringify": "^1.0.1"
  19155 + }
  19156 + },
  19157 + "node_modules/react-file-viewer/node_modules/ajv-keywords": {
  19158 + "version": "1.5.1",
  19159 + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
  19160 + "integrity": "sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA==",
  19161 + "dev": true,
  19162 + "peer": true,
  19163 + "peerDependencies": {
  19164 + "ajv": ">=4.10.0"
  19165 + }
  19166 + },
  19167 + "node_modules/react-file-viewer/node_modules/ansi-regex": {
  19168 + "version": "2.1.1",
  19169 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
  19170 + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
  19171 + "dev": true,
  19172 + "peer": true,
  19173 + "engines": {
  19174 + "node": ">=0.10.0"
  19175 + }
  19176 + },
  19177 + "node_modules/react-file-viewer/node_modules/async": {
  19178 + "version": "2.6.4",
  19179 + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
  19180 + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
  19181 + "dev": true,
  19182 + "peer": true,
  19183 + "dependencies": {
  19184 + "lodash": "^4.17.14"
  19185 + }
  19186 + },
  19187 + "node_modules/react-file-viewer/node_modules/big.js": {
  19188 + "version": "3.2.0",
  19189 + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
  19190 + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
  19191 + "dev": true,
  19192 + "peer": true,
  19193 + "engines": {
  19194 + "node": "*"
  19195 + }
  19196 + },
  19197 + "node_modules/react-file-viewer/node_modules/camelcase": {
  19198 + "version": "3.0.0",
  19199 + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
  19200 + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==",
  19201 + "dev": true,
  19202 + "peer": true,
  19203 + "engines": {
  19204 + "node": ">=0.10.0"
  19205 + }
  19206 + },
  19207 + "node_modules/react-file-viewer/node_modules/cliui": {
  19208 + "version": "3.2.0",
  19209 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
  19210 + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
  19211 + "dev": true,
  19212 + "peer": true,
  19213 + "dependencies": {
  19214 + "string-width": "^1.0.1",
  19215 + "strip-ansi": "^3.0.1",
  19216 + "wrap-ansi": "^2.0.0"
  19217 + }
  19218 + },
  19219 + "node_modules/react-file-viewer/node_modules/emojis-list": {
  19220 + "version": "2.1.0",
  19221 + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
  19222 + "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==",
  19223 + "dev": true,
  19224 + "peer": true,
  19225 + "engines": {
  19226 + "node": ">= 0.10"
  19227 + }
  19228 + },
  19229 + "node_modules/react-file-viewer/node_modules/enhanced-resolve": {
  19230 + "version": "3.4.1",
  19231 + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
  19232 + "integrity": "sha512-ZaAux1rigq1e2nQrztHn4h2ugvpzZxs64qneNah+8Mh/K0CRqJFJc+UoXnUsq+1yX+DmQFPPdVqboKAJ89e0Iw==",
  19233 + "dev": true,
  19234 + "peer": true,
  19235 + "dependencies": {
  19236 + "graceful-fs": "^4.1.2",
  19237 + "memory-fs": "^0.4.0",
  19238 + "object-assign": "^4.0.1",
  19239 + "tapable": "^0.2.7"
  19240 + },
  19241 + "engines": {
  19242 + "node": ">=4.3.0 <5.0.0 || >=5.10"
  19243 + }
  19244 + },
  19245 + "node_modules/react-file-viewer/node_modules/fast-deep-equal": {
  19246 + "version": "1.1.0",
  19247 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
  19248 + "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==",
  19249 + "dev": true
  19250 + },
  19251 + "node_modules/react-file-viewer/node_modules/find-up": {
  19252 + "version": "1.1.2",
  19253 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
  19254 + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
  19255 + "dev": true,
  19256 + "peer": true,
  19257 + "dependencies": {
  19258 + "path-exists": "^2.0.0",
  19259 + "pinkie-promise": "^2.0.0"
  19260 + },
  19261 + "engines": {
  19262 + "node": ">=0.10.0"
  19263 + }
  19264 + },
  19265 + "node_modules/react-file-viewer/node_modules/get-caller-file": {
  19266 + "version": "1.0.3",
  19267 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
  19268 + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
  19269 + "dev": true,
  19270 + "peer": true
  19271 + },
  19272 + "node_modules/react-file-viewer/node_modules/has-flag": {
  19273 + "version": "1.0.0",
  19274 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
  19275 + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
  19276 + "dev": true,
  19277 + "peer": true,
  19278 + "engines": {
  19279 + "node": ">=0.10.0"
  19280 + }
  19281 + },
  19282 + "node_modules/react-file-viewer/node_modules/hosted-git-info": {
  19283 + "version": "2.8.9",
  19284 + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
  19285 + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
  19286 + "dev": true,
  19287 + "peer": true
  19288 + },
  19289 + "node_modules/react-file-viewer/node_modules/is-fullwidth-code-point": {
  19290 + "version": "1.0.0",
  19291 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
  19292 + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
  19293 + "dev": true,
  19294 + "peer": true,
  19295 + "dependencies": {
  19296 + "number-is-nan": "^1.0.0"
  19297 + },
  19298 + "engines": {
  19299 + "node": ">=0.10.0"
  19300 + }
  19301 + },
  19302 + "node_modules/react-file-viewer/node_modules/json-schema-traverse": {
  19303 + "version": "0.3.1",
  19304 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
  19305 + "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==",
  19306 + "dev": true
  19307 + },
  19308 + "node_modules/react-file-viewer/node_modules/json5": {
  19309 + "version": "0.5.1",
  19310 + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
  19311 + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==",
  19312 + "dev": true,
  19313 + "peer": true,
  19314 + "bin": {
  19315 + "json5": "lib/cli.js"
  19316 + }
  19317 + },
  19318 + "node_modules/react-file-viewer/node_modules/loader-runner": {
  19319 + "version": "2.4.0",
  19320 + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
  19321 + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
  19322 + "dev": true,
  19323 + "peer": true,
  19324 + "engines": {
  19325 + "node": ">=4.3.0 <5.0.0 || >=5.10"
  19326 + }
  19327 + },
  19328 + "node_modules/react-file-viewer/node_modules/loader-utils": {
  19329 + "version": "0.2.17",
  19330 + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
  19331 + "integrity": "sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==",
  19332 + "dev": true,
  19333 + "peer": true,
  19334 + "dependencies": {
  19335 + "big.js": "^3.1.3",
  19336 + "emojis-list": "^2.0.0",
  19337 + "json5": "^0.5.0",
  19338 + "object-assign": "^4.0.1"
  19339 + }
  19340 + },
  19341 + "node_modules/react-file-viewer/node_modules/mkdirp": {
  19342 + "version": "0.5.6",
  19343 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
  19344 + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
  19345 + "dev": true,
  19346 + "peer": true,
  19347 + "dependencies": {
  19348 + "minimist": "^1.2.6"
  19349 + },
  19350 + "bin": {
  19351 + "mkdirp": "bin/cmd.js"
  19352 + }
  19353 + },
  19354 + "node_modules/react-file-viewer/node_modules/normalize-package-data": {
  19355 + "version": "2.5.0",
  19356 + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
  19357 + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
  19358 + "dev": true,
  19359 + "peer": true,
  19360 + "dependencies": {
  19361 + "hosted-git-info": "^2.1.4",
  19362 + "resolve": "^1.10.0",
  19363 + "semver": "2 || 3 || 4 || 5",
  19364 + "validate-npm-package-license": "^3.0.1"
  19365 + }
  19366 + },
  19367 + "node_modules/react-file-viewer/node_modules/path-exists": {
  19368 + "version": "2.1.0",
  19369 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
  19370 + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
  19371 + "dev": true,
  19372 + "peer": true,
  19373 + "dependencies": {
  19374 + "pinkie-promise": "^2.0.0"
  19375 + },
  19376 + "engines": {
  19377 + "node": ">=0.10.0"
  19378 + }
  19379 + },
  19380 + "node_modules/react-file-viewer/node_modules/path-type": {
  19381 + "version": "1.1.0",
  19382 + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
  19383 + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
  19384 + "dev": true,
  19385 + "peer": true,
  19386 + "dependencies": {
  19387 + "graceful-fs": "^4.1.2",
  19388 + "pify": "^2.0.0",
  19389 + "pinkie-promise": "^2.0.0"
  19390 + },
  19391 + "engines": {
  19392 + "node": ">=0.10.0"
  19393 + }
  19394 + },
  19395 + "node_modules/react-file-viewer/node_modules/pdfjs-dist": {
  19396 + "version": "1.8.357",
  19397 + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-1.8.357.tgz",
  19398 + "integrity": "sha512-ampPgu+QHnreVkCebVprhKvFX7Z+K5Zf5vQdFc7d48pzJgg9//lv4mjpZbrX+j5nSocrbEZZPnyHdN/5zjf39w==",
  19399 + "dev": true,
  19400 + "dependencies": {
  19401 + "node-ensure": "^0.0.0",
  19402 + "worker-loader": "^0.8.0"
  19403 + }
  19404 + },
  19405 + "node_modules/react-file-viewer/node_modules/react-data-grid": {
  19406 + "version": "5.0.5",
  19407 + "resolved": "https://registry.npmjs.org/react-data-grid/-/react-data-grid-5.0.5.tgz",
  19408 + "integrity": "sha512-OR4LDoOpN4yj3NexaxYFS2OEIYFUk2V5lascPTHgtTMwwkb163tEPqQSertkv2YAJu+YBzIm8epW8+UMip1LPw==",
  19409 + "dev": true,
  19410 + "peerDependencies": {
  19411 + "react": "^15.0.0 || ^16.0.0",
  19412 + "react-dom": "^15.0.0 || ^16.0.0"
  19413 + }
  19414 + },
  19415 + "node_modules/react-file-viewer/node_modules/read-pkg": {
  19416 + "version": "1.1.0",
  19417 + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
  19418 + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
  19419 + "dev": true,
  19420 + "peer": true,
  19421 + "dependencies": {
  19422 + "load-json-file": "^1.0.0",
  19423 + "normalize-package-data": "^2.3.2",
  19424 + "path-type": "^1.0.0"
  19425 + },
  19426 + "engines": {
  19427 + "node": ">=0.10.0"
  19428 + }
  19429 + },
  19430 + "node_modules/react-file-viewer/node_modules/read-pkg-up": {
  19431 + "version": "1.0.1",
  19432 + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
  19433 + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
  19434 + "dev": true,
  19435 + "peer": true,
  19436 + "dependencies": {
  19437 + "find-up": "^1.0.0",
  19438 + "read-pkg": "^1.0.0"
  19439 + },
  19440 + "engines": {
  19441 + "node": ">=0.10.0"
  19442 + }
  19443 + },
  19444 + "node_modules/react-file-viewer/node_modules/resolve": {
  19445 + "version": "1.22.8",
  19446 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
  19447 + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
  19448 + "dev": true,
  19449 + "peer": true,
  19450 + "dependencies": {
  19451 + "is-core-module": "^2.13.0",
  19452 + "path-parse": "^1.0.7",
  19453 + "supports-preserve-symlinks-flag": "^1.0.0"
  19454 + },
  19455 + "bin": {
  19456 + "resolve": "bin/resolve"
  19457 + },
  19458 + "funding": {
  19459 + "url": "https://github.com/sponsors/ljharb"
  19460 + }
  19461 + },
  19462 + "node_modules/react-file-viewer/node_modules/schema-utils": {
  19463 + "version": "0.3.0",
  19464 + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
  19465 + "integrity": "sha512-QaVYBaD9U8scJw2EBWnCBY+LJ0AD+/2edTaigDs0XLDLBfJmSUK9KGqktg1rb32U3z4j/XwvFwHHH1YfbYFd7Q==",
  19466 + "dev": true,
  19467 + "dependencies": {
  19468 + "ajv": "^5.0.0"
  19469 + },
  19470 + "engines": {
  19471 + "node": ">= 4.3 < 5.0.0 || >= 5.10"
  19472 + }
  19473 + },
  19474 + "node_modules/react-file-viewer/node_modules/schema-utils/node_modules/ajv": {
  19475 + "version": "5.5.2",
  19476 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
  19477 + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==",
  19478 + "dev": true,
  19479 + "dependencies": {
  19480 + "co": "^4.6.0",
  19481 + "fast-deep-equal": "^1.0.0",
  19482 + "fast-json-stable-stringify": "^2.0.0",
  19483 + "json-schema-traverse": "^0.3.0"
  19484 + }
  19485 + },
  19486 + "node_modules/react-file-viewer/node_modules/semver": {
  19487 + "version": "5.7.2",
  19488 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
  19489 + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
  19490 + "dev": true,
  19491 + "peer": true,
  19492 + "bin": {
  19493 + "semver": "bin/semver"
  19494 + }
  19495 + },
  19496 + "node_modules/react-file-viewer/node_modules/source-map": {
  19497 + "version": "0.5.7",
  19498 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
  19499 + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
  19500 + "dev": true,
  19501 + "peer": true,
  19502 + "engines": {
  19503 + "node": ">=0.10.0"
  19504 + }
  19505 + },
  19506 + "node_modules/react-file-viewer/node_modules/string-width": {
  19507 + "version": "1.0.2",
  19508 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
  19509 + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
  19510 + "dev": true,
  19511 + "peer": true,
  19512 + "dependencies": {
  19513 + "code-point-at": "^1.0.0",
  19514 + "is-fullwidth-code-point": "^1.0.0",
  19515 + "strip-ansi": "^3.0.0"
  19516 + },
  19517 + "engines": {
  19518 + "node": ">=0.10.0"
  19519 + }
  19520 + },
  19521 + "node_modules/react-file-viewer/node_modules/strip-ansi": {
  19522 + "version": "3.0.1",
  19523 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
  19524 + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
  19525 + "dev": true,
  19526 + "peer": true,
  19527 + "dependencies": {
  19528 + "ansi-regex": "^2.0.0"
  19529 + },
  19530 + "engines": {
  19531 + "node": ">=0.10.0"
  19532 + }
  19533 + },
  19534 + "node_modules/react-file-viewer/node_modules/supports-color": {
  19535 + "version": "3.2.3",
  19536 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
  19537 + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
  19538 + "dev": true,
  19539 + "peer": true,
  19540 + "dependencies": {
  19541 + "has-flag": "^1.0.0"
  19542 + },
  19543 + "engines": {
  19544 + "node": ">=0.8.0"
  19545 + }
  19546 + },
  19547 + "node_modules/react-file-viewer/node_modules/tapable": {
  19548 + "version": "0.2.9",
  19549 + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz",
  19550 + "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==",
  19551 + "dev": true,
  19552 + "peer": true,
  19553 + "engines": {
  19554 + "node": ">=0.6"
  19555 + }
  19556 + },
  19557 + "node_modules/react-file-viewer/node_modules/watchpack": {
  19558 + "version": "1.7.5",
  19559 + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
  19560 + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
  19561 + "dev": true,
  19562 + "peer": true,
  19563 + "dependencies": {
  19564 + "graceful-fs": "^4.1.2",
  19565 + "neo-async": "^2.5.0"
  19566 + },
  19567 + "optionalDependencies": {
  19568 + "chokidar": "^3.4.1",
  19569 + "watchpack-chokidar2": "^2.0.1"
  19570 + }
  19571 + },
  19572 + "node_modules/react-file-viewer/node_modules/webpack": {
  19573 + "version": "2.7.0",
  19574 + "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz",
  19575 + "integrity": "sha512-MjAA0ZqO1ba7ZQJRnoCdbM56mmFpipOPUv/vQpwwfSI42p5PVDdoiuK2AL2FwFUVgT859Jr43bFZXRg/LNsqvg==",
  19576 + "dev": true,
  19577 + "peer": true,
  19578 + "dependencies": {
  19579 + "acorn": "^5.0.0",
  19580 + "acorn-dynamic-import": "^2.0.0",
  19581 + "ajv": "^4.7.0",
  19582 + "ajv-keywords": "^1.1.1",
  19583 + "async": "^2.1.2",
  19584 + "enhanced-resolve": "^3.3.0",
  19585 + "interpret": "^1.0.0",
  19586 + "json-loader": "^0.5.4",
  19587 + "json5": "^0.5.1",
  19588 + "loader-runner": "^2.3.0",
  19589 + "loader-utils": "^0.2.16",
  19590 + "memory-fs": "~0.4.1",
  19591 + "mkdirp": "~0.5.0",
  19592 + "node-libs-browser": "^2.0.0",
  19593 + "source-map": "^0.5.3",
  19594 + "supports-color": "^3.1.0",
  19595 + "tapable": "~0.2.5",
  19596 + "uglify-js": "^2.8.27",
  19597 + "watchpack": "^1.3.1",
  19598 + "webpack-sources": "^1.0.1",
  19599 + "yargs": "^6.0.0"
  19600 + },
  19601 + "bin": {
  19602 + "webpack": "bin/webpack.js"
  19603 + },
  19604 + "engines": {
  19605 + "node": ">=4.3.0 <5.0.0 || >=5.10"
  19606 + }
  19607 + },
  19608 + "node_modules/react-file-viewer/node_modules/webpack-sources": {
  19609 + "version": "1.4.3",
  19610 + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
  19611 + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
  19612 + "dev": true,
  19613 + "peer": true,
  19614 + "dependencies": {
  19615 + "source-list-map": "^2.0.0",
  19616 + "source-map": "~0.6.1"
  19617 + }
  19618 + },
  19619 + "node_modules/react-file-viewer/node_modules/webpack-sources/node_modules/source-map": {
  19620 + "version": "0.6.1",
  19621 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
  19622 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
  19623 + "dev": true,
  19624 + "peer": true,
  19625 + "engines": {
  19626 + "node": ">=0.10.0"
  19627 + }
  19628 + },
  19629 + "node_modules/react-file-viewer/node_modules/worker-loader": {
  19630 + "version": "0.8.1",
  19631 + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-0.8.1.tgz",
  19632 + "integrity": "sha512-kEFCTNqlJvwOWCHCJeuOl/X2Np28cTKmY5CIpW/B23N2ndMno5Fswz7x/hvilutKoc4i5eedFf0BJ/3V/KPHaw==",
  19633 + "dev": true,
  19634 + "dependencies": {
  19635 + "loader-utils": "^1.0.2",
  19636 + "schema-utils": "^0.3.0"
  19637 + },
  19638 + "peerDependencies": {
  19639 + "webpack": ">=0.9 <2 || ^2.1.0-beta || ^2.2.0"
  19640 + }
  19641 + },
  19642 + "node_modules/react-file-viewer/node_modules/worker-loader/node_modules/big.js": {
  19643 + "version": "5.2.2",
  19644 + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
  19645 + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
  19646 + "dev": true,
  19647 + "engines": {
  19648 + "node": "*"
  19649 + }
  19650 + },
  19651 + "node_modules/react-file-viewer/node_modules/worker-loader/node_modules/emojis-list": {
  19652 + "version": "3.0.0",
  19653 + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
  19654 + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
  19655 + "dev": true,
  19656 + "engines": {
  19657 + "node": ">= 4"
  19658 + }
  19659 + },
  19660 + "node_modules/react-file-viewer/node_modules/worker-loader/node_modules/json5": {
  19661 + "version": "1.0.2",
  19662 + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
  19663 + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
  19664 + "dev": true,
  19665 + "dependencies": {
  19666 + "minimist": "^1.2.0"
  19667 + },
  19668 + "bin": {
  19669 + "json5": "lib/cli.js"
  19670 + }
  19671 + },
  19672 + "node_modules/react-file-viewer/node_modules/worker-loader/node_modules/loader-utils": {
  19673 + "version": "1.4.2",
  19674 + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
  19675 + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
  19676 + "dev": true,
  19677 + "dependencies": {
  19678 + "big.js": "^5.2.2",
  19679 + "emojis-list": "^3.0.0",
  19680 + "json5": "^1.0.1"
  19681 + },
  19682 + "engines": {
  19683 + "node": ">=4.0.0"
  19684 + }
  19685 + },
  19686 + "node_modules/react-file-viewer/node_modules/wrap-ansi": {
  19687 + "version": "2.1.0",
  19688 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
  19689 + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
  19690 + "dev": true,
  19691 + "peer": true,
  19692 + "dependencies": {
  19693 + "string-width": "^1.0.1",
  19694 + "strip-ansi": "^3.0.1"
  19695 + },
  19696 + "engines": {
  19697 + "node": ">=0.10.0"
  19698 + }
  19699 + },
  19700 + "node_modules/react-file-viewer/node_modules/y18n": {
  19701 + "version": "3.2.2",
  19702 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
  19703 + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
  19704 + "dev": true,
  19705 + "peer": true
  19706 + },
  19707 + "node_modules/react-file-viewer/node_modules/yargs": {
  19708 + "version": "6.6.0",
  19709 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
  19710 + "integrity": "sha512-6/QWTdisjnu5UHUzQGst+UOEuEVwIzFVGBjq3jMTFNs5WJQsH/X6nMURSaScIdF5txylr1Ao9bvbWiKi2yXbwA==",
  19711 + "dev": true,
  19712 + "peer": true,
  19713 + "dependencies": {
  19714 + "camelcase": "^3.0.0",
  19715 + "cliui": "^3.2.0",
  19716 + "decamelize": "^1.1.1",
  19717 + "get-caller-file": "^1.0.1",
  19718 + "os-locale": "^1.4.0",
  19719 + "read-pkg-up": "^1.0.1",
  19720 + "require-directory": "^2.1.1",
  19721 + "require-main-filename": "^1.0.1",
  19722 + "set-blocking": "^2.0.0",
  19723 + "string-width": "^1.0.2",
  19724 + "which-module": "^1.0.0",
  19725 + "y18n": "^3.2.1",
  19726 + "yargs-parser": "^4.2.0"
  19727 + }
  19728 + },
  19729 + "node_modules/react-file-viewer/node_modules/yargs-parser": {
  19730 + "version": "4.2.1",
  19731 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
  19732 + "integrity": "sha512-+QQWqC2xeL0N5/TE+TY6OGEqyNRM+g2/r712PDNYgiCdXYCApXf1vzfmDSLBxfGRwV+moTq/V8FnMI24JCm2Yg==",
  19733 + "dev": true,
  19734 + "peer": true,
  19735 + "dependencies": {
  19736 + "camelcase": "^3.0.0"
  19737 + }
  19738 + },
17997 19739 "node_modules/react-helmet-async": {
17998 19740 "version": "1.3.0",
17999 19741 "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz",
... ... @@ -18183,6 +19925,19 @@
18183 19925 "node": ">=10"
18184 19926 }
18185 19927 },
  19928 + "node_modules/react-visibility-sensor": {
  19929 + "version": "5.1.1",
  19930 + "resolved": "https://registry.npmjs.org/react-visibility-sensor/-/react-visibility-sensor-5.1.1.tgz",
  19931 + "integrity": "sha512-cTUHqIK+zDYpeK19rzW6zF9YfT4486TIgizZW53wEZ+/GPBbK7cNS0EHyJVyHYacwFEvvHLEKfgJndbemWhB/w==",
  19932 + "dev": true,
  19933 + "dependencies": {
  19934 + "prop-types": "^15.7.2"
  19935 + },
  19936 + "peerDependencies": {
  19937 + "react": ">=16.0.0",
  19938 + "react-dom": ">=16.0.0"
  19939 + }
  19940 + },
18186 19941 "node_modules/reactcss": {
18187 19942 "version": "1.2.3",
18188 19943 "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz",
... ... @@ -18443,6 +20198,50 @@
18443 20198 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
18444 20199 "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
18445 20200 },
  20201 + "node_modules/regex-not": {
  20202 + "version": "1.0.2",
  20203 + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
  20204 + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
  20205 + "dev": true,
  20206 + "optional": true,
  20207 + "peer": true,
  20208 + "dependencies": {
  20209 + "extend-shallow": "^3.0.2",
  20210 + "safe-regex": "^1.1.0"
  20211 + },
  20212 + "engines": {
  20213 + "node": ">=0.10.0"
  20214 + }
  20215 + },
  20216 + "node_modules/regex-not/node_modules/extend-shallow": {
  20217 + "version": "3.0.2",
  20218 + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
  20219 + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
  20220 + "dev": true,
  20221 + "optional": true,
  20222 + "peer": true,
  20223 + "dependencies": {
  20224 + "assign-symbols": "^1.0.0",
  20225 + "is-extendable": "^1.0.1"
  20226 + },
  20227 + "engines": {
  20228 + "node": ">=0.10.0"
  20229 + }
  20230 + },
  20231 + "node_modules/regex-not/node_modules/is-extendable": {
  20232 + "version": "1.0.1",
  20233 + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
  20234 + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
  20235 + "dev": true,
  20236 + "optional": true,
  20237 + "peer": true,
  20238 + "dependencies": {
  20239 + "is-plain-object": "^2.0.4"
  20240 + },
  20241 + "engines": {
  20242 + "node": ">=0.10.0"
  20243 + }
  20244 + },
18446 20245 "node_modules/regexp.prototype.flags": {
18447 20246 "version": "1.5.2",
18448 20247 "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
... ... @@ -18489,6 +20288,14 @@
18489 20288 "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz",
18490 20289 "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA=="
18491 20290 },
  20291 + "node_modules/remove-trailing-separator": {
  20292 + "version": "1.1.0",
  20293 + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
  20294 + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
  20295 + "dev": true,
  20296 + "optional": true,
  20297 + "peer": true
  20298 + },
18492 20299 "node_modules/renderkid": {
18493 20300 "version": "3.0.0",
18494 20301 "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz",
... ... @@ -18501,6 +20308,17 @@
18501 20308 "strip-ansi": "^6.0.1"
18502 20309 }
18503 20310 },
  20311 + "node_modules/repeat-element": {
  20312 + "version": "1.1.4",
  20313 + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
  20314 + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
  20315 + "dev": true,
  20316 + "optional": true,
  20317 + "peer": true,
  20318 + "engines": {
  20319 + "node": ">=0.10.0"
  20320 + }
  20321 + },
18504 20322 "node_modules/repeat-string": {
18505 20323 "version": "1.6.1",
18506 20324 "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
... ... @@ -18525,6 +20343,13 @@
18525 20343 "node": ">=0.10.0"
18526 20344 }
18527 20345 },
  20346 + "node_modules/require-main-filename": {
  20347 + "version": "1.0.1",
  20348 + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
  20349 + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==",
  20350 + "dev": true,
  20351 + "peer": true
  20352 + },
18528 20353 "node_modules/resize-observer-polyfill": {
18529 20354 "version": "1.5.1",
18530 20355 "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
... ... @@ -18576,6 +20401,15 @@
18576 20401 "protocol-buffers-schema": "^3.3.1"
18577 20402 }
18578 20403 },
  20404 + "node_modules/resolve-url": {
  20405 + "version": "0.2.1",
  20406 + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
  20407 + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
  20408 + "deprecated": "https://github.com/lydell/resolve-url#deprecated",
  20409 + "dev": true,
  20410 + "optional": true,
  20411 + "peer": true
  20412 + },
18579 20413 "node_modules/responselike": {
18580 20414 "version": "1.0.2",
18581 20415 "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
... ... @@ -18628,6 +20462,17 @@
18628 20462 "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
18629 20463 "dev": true
18630 20464 },
  20465 + "node_modules/ret": {
  20466 + "version": "0.1.15",
  20467 + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
  20468 + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
  20469 + "dev": true,
  20470 + "optional": true,
  20471 + "peer": true,
  20472 + "engines": {
  20473 + "node": ">=0.12"
  20474 + }
  20475 + },
18631 20476 "node_modules/reusify": {
18632 20477 "version": "1.0.4",
18633 20478 "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
... ... @@ -18966,6 +20811,17 @@
18966 20811 }
18967 20812 ]
18968 20813 },
  20814 + "node_modules/safe-regex": {
  20815 + "version": "1.1.0",
  20816 + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
  20817 + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
  20818 + "dev": true,
  20819 + "optional": true,
  20820 + "peer": true,
  20821 + "dependencies": {
  20822 + "ret": "~0.1.10"
  20823 + }
  20824 + },
18969 20825 "node_modules/safe-regex-test": {
18970 20826 "version": "1.0.3",
18971 20827 "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
... ... @@ -19088,6 +20944,13 @@
19088 20944 "randombytes": "^2.1.0"
19089 20945 }
19090 20946 },
  20947 + "node_modules/set-blocking": {
  20948 + "version": "2.0.0",
  20949 + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
  20950 + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
  20951 + "dev": true,
  20952 + "peer": true
  20953 + },
19091 20954 "node_modules/set-function-length": {
19092 20955 "version": "1.2.1",
19093 20956 "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
... ... @@ -19276,6 +21139,130 @@
19276 21139 "url": "https://github.com/chalk/slice-ansi?sponsor=1"
19277 21140 }
19278 21141 },
  21142 + "node_modules/snapdragon": {
  21143 + "version": "0.8.2",
  21144 + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
  21145 + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
  21146 + "dev": true,
  21147 + "optional": true,
  21148 + "peer": true,
  21149 + "dependencies": {
  21150 + "base": "^0.11.1",
  21151 + "debug": "^2.2.0",
  21152 + "define-property": "^0.2.5",
  21153 + "extend-shallow": "^2.0.1",
  21154 + "map-cache": "^0.2.2",
  21155 + "source-map": "^0.5.6",
  21156 + "source-map-resolve": "^0.5.0",
  21157 + "use": "^3.1.0"
  21158 + },
  21159 + "engines": {
  21160 + "node": ">=0.10.0"
  21161 + }
  21162 + },
  21163 + "node_modules/snapdragon-node": {
  21164 + "version": "2.1.1",
  21165 + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
  21166 + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
  21167 + "dev": true,
  21168 + "optional": true,
  21169 + "peer": true,
  21170 + "dependencies": {
  21171 + "define-property": "^1.0.0",
  21172 + "isobject": "^3.0.0",
  21173 + "snapdragon-util": "^3.0.1"
  21174 + },
  21175 + "engines": {
  21176 + "node": ">=0.10.0"
  21177 + }
  21178 + },
  21179 + "node_modules/snapdragon-node/node_modules/define-property": {
  21180 + "version": "1.0.0",
  21181 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
  21182 + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
  21183 + "dev": true,
  21184 + "optional": true,
  21185 + "peer": true,
  21186 + "dependencies": {
  21187 + "is-descriptor": "^1.0.0"
  21188 + },
  21189 + "engines": {
  21190 + "node": ">=0.10.0"
  21191 + }
  21192 + },
  21193 + "node_modules/snapdragon-node/node_modules/is-descriptor": {
  21194 + "version": "1.0.3",
  21195 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  21196 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  21197 + "dev": true,
  21198 + "optional": true,
  21199 + "peer": true,
  21200 + "dependencies": {
  21201 + "is-accessor-descriptor": "^1.0.1",
  21202 + "is-data-descriptor": "^1.0.1"
  21203 + },
  21204 + "engines": {
  21205 + "node": ">= 0.4"
  21206 + }
  21207 + },
  21208 + "node_modules/snapdragon-util": {
  21209 + "version": "3.0.1",
  21210 + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
  21211 + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
  21212 + "dev": true,
  21213 + "optional": true,
  21214 + "peer": true,
  21215 + "dependencies": {
  21216 + "kind-of": "^3.2.0"
  21217 + },
  21218 + "engines": {
  21219 + "node": ">=0.10.0"
  21220 + }
  21221 + },
  21222 + "node_modules/snapdragon-util/node_modules/kind-of": {
  21223 + "version": "3.2.2",
  21224 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  21225 + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
  21226 + "dev": true,
  21227 + "optional": true,
  21228 + "peer": true,
  21229 + "dependencies": {
  21230 + "is-buffer": "^1.1.5"
  21231 + },
  21232 + "engines": {
  21233 + "node": ">=0.10.0"
  21234 + }
  21235 + },
  21236 + "node_modules/snapdragon/node_modules/debug": {
  21237 + "version": "2.6.9",
  21238 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  21239 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  21240 + "dev": true,
  21241 + "optional": true,
  21242 + "peer": true,
  21243 + "dependencies": {
  21244 + "ms": "2.0.0"
  21245 + }
  21246 + },
  21247 + "node_modules/snapdragon/node_modules/ms": {
  21248 + "version": "2.0.0",
  21249 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  21250 + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
  21251 + "dev": true,
  21252 + "optional": true,
  21253 + "peer": true
  21254 + },
  21255 + "node_modules/snapdragon/node_modules/source-map": {
  21256 + "version": "0.5.7",
  21257 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
  21258 + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
  21259 + "dev": true,
  21260 + "optional": true,
  21261 + "peer": true,
  21262 + "engines": {
  21263 + "node": ">=0.10.0"
  21264 + }
  21265 + },
19279 21266 "node_modules/sonic-boom": {
19280 21267 "version": "2.8.0",
19281 21268 "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz",
... ... @@ -19418,6 +21405,13 @@
19418 21405 "url": "https://github.com/sponsors/sindresorhus"
19419 21406 }
19420 21407 },
  21408 + "node_modules/source-list-map": {
  21409 + "version": "2.0.1",
  21410 + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
  21411 + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
  21412 + "dev": true,
  21413 + "peer": true
  21414 + },
19421 21415 "node_modules/source-map": {
19422 21416 "version": "0.7.4",
19423 21417 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
... ... @@ -19434,6 +21428,22 @@
19434 21428 "node": ">=0.10.0"
19435 21429 }
19436 21430 },
  21431 + "node_modules/source-map-resolve": {
  21432 + "version": "0.5.3",
  21433 + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
  21434 + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
  21435 + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
  21436 + "dev": true,
  21437 + "optional": true,
  21438 + "peer": true,
  21439 + "dependencies": {
  21440 + "atob": "^2.1.2",
  21441 + "decode-uri-component": "^0.2.0",
  21442 + "resolve-url": "^0.2.1",
  21443 + "source-map-url": "^0.4.0",
  21444 + "urix": "^0.1.0"
  21445 + }
  21446 + },
19437 21447 "node_modules/source-map-support": {
19438 21448 "version": "0.5.21",
19439 21449 "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
... ... @@ -19451,6 +21461,15 @@
19451 21461 "node": ">=0.10.0"
19452 21462 }
19453 21463 },
  21464 + "node_modules/source-map-url": {
  21465 + "version": "0.4.1",
  21466 + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
  21467 + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
  21468 + "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
  21469 + "dev": true,
  21470 + "optional": true,
  21471 + "peer": true
  21472 + },
19454 21473 "node_modules/spdx-correct": {
19455 21474 "version": "3.2.0",
19456 21475 "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
... ... @@ -19594,6 +21613,21 @@
19594 21613 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
19595 21614 "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
19596 21615 },
  21616 + "node_modules/ssf": {
  21617 + "version": "0.10.3",
  21618 + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.3.tgz",
  21619 + "integrity": "sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w==",
  21620 + "dev": true,
  21621 + "dependencies": {
  21622 + "frac": "~1.1.2"
  21623 + },
  21624 + "bin": {
  21625 + "ssf": "bin/ssf.njs"
  21626 + },
  21627 + "engines": {
  21628 + "node": ">=0.8"
  21629 + }
  21630 + },
19597 21631 "node_modules/stable": {
19598 21632 "version": "0.1.8",
19599 21633 "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
... ... @@ -19640,6 +21674,21 @@
19640 21674 "stacktrace-gps": "^3.0.4"
19641 21675 }
19642 21676 },
  21677 + "node_modules/static-extend": {
  21678 + "version": "0.1.2",
  21679 + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
  21680 + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
  21681 + "dev": true,
  21682 + "optional": true,
  21683 + "peer": true,
  21684 + "dependencies": {
  21685 + "define-property": "^0.2.5",
  21686 + "object-copy": "^0.1.0"
  21687 + },
  21688 + "engines": {
  21689 + "node": ">=0.10.0"
  21690 + }
  21691 + },
19643 21692 "node_modules/stdin-discarder": {
19644 21693 "version": "0.1.0",
19645 21694 "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz",
... ... @@ -20639,6 +22688,12 @@
20639 22688 "real-require": "^0.1.0"
20640 22689 }
20641 22690 },
  22691 + "node_modules/three": {
  22692 + "version": "0.85.2",
  22693 + "resolved": "https://registry.npmjs.org/three/-/three-0.85.2.tgz",
  22694 + "integrity": "sha512-7WdXWM+kk12xkNhbplmeKiujCmD+9ouvpbq4en1xrKvgIM8PX7j34EM2sjS72spf+KaMSqDYhX+ce3ZgvSZ1RQ==",
  22695 + "dev": true
  22696 + },
20642 22697 "node_modules/throttle-debounce": {
20643 22698 "version": "5.0.0",
20644 22699 "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz",
... ... @@ -20752,6 +22807,34 @@
20752 22807 "node": ">=4"
20753 22808 }
20754 22809 },
  22810 + "node_modules/to-object-path": {
  22811 + "version": "0.3.0",
  22812 + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
  22813 + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
  22814 + "dev": true,
  22815 + "optional": true,
  22816 + "peer": true,
  22817 + "dependencies": {
  22818 + "kind-of": "^3.0.2"
  22819 + },
  22820 + "engines": {
  22821 + "node": ">=0.10.0"
  22822 + }
  22823 + },
  22824 + "node_modules/to-object-path/node_modules/kind-of": {
  22825 + "version": "3.2.2",
  22826 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  22827 + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
  22828 + "dev": true,
  22829 + "optional": true,
  22830 + "peer": true,
  22831 + "dependencies": {
  22832 + "is-buffer": "^1.1.5"
  22833 + },
  22834 + "engines": {
  22835 + "node": ">=0.10.0"
  22836 + }
  22837 + },
20755 22838 "node_modules/to-readable-stream": {
20756 22839 "version": "1.0.0",
20757 22840 "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
... ... @@ -20761,6 +22844,23 @@
20761 22844 "node": ">=6"
20762 22845 }
20763 22846 },
  22847 + "node_modules/to-regex": {
  22848 + "version": "3.0.2",
  22849 + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
  22850 + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
  22851 + "dev": true,
  22852 + "optional": true,
  22853 + "peer": true,
  22854 + "dependencies": {
  22855 + "define-property": "^2.0.2",
  22856 + "extend-shallow": "^3.0.2",
  22857 + "regex-not": "^1.0.2",
  22858 + "safe-regex": "^1.1.0"
  22859 + },
  22860 + "engines": {
  22861 + "node": ">=0.10.0"
  22862 + }
  22863 + },
20764 22864 "node_modules/to-regex-range": {
20765 22865 "version": "5.0.1",
20766 22866 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
... ... @@ -20772,6 +22872,65 @@
20772 22872 "node": ">=8.0"
20773 22873 }
20774 22874 },
  22875 + "node_modules/to-regex/node_modules/define-property": {
  22876 + "version": "2.0.2",
  22877 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
  22878 + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
  22879 + "dev": true,
  22880 + "optional": true,
  22881 + "peer": true,
  22882 + "dependencies": {
  22883 + "is-descriptor": "^1.0.2",
  22884 + "isobject": "^3.0.1"
  22885 + },
  22886 + "engines": {
  22887 + "node": ">=0.10.0"
  22888 + }
  22889 + },
  22890 + "node_modules/to-regex/node_modules/extend-shallow": {
  22891 + "version": "3.0.2",
  22892 + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
  22893 + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
  22894 + "dev": true,
  22895 + "optional": true,
  22896 + "peer": true,
  22897 + "dependencies": {
  22898 + "assign-symbols": "^1.0.0",
  22899 + "is-extendable": "^1.0.1"
  22900 + },
  22901 + "engines": {
  22902 + "node": ">=0.10.0"
  22903 + }
  22904 + },
  22905 + "node_modules/to-regex/node_modules/is-descriptor": {
  22906 + "version": "1.0.3",
  22907 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  22908 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  22909 + "dev": true,
  22910 + "optional": true,
  22911 + "peer": true,
  22912 + "dependencies": {
  22913 + "is-accessor-descriptor": "^1.0.1",
  22914 + "is-data-descriptor": "^1.0.1"
  22915 + },
  22916 + "engines": {
  22917 + "node": ">= 0.4"
  22918 + }
  22919 + },
  22920 + "node_modules/to-regex/node_modules/is-extendable": {
  22921 + "version": "1.0.1",
  22922 + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
  22923 + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
  22924 + "dev": true,
  22925 + "optional": true,
  22926 + "peer": true,
  22927 + "dependencies": {
  22928 + "is-plain-object": "^2.0.4"
  22929 + },
  22930 + "engines": {
  22931 + "node": ">=0.10.0"
  22932 + }
  22933 + },
20775 22934 "node_modules/toggle-selection": {
20776 22935 "version": "1.0.6",
20777 22936 "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
... ... @@ -21924,6 +24083,12 @@
21924 24083 "ieee754": "^1.1.13"
21925 24084 }
21926 24085 },
  24086 + "node_modules/underscore": {
  24087 + "version": "1.6.0",
  24088 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
  24089 + "integrity": "sha512-z4o1fvKUojIWh9XuaVLUDdf86RQiq13AC1dmHbTpoyuu+bquHms76v16CjycCbec87J7z0k//SiQVk0sMdFmpQ==",
  24090 + "dev": true
  24091 + },
21927 24092 "node_modules/undici-types": {
21928 24093 "version": "5.26.5",
21929 24094 "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
... ... @@ -21969,6 +24134,62 @@
21969 24134 "node": ">= 4.0.0"
21970 24135 }
21971 24136 },
  24137 + "node_modules/unset-value": {
  24138 + "version": "1.0.0",
  24139 + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
  24140 + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
  24141 + "dev": true,
  24142 + "optional": true,
  24143 + "peer": true,
  24144 + "dependencies": {
  24145 + "has-value": "^0.3.1",
  24146 + "isobject": "^3.0.0"
  24147 + },
  24148 + "engines": {
  24149 + "node": ">=0.10.0"
  24150 + }
  24151 + },
  24152 + "node_modules/unset-value/node_modules/has-value": {
  24153 + "version": "0.3.1",
  24154 + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
  24155 + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
  24156 + "dev": true,
  24157 + "optional": true,
  24158 + "peer": true,
  24159 + "dependencies": {
  24160 + "get-value": "^2.0.3",
  24161 + "has-values": "^0.1.4",
  24162 + "isobject": "^2.0.0"
  24163 + },
  24164 + "engines": {
  24165 + "node": ">=0.10.0"
  24166 + }
  24167 + },
  24168 + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
  24169 + "version": "2.1.0",
  24170 + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
  24171 + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
  24172 + "dev": true,
  24173 + "optional": true,
  24174 + "peer": true,
  24175 + "dependencies": {
  24176 + "isarray": "1.0.0"
  24177 + },
  24178 + "engines": {
  24179 + "node": ">=0.10.0"
  24180 + }
  24181 + },
  24182 + "node_modules/unset-value/node_modules/has-values": {
  24183 + "version": "0.1.4",
  24184 + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
  24185 + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
  24186 + "dev": true,
  24187 + "optional": true,
  24188 + "peer": true,
  24189 + "engines": {
  24190 + "node": ">=0.10.0"
  24191 + }
  24192 + },
21972 24193 "node_modules/untildify": {
21973 24194 "version": "4.0.0",
21974 24195 "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
... ... @@ -21977,6 +24198,18 @@
21977 24198 "node": ">=8"
21978 24199 }
21979 24200 },
  24201 + "node_modules/upath": {
  24202 + "version": "1.2.0",
  24203 + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
  24204 + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
  24205 + "dev": true,
  24206 + "optional": true,
  24207 + "peer": true,
  24208 + "engines": {
  24209 + "node": ">=4",
  24210 + "yarn": "*"
  24211 + }
  24212 + },
21980 24213 "node_modules/update-browserslist-db": {
21981 24214 "version": "1.0.13",
21982 24215 "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
... ... @@ -22022,6 +24255,15 @@
22022 24255 "node": ">=6"
22023 24256 }
22024 24257 },
  24258 + "node_modules/urix": {
  24259 + "version": "0.1.0",
  24260 + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
  24261 + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
  24262 + "deprecated": "Please see https://github.com/lydell/urix#deprecated",
  24263 + "dev": true,
  24264 + "optional": true,
  24265 + "peer": true
  24266 + },
22025 24267 "node_modules/url": {
22026 24268 "version": "0.11.3",
22027 24269 "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz",
... ... @@ -22058,6 +24300,17 @@
22058 24300 "node": ">= 4"
22059 24301 }
22060 24302 },
  24303 + "node_modules/use": {
  24304 + "version": "3.1.1",
  24305 + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
  24306 + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
  24307 + "dev": true,
  24308 + "optional": true,
  24309 + "peer": true,
  24310 + "engines": {
  24311 + "node": ">=0.10.0"
  24312 + }
  24313 + },
22061 24314 "node_modules/use-isomorphic-layout-effect": {
22062 24315 "version": "1.1.2",
22063 24316 "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
... ... @@ -22229,6 +24482,18 @@
22229 24482 "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
22230 24483 "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
22231 24484 },
  24485 + "node_modules/voc": {
  24486 + "version": "1.0.0",
  24487 + "resolved": "https://registry.npmjs.org/voc/-/voc-1.0.0.tgz",
  24488 + "integrity": "sha512-mQwxWlK+zosxxDTqiFb9ZQBNgd794scgkhVwca7h9sEhvA52f3VzbOK+TOWeS8eSrFXnfuKrxElSPc5oLAetfw==",
  24489 + "dev": true,
  24490 + "bin": {
  24491 + "voc": "voc.njs"
  24492 + },
  24493 + "engines": {
  24494 + "node": ">=0.8"
  24495 + }
  24496 + },
22232 24497 "node_modules/vt-pbf": {
22233 24498 "version": "3.1.3",
22234 24499 "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz",
... ... @@ -22268,6 +24533,323 @@
22268 24533 "node": ">=10.13.0"
22269 24534 }
22270 24535 },
  24536 + "node_modules/watchpack-chokidar2": {
  24537 + "version": "2.0.1",
  24538 + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
  24539 + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
  24540 + "dev": true,
  24541 + "optional": true,
  24542 + "peer": true,
  24543 + "dependencies": {
  24544 + "chokidar": "^2.1.8"
  24545 + }
  24546 + },
  24547 + "node_modules/watchpack-chokidar2/node_modules/anymatch": {
  24548 + "version": "2.0.0",
  24549 + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
  24550 + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
  24551 + "dev": true,
  24552 + "optional": true,
  24553 + "peer": true,
  24554 + "dependencies": {
  24555 + "micromatch": "^3.1.4",
  24556 + "normalize-path": "^2.1.1"
  24557 + }
  24558 + },
  24559 + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": {
  24560 + "version": "2.1.1",
  24561 + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
  24562 + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
  24563 + "dev": true,
  24564 + "optional": true,
  24565 + "peer": true,
  24566 + "dependencies": {
  24567 + "remove-trailing-separator": "^1.0.1"
  24568 + },
  24569 + "engines": {
  24570 + "node": ">=0.10.0"
  24571 + }
  24572 + },
  24573 + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": {
  24574 + "version": "1.13.1",
  24575 + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
  24576 + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
  24577 + "dev": true,
  24578 + "optional": true,
  24579 + "peer": true,
  24580 + "engines": {
  24581 + "node": ">=0.10.0"
  24582 + }
  24583 + },
  24584 + "node_modules/watchpack-chokidar2/node_modules/braces": {
  24585 + "version": "2.3.2",
  24586 + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
  24587 + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
  24588 + "dev": true,
  24589 + "optional": true,
  24590 + "peer": true,
  24591 + "dependencies": {
  24592 + "arr-flatten": "^1.1.0",
  24593 + "array-unique": "^0.3.2",
  24594 + "extend-shallow": "^2.0.1",
  24595 + "fill-range": "^4.0.0",
  24596 + "isobject": "^3.0.1",
  24597 + "repeat-element": "^1.1.2",
  24598 + "snapdragon": "^0.8.1",
  24599 + "snapdragon-node": "^2.0.1",
  24600 + "split-string": "^3.0.2",
  24601 + "to-regex": "^3.0.1"
  24602 + },
  24603 + "engines": {
  24604 + "node": ">=0.10.0"
  24605 + }
  24606 + },
  24607 + "node_modules/watchpack-chokidar2/node_modules/chokidar": {
  24608 + "version": "2.1.8",
  24609 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
  24610 + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
  24611 + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
  24612 + "dev": true,
  24613 + "optional": true,
  24614 + "peer": true,
  24615 + "dependencies": {
  24616 + "anymatch": "^2.0.0",
  24617 + "async-each": "^1.0.1",
  24618 + "braces": "^2.3.2",
  24619 + "glob-parent": "^3.1.0",
  24620 + "inherits": "^2.0.3",
  24621 + "is-binary-path": "^1.0.0",
  24622 + "is-glob": "^4.0.0",
  24623 + "normalize-path": "^3.0.0",
  24624 + "path-is-absolute": "^1.0.0",
  24625 + "readdirp": "^2.2.1",
  24626 + "upath": "^1.1.1"
  24627 + },
  24628 + "optionalDependencies": {
  24629 + "fsevents": "^1.2.7"
  24630 + }
  24631 + },
  24632 + "node_modules/watchpack-chokidar2/node_modules/define-property": {
  24633 + "version": "2.0.2",
  24634 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
  24635 + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
  24636 + "dev": true,
  24637 + "optional": true,
  24638 + "peer": true,
  24639 + "dependencies": {
  24640 + "is-descriptor": "^1.0.2",
  24641 + "isobject": "^3.0.1"
  24642 + },
  24643 + "engines": {
  24644 + "node": ">=0.10.0"
  24645 + }
  24646 + },
  24647 + "node_modules/watchpack-chokidar2/node_modules/fill-range": {
  24648 + "version": "4.0.0",
  24649 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
  24650 + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
  24651 + "dev": true,
  24652 + "optional": true,
  24653 + "peer": true,
  24654 + "dependencies": {
  24655 + "extend-shallow": "^2.0.1",
  24656 + "is-number": "^3.0.0",
  24657 + "repeat-string": "^1.6.1",
  24658 + "to-regex-range": "^2.1.0"
  24659 + },
  24660 + "engines": {
  24661 + "node": ">=0.10.0"
  24662 + }
  24663 + },
  24664 + "node_modules/watchpack-chokidar2/node_modules/fsevents": {
  24665 + "version": "1.2.13",
  24666 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
  24667 + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
  24668 + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2",
  24669 + "dev": true,
  24670 + "hasInstallScript": true,
  24671 + "optional": true,
  24672 + "os": [
  24673 + "darwin"
  24674 + ],
  24675 + "peer": true,
  24676 + "dependencies": {
  24677 + "bindings": "^1.5.0",
  24678 + "nan": "^2.12.1"
  24679 + },
  24680 + "engines": {
  24681 + "node": ">= 4.0"
  24682 + }
  24683 + },
  24684 + "node_modules/watchpack-chokidar2/node_modules/glob-parent": {
  24685 + "version": "3.1.0",
  24686 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
  24687 + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
  24688 + "dev": true,
  24689 + "optional": true,
  24690 + "peer": true,
  24691 + "dependencies": {
  24692 + "is-glob": "^3.1.0",
  24693 + "path-dirname": "^1.0.0"
  24694 + }
  24695 + },
  24696 + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": {
  24697 + "version": "3.1.0",
  24698 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
  24699 + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
  24700 + "dev": true,
  24701 + "optional": true,
  24702 + "peer": true,
  24703 + "dependencies": {
  24704 + "is-extglob": "^2.1.0"
  24705 + },
  24706 + "engines": {
  24707 + "node": ">=0.10.0"
  24708 + }
  24709 + },
  24710 + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": {
  24711 + "version": "1.0.1",
  24712 + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
  24713 + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
  24714 + "dev": true,
  24715 + "optional": true,
  24716 + "peer": true,
  24717 + "dependencies": {
  24718 + "binary-extensions": "^1.0.0"
  24719 + },
  24720 + "engines": {
  24721 + "node": ">=0.10.0"
  24722 + }
  24723 + },
  24724 + "node_modules/watchpack-chokidar2/node_modules/is-descriptor": {
  24725 + "version": "1.0.3",
  24726 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  24727 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  24728 + "dev": true,
  24729 + "optional": true,
  24730 + "peer": true,
  24731 + "dependencies": {
  24732 + "is-accessor-descriptor": "^1.0.1",
  24733 + "is-data-descriptor": "^1.0.1"
  24734 + },
  24735 + "engines": {
  24736 + "node": ">= 0.4"
  24737 + }
  24738 + },
  24739 + "node_modules/watchpack-chokidar2/node_modules/is-extendable": {
  24740 + "version": "1.0.1",
  24741 + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
  24742 + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
  24743 + "dev": true,
  24744 + "optional": true,
  24745 + "peer": true,
  24746 + "dependencies": {
  24747 + "is-plain-object": "^2.0.4"
  24748 + },
  24749 + "engines": {
  24750 + "node": ">=0.10.0"
  24751 + }
  24752 + },
  24753 + "node_modules/watchpack-chokidar2/node_modules/is-number": {
  24754 + "version": "3.0.0",
  24755 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
  24756 + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
  24757 + "dev": true,
  24758 + "optional": true,
  24759 + "peer": true,
  24760 + "dependencies": {
  24761 + "kind-of": "^3.0.2"
  24762 + },
  24763 + "engines": {
  24764 + "node": ">=0.10.0"
  24765 + }
  24766 + },
  24767 + "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": {
  24768 + "version": "3.2.2",
  24769 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  24770 + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
  24771 + "dev": true,
  24772 + "optional": true,
  24773 + "peer": true,
  24774 + "dependencies": {
  24775 + "is-buffer": "^1.1.5"
  24776 + },
  24777 + "engines": {
  24778 + "node": ">=0.10.0"
  24779 + }
  24780 + },
  24781 + "node_modules/watchpack-chokidar2/node_modules/micromatch": {
  24782 + "version": "3.1.10",
  24783 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
  24784 + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
  24785 + "dev": true,
  24786 + "optional": true,
  24787 + "peer": true,
  24788 + "dependencies": {
  24789 + "arr-diff": "^4.0.0",
  24790 + "array-unique": "^0.3.2",
  24791 + "braces": "^2.3.1",
  24792 + "define-property": "^2.0.2",
  24793 + "extend-shallow": "^3.0.2",
  24794 + "extglob": "^2.0.4",
  24795 + "fragment-cache": "^0.2.1",
  24796 + "kind-of": "^6.0.2",
  24797 + "nanomatch": "^1.2.9",
  24798 + "object.pick": "^1.3.0",
  24799 + "regex-not": "^1.0.0",
  24800 + "snapdragon": "^0.8.1",
  24801 + "to-regex": "^3.0.2"
  24802 + },
  24803 + "engines": {
  24804 + "node": ">=0.10.0"
  24805 + }
  24806 + },
  24807 + "node_modules/watchpack-chokidar2/node_modules/micromatch/node_modules/extend-shallow": {
  24808 + "version": "3.0.2",
  24809 + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
  24810 + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
  24811 + "dev": true,
  24812 + "optional": true,
  24813 + "peer": true,
  24814 + "dependencies": {
  24815 + "assign-symbols": "^1.0.0",
  24816 + "is-extendable": "^1.0.1"
  24817 + },
  24818 + "engines": {
  24819 + "node": ">=0.10.0"
  24820 + }
  24821 + },
  24822 + "node_modules/watchpack-chokidar2/node_modules/readdirp": {
  24823 + "version": "2.2.1",
  24824 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
  24825 + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
  24826 + "dev": true,
  24827 + "optional": true,
  24828 + "peer": true,
  24829 + "dependencies": {
  24830 + "graceful-fs": "^4.1.11",
  24831 + "micromatch": "^3.1.10",
  24832 + "readable-stream": "^2.0.2"
  24833 + },
  24834 + "engines": {
  24835 + "node": ">=0.10"
  24836 + }
  24837 + },
  24838 + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": {
  24839 + "version": "2.1.1",
  24840 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
  24841 + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
  24842 + "dev": true,
  24843 + "optional": true,
  24844 + "peer": true,
  24845 + "dependencies": {
  24846 + "is-number": "^3.0.0",
  24847 + "repeat-string": "^1.6.1"
  24848 + },
  24849 + "engines": {
  24850 + "node": ">=0.10.0"
  24851 + }
  24852 + },
22271 24853 "node_modules/wbuf": {
22272 24854 "version": "1.7.3",
22273 24855 "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
... ... @@ -22504,6 +25086,13 @@
22504 25086 "url": "https://github.com/sponsors/ljharb"
22505 25087 }
22506 25088 },
  25089 + "node_modules/which-module": {
  25090 + "version": "1.0.0",
  25091 + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
  25092 + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==",
  25093 + "dev": true,
  25094 + "peer": true
  25095 + },
22507 25096 "node_modules/which-typed-array": {
22508 25097 "version": "1.1.14",
22509 25098 "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
... ... @@ -22636,6 +25225,52 @@
22636 25225 "node": ">=8"
22637 25226 }
22638 25227 },
  25228 + "node_modules/xlsx": {
  25229 + "version": "0.10.9",
  25230 + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.10.9.tgz",
  25231 + "integrity": "sha512-XZrdkPmoZt8qPpVmuKNe7EYXyckvBArwFI7SMKiqdXz9ZAXRWx6EFMKpGTyiKklPzRsm2n4cmzADinPIlPi1Jg==",
  25232 + "deprecated": "this version is no longer supported. More info at https://cdn.sheetjs.com/xlsx/",
  25233 + "dev": true,
  25234 + "dependencies": {
  25235 + "adler-32": "~1.1.0",
  25236 + "cfb": "~0.12.0",
  25237 + "codepage": "~1.10.1",
  25238 + "commander": "~2.11.0",
  25239 + "crc-32": "~1.1.0",
  25240 + "exit-on-epipe": "~1.0.1",
  25241 + "ssf": "~0.10.0"
  25242 + },
  25243 + "bin": {
  25244 + "xlsx": "bin/xlsx.njs"
  25245 + },
  25246 + "engines": {
  25247 + "node": ">=0.8"
  25248 + }
  25249 + },
  25250 + "node_modules/xlsx/node_modules/commander": {
  25251 + "version": "2.11.0",
  25252 + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
  25253 + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
  25254 + "dev": true
  25255 + },
  25256 + "node_modules/xmlbuilder": {
  25257 + "version": "2.6.5",
  25258 + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.6.5.tgz",
  25259 + "integrity": "sha512-Ehby0RBBPAQAef3zP1636SPzwcfepVu69dmyCMkFioYOw/a6CULZbkRn8MCsVFzakt3+Zv23hecYdEsps9fRBQ==",
  25260 + "dev": true,
  25261 + "dependencies": {
  25262 + "lodash": "^3.5.0"
  25263 + },
  25264 + "engines": {
  25265 + "node": ">=0.8.0"
  25266 + }
  25267 + },
  25268 + "node_modules/xmlbuilder/node_modules/lodash": {
  25269 + "version": "3.10.1",
  25270 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
  25271 + "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==",
  25272 + "dev": true
  25273 + },
22639 25274 "node_modules/xtend": {
22640 25275 "version": "4.0.2",
22641 25276 "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
... ... @@ -28095,6 +30730,25 @@
28095 30730 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
28096 30731 "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w=="
28097 30732 },
  30733 + "acorn-dynamic-import": {
  30734 + "version": "2.0.2",
  30735 + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
  30736 + "integrity": "sha512-GKp5tQ8h0KMPWIYGRHHXI1s5tUpZixZ3IHF2jAu42wSCf6In/G873s6/y4DdKdhWvzhu1T6mE1JgvnhAKqyYYQ==",
  30737 + "dev": true,
  30738 + "peer": true,
  30739 + "requires": {
  30740 + "acorn": "^4.0.3"
  30741 + },
  30742 + "dependencies": {
  30743 + "acorn": {
  30744 + "version": "4.0.13",
  30745 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
  30746 + "integrity": "sha512-fu2ygVGuMmlzG8ZeRJ0bvR41nsAkxxhbyk8bZ1SS521Z7vmgJFTQQlfz/Mp/nJexGBz+v8sC9bM6+lNgskt4Ug==",
  30747 + "dev": true,
  30748 + "peer": true
  30749 + }
  30750 + }
  30751 + },
28098 30752 "acorn-import-assertions": {
28099 30753 "version": "1.9.0",
28100 30754 "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
... ... @@ -28121,6 +30775,16 @@
28121 30775 "object-assign": "4.x"
28122 30776 }
28123 30777 },
  30778 + "adler-32": {
  30779 + "version": "1.1.0",
  30780 + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.1.0.tgz",
  30781 + "integrity": "sha512-lRKKX9RZQBPy6CrdUqiDUsxVcZujjbkkUg++0zLLyi0EwRui+aFyEDJBXRXCqwp+pmmybdZgBNHxOAOQcgdJYg==",
  30782 + "dev": true,
  30783 + "requires": {
  30784 + "exit-on-epipe": "~1.0.1",
  30785 + "printj": "~1.1.0"
  30786 + }
  30787 + },
28124 30788 "ajv": {
28125 30789 "version": "6.12.6",
28126 30790 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
... ... @@ -28306,6 +30970,22 @@
28306 30970 "tslib": "^2.0.0"
28307 30971 }
28308 30972 },
  30973 + "arr-diff": {
  30974 + "version": "4.0.0",
  30975 + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
  30976 + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
  30977 + "dev": true,
  30978 + "optional": true,
  30979 + "peer": true
  30980 + },
  30981 + "arr-flatten": {
  30982 + "version": "1.1.0",
  30983 + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
  30984 + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
  30985 + "dev": true,
  30986 + "optional": true,
  30987 + "peer": true
  30988 + },
28309 30989 "arr-union": {
28310 30990 "version": "3.1.0",
28311 30991 "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
... ... @@ -28342,6 +31022,14 @@
28342 31022 "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
28343 31023 "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
28344 31024 },
  31025 + "array-unique": {
  31026 + "version": "0.3.2",
  31027 + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
  31028 + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
  31029 + "dev": true,
  31030 + "optional": true,
  31031 + "peer": true
  31032 + },
28345 31033 "array.prototype.flat": {
28346 31034 "version": "1.3.2",
28347 31035 "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
... ... @@ -28458,6 +31146,14 @@
28458 31146 "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
28459 31147 "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg=="
28460 31148 },
  31149 + "async-each": {
  31150 + "version": "1.0.6",
  31151 + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz",
  31152 + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==",
  31153 + "dev": true,
  31154 + "optional": true,
  31155 + "peer": true
  31156 + },
28461 31157 "async-validator": {
28462 31158 "version": "4.2.5",
28463 31159 "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
... ... @@ -28476,6 +31172,14 @@
28476 31172 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
28477 31173 "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
28478 31174 },
  31175 + "atob": {
  31176 + "version": "2.1.2",
  31177 + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
  31178 + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
  31179 + "dev": true,
  31180 + "optional": true,
  31181 + "peer": true
  31182 + },
28479 31183 "atomic-sleep": {
28480 31184 "version": "1.0.0",
28481 31185 "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
... ... @@ -28642,6 +31346,53 @@
28642 31346 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
28643 31347 "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
28644 31348 },
  31349 + "base": {
  31350 + "version": "0.11.2",
  31351 + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
  31352 + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
  31353 + "dev": true,
  31354 + "optional": true,
  31355 + "peer": true,
  31356 + "requires": {
  31357 + "cache-base": "^1.0.1",
  31358 + "class-utils": "^0.3.5",
  31359 + "component-emitter": "^1.2.1",
  31360 + "define-property": "^1.0.0",
  31361 + "isobject": "^3.0.1",
  31362 + "mixin-deep": "^1.2.0",
  31363 + "pascalcase": "^0.1.1"
  31364 + },
  31365 + "dependencies": {
  31366 + "define-property": {
  31367 + "version": "1.0.0",
  31368 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
  31369 + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
  31370 + "dev": true,
  31371 + "optional": true,
  31372 + "peer": true,
  31373 + "requires": {
  31374 + "is-descriptor": "^1.0.0"
  31375 + }
  31376 + },
  31377 + "is-descriptor": {
  31378 + "version": "1.0.3",
  31379 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  31380 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  31381 + "dev": true,
  31382 + "optional": true,
  31383 + "peer": true,
  31384 + "requires": {
  31385 + "is-accessor-descriptor": "^1.0.1",
  31386 + "is-data-descriptor": "^1.0.1"
  31387 + }
  31388 + }
  31389 + }
  31390 + },
  31391 + "base-64": {
  31392 + "version": "1.0.0",
  31393 + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
  31394 + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
  31395 + },
28645 31396 "base64-js": {
28646 31397 "version": "1.5.1",
28647 31398 "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
... ... @@ -28667,6 +31418,17 @@
28667 31418 "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
28668 31419 "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
28669 31420 },
  31421 + "bindings": {
  31422 + "version": "1.5.0",
  31423 + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
  31424 + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
  31425 + "dev": true,
  31426 + "optional": true,
  31427 + "peer": true,
  31428 + "requires": {
  31429 + "file-uri-to-path": "1.0.0"
  31430 + }
  31431 + },
28670 31432 "bl": {
28671 31433 "version": "5.1.0",
28672 31434 "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
... ... @@ -28691,6 +31453,12 @@
28691 31453 }
28692 31454 }
28693 31455 },
  31456 + "bluebird": {
  31457 + "version": "3.4.7",
  31458 + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
  31459 + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==",
  31460 + "dev": true
  31461 + },
28694 31462 "bn.js": {
28695 31463 "version": "5.2.1",
28696 31464 "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
... ... @@ -28907,6 +31675,25 @@
28907 31675 "typewise-core": "^1.2"
28908 31676 }
28909 31677 },
  31678 + "cache-base": {
  31679 + "version": "1.0.1",
  31680 + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
  31681 + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
  31682 + "dev": true,
  31683 + "optional": true,
  31684 + "peer": true,
  31685 + "requires": {
  31686 + "collection-visit": "^1.0.0",
  31687 + "component-emitter": "^1.2.1",
  31688 + "get-value": "^2.0.6",
  31689 + "has-value": "^1.0.0",
  31690 + "isobject": "^3.0.1",
  31691 + "set-value": "^2.0.0",
  31692 + "to-object-path": "^0.3.0",
  31693 + "union-value": "^1.0.0",
  31694 + "unset-value": "^1.0.0"
  31695 + }
  31696 + },
28910 31697 "cacheable-request": {
28911 31698 "version": "2.1.4",
28912 31699 "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
... ... @@ -29055,6 +31842,24 @@
29055 31842 "lazy-cache": "^1.0.3"
29056 31843 }
29057 31844 },
  31845 + "cfb": {
  31846 + "version": "0.12.1",
  31847 + "resolved": "https://registry.npmjs.org/cfb/-/cfb-0.12.1.tgz",
  31848 + "integrity": "sha512-cP+4A0tTqtyza5gJwNwDetZ8FPjl0gPLE7mIxGKyUzOS6HkM23WaAWW/l3t7jIQSMqVXroa09Ey0lo7gV8LNxw==",
  31849 + "dev": true,
  31850 + "requires": {
  31851 + "commander": "~2.11.0",
  31852 + "printj": "~1.1.0"
  31853 + },
  31854 + "dependencies": {
  31855 + "commander": {
  31856 + "version": "2.11.0",
  31857 + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
  31858 + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
  31859 + "dev": true
  31860 + }
  31861 + }
  31862 + },
29058 31863 "chalk": {
29059 31864 "version": "5.3.0",
29060 31865 "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
... ... @@ -29107,6 +31912,20 @@
29107 31912 "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz",
29108 31913 "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA=="
29109 31914 },
  31915 + "class-utils": {
  31916 + "version": "0.3.6",
  31917 + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
  31918 + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
  31919 + "dev": true,
  31920 + "optional": true,
  31921 + "peer": true,
  31922 + "requires": {
  31923 + "arr-union": "^3.1.0",
  31924 + "define-property": "^0.2.5",
  31925 + "isobject": "^3.0.0",
  31926 + "static-extend": "^0.1.1"
  31927 + }
  31928 + },
29110 31929 "classnames": {
29111 31930 "version": "2.3.2",
29112 31931 "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
... ... @@ -29282,12 +32101,56 @@
29282 32101 "mimic-response": "^1.0.0"
29283 32102 }
29284 32103 },
  32104 + "co": {
  32105 + "version": "4.6.0",
  32106 + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
  32107 + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
  32108 + "dev": true
  32109 + },
29285 32110 "code-block-writer": {
29286 32111 "version": "12.0.0",
29287 32112 "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz",
29288 32113 "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==",
29289 32114 "dev": true
29290 32115 },
  32116 + "code-point-at": {
  32117 + "version": "1.1.0",
  32118 + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
  32119 + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
  32120 + "dev": true,
  32121 + "peer": true
  32122 + },
  32123 + "codepage": {
  32124 + "version": "1.10.2",
  32125 + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.10.2.tgz",
  32126 + "integrity": "sha512-JzhJ7nYua7rMcJ6I4Cw4h1w7aN/1f5qAQb//QSAaTjTVjEEZ1mBicBWTPLf6RiaBn4dpbEFwqGBoEekOHx9K2Q==",
  32127 + "dev": true,
  32128 + "requires": {
  32129 + "commander": "~2.11.0",
  32130 + "exit-on-epipe": "~1.0.1",
  32131 + "voc": "~1.0.0"
  32132 + },
  32133 + "dependencies": {
  32134 + "commander": {
  32135 + "version": "2.11.0",
  32136 + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
  32137 + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
  32138 + "dev": true
  32139 + }
  32140 + }
  32141 + },
  32142 + "collection-visit": {
  32143 + "version": "1.0.0",
  32144 + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
  32145 + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
  32146 + "dev": true,
  32147 + "optional": true,
  32148 + "peer": true,
  32149 + "requires": {
  32150 + "map-visit": "^1.0.0",
  32151 + "object-visit": "^1.0.0"
  32152 + }
  32153 + },
29291 32154 "color": {
29292 32155 "version": "3.2.1",
29293 32156 "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
... ... @@ -29338,6 +32201,12 @@
29338 32201 "delayed-stream": "~1.0.0"
29339 32202 }
29340 32203 },
  32204 + "comma-separated-values": {
  32205 + "version": "3.6.4",
  32206 + "resolved": "https://registry.npmjs.org/comma-separated-values/-/comma-separated-values-3.6.4.tgz",
  32207 + "integrity": "sha512-B0mjBHUfu4JqzYM5NurRTBl2QuNqQ9/O62EUfL4+bo2KN81fGsFOFOHbHn5SP65n3lmFPzGLkdg8wfuLKk9HOQ==",
  32208 + "dev": true
  32209 + },
29341 32210 "commander": {
29342 32211 "version": "11.1.0",
29343 32212 "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
... ... @@ -29349,6 +32218,14 @@
29349 32218 "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
29350 32219 "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="
29351 32220 },
  32221 + "component-emitter": {
  32222 + "version": "1.3.1",
  32223 + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
  32224 + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
  32225 + "dev": true,
  32226 + "optional": true,
  32227 + "peer": true
  32228 + },
29352 32229 "compute-scroll-into-view": {
29353 32230 "version": "3.1.0",
29354 32231 "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz",
... ... @@ -29449,6 +32326,14 @@
29449 32326 "is-what": "^3.14.1"
29450 32327 }
29451 32328 },
  32329 + "copy-descriptor": {
  32330 + "version": "0.1.1",
  32331 + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
  32332 + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
  32333 + "dev": true,
  32334 + "optional": true,
  32335 + "peer": true
  32336 + },
29452 32337 "copy-to-clipboard": {
29453 32338 "version": "3.3.3",
29454 32339 "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
... ... @@ -29500,6 +32385,16 @@
29500 32385 }
29501 32386 }
29502 32387 },
  32388 + "crc-32": {
  32389 + "version": "1.1.1",
  32390 + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.1.1.tgz",
  32391 + "integrity": "sha512-DWXuRN3Wtu43YRfYZ9r17720WZqM0caEjIfT6Dk1J/3sAxIyyXbUWqIACbz3cjV8l7guJRW+9pZlYMluKJ69wg==",
  32392 + "dev": true,
  32393 + "requires": {
  32394 + "exit-on-epipe": "~1.0.1",
  32395 + "printj": "~1.1.0"
  32396 + }
  32397 + },
29503 32398 "create-ecdh": {
29504 32399 "version": "4.0.4",
29505 32400 "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
... ... @@ -30160,6 +33055,17 @@
30160 33055 "object-keys": "^1.1.1"
30161 33056 }
30162 33057 },
  33058 + "define-property": {
  33059 + "version": "0.2.5",
  33060 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
  33061 + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
  33062 + "dev": true,
  33063 + "optional": true,
  33064 + "peer": true,
  33065 + "requires": {
  33066 + "is-descriptor": "^0.1.0"
  33067 + }
  33068 + },
30163 33069 "defined": {
30164 33070 "version": "1.0.1",
30165 33071 "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
... ... @@ -30395,6 +33301,23 @@
30395 33301 "rimraf": "^3.0.0"
30396 33302 }
30397 33303 },
  33304 + "duck": {
  33305 + "version": "0.1.12",
  33306 + "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz",
  33307 + "integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==",
  33308 + "dev": true,
  33309 + "requires": {
  33310 + "underscore": "^1.13.1"
  33311 + },
  33312 + "dependencies": {
  33313 + "underscore": {
  33314 + "version": "1.13.6",
  33315 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
  33316 + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
  33317 + "dev": true
  33318 + }
  33319 + }
  33320 + },
30398 33321 "duplexer": {
30399 33322 "version": "0.1.2",
30400 33323 "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
... ... @@ -30564,7 +33487,7 @@
30564 33487 "version": "0.1.8",
30565 33488 "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
30566 33489 "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
30567   - "optional": true,
  33490 + "devOptional": true,
30568 33491 "requires": {
30569 33492 "prr": "~1.0.1"
30570 33493 }
... ... @@ -31103,6 +34026,50 @@
31103 34026 "clone-regexp": "^2.1.0"
31104 34027 }
31105 34028 },
  34029 + "exit-on-epipe": {
  34030 + "version": "1.0.1",
  34031 + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
  34032 + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==",
  34033 + "dev": true
  34034 + },
  34035 + "expand-brackets": {
  34036 + "version": "2.1.4",
  34037 + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
  34038 + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
  34039 + "dev": true,
  34040 + "optional": true,
  34041 + "peer": true,
  34042 + "requires": {
  34043 + "debug": "^2.3.3",
  34044 + "define-property": "^0.2.5",
  34045 + "extend-shallow": "^2.0.1",
  34046 + "posix-character-classes": "^0.1.0",
  34047 + "regex-not": "^1.0.0",
  34048 + "snapdragon": "^0.8.1",
  34049 + "to-regex": "^3.0.1"
  34050 + },
  34051 + "dependencies": {
  34052 + "debug": {
  34053 + "version": "2.6.9",
  34054 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  34055 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  34056 + "dev": true,
  34057 + "optional": true,
  34058 + "peer": true,
  34059 + "requires": {
  34060 + "ms": "2.0.0"
  34061 + }
  34062 + },
  34063 + "ms": {
  34064 + "version": "2.0.0",
  34065 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  34066 + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
  34067 + "dev": true,
  34068 + "optional": true,
  34069 + "peer": true
  34070 + }
  34071 + }
  34072 + },
31106 34073 "ext": {
31107 34074 "version": "1.7.0",
31108 34075 "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
... ... @@ -31156,6 +34123,49 @@
31156 34123 "tmp": "^0.0.33"
31157 34124 }
31158 34125 },
  34126 + "extglob": {
  34127 + "version": "2.0.4",
  34128 + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
  34129 + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
  34130 + "dev": true,
  34131 + "optional": true,
  34132 + "peer": true,
  34133 + "requires": {
  34134 + "array-unique": "^0.3.2",
  34135 + "define-property": "^1.0.0",
  34136 + "expand-brackets": "^2.1.4",
  34137 + "extend-shallow": "^2.0.1",
  34138 + "fragment-cache": "^0.2.1",
  34139 + "regex-not": "^1.0.0",
  34140 + "snapdragon": "^0.8.1",
  34141 + "to-regex": "^3.0.1"
  34142 + },
  34143 + "dependencies": {
  34144 + "define-property": {
  34145 + "version": "1.0.0",
  34146 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
  34147 + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
  34148 + "dev": true,
  34149 + "optional": true,
  34150 + "peer": true,
  34151 + "requires": {
  34152 + "is-descriptor": "^1.0.0"
  34153 + }
  34154 + },
  34155 + "is-descriptor": {
  34156 + "version": "1.0.3",
  34157 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  34158 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  34159 + "dev": true,
  34160 + "optional": true,
  34161 + "peer": true,
  34162 + "requires": {
  34163 + "is-accessor-descriptor": "^1.0.1",
  34164 + "is-data-descriptor": "^1.0.1"
  34165 + }
  34166 + }
  34167 + }
  34168 + },
31159 34169 "extrude-polyline": {
31160 34170 "version": "1.0.6",
31161 34171 "resolved": "https://registry.npmjs.org/extrude-polyline/-/extrude-polyline-1.0.6.tgz",
... ... @@ -31289,6 +34299,14 @@
31289 34299 "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
31290 34300 "dev": true
31291 34301 },
  34302 + "file-uri-to-path": {
  34303 + "version": "1.0.0",
  34304 + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
  34305 + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
  34306 + "dev": true,
  34307 + "optional": true,
  34308 + "peer": true
  34309 + },
31292 34310 "filename-reserved-regex": {
31293 34311 "version": "2.0.0",
31294 34312 "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
... ... @@ -31441,6 +34459,14 @@
31441 34459 "is-callable": "^1.1.3"
31442 34460 }
31443 34461 },
  34462 + "for-in": {
  34463 + "version": "1.0.2",
  34464 + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
  34465 + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
  34466 + "dev": true,
  34467 + "optional": true,
  34468 + "peer": true
  34469 + },
31444 34470 "fork-ts-checker-webpack-plugin": {
31445 34471 "version": "8.0.0",
31446 34472 "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz",
... ... @@ -31555,11 +34581,28 @@
31555 34581 "fetch-blob": "^3.1.2"
31556 34582 }
31557 34583 },
  34584 + "frac": {
  34585 + "version": "1.1.2",
  34586 + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
  34587 + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
  34588 + "dev": true
  34589 + },
31558 34590 "fraction.js": {
31559 34591 "version": "4.3.7",
31560 34592 "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
31561 34593 "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="
31562 34594 },
  34595 + "fragment-cache": {
  34596 + "version": "0.2.1",
  34597 + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
  34598 + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
  34599 + "dev": true,
  34600 + "optional": true,
  34601 + "peer": true,
  34602 + "requires": {
  34603 + "map-cache": "^0.2.2"
  34604 + }
  34605 + },
31563 34606 "from2": {
31564 34607 "version": "2.3.0",
31565 34608 "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
... ... @@ -31994,6 +35037,68 @@
31994 35037 "has-symbols": "^1.0.3"
31995 35038 }
31996 35039 },
  35040 + "has-value": {
  35041 + "version": "1.0.0",
  35042 + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
  35043 + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
  35044 + "dev": true,
  35045 + "optional": true,
  35046 + "peer": true,
  35047 + "requires": {
  35048 + "get-value": "^2.0.6",
  35049 + "has-values": "^1.0.0",
  35050 + "isobject": "^3.0.0"
  35051 + }
  35052 + },
  35053 + "has-values": {
  35054 + "version": "1.0.0",
  35055 + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
  35056 + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
  35057 + "dev": true,
  35058 + "optional": true,
  35059 + "peer": true,
  35060 + "requires": {
  35061 + "is-number": "^3.0.0",
  35062 + "kind-of": "^4.0.0"
  35063 + },
  35064 + "dependencies": {
  35065 + "is-number": {
  35066 + "version": "3.0.0",
  35067 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
  35068 + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
  35069 + "dev": true,
  35070 + "optional": true,
  35071 + "peer": true,
  35072 + "requires": {
  35073 + "kind-of": "^3.0.2"
  35074 + },
  35075 + "dependencies": {
  35076 + "kind-of": {
  35077 + "version": "3.2.2",
  35078 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  35079 + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
  35080 + "dev": true,
  35081 + "optional": true,
  35082 + "peer": true,
  35083 + "requires": {
  35084 + "is-buffer": "^1.1.5"
  35085 + }
  35086 + }
  35087 + }
  35088 + },
  35089 + "kind-of": {
  35090 + "version": "4.0.0",
  35091 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
  35092 + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
  35093 + "dev": true,
  35094 + "optional": true,
  35095 + "peer": true,
  35096 + "requires": {
  35097 + "is-buffer": "^1.1.5"
  35098 + }
  35099 + }
  35100 + }
  35101 + },
31997 35102 "hash-base": {
31998 35103 "version": "3.1.0",
31999 35104 "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
... ... @@ -32464,6 +35569,13 @@
32464 35569 "side-channel": "^1.0.4"
32465 35570 }
32466 35571 },
  35572 + "interpret": {
  35573 + "version": "1.4.0",
  35574 + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
  35575 + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
  35576 + "dev": true,
  35577 + "peer": true
  35578 + },
32467 35579 "intl": {
32468 35580 "version": "1.2.5",
32469 35581 "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz",
... ... @@ -32519,6 +35631,24 @@
32519 35631 "resolved": "https://registry.npmjs.org/inversify-inject-decorators/-/inversify-inject-decorators-3.1.0.tgz",
32520 35632 "integrity": "sha512-/seBlVp5bXrLQS3DpKEmlgeZL6C7Tf/QITd+IMQrbBBGuCbxb7k3hRAWu9XSreNpFzLgSboz3sClLSEmGwHphw=="
32521 35633 },
  35634 + "invert-kv": {
  35635 + "version": "1.0.0",
  35636 + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
  35637 + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
  35638 + "dev": true,
  35639 + "peer": true
  35640 + },
  35641 + "is-accessor-descriptor": {
  35642 + "version": "1.0.1",
  35643 + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
  35644 + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
  35645 + "dev": true,
  35646 + "optional": true,
  35647 + "peer": true,
  35648 + "requires": {
  35649 + "hasown": "^2.0.0"
  35650 + }
  35651 + },
32522 35652 "is-any-array": {
32523 35653 "version": "2.0.1",
32524 35654 "resolved": "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz",
... ... @@ -32606,6 +35736,17 @@
32606 35736 "hasown": "^2.0.0"
32607 35737 }
32608 35738 },
  35739 + "is-data-descriptor": {
  35740 + "version": "1.0.1",
  35741 + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
  35742 + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
  35743 + "dev": true,
  35744 + "optional": true,
  35745 + "peer": true,
  35746 + "requires": {
  35747 + "hasown": "^2.0.0"
  35748 + }
  35749 + },
32609 35750 "is-date-object": {
32610 35751 "version": "1.0.5",
32611 35752 "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
... ... @@ -32614,6 +35755,18 @@
32614 35755 "has-tostringtag": "^1.0.0"
32615 35756 }
32616 35757 },
  35758 + "is-descriptor": {
  35759 + "version": "0.1.7",
  35760 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
  35761 + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
  35762 + "dev": true,
  35763 + "optional": true,
  35764 + "peer": true,
  35765 + "requires": {
  35766 + "is-accessor-descriptor": "^1.0.1",
  35767 + "is-data-descriptor": "^1.0.1"
  35768 + }
  35769 + },
32617 35770 "is-directory": {
32618 35771 "version": "0.3.1",
32619 35772 "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
... ... @@ -32848,6 +36001,13 @@
32848 36001 "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
32849 36002 "dev": true
32850 36003 },
  36004 + "is-utf8": {
  36005 + "version": "0.2.1",
  36006 + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
  36007 + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
  36008 + "dev": true,
  36009 + "peer": true
  36010 + },
32851 36011 "is-weakmap": {
32852 36012 "version": "2.0.1",
32853 36013 "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
... ... @@ -32875,6 +36035,14 @@
32875 36035 "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
32876 36036 "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA=="
32877 36037 },
  36038 + "is-windows": {
  36039 + "version": "1.0.2",
  36040 + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
  36041 + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
  36042 + "dev": true,
  36043 + "optional": true,
  36044 + "peer": true
  36045 + },
32878 36046 "is-wsl": {
32879 36047 "version": "2.2.0",
32880 36048 "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
... ... @@ -33221,6 +36389,13 @@
33221 36389 "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
33222 36390 "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
33223 36391 },
  36392 + "json-loader": {
  36393 + "version": "0.5.7",
  36394 + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
  36395 + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==",
  36396 + "dev": true,
  36397 + "peer": true
  36398 + },
33224 36399 "json-parse-better-errors": {
33225 36400 "version": "1.0.2",
33226 36401 "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
... ... @@ -33237,6 +36412,28 @@
33237 36412 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
33238 36413 "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
33239 36414 },
  36415 + "json-stable-stringify": {
  36416 + "version": "1.1.1",
  36417 + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz",
  36418 + "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==",
  36419 + "dev": true,
  36420 + "peer": true,
  36421 + "requires": {
  36422 + "call-bind": "^1.0.5",
  36423 + "isarray": "^2.0.5",
  36424 + "jsonify": "^0.0.1",
  36425 + "object-keys": "^1.1.1"
  36426 + },
  36427 + "dependencies": {
  36428 + "isarray": {
  36429 + "version": "2.0.5",
  36430 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
  36431 + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
  36432 + "dev": true,
  36433 + "peer": true
  36434 + }
  36435 + }
  36436 + },
33240 36437 "json-stable-stringify-without-jsonify": {
33241 36438 "version": "1.0.1",
33242 36439 "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
... ... @@ -33277,6 +36474,13 @@
33277 36474 "graceful-fs": "^4.1.6"
33278 36475 }
33279 36476 },
  36477 + "jsonify": {
  36478 + "version": "0.0.1",
  36479 + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
  36480 + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
  36481 + "dev": true,
  36482 + "peer": true
  36483 + },
33280 36484 "jsx-ast-utils": {
33281 36485 "version": "3.3.5",
33282 36486 "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
... ... @@ -33288,6 +36492,23 @@
33288 36492 "object.values": "^1.1.6"
33289 36493 }
33290 36494 },
  36495 + "jszip": {
  36496 + "version": "2.5.0",
  36497 + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.5.0.tgz",
  36498 + "integrity": "sha512-IRoyf8JSYY3nx+uyh5xPc0qdy8pUDTp2UkHOWYNF/IO/3D8nx7899UlSAjD8rf8wUgOmm0lACWx/GbW3EaxIXQ==",
  36499 + "dev": true,
  36500 + "requires": {
  36501 + "pako": "~0.2.5"
  36502 + },
  36503 + "dependencies": {
  36504 + "pako": {
  36505 + "version": "0.2.9",
  36506 + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
  36507 + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
  36508 + "dev": true
  36509 + }
  36510 + }
  36511 + },
33291 36512 "kdbush": {
33292 36513 "version": "4.0.2",
33293 36514 "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz",
... ... @@ -33327,6 +36548,16 @@
33327 36548 "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
33328 36549 "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ=="
33329 36550 },
  36551 + "lcid": {
  36552 + "version": "1.0.0",
  36553 + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
  36554 + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
  36555 + "dev": true,
  36556 + "peer": true,
  36557 + "requires": {
  36558 + "invert-kv": "^1.0.0"
  36559 + }
  36560 + },
33330 36561 "less": {
33331 36562 "version": "4.1.3",
33332 36563 "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz",
... ... @@ -33561,6 +36792,42 @@
33561 36792 }
33562 36793 }
33563 36794 },
  36795 + "load-json-file": {
  36796 + "version": "1.1.0",
  36797 + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
  36798 + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
  36799 + "dev": true,
  36800 + "peer": true,
  36801 + "requires": {
  36802 + "graceful-fs": "^4.1.2",
  36803 + "parse-json": "^2.2.0",
  36804 + "pify": "^2.0.0",
  36805 + "pinkie-promise": "^2.0.0",
  36806 + "strip-bom": "^2.0.0"
  36807 + },
  36808 + "dependencies": {
  36809 + "parse-json": {
  36810 + "version": "2.2.0",
  36811 + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
  36812 + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
  36813 + "dev": true,
  36814 + "peer": true,
  36815 + "requires": {
  36816 + "error-ex": "^1.2.0"
  36817 + }
  36818 + },
  36819 + "strip-bom": {
  36820 + "version": "2.0.0",
  36821 + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
  36822 + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
  36823 + "dev": true,
  36824 + "peer": true,
  36825 + "requires": {
  36826 + "is-utf8": "^0.2.0"
  36827 + }
  36828 + }
  36829 + }
  36830 + },
33564 36831 "loader-runner": {
33565 36832 "version": "4.3.0",
33566 36833 "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
... ... @@ -33761,6 +37028,25 @@
33761 37028 "js-tokens": "^3.0.0 || ^4.0.0"
33762 37029 }
33763 37030 },
  37031 + "lop": {
  37032 + "version": "0.4.1",
  37033 + "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.1.tgz",
  37034 + "integrity": "sha512-9xyho9why2A2tzm5aIcMWKvzqKsnxrf9B5I+8O30olh6lQU8PH978LqZoI4++37RBgS1Em5i54v1TFs/3wnmXQ==",
  37035 + "dev": true,
  37036 + "requires": {
  37037 + "duck": "^0.1.12",
  37038 + "option": "~0.2.1",
  37039 + "underscore": "^1.13.1"
  37040 + },
  37041 + "dependencies": {
  37042 + "underscore": {
  37043 + "version": "1.13.6",
  37044 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
  37045 + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
  37046 + "dev": true
  37047 + }
  37048 + }
  37049 + },
33764 37050 "lower-case": {
33765 37051 "version": "2.0.2",
33766 37052 "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
... ... @@ -33814,6 +37100,39 @@
33814 37100 "tmpl": "1.0.5"
33815 37101 }
33816 37102 },
  37103 + "mammoth": {
  37104 + "version": "1.3.6",
  37105 + "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.3.6.tgz",
  37106 + "integrity": "sha512-hr1HqQg49PAcFDsj1RMHo2l+fxEVocUTbJ37kGoUIV1mt6dn2Wd7T381NdHagnvQ1Jblv0E+BtghEVnxd0sqwQ==",
  37107 + "dev": true,
  37108 + "requires": {
  37109 + "argparse": "~1.0.3",
  37110 + "bluebird": "~3.4.0",
  37111 + "jszip": "~2.5.0",
  37112 + "lop": "~0.4.0",
  37113 + "path-is-absolute": "^1.0.0",
  37114 + "sax": "~1.1.1",
  37115 + "underscore": "~1.6.0",
  37116 + "xmlbuilder": "~2.6.4"
  37117 + },
  37118 + "dependencies": {
  37119 + "argparse": {
  37120 + "version": "1.0.10",
  37121 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
  37122 + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
  37123 + "dev": true,
  37124 + "requires": {
  37125 + "sprintf-js": "~1.0.2"
  37126 + }
  37127 + },
  37128 + "sax": {
  37129 + "version": "1.1.6",
  37130 + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.6.tgz",
  37131 + "integrity": "sha512-8zci48uUQyfqynGDSkUMD7FCJB96hwLnlZOXlgs1l3TX+LW27t3psSWKUxC0fxVgA86i8tL4NwGcY1h/6t3ESg==",
  37132 + "dev": true
  37133 + }
  37134 + }
  37135 + },
33817 37136 "mana-common": {
33818 37137 "version": "0.3.2",
33819 37138 "resolved": "https://registry.npmjs.org/mana-common/-/mana-common-0.3.2.tgz",
... ... @@ -33827,11 +37146,30 @@
33827 37146 "inversify": "^5.0.1"
33828 37147 }
33829 37148 },
  37149 + "map-cache": {
  37150 + "version": "0.2.2",
  37151 + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
  37152 + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
  37153 + "dev": true,
  37154 + "optional": true,
  37155 + "peer": true
  37156 + },
33830 37157 "map-obj": {
33831 37158 "version": "4.3.0",
33832 37159 "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
33833 37160 "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ=="
33834 37161 },
  37162 + "map-visit": {
  37163 + "version": "1.0.0",
  37164 + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
  37165 + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
  37166 + "dev": true,
  37167 + "optional": true,
  37168 + "peer": true,
  37169 + "requires": {
  37170 + "object-visit": "^1.0.0"
  37171 + }
  37172 + },
33835 37173 "mapbox-gl": {
33836 37174 "version": "1.13.3",
33837 37175 "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.13.3.tgz",
... ... @@ -33951,6 +37289,17 @@
33951 37289 "fs-monkey": "^1.0.4"
33952 37290 }
33953 37291 },
  37292 + "memory-fs": {
  37293 + "version": "0.4.1",
  37294 + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
  37295 + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==",
  37296 + "dev": true,
  37297 + "peer": true,
  37298 + "requires": {
  37299 + "errno": "^0.1.3",
  37300 + "readable-stream": "^2.0.1"
  37301 + }
  37302 + },
33954 37303 "meow": {
33955 37304 "version": "9.0.0",
33956 37305 "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
... ... @@ -34088,6 +37437,31 @@
34088 37437 "kind-of": "^6.0.3"
34089 37438 }
34090 37439 },
  37440 + "mixin-deep": {
  37441 + "version": "1.3.2",
  37442 + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
  37443 + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
  37444 + "dev": true,
  37445 + "optional": true,
  37446 + "peer": true,
  37447 + "requires": {
  37448 + "for-in": "^1.0.2",
  37449 + "is-extendable": "^1.0.1"
  37450 + },
  37451 + "dependencies": {
  37452 + "is-extendable": {
  37453 + "version": "1.0.1",
  37454 + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
  37455 + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
  37456 + "dev": true,
  37457 + "optional": true,
  37458 + "peer": true,
  37459 + "requires": {
  37460 + "is-plain-object": "^2.0.4"
  37461 + }
  37462 + }
  37463 + }
  37464 + },
34091 37465 "mkdirp": {
34092 37466 "version": "1.0.4",
34093 37467 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
... ... @@ -34191,6 +37565,14 @@
34191 37565 "thenify-all": "^1.0.0"
34192 37566 }
34193 37567 },
  37568 + "nan": {
  37569 + "version": "2.19.0",
  37570 + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz",
  37571 + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==",
  37572 + "dev": true,
  37573 + "optional": true,
  37574 + "peer": true
  37575 + },
34194 37576 "nano-css": {
34195 37577 "version": "5.6.1",
34196 37578 "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.6.1.tgz",
... ... @@ -34211,6 +37593,76 @@
34211 37593 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
34212 37594 "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
34213 37595 },
  37596 + "nanomatch": {
  37597 + "version": "1.2.13",
  37598 + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
  37599 + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
  37600 + "dev": true,
  37601 + "optional": true,
  37602 + "peer": true,
  37603 + "requires": {
  37604 + "arr-diff": "^4.0.0",
  37605 + "array-unique": "^0.3.2",
  37606 + "define-property": "^2.0.2",
  37607 + "extend-shallow": "^3.0.2",
  37608 + "fragment-cache": "^0.2.1",
  37609 + "is-windows": "^1.0.2",
  37610 + "kind-of": "^6.0.2",
  37611 + "object.pick": "^1.3.0",
  37612 + "regex-not": "^1.0.0",
  37613 + "snapdragon": "^0.8.1",
  37614 + "to-regex": "^3.0.1"
  37615 + },
  37616 + "dependencies": {
  37617 + "define-property": {
  37618 + "version": "2.0.2",
  37619 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
  37620 + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
  37621 + "dev": true,
  37622 + "optional": true,
  37623 + "peer": true,
  37624 + "requires": {
  37625 + "is-descriptor": "^1.0.2",
  37626 + "isobject": "^3.0.1"
  37627 + }
  37628 + },
  37629 + "extend-shallow": {
  37630 + "version": "3.0.2",
  37631 + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
  37632 + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
  37633 + "dev": true,
  37634 + "optional": true,
  37635 + "peer": true,
  37636 + "requires": {
  37637 + "assign-symbols": "^1.0.0",
  37638 + "is-extendable": "^1.0.1"
  37639 + }
  37640 + },
  37641 + "is-descriptor": {
  37642 + "version": "1.0.3",
  37643 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  37644 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  37645 + "dev": true,
  37646 + "optional": true,
  37647 + "peer": true,
  37648 + "requires": {
  37649 + "is-accessor-descriptor": "^1.0.1",
  37650 + "is-data-descriptor": "^1.0.1"
  37651 + }
  37652 + },
  37653 + "is-extendable": {
  37654 + "version": "1.0.1",
  37655 + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
  37656 + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
  37657 + "dev": true,
  37658 + "optional": true,
  37659 + "peer": true,
  37660 + "requires": {
  37661 + "is-plain-object": "^2.0.4"
  37662 + }
  37663 + }
  37664 + }
  37665 + },
34214 37666 "natural-compare": {
34215 37667 "version": "1.4.0",
34216 37668 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
... ... @@ -34272,6 +37724,12 @@
34272 37724 "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
34273 37725 "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="
34274 37726 },
  37727 + "node-ensure": {
  37728 + "version": "0.0.0",
  37729 + "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz",
  37730 + "integrity": "sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw==",
  37731 + "dev": true
  37732 + },
34275 37733 "node-fetch": {
34276 37734 "version": "2.7.0",
34277 37735 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
... ... @@ -34439,11 +37897,44 @@
34439 37897 "boolbase": "^1.0.0"
34440 37898 }
34441 37899 },
  37900 + "number-is-nan": {
  37901 + "version": "1.0.1",
  37902 + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
  37903 + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
  37904 + "dev": true,
  37905 + "peer": true
  37906 + },
34442 37907 "object-assign": {
34443 37908 "version": "4.1.1",
34444 37909 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
34445 37910 "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
34446 37911 },
  37912 + "object-copy": {
  37913 + "version": "0.1.0",
  37914 + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
  37915 + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
  37916 + "dev": true,
  37917 + "optional": true,
  37918 + "peer": true,
  37919 + "requires": {
  37920 + "copy-descriptor": "^0.1.0",
  37921 + "define-property": "^0.2.5",
  37922 + "kind-of": "^3.0.3"
  37923 + },
  37924 + "dependencies": {
  37925 + "kind-of": {
  37926 + "version": "3.2.2",
  37927 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  37928 + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
  37929 + "dev": true,
  37930 + "optional": true,
  37931 + "peer": true,
  37932 + "requires": {
  37933 + "is-buffer": "^1.1.5"
  37934 + }
  37935 + }
  37936 + }
  37937 + },
34447 37938 "object-hash": {
34448 37939 "version": "3.0.0",
34449 37940 "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
... ... @@ -34469,6 +37960,17 @@
34469 37960 "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
34470 37961 "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
34471 37962 },
  37963 + "object-visit": {
  37964 + "version": "1.0.1",
  37965 + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
  37966 + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
  37967 + "dev": true,
  37968 + "optional": true,
  37969 + "peer": true,
  37970 + "requires": {
  37971 + "isobject": "^3.0.0"
  37972 + }
  37973 + },
34472 37974 "object.assign": {
34473 37975 "version": "4.1.5",
34474 37976 "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
... ... @@ -34520,6 +38022,17 @@
34520 38022 "es-abstract": "^1.22.1"
34521 38023 }
34522 38024 },
  38025 + "object.pick": {
  38026 + "version": "1.3.0",
  38027 + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
  38028 + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
  38029 + "dev": true,
  38030 + "optional": true,
  38031 + "peer": true,
  38032 + "requires": {
  38033 + "isobject": "^3.0.1"
  38034 + }
  38035 + },
34523 38036 "object.values": {
34524 38037 "version": "1.1.7",
34525 38038 "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
... ... @@ -34583,6 +38096,12 @@
34583 38096 "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
34584 38097 "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A=="
34585 38098 },
  38099 + "option": {
  38100 + "version": "0.2.4",
  38101 + "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz",
  38102 + "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==",
  38103 + "dev": true
  38104 + },
34586 38105 "optionator": {
34587 38106 "version": "0.9.3",
34588 38107 "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
... ... @@ -34692,6 +38211,16 @@
34692 38211 "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
34693 38212 "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A=="
34694 38213 },
  38214 + "os-locale": {
  38215 + "version": "1.4.0",
  38216 + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
  38217 + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
  38218 + "dev": true,
  38219 + "peer": true,
  38220 + "requires": {
  38221 + "lcid": "^1.0.0"
  38222 + }
  38223 + },
34695 38224 "os-tmpdir": {
34696 38225 "version": "1.0.2",
34697 38226 "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
... ... @@ -34814,12 +38343,28 @@
34814 38343 "tslib": "^2.0.3"
34815 38344 }
34816 38345 },
  38346 + "pascalcase": {
  38347 + "version": "0.1.1",
  38348 + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
  38349 + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
  38350 + "dev": true,
  38351 + "optional": true,
  38352 + "peer": true
  38353 + },
34817 38354 "path-browserify": {
34818 38355 "version": "1.0.1",
34819 38356 "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
34820 38357 "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
34821 38358 "dev": true
34822 38359 },
  38360 + "path-dirname": {
  38361 + "version": "1.0.2",
  38362 + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
  38363 + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
  38364 + "dev": true,
  38365 + "optional": true,
  38366 + "peer": true
  38367 + },
34823 38368 "path-exists": {
34824 38369 "version": "4.0.0",
34825 38370 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
... ... @@ -34986,6 +38531,14 @@
34986 38531 "polyline-miter-util": "^1.0.1"
34987 38532 }
34988 38533 },
  38534 + "posix-character-classes": {
  38535 + "version": "0.1.1",
  38536 + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
  38537 + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
  38538 + "dev": true,
  38539 + "optional": true,
  38540 + "peer": true
  38541 + },
34989 38542 "possible-typed-array-names": {
34990 38543 "version": "1.0.0",
34991 38544 "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
... ... @@ -35447,6 +39000,12 @@
35447 39000 "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.6.0.tgz",
35448 39001 "integrity": "sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg=="
35449 39002 },
  39003 + "printj": {
  39004 + "version": "1.1.2",
  39005 + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
  39006 + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==",
  39007 + "dev": true
  39008 + },
35450 39009 "probe.gl": {
35451 39010 "version": "3.6.0",
35452 39011 "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.6.0.tgz",
... ... @@ -35528,7 +39087,7 @@
35528 39087 "version": "1.0.1",
35529 39088 "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
35530 39089 "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
35531   - "optional": true
  39090 + "devOptional": true
35532 39091 },
35533 39092 "public-encrypt": {
35534 39093 "version": "4.0.3",
... ... @@ -36107,6 +39666,524 @@
36107 39666 "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
36108 39667 "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
36109 39668 },
  39669 + "react-file-viewer": {
  39670 + "version": "1.2.1",
  39671 + "resolved": "https://registry.npmjs.org/react-file-viewer/-/react-file-viewer-1.2.1.tgz",
  39672 + "integrity": "sha512-Hq9irsKkmXNGUOk7FBH/z/Lph4mpp3R4ySnGzhs3UEFVvHExuKhp9qPfoXUJjt/kQI5Qtrj1Y5r/fpDGkSrFyQ==",
  39673 + "dev": true,
  39674 + "requires": {
  39675 + "comma-separated-values": "^3.6.4",
  39676 + "mammoth": "1.3.6",
  39677 + "pdfjs-dist": "1.8.357",
  39678 + "prop-types": "^15.5.10",
  39679 + "react-data-grid": "^5.0.5",
  39680 + "react-visibility-sensor": "^5.0.2",
  39681 + "three": "0.85.2",
  39682 + "xlsx": "^0.10.1"
  39683 + },
  39684 + "dependencies": {
  39685 + "acorn": {
  39686 + "version": "5.7.4",
  39687 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
  39688 + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
  39689 + "dev": true,
  39690 + "peer": true
  39691 + },
  39692 + "ajv": {
  39693 + "version": "4.11.8",
  39694 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
  39695 + "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==",
  39696 + "dev": true,
  39697 + "peer": true,
  39698 + "requires": {
  39699 + "co": "^4.6.0",
  39700 + "json-stable-stringify": "^1.0.1"
  39701 + }
  39702 + },
  39703 + "ajv-keywords": {
  39704 + "version": "1.5.1",
  39705 + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
  39706 + "integrity": "sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA==",
  39707 + "dev": true,
  39708 + "peer": true,
  39709 + "requires": {}
  39710 + },
  39711 + "ansi-regex": {
  39712 + "version": "2.1.1",
  39713 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
  39714 + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
  39715 + "dev": true,
  39716 + "peer": true
  39717 + },
  39718 + "async": {
  39719 + "version": "2.6.4",
  39720 + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
  39721 + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
  39722 + "dev": true,
  39723 + "peer": true,
  39724 + "requires": {
  39725 + "lodash": "^4.17.14"
  39726 + }
  39727 + },
  39728 + "big.js": {
  39729 + "version": "3.2.0",
  39730 + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
  39731 + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
  39732 + "dev": true,
  39733 + "peer": true
  39734 + },
  39735 + "camelcase": {
  39736 + "version": "3.0.0",
  39737 + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
  39738 + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==",
  39739 + "dev": true,
  39740 + "peer": true
  39741 + },
  39742 + "cliui": {
  39743 + "version": "3.2.0",
  39744 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
  39745 + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
  39746 + "dev": true,
  39747 + "peer": true,
  39748 + "requires": {
  39749 + "string-width": "^1.0.1",
  39750 + "strip-ansi": "^3.0.1",
  39751 + "wrap-ansi": "^2.0.0"
  39752 + }
  39753 + },
  39754 + "emojis-list": {
  39755 + "version": "2.1.0",
  39756 + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
  39757 + "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==",
  39758 + "dev": true,
  39759 + "peer": true
  39760 + },
  39761 + "enhanced-resolve": {
  39762 + "version": "3.4.1",
  39763 + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
  39764 + "integrity": "sha512-ZaAux1rigq1e2nQrztHn4h2ugvpzZxs64qneNah+8Mh/K0CRqJFJc+UoXnUsq+1yX+DmQFPPdVqboKAJ89e0Iw==",
  39765 + "dev": true,
  39766 + "peer": true,
  39767 + "requires": {
  39768 + "graceful-fs": "^4.1.2",
  39769 + "memory-fs": "^0.4.0",
  39770 + "object-assign": "^4.0.1",
  39771 + "tapable": "^0.2.7"
  39772 + }
  39773 + },
  39774 + "fast-deep-equal": {
  39775 + "version": "1.1.0",
  39776 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
  39777 + "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==",
  39778 + "dev": true
  39779 + },
  39780 + "find-up": {
  39781 + "version": "1.1.2",
  39782 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
  39783 + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
  39784 + "dev": true,
  39785 + "peer": true,
  39786 + "requires": {
  39787 + "path-exists": "^2.0.0",
  39788 + "pinkie-promise": "^2.0.0"
  39789 + }
  39790 + },
  39791 + "get-caller-file": {
  39792 + "version": "1.0.3",
  39793 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
  39794 + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
  39795 + "dev": true,
  39796 + "peer": true
  39797 + },
  39798 + "has-flag": {
  39799 + "version": "1.0.0",
  39800 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
  39801 + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
  39802 + "dev": true,
  39803 + "peer": true
  39804 + },
  39805 + "hosted-git-info": {
  39806 + "version": "2.8.9",
  39807 + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
  39808 + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
  39809 + "dev": true,
  39810 + "peer": true
  39811 + },
  39812 + "is-fullwidth-code-point": {
  39813 + "version": "1.0.0",
  39814 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
  39815 + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
  39816 + "dev": true,
  39817 + "peer": true,
  39818 + "requires": {
  39819 + "number-is-nan": "^1.0.0"
  39820 + }
  39821 + },
  39822 + "json-schema-traverse": {
  39823 + "version": "0.3.1",
  39824 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
  39825 + "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==",
  39826 + "dev": true
  39827 + },
  39828 + "json5": {
  39829 + "version": "0.5.1",
  39830 + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
  39831 + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==",
  39832 + "dev": true,
  39833 + "peer": true
  39834 + },
  39835 + "loader-runner": {
  39836 + "version": "2.4.0",
  39837 + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
  39838 + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
  39839 + "dev": true,
  39840 + "peer": true
  39841 + },
  39842 + "loader-utils": {
  39843 + "version": "0.2.17",
  39844 + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
  39845 + "integrity": "sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==",
  39846 + "dev": true,
  39847 + "peer": true,
  39848 + "requires": {
  39849 + "big.js": "^3.1.3",
  39850 + "emojis-list": "^2.0.0",
  39851 + "json5": "^0.5.0",
  39852 + "object-assign": "^4.0.1"
  39853 + }
  39854 + },
  39855 + "mkdirp": {
  39856 + "version": "0.5.6",
  39857 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
  39858 + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
  39859 + "dev": true,
  39860 + "peer": true,
  39861 + "requires": {
  39862 + "minimist": "^1.2.6"
  39863 + }
  39864 + },
  39865 + "normalize-package-data": {
  39866 + "version": "2.5.0",
  39867 + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
  39868 + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
  39869 + "dev": true,
  39870 + "peer": true,
  39871 + "requires": {
  39872 + "hosted-git-info": "^2.1.4",
  39873 + "resolve": "^1.10.0",
  39874 + "semver": "2 || 3 || 4 || 5",
  39875 + "validate-npm-package-license": "^3.0.1"
  39876 + }
  39877 + },
  39878 + "path-exists": {
  39879 + "version": "2.1.0",
  39880 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
  39881 + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
  39882 + "dev": true,
  39883 + "peer": true,
  39884 + "requires": {
  39885 + "pinkie-promise": "^2.0.0"
  39886 + }
  39887 + },
  39888 + "path-type": {
  39889 + "version": "1.1.0",
  39890 + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
  39891 + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
  39892 + "dev": true,
  39893 + "peer": true,
  39894 + "requires": {
  39895 + "graceful-fs": "^4.1.2",
  39896 + "pify": "^2.0.0",
  39897 + "pinkie-promise": "^2.0.0"
  39898 + }
  39899 + },
  39900 + "pdfjs-dist": {
  39901 + "version": "1.8.357",
  39902 + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-1.8.357.tgz",
  39903 + "integrity": "sha512-ampPgu+QHnreVkCebVprhKvFX7Z+K5Zf5vQdFc7d48pzJgg9//lv4mjpZbrX+j5nSocrbEZZPnyHdN/5zjf39w==",
  39904 + "dev": true,
  39905 + "requires": {
  39906 + "node-ensure": "^0.0.0",
  39907 + "worker-loader": "^0.8.0"
  39908 + }
  39909 + },
  39910 + "react-data-grid": {
  39911 + "version": "5.0.5",
  39912 + "resolved": "https://registry.npmjs.org/react-data-grid/-/react-data-grid-5.0.5.tgz",
  39913 + "integrity": "sha512-OR4LDoOpN4yj3NexaxYFS2OEIYFUk2V5lascPTHgtTMwwkb163tEPqQSertkv2YAJu+YBzIm8epW8+UMip1LPw==",
  39914 + "dev": true,
  39915 + "requires": {}
  39916 + },
  39917 + "read-pkg": {
  39918 + "version": "1.1.0",
  39919 + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
  39920 + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
  39921 + "dev": true,
  39922 + "peer": true,
  39923 + "requires": {
  39924 + "load-json-file": "^1.0.0",
  39925 + "normalize-package-data": "^2.3.2",
  39926 + "path-type": "^1.0.0"
  39927 + }
  39928 + },
  39929 + "read-pkg-up": {
  39930 + "version": "1.0.1",
  39931 + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
  39932 + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
  39933 + "dev": true,
  39934 + "peer": true,
  39935 + "requires": {
  39936 + "find-up": "^1.0.0",
  39937 + "read-pkg": "^1.0.0"
  39938 + }
  39939 + },
  39940 + "resolve": {
  39941 + "version": "1.22.8",
  39942 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
  39943 + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
  39944 + "dev": true,
  39945 + "peer": true,
  39946 + "requires": {
  39947 + "is-core-module": "^2.13.0",
  39948 + "path-parse": "^1.0.7",
  39949 + "supports-preserve-symlinks-flag": "^1.0.0"
  39950 + }
  39951 + },
  39952 + "schema-utils": {
  39953 + "version": "0.3.0",
  39954 + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
  39955 + "integrity": "sha512-QaVYBaD9U8scJw2EBWnCBY+LJ0AD+/2edTaigDs0XLDLBfJmSUK9KGqktg1rb32U3z4j/XwvFwHHH1YfbYFd7Q==",
  39956 + "dev": true,
  39957 + "requires": {
  39958 + "ajv": "^5.0.0"
  39959 + },
  39960 + "dependencies": {
  39961 + "ajv": {
  39962 + "version": "5.5.2",
  39963 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
  39964 + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==",
  39965 + "dev": true,
  39966 + "requires": {
  39967 + "co": "^4.6.0",
  39968 + "fast-deep-equal": "^1.0.0",
  39969 + "fast-json-stable-stringify": "^2.0.0",
  39970 + "json-schema-traverse": "^0.3.0"
  39971 + }
  39972 + }
  39973 + }
  39974 + },
  39975 + "semver": {
  39976 + "version": "5.7.2",
  39977 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
  39978 + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
  39979 + "dev": true,
  39980 + "peer": true
  39981 + },
  39982 + "source-map": {
  39983 + "version": "0.5.7",
  39984 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
  39985 + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
  39986 + "dev": true,
  39987 + "peer": true
  39988 + },
  39989 + "string-width": {
  39990 + "version": "1.0.2",
  39991 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
  39992 + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
  39993 + "dev": true,
  39994 + "peer": true,
  39995 + "requires": {
  39996 + "code-point-at": "^1.0.0",
  39997 + "is-fullwidth-code-point": "^1.0.0",
  39998 + "strip-ansi": "^3.0.0"
  39999 + }
  40000 + },
  40001 + "strip-ansi": {
  40002 + "version": "3.0.1",
  40003 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
  40004 + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
  40005 + "dev": true,
  40006 + "peer": true,
  40007 + "requires": {
  40008 + "ansi-regex": "^2.0.0"
  40009 + }
  40010 + },
  40011 + "supports-color": {
  40012 + "version": "3.2.3",
  40013 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
  40014 + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
  40015 + "dev": true,
  40016 + "peer": true,
  40017 + "requires": {
  40018 + "has-flag": "^1.0.0"
  40019 + }
  40020 + },
  40021 + "tapable": {
  40022 + "version": "0.2.9",
  40023 + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz",
  40024 + "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==",
  40025 + "dev": true,
  40026 + "peer": true
  40027 + },
  40028 + "watchpack": {
  40029 + "version": "1.7.5",
  40030 + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
  40031 + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
  40032 + "dev": true,
  40033 + "peer": true,
  40034 + "requires": {
  40035 + "chokidar": "^3.4.1",
  40036 + "graceful-fs": "^4.1.2",
  40037 + "neo-async": "^2.5.0",
  40038 + "watchpack-chokidar2": "^2.0.1"
  40039 + }
  40040 + },
  40041 + "webpack": {
  40042 + "version": "2.7.0",
  40043 + "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz",
  40044 + "integrity": "sha512-MjAA0ZqO1ba7ZQJRnoCdbM56mmFpipOPUv/vQpwwfSI42p5PVDdoiuK2AL2FwFUVgT859Jr43bFZXRg/LNsqvg==",
  40045 + "dev": true,
  40046 + "peer": true,
  40047 + "requires": {
  40048 + "acorn": "^5.0.0",
  40049 + "acorn-dynamic-import": "^2.0.0",
  40050 + "ajv": "^4.7.0",
  40051 + "ajv-keywords": "^1.1.1",
  40052 + "async": "^2.1.2",
  40053 + "enhanced-resolve": "^3.3.0",
  40054 + "interpret": "^1.0.0",
  40055 + "json-loader": "^0.5.4",
  40056 + "json5": "^0.5.1",
  40057 + "loader-runner": "^2.3.0",
  40058 + "loader-utils": "^0.2.16",
  40059 + "memory-fs": "~0.4.1",
  40060 + "mkdirp": "~0.5.0",
  40061 + "node-libs-browser": "^2.0.0",
  40062 + "source-map": "^0.5.3",
  40063 + "supports-color": "^3.1.0",
  40064 + "tapable": "~0.2.5",
  40065 + "uglify-js": "^2.8.27",
  40066 + "watchpack": "^1.3.1",
  40067 + "webpack-sources": "^1.0.1",
  40068 + "yargs": "^6.0.0"
  40069 + }
  40070 + },
  40071 + "webpack-sources": {
  40072 + "version": "1.4.3",
  40073 + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
  40074 + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
  40075 + "dev": true,
  40076 + "peer": true,
  40077 + "requires": {
  40078 + "source-list-map": "^2.0.0",
  40079 + "source-map": "~0.6.1"
  40080 + },
  40081 + "dependencies": {
  40082 + "source-map": {
  40083 + "version": "0.6.1",
  40084 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
  40085 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
  40086 + "dev": true,
  40087 + "peer": true
  40088 + }
  40089 + }
  40090 + },
  40091 + "worker-loader": {
  40092 + "version": "0.8.1",
  40093 + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-0.8.1.tgz",
  40094 + "integrity": "sha512-kEFCTNqlJvwOWCHCJeuOl/X2Np28cTKmY5CIpW/B23N2ndMno5Fswz7x/hvilutKoc4i5eedFf0BJ/3V/KPHaw==",
  40095 + "dev": true,
  40096 + "requires": {
  40097 + "loader-utils": "^1.0.2",
  40098 + "schema-utils": "^0.3.0"
  40099 + },
  40100 + "dependencies": {
  40101 + "big.js": {
  40102 + "version": "5.2.2",
  40103 + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
  40104 + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
  40105 + "dev": true
  40106 + },
  40107 + "emojis-list": {
  40108 + "version": "3.0.0",
  40109 + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
  40110 + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
  40111 + "dev": true
  40112 + },
  40113 + "json5": {
  40114 + "version": "1.0.2",
  40115 + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
  40116 + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
  40117 + "dev": true,
  40118 + "requires": {
  40119 + "minimist": "^1.2.0"
  40120 + }
  40121 + },
  40122 + "loader-utils": {
  40123 + "version": "1.4.2",
  40124 + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
  40125 + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
  40126 + "dev": true,
  40127 + "requires": {
  40128 + "big.js": "^5.2.2",
  40129 + "emojis-list": "^3.0.0",
  40130 + "json5": "^1.0.1"
  40131 + }
  40132 + }
  40133 + }
  40134 + },
  40135 + "wrap-ansi": {
  40136 + "version": "2.1.0",
  40137 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
  40138 + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
  40139 + "dev": true,
  40140 + "peer": true,
  40141 + "requires": {
  40142 + "string-width": "^1.0.1",
  40143 + "strip-ansi": "^3.0.1"
  40144 + }
  40145 + },
  40146 + "y18n": {
  40147 + "version": "3.2.2",
  40148 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
  40149 + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
  40150 + "dev": true,
  40151 + "peer": true
  40152 + },
  40153 + "yargs": {
  40154 + "version": "6.6.0",
  40155 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
  40156 + "integrity": "sha512-6/QWTdisjnu5UHUzQGst+UOEuEVwIzFVGBjq3jMTFNs5WJQsH/X6nMURSaScIdF5txylr1Ao9bvbWiKi2yXbwA==",
  40157 + "dev": true,
  40158 + "peer": true,
  40159 + "requires": {
  40160 + "camelcase": "^3.0.0",
  40161 + "cliui": "^3.2.0",
  40162 + "decamelize": "^1.1.1",
  40163 + "get-caller-file": "^1.0.1",
  40164 + "os-locale": "^1.4.0",
  40165 + "read-pkg-up": "^1.0.1",
  40166 + "require-directory": "^2.1.1",
  40167 + "require-main-filename": "^1.0.1",
  40168 + "set-blocking": "^2.0.0",
  40169 + "string-width": "^1.0.2",
  40170 + "which-module": "^1.0.0",
  40171 + "y18n": "^3.2.1",
  40172 + "yargs-parser": "^4.2.0"
  40173 + }
  40174 + },
  40175 + "yargs-parser": {
  40176 + "version": "4.2.1",
  40177 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
  40178 + "integrity": "sha512-+QQWqC2xeL0N5/TE+TY6OGEqyNRM+g2/r712PDNYgiCdXYCApXf1vzfmDSLBxfGRwV+moTq/V8FnMI24JCm2Yg==",
  40179 + "dev": true,
  40180 + "peer": true,
  40181 + "requires": {
  40182 + "camelcase": "^3.0.0"
  40183 + }
  40184 + }
  40185 + }
  40186 + },
36110 40187 "react-helmet-async": {
36111 40188 "version": "1.3.0",
36112 40189 "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz",
... ... @@ -36261,6 +40338,15 @@
36261 40338 }
36262 40339 }
36263 40340 },
  40341 + "react-visibility-sensor": {
  40342 + "version": "5.1.1",
  40343 + "resolved": "https://registry.npmjs.org/react-visibility-sensor/-/react-visibility-sensor-5.1.1.tgz",
  40344 + "integrity": "sha512-cTUHqIK+zDYpeK19rzW6zF9YfT4486TIgizZW53wEZ+/GPBbK7cNS0EHyJVyHYacwFEvvHLEKfgJndbemWhB/w==",
  40345 + "dev": true,
  40346 + "requires": {
  40347 + "prop-types": "^15.7.2"
  40348 + }
  40349 + },
36264 40350 "reactcss": {
36265 40351 "version": "1.2.3",
36266 40352 "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz",
... ... @@ -36470,6 +40556,43 @@
36470 40556 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
36471 40557 "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
36472 40558 },
  40559 + "regex-not": {
  40560 + "version": "1.0.2",
  40561 + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
  40562 + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
  40563 + "dev": true,
  40564 + "optional": true,
  40565 + "peer": true,
  40566 + "requires": {
  40567 + "extend-shallow": "^3.0.2",
  40568 + "safe-regex": "^1.1.0"
  40569 + },
  40570 + "dependencies": {
  40571 + "extend-shallow": {
  40572 + "version": "3.0.2",
  40573 + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
  40574 + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
  40575 + "dev": true,
  40576 + "optional": true,
  40577 + "peer": true,
  40578 + "requires": {
  40579 + "assign-symbols": "^1.0.0",
  40580 + "is-extendable": "^1.0.1"
  40581 + }
  40582 + },
  40583 + "is-extendable": {
  40584 + "version": "1.0.1",
  40585 + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
  40586 + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
  40587 + "dev": true,
  40588 + "optional": true,
  40589 + "peer": true,
  40590 + "requires": {
  40591 + "is-plain-object": "^2.0.4"
  40592 + }
  40593 + }
  40594 + }
  40595 + },
36473 40596 "regexp.prototype.flags": {
36474 40597 "version": "1.5.2",
36475 40598 "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
... ... @@ -36501,6 +40624,14 @@
36501 40624 "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz",
36502 40625 "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA=="
36503 40626 },
  40627 + "remove-trailing-separator": {
  40628 + "version": "1.1.0",
  40629 + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
  40630 + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
  40631 + "dev": true,
  40632 + "optional": true,
  40633 + "peer": true
  40634 + },
36504 40635 "renderkid": {
36505 40636 "version": "3.0.0",
36506 40637 "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz",
... ... @@ -36513,6 +40644,14 @@
36513 40644 "strip-ansi": "^6.0.1"
36514 40645 }
36515 40646 },
  40647 + "repeat-element": {
  40648 + "version": "1.1.4",
  40649 + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
  40650 + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
  40651 + "dev": true,
  40652 + "optional": true,
  40653 + "peer": true
  40654 + },
36516 40655 "repeat-string": {
36517 40656 "version": "1.6.1",
36518 40657 "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
... ... @@ -36528,6 +40667,13 @@
36528 40667 "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
36529 40668 "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
36530 40669 },
  40670 + "require-main-filename": {
  40671 + "version": "1.0.1",
  40672 + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
  40673 + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==",
  40674 + "dev": true,
  40675 + "peer": true
  40676 + },
36531 40677 "resize-observer-polyfill": {
36532 40678 "version": "1.5.1",
36533 40679 "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
... ... @@ -36567,6 +40713,14 @@
36567 40713 "protocol-buffers-schema": "^3.3.1"
36568 40714 }
36569 40715 },
  40716 + "resolve-url": {
  40717 + "version": "0.2.1",
  40718 + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
  40719 + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
  40720 + "dev": true,
  40721 + "optional": true,
  40722 + "peer": true
  40723 + },
36570 40724 "responselike": {
36571 40725 "version": "1.0.2",
36572 40726 "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
... ... @@ -36609,6 +40763,14 @@
36609 40763 }
36610 40764 }
36611 40765 },
  40766 + "ret": {
  40767 + "version": "0.1.15",
  40768 + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
  40769 + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
  40770 + "dev": true,
  40771 + "optional": true,
  40772 + "peer": true
  40773 + },
36612 40774 "reusify": {
36613 40775 "version": "1.0.4",
36614 40776 "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
... ... @@ -36822,6 +40984,17 @@
36822 40984 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
36823 40985 "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
36824 40986 },
  40987 + "safe-regex": {
  40988 + "version": "1.1.0",
  40989 + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
  40990 + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
  40991 + "dev": true,
  40992 + "optional": true,
  40993 + "peer": true,
  40994 + "requires": {
  40995 + "ret": "~0.1.10"
  40996 + }
  40997 + },
36825 40998 "safe-regex-test": {
36826 40999 "version": "1.0.3",
36827 41000 "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
... ... @@ -36917,6 +41090,13 @@
36917 41090 "randombytes": "^2.1.0"
36918 41091 }
36919 41092 },
  41093 + "set-blocking": {
  41094 + "version": "2.0.0",
  41095 + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
  41096 + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
  41097 + "dev": true,
  41098 + "peer": true
  41099 + },
36920 41100 "set-function-length": {
36921 41101 "version": "1.2.1",
36922 41102 "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
... ... @@ -37065,6 +41245,115 @@
37065 41245 "is-fullwidth-code-point": "^4.0.0"
37066 41246 }
37067 41247 },
  41248 + "snapdragon": {
  41249 + "version": "0.8.2",
  41250 + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
  41251 + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
  41252 + "dev": true,
  41253 + "optional": true,
  41254 + "peer": true,
  41255 + "requires": {
  41256 + "base": "^0.11.1",
  41257 + "debug": "^2.2.0",
  41258 + "define-property": "^0.2.5",
  41259 + "extend-shallow": "^2.0.1",
  41260 + "map-cache": "^0.2.2",
  41261 + "source-map": "^0.5.6",
  41262 + "source-map-resolve": "^0.5.0",
  41263 + "use": "^3.1.0"
  41264 + },
  41265 + "dependencies": {
  41266 + "debug": {
  41267 + "version": "2.6.9",
  41268 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  41269 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  41270 + "dev": true,
  41271 + "optional": true,
  41272 + "peer": true,
  41273 + "requires": {
  41274 + "ms": "2.0.0"
  41275 + }
  41276 + },
  41277 + "ms": {
  41278 + "version": "2.0.0",
  41279 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  41280 + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
  41281 + "dev": true,
  41282 + "optional": true,
  41283 + "peer": true
  41284 + },
  41285 + "source-map": {
  41286 + "version": "0.5.7",
  41287 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
  41288 + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
  41289 + "dev": true,
  41290 + "optional": true,
  41291 + "peer": true
  41292 + }
  41293 + }
  41294 + },
  41295 + "snapdragon-node": {
  41296 + "version": "2.1.1",
  41297 + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
  41298 + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
  41299 + "dev": true,
  41300 + "optional": true,
  41301 + "peer": true,
  41302 + "requires": {
  41303 + "define-property": "^1.0.0",
  41304 + "isobject": "^3.0.0",
  41305 + "snapdragon-util": "^3.0.1"
  41306 + },
  41307 + "dependencies": {
  41308 + "define-property": {
  41309 + "version": "1.0.0",
  41310 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
  41311 + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
  41312 + "dev": true,
  41313 + "optional": true,
  41314 + "peer": true,
  41315 + "requires": {
  41316 + "is-descriptor": "^1.0.0"
  41317 + }
  41318 + },
  41319 + "is-descriptor": {
  41320 + "version": "1.0.3",
  41321 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  41322 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  41323 + "dev": true,
  41324 + "optional": true,
  41325 + "peer": true,
  41326 + "requires": {
  41327 + "is-accessor-descriptor": "^1.0.1",
  41328 + "is-data-descriptor": "^1.0.1"
  41329 + }
  41330 + }
  41331 + }
  41332 + },
  41333 + "snapdragon-util": {
  41334 + "version": "3.0.1",
  41335 + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
  41336 + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
  41337 + "dev": true,
  41338 + "optional": true,
  41339 + "peer": true,
  41340 + "requires": {
  41341 + "kind-of": "^3.2.0"
  41342 + },
  41343 + "dependencies": {
  41344 + "kind-of": {
  41345 + "version": "3.2.2",
  41346 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  41347 + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
  41348 + "dev": true,
  41349 + "optional": true,
  41350 + "peer": true,
  41351 + "requires": {
  41352 + "is-buffer": "^1.1.5"
  41353 + }
  41354 + }
  41355 + }
  41356 + },
37068 41357 "sonic-boom": {
37069 41358 "version": "2.8.0",
37070 41359 "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz",
... ... @@ -37172,6 +41461,13 @@
37172 41461 }
37173 41462 }
37174 41463 },
  41464 + "source-list-map": {
  41465 + "version": "2.0.1",
  41466 + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
  41467 + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
  41468 + "dev": true,
  41469 + "peer": true
  41470 + },
37175 41471 "source-map": {
37176 41472 "version": "0.7.4",
37177 41473 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
... ... @@ -37182,6 +41478,21 @@
37182 41478 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
37183 41479 "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
37184 41480 },
  41481 + "source-map-resolve": {
  41482 + "version": "0.5.3",
  41483 + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
  41484 + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
  41485 + "dev": true,
  41486 + "optional": true,
  41487 + "peer": true,
  41488 + "requires": {
  41489 + "atob": "^2.1.2",
  41490 + "decode-uri-component": "^0.2.0",
  41491 + "resolve-url": "^0.2.1",
  41492 + "source-map-url": "^0.4.0",
  41493 + "urix": "^0.1.0"
  41494 + }
  41495 + },
37185 41496 "source-map-support": {
37186 41497 "version": "0.5.21",
37187 41498 "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
... ... @@ -37198,6 +41509,14 @@
37198 41509 }
37199 41510 }
37200 41511 },
  41512 + "source-map-url": {
  41513 + "version": "0.4.1",
  41514 + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
  41515 + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
  41516 + "dev": true,
  41517 + "optional": true,
  41518 + "peer": true
  41519 + },
37201 41520 "spdx-correct": {
37202 41521 "version": "3.2.0",
37203 41522 "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
... ... @@ -37321,6 +41640,15 @@
37321 41640 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
37322 41641 "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
37323 41642 },
  41643 + "ssf": {
  41644 + "version": "0.10.3",
  41645 + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.3.tgz",
  41646 + "integrity": "sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w==",
  41647 + "dev": true,
  41648 + "requires": {
  41649 + "frac": "~1.1.2"
  41650 + }
  41651 + },
37324 41652 "stable": {
37325 41653 "version": "0.1.8",
37326 41654 "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
... ... @@ -37365,6 +41693,18 @@
37365 41693 "stacktrace-gps": "^3.0.4"
37366 41694 }
37367 41695 },
  41696 + "static-extend": {
  41697 + "version": "0.1.2",
  41698 + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
  41699 + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
  41700 + "dev": true,
  41701 + "optional": true,
  41702 + "peer": true,
  41703 + "requires": {
  41704 + "define-property": "^0.2.5",
  41705 + "object-copy": "^0.1.0"
  41706 + }
  41707 + },
37368 41708 "stdin-discarder": {
37369 41709 "version": "0.1.0",
37370 41710 "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz",
... ... @@ -38125,6 +42465,12 @@
38125 42465 "real-require": "^0.1.0"
38126 42466 }
38127 42467 },
  42468 + "three": {
  42469 + "version": "0.85.2",
  42470 + "resolved": "https://registry.npmjs.org/three/-/three-0.85.2.tgz",
  42471 + "integrity": "sha512-7WdXWM+kk12xkNhbplmeKiujCmD+9ouvpbq4en1xrKvgIM8PX7j34EM2sjS72spf+KaMSqDYhX+ce3ZgvSZ1RQ==",
  42472 + "dev": true
  42473 + },
38128 42474 "throttle-debounce": {
38129 42475 "version": "5.0.0",
38130 42476 "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz",
... ... @@ -38217,12 +42563,99 @@
38217 42563 "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
38218 42564 "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
38219 42565 },
  42566 + "to-object-path": {
  42567 + "version": "0.3.0",
  42568 + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
  42569 + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
  42570 + "dev": true,
  42571 + "optional": true,
  42572 + "peer": true,
  42573 + "requires": {
  42574 + "kind-of": "^3.0.2"
  42575 + },
  42576 + "dependencies": {
  42577 + "kind-of": {
  42578 + "version": "3.2.2",
  42579 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  42580 + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
  42581 + "dev": true,
  42582 + "optional": true,
  42583 + "peer": true,
  42584 + "requires": {
  42585 + "is-buffer": "^1.1.5"
  42586 + }
  42587 + }
  42588 + }
  42589 + },
38220 42590 "to-readable-stream": {
38221 42591 "version": "1.0.0",
38222 42592 "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
38223 42593 "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
38224 42594 "dev": true
38225 42595 },
  42596 + "to-regex": {
  42597 + "version": "3.0.2",
  42598 + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
  42599 + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
  42600 + "dev": true,
  42601 + "optional": true,
  42602 + "peer": true,
  42603 + "requires": {
  42604 + "define-property": "^2.0.2",
  42605 + "extend-shallow": "^3.0.2",
  42606 + "regex-not": "^1.0.2",
  42607 + "safe-regex": "^1.1.0"
  42608 + },
  42609 + "dependencies": {
  42610 + "define-property": {
  42611 + "version": "2.0.2",
  42612 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
  42613 + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
  42614 + "dev": true,
  42615 + "optional": true,
  42616 + "peer": true,
  42617 + "requires": {
  42618 + "is-descriptor": "^1.0.2",
  42619 + "isobject": "^3.0.1"
  42620 + }
  42621 + },
  42622 + "extend-shallow": {
  42623 + "version": "3.0.2",
  42624 + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
  42625 + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
  42626 + "dev": true,
  42627 + "optional": true,
  42628 + "peer": true,
  42629 + "requires": {
  42630 + "assign-symbols": "^1.0.0",
  42631 + "is-extendable": "^1.0.1"
  42632 + }
  42633 + },
  42634 + "is-descriptor": {
  42635 + "version": "1.0.3",
  42636 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  42637 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  42638 + "dev": true,
  42639 + "optional": true,
  42640 + "peer": true,
  42641 + "requires": {
  42642 + "is-accessor-descriptor": "^1.0.1",
  42643 + "is-data-descriptor": "^1.0.1"
  42644 + }
  42645 + },
  42646 + "is-extendable": {
  42647 + "version": "1.0.1",
  42648 + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
  42649 + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
  42650 + "dev": true,
  42651 + "optional": true,
  42652 + "peer": true,
  42653 + "requires": {
  42654 + "is-plain-object": "^2.0.4"
  42655 + }
  42656 + }
  42657 + }
  42658 + },
38226 42659 "to-regex-range": {
38227 42660 "version": "5.0.1",
38228 42661 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
... ... @@ -38973,6 +43406,12 @@
38973 43406 }
38974 43407 }
38975 43408 },
  43409 + "underscore": {
  43410 + "version": "1.6.0",
  43411 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
  43412 + "integrity": "sha512-z4o1fvKUojIWh9XuaVLUDdf86RQiq13AC1dmHbTpoyuu+bquHms76v16CjycCbec87J7z0k//SiQVk0sMdFmpQ==",
  43413 + "dev": true
  43414 + },
38976 43415 "undici-types": {
38977 43416 "version": "5.26.5",
38978 43417 "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
... ... @@ -39009,11 +43448,67 @@
39009 43448 "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
39010 43449 "dev": true
39011 43450 },
  43451 + "unset-value": {
  43452 + "version": "1.0.0",
  43453 + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
  43454 + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
  43455 + "dev": true,
  43456 + "optional": true,
  43457 + "peer": true,
  43458 + "requires": {
  43459 + "has-value": "^0.3.1",
  43460 + "isobject": "^3.0.0"
  43461 + },
  43462 + "dependencies": {
  43463 + "has-value": {
  43464 + "version": "0.3.1",
  43465 + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
  43466 + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
  43467 + "dev": true,
  43468 + "optional": true,
  43469 + "peer": true,
  43470 + "requires": {
  43471 + "get-value": "^2.0.3",
  43472 + "has-values": "^0.1.4",
  43473 + "isobject": "^2.0.0"
  43474 + },
  43475 + "dependencies": {
  43476 + "isobject": {
  43477 + "version": "2.1.0",
  43478 + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
  43479 + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
  43480 + "dev": true,
  43481 + "optional": true,
  43482 + "peer": true,
  43483 + "requires": {
  43484 + "isarray": "1.0.0"
  43485 + }
  43486 + }
  43487 + }
  43488 + },
  43489 + "has-values": {
  43490 + "version": "0.1.4",
  43491 + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
  43492 + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
  43493 + "dev": true,
  43494 + "optional": true,
  43495 + "peer": true
  43496 + }
  43497 + }
  43498 + },
39012 43499 "untildify": {
39013 43500 "version": "4.0.0",
39014 43501 "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
39015 43502 "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw=="
39016 43503 },
  43504 + "upath": {
  43505 + "version": "1.2.0",
  43506 + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
  43507 + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
  43508 + "dev": true,
  43509 + "optional": true,
  43510 + "peer": true
  43511 + },
39017 43512 "update-browserslist-db": {
39018 43513 "version": "1.0.13",
39019 43514 "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
... ... @@ -39038,6 +43533,14 @@
39038 43533 }
39039 43534 }
39040 43535 },
  43536 + "urix": {
  43537 + "version": "0.1.0",
  43538 + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
  43539 + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
  43540 + "dev": true,
  43541 + "optional": true,
  43542 + "peer": true
  43543 + },
39041 43544 "url": {
39042 43545 "version": "0.11.3",
39043 43546 "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz",
... ... @@ -39068,6 +43571,14 @@
39068 43571 "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==",
39069 43572 "dev": true
39070 43573 },
  43574 + "use": {
  43575 + "version": "3.1.1",
  43576 + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
  43577 + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
  43578 + "dev": true,
  43579 + "optional": true,
  43580 + "peer": true
  43581 + },
39071 43582 "use-isomorphic-layout-effect": {
39072 43583 "version": "1.1.2",
39073 43584 "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
... ... @@ -39175,6 +43686,12 @@
39175 43686 "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
39176 43687 "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
39177 43688 },
  43689 + "voc": {
  43690 + "version": "1.0.0",
  43691 + "resolved": "https://registry.npmjs.org/voc/-/voc-1.0.0.tgz",
  43692 + "integrity": "sha512-mQwxWlK+zosxxDTqiFb9ZQBNgd794scgkhVwca7h9sEhvA52f3VzbOK+TOWeS8eSrFXnfuKrxElSPc5oLAetfw==",
  43693 + "dev": true
  43694 + },
39178 43695 "vt-pbf": {
39179 43696 "version": "3.1.3",
39180 43697 "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz",
... ... @@ -39211,6 +43728,277 @@
39211 43728 "graceful-fs": "^4.1.2"
39212 43729 }
39213 43730 },
  43731 + "watchpack-chokidar2": {
  43732 + "version": "2.0.1",
  43733 + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
  43734 + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
  43735 + "dev": true,
  43736 + "optional": true,
  43737 + "peer": true,
  43738 + "requires": {
  43739 + "chokidar": "^2.1.8"
  43740 + },
  43741 + "dependencies": {
  43742 + "anymatch": {
  43743 + "version": "2.0.0",
  43744 + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
  43745 + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
  43746 + "dev": true,
  43747 + "optional": true,
  43748 + "peer": true,
  43749 + "requires": {
  43750 + "micromatch": "^3.1.4",
  43751 + "normalize-path": "^2.1.1"
  43752 + },
  43753 + "dependencies": {
  43754 + "normalize-path": {
  43755 + "version": "2.1.1",
  43756 + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
  43757 + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
  43758 + "dev": true,
  43759 + "optional": true,
  43760 + "peer": true,
  43761 + "requires": {
  43762 + "remove-trailing-separator": "^1.0.1"
  43763 + }
  43764 + }
  43765 + }
  43766 + },
  43767 + "binary-extensions": {
  43768 + "version": "1.13.1",
  43769 + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
  43770 + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
  43771 + "dev": true,
  43772 + "optional": true,
  43773 + "peer": true
  43774 + },
  43775 + "braces": {
  43776 + "version": "2.3.2",
  43777 + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
  43778 + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
  43779 + "dev": true,
  43780 + "optional": true,
  43781 + "peer": true,
  43782 + "requires": {
  43783 + "arr-flatten": "^1.1.0",
  43784 + "array-unique": "^0.3.2",
  43785 + "extend-shallow": "^2.0.1",
  43786 + "fill-range": "^4.0.0",
  43787 + "isobject": "^3.0.1",
  43788 + "repeat-element": "^1.1.2",
  43789 + "snapdragon": "^0.8.1",
  43790 + "snapdragon-node": "^2.0.1",
  43791 + "split-string": "^3.0.2",
  43792 + "to-regex": "^3.0.1"
  43793 + }
  43794 + },
  43795 + "chokidar": {
  43796 + "version": "2.1.8",
  43797 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
  43798 + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
  43799 + "dev": true,
  43800 + "optional": true,
  43801 + "peer": true,
  43802 + "requires": {
  43803 + "anymatch": "^2.0.0",
  43804 + "async-each": "^1.0.1",
  43805 + "braces": "^2.3.2",
  43806 + "fsevents": "^1.2.7",
  43807 + "glob-parent": "^3.1.0",
  43808 + "inherits": "^2.0.3",
  43809 + "is-binary-path": "^1.0.0",
  43810 + "is-glob": "^4.0.0",
  43811 + "normalize-path": "^3.0.0",
  43812 + "path-is-absolute": "^1.0.0",
  43813 + "readdirp": "^2.2.1",
  43814 + "upath": "^1.1.1"
  43815 + }
  43816 + },
  43817 + "define-property": {
  43818 + "version": "2.0.2",
  43819 + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
  43820 + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
  43821 + "dev": true,
  43822 + "optional": true,
  43823 + "peer": true,
  43824 + "requires": {
  43825 + "is-descriptor": "^1.0.2",
  43826 + "isobject": "^3.0.1"
  43827 + }
  43828 + },
  43829 + "fill-range": {
  43830 + "version": "4.0.0",
  43831 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
  43832 + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
  43833 + "dev": true,
  43834 + "optional": true,
  43835 + "peer": true,
  43836 + "requires": {
  43837 + "extend-shallow": "^2.0.1",
  43838 + "is-number": "^3.0.0",
  43839 + "repeat-string": "^1.6.1",
  43840 + "to-regex-range": "^2.1.0"
  43841 + }
  43842 + },
  43843 + "fsevents": {
  43844 + "version": "1.2.13",
  43845 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
  43846 + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
  43847 + "dev": true,
  43848 + "optional": true,
  43849 + "peer": true,
  43850 + "requires": {
  43851 + "bindings": "^1.5.0",
  43852 + "nan": "^2.12.1"
  43853 + }
  43854 + },
  43855 + "glob-parent": {
  43856 + "version": "3.1.0",
  43857 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
  43858 + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
  43859 + "dev": true,
  43860 + "optional": true,
  43861 + "peer": true,
  43862 + "requires": {
  43863 + "is-glob": "^3.1.0",
  43864 + "path-dirname": "^1.0.0"
  43865 + },
  43866 + "dependencies": {
  43867 + "is-glob": {
  43868 + "version": "3.1.0",
  43869 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
  43870 + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
  43871 + "dev": true,
  43872 + "optional": true,
  43873 + "peer": true,
  43874 + "requires": {
  43875 + "is-extglob": "^2.1.0"
  43876 + }
  43877 + }
  43878 + }
  43879 + },
  43880 + "is-binary-path": {
  43881 + "version": "1.0.1",
  43882 + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
  43883 + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
  43884 + "dev": true,
  43885 + "optional": true,
  43886 + "peer": true,
  43887 + "requires": {
  43888 + "binary-extensions": "^1.0.0"
  43889 + }
  43890 + },
  43891 + "is-descriptor": {
  43892 + "version": "1.0.3",
  43893 + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
  43894 + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
  43895 + "dev": true,
  43896 + "optional": true,
  43897 + "peer": true,
  43898 + "requires": {
  43899 + "is-accessor-descriptor": "^1.0.1",
  43900 + "is-data-descriptor": "^1.0.1"
  43901 + }
  43902 + },
  43903 + "is-extendable": {
  43904 + "version": "1.0.1",
  43905 + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
  43906 + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
  43907 + "dev": true,
  43908 + "optional": true,
  43909 + "peer": true,
  43910 + "requires": {
  43911 + "is-plain-object": "^2.0.4"
  43912 + }
  43913 + },
  43914 + "is-number": {
  43915 + "version": "3.0.0",
  43916 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
  43917 + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
  43918 + "dev": true,
  43919 + "optional": true,
  43920 + "peer": true,
  43921 + "requires": {
  43922 + "kind-of": "^3.0.2"
  43923 + },
  43924 + "dependencies": {
  43925 + "kind-of": {
  43926 + "version": "3.2.2",
  43927 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
  43928 + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
  43929 + "dev": true,
  43930 + "optional": true,
  43931 + "peer": true,
  43932 + "requires": {
  43933 + "is-buffer": "^1.1.5"
  43934 + }
  43935 + }
  43936 + }
  43937 + },
  43938 + "micromatch": {
  43939 + "version": "3.1.10",
  43940 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
  43941 + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
  43942 + "dev": true,
  43943 + "optional": true,
  43944 + "peer": true,
  43945 + "requires": {
  43946 + "arr-diff": "^4.0.0",
  43947 + "array-unique": "^0.3.2",
  43948 + "braces": "^2.3.1",
  43949 + "define-property": "^2.0.2",
  43950 + "extend-shallow": "^3.0.2",
  43951 + "extglob": "^2.0.4",
  43952 + "fragment-cache": "^0.2.1",
  43953 + "kind-of": "^6.0.2",
  43954 + "nanomatch": "^1.2.9",
  43955 + "object.pick": "^1.3.0",
  43956 + "regex-not": "^1.0.0",
  43957 + "snapdragon": "^0.8.1",
  43958 + "to-regex": "^3.0.2"
  43959 + },
  43960 + "dependencies": {
  43961 + "extend-shallow": {
  43962 + "version": "3.0.2",
  43963 + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
  43964 + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
  43965 + "dev": true,
  43966 + "optional": true,
  43967 + "peer": true,
  43968 + "requires": {
  43969 + "assign-symbols": "^1.0.0",
  43970 + "is-extendable": "^1.0.1"
  43971 + }
  43972 + }
  43973 + }
  43974 + },
  43975 + "readdirp": {
  43976 + "version": "2.2.1",
  43977 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
  43978 + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
  43979 + "dev": true,
  43980 + "optional": true,
  43981 + "peer": true,
  43982 + "requires": {
  43983 + "graceful-fs": "^4.1.11",
  43984 + "micromatch": "^3.1.10",
  43985 + "readable-stream": "^2.0.2"
  43986 + }
  43987 + },
  43988 + "to-regex-range": {
  43989 + "version": "2.1.1",
  43990 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
  43991 + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
  43992 + "dev": true,
  43993 + "optional": true,
  43994 + "peer": true,
  43995 + "requires": {
  43996 + "is-number": "^3.0.0",
  43997 + "repeat-string": "^1.6.1"
  43998 + }
  43999 + }
  44000 + }
  44001 + },
39214 44002 "wbuf": {
39215 44003 "version": "1.7.3",
39216 44004 "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
... ... @@ -39399,6 +44187,13 @@
39399 44187 "is-weakset": "^2.0.1"
39400 44188 }
39401 44189 },
  44190 + "which-module": {
  44191 + "version": "1.0.0",
  44192 + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
  44193 + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==",
  44194 + "dev": true,
  44195 + "peer": true
  44196 + },
39402 44197 "which-typed-array": {
39403 44198 "version": "1.1.14",
39404 44199 "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
... ... @@ -39491,6 +44286,46 @@
39491 44286 "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
39492 44287 "dev": true
39493 44288 },
  44289 + "xlsx": {
  44290 + "version": "0.10.9",
  44291 + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.10.9.tgz",
  44292 + "integrity": "sha512-XZrdkPmoZt8qPpVmuKNe7EYXyckvBArwFI7SMKiqdXz9ZAXRWx6EFMKpGTyiKklPzRsm2n4cmzADinPIlPi1Jg==",
  44293 + "dev": true,
  44294 + "requires": {
  44295 + "adler-32": "~1.1.0",
  44296 + "cfb": "~0.12.0",
  44297 + "codepage": "~1.10.1",
  44298 + "commander": "~2.11.0",
  44299 + "crc-32": "~1.1.0",
  44300 + "exit-on-epipe": "~1.0.1",
  44301 + "ssf": "~0.10.0"
  44302 + },
  44303 + "dependencies": {
  44304 + "commander": {
  44305 + "version": "2.11.0",
  44306 + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
  44307 + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
  44308 + "dev": true
  44309 + }
  44310 + }
  44311 + },
  44312 + "xmlbuilder": {
  44313 + "version": "2.6.5",
  44314 + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.6.5.tgz",
  44315 + "integrity": "sha512-Ehby0RBBPAQAef3zP1636SPzwcfepVu69dmyCMkFioYOw/a6CULZbkRn8MCsVFzakt3+Zv23hecYdEsps9fRBQ==",
  44316 + "dev": true,
  44317 + "requires": {
  44318 + "lodash": "^3.5.0"
  44319 + },
  44320 + "dependencies": {
  44321 + "lodash": {
  44322 + "version": "3.10.1",
  44323 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
  44324 + "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==",
  44325 + "dev": true
  44326 + }
  44327 + }
  44328 + },
39494 44329 "xtend": {
39495 44330 "version": "4.0.2",
39496 44331 "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
... ...
package.json
... ... @@ -19,6 +19,7 @@
19 19 "@umijs/max": "^4.0.87",
20 20 "antd": "^5.10.2",
21 21 "axios": "^1.6.1",
  22 + "base-64": "^1.0.0",
22 23 "lodash": "^4.17.21",
23 24 "print-js": "^1.6.0"
24 25 },
... ... @@ -32,6 +33,7 @@
32 33 "prettier": "^3.0.3",
33 34 "prettier-plugin-organize-imports": "^3.2.3",
34 35 "prettier-plugin-packagejson": "^2.4.6",
  36 + "react-file-viewer": "^1.2.1",
35 37 "tailwindcss": "^3",
36 38 "ts-gear": "^4.11.7",
37 39 "typescript": "^5.2.2"
... ...
src/app.ts
... ... @@ -24,7 +24,8 @@ export const layout = () =&gt; {
24 24 // rightContentRender: () => <RightContent />,
25 25 // footerRender: () => <Footer />,
26 26 },
27   - // collapsed: true,
  27 + collapsed: true,
  28 + // breakpoint:false
28 29 };
29 30 };
30 31  
... ...
src/pages/Order/components/ApplyForInvoicingModal.tsx
1 1 import { RESPONSE_CODE } from '@/constants/enum';
2   -import {
3   - postServiceOrderApplyInvoicing,
4   - postServiceOrderMergeApplyInvoicing,
5   -} from '@/services';
6   -import { enumToSelect, getAliYunOSSFileNameFromUrl } from '@/utils';
  2 +import { postServiceOrderApplyInvoicing } from '@/services';
  3 +import { FloatAdd, enumToSelect, getAliYunOSSFileNameFromUrl } from '@/utils';
7 4 import {
8 5 ModalForm,
9 6 ProFormDatePicker,
... ... @@ -12,47 +9,35 @@ import {
12 9 ProFormUploadDragger,
13 10 } from '@ant-design/pro-components';
14 11 import { Form, message } from 'antd';
15   -import { cloneDeep } from 'lodash';
16   -import { useState } from 'react';
  12 +import { useEffect, useState } from 'react';
17 13 import { PAYEE_OPTIONS } from '../constant';
18 14 export default ({
19 15 setCheckVisible,
20 16 isEdit,
21   - data,
22 17 subOrders,
23 18 isMainOrder,
24 19 onClose,
25 20 }) => {
26 21 const [isUrgent, setIsUrgent] = useState('');
27   - let ids = [];
28   - let newSubOrder = {};
29 22 let sumPrice = 0;
30 23  
31   - for (let order of subOrders) {
32   - sumPrice += parseFloat(order.totalPayment);
33   - }
  24 + let ids = subOrders?.map((item) => {
  25 + sumPrice = FloatAdd(item.subOrderPayment, sumPrice);
  26 + return item.id;
  27 + });
34 28  
35   - /**
36   - * isMainOrder:合并申请开票 data是选中的主订单id集合
37   - * isEdit:编辑备注 subOrders为申请开票的子订单集合
38   - * !isMainOrder&&!isEdit:订单申请开票 subOrders为申请开票的子订单集合
39   - */
40   - if (isMainOrder) {
41   - ids = data;
42   - } else {
43   - newSubOrder = cloneDeep(subOrders[0]);
44   - ids = subOrders?.map((item) => {
45   - sumPrice += parseFloat(item.totalPayment);
46   - return item.id;
47   - });
48   - }
  29 + let mainIdSet = new Set();
  30 + subOrders?.forEach((item: { mainOrderId: unknown }) => {
  31 + mainIdSet.add(item.mainOrderId);
  32 + });
  33 +
  34 + let mainIds = Array.from(mainIdSet).join(',');
49 35  
50 36 let newListAnnex = [];
51 37  
52 38 //回显,子订单可以编辑备注跟附件
53 39 if (isEdit) {
54   - newSubOrder = cloneDeep(subOrders[0]);
55   - newListAnnex = newSubOrder.afterAnnexList?.map((path) => {
  40 + newListAnnex = subOrders.afterAnnexList?.map((path) => {
56 41 let i = 0;
57 42 return {
58 43 uid: i++,
... ... @@ -62,13 +47,7 @@ export default ({
62 47 response: { data: [path] },
63 48 };
64 49 });
65   - newSubOrder.filePaths = newListAnnex;
66   - }
67   -
68   - //拼接主订单id
69   - if (isMainOrder) {
70   - console.log('in');
71   - newSubOrder.applyInvoicingNotes = ids.join(',');
  50 + subOrders.filePaths = newListAnnex;
72 51 }
73 52  
74 53 const [form] = Form.useForm<{
... ... @@ -81,17 +60,10 @@ export default ({
81 60 deadline: string;
82 61 }>();
83 62  
84   - /**
85   - * 如果不是预付款的订单,并且付款公司未选中,那么默认选[任意]
86   - */
87   - // let paymentMethod = subOrders[0].paymentMethod;
88   - // let receivingCompany = subOrders[0].receivingCompany;
89   - // if (
90   - // paymentMethod !== 'PAYMENT_IN_ADVANCE' &&
91   - // (receivingCompany === null || receivingCompany === undefined)
92   - // ) {
93   - // form.setFieldValue('receivingCompany', 'ANY');
94   - // }
  63 + useEffect(() => {
  64 + //显示拼接的主订单id
  65 + form.setFieldValue('applyInvoicingNotes', mainIds);
  66 + }, []);
95 67  
96 68 return (
97 69 <ModalForm<{
... ... @@ -103,7 +75,7 @@ export default ({
103 75 width={500}
104 76 open
105 77 title={isEdit ? '修改信息' : '申请开票'}
106   - initialValues={newSubOrder}
  78 + initialValues={subOrders}
107 79 form={form}
108 80 autoFocusFirstInput
109 81 modalProps={{
... ... @@ -127,37 +99,24 @@ export default ({
127 99 return { url: item.response.data[0] };
128 100 });
129 101  
130   - if (isMainOrder) {
131   - const res = await postServiceOrderMergeApplyInvoicing({
132   - data: {
133   - ...values,
134   - mainOrderIds: ids,
135   - },
136   - });
137   - if (res.result === RESPONSE_CODE.SUCCESS) {
138   - message.success(res.message);
139   - onClose();
140   - }
  102 + if (isEdit) {
  103 + values.afterInvoicingUpdate = true;
141 104 } else {
142   - if (isEdit) {
143   - values.afterInvoicingUpdate = true;
144   - } else {
145   - values.afterInvoicingUpdate = false;
146   - }
  105 + values.afterInvoicingUpdate = false;
  106 + }
147 107  
148   - const res = await postServiceOrderApplyInvoicing({ data: values });
  108 + const res = await postServiceOrderApplyInvoicing({ data: values });
149 109  
150   - if (res.result === RESPONSE_CODE.SUCCESS) {
151   - message.success(res.message);
152   - onClose();
153   - }
  110 + if (res.result === RESPONSE_CODE.SUCCESS) {
  111 + message.success(res.message);
  112 + onClose();
154 113 }
155 114 }}
156 115 onOpenChange={setCheckVisible}
157 116 >
158 117 {isMainOrder ? (
159 118 <div className="mb-[24px]">
160   - <span>总订单金额:</span>
  119 + <span>选中子订单金额之和:</span>
161 120 <span className="text-red-500">{sumPrice}¥</span>
162 121 </div>
163 122 ) : (
... ... @@ -170,7 +129,16 @@ export default ({
170 129 <ProFormTextArea
171 130 width="lg"
172 131 name="applyInvoicingNotes"
  132 + key="applyInvoicingNotes"
173 133 placeholder="请输入备注"
  134 + onMetaChange={(val) => {
  135 + console.log(val);
  136 + }}
  137 + proFieldProps={{
  138 + onchange: () => {
  139 + message.info('change');
  140 + },
  141 + }}
174 142 />
175 143 <ProFormSelect
176 144 placeholder="选择收款单位"
... ...
src/pages/Order/components/AttachmentModal.tsx
1   -import { getAliYunOSSFileNameFromUrl } from '@/utils';
2   -import { ModalForm, ProFormUploadDragger } from '@ant-design/pro-components';
3   -import { Button, Empty, Form } from 'antd';
  1 +import { getAliYunOSSFileNameFromUrl, isImageName } from '@/utils';
  2 +import { ModalForm } from '@ant-design/pro-components';
  3 +import { Button, Card, Divider, Empty, Form, Image, List, message } from 'antd';
  4 +import Base64 from 'base-64';
4 5 import { cloneDeep } from 'lodash';
5   -import { useEffect, useState } from 'react';
  6 +import React, { useEffect, useState } from 'react';
6 7  
7 8 export default ({ data, onClose }) => {
8 9 let newData = cloneDeep(data);
9 10 const [fileList, setFileList] = useState<[]>([]);
  11 + console.log(fileList);
10 12 const [form] = Form.useForm<{
11 13 subOrderId: '';
12 14 listAnnex: [];
... ... @@ -23,13 +25,25 @@ export default ({ data, onClose }) =&gt; {
23 25 };
24 26 });
25 27 newData.listAnnex = newListAnnex;
  28 +
  29 + //将图片和其他文件区分开
  30 + let images: any[] = [];
  31 + let otherAnnex: any[] = [];
  32 + newListAnnex.forEach((item: any) => {
  33 + if (isImageName(item.name)) {
  34 + images.push(item);
  35 + } else {
  36 + otherAnnex.push(item);
  37 + }
  38 + });
  39 +
26 40 useEffect(() => {
27 41 setFileList(newData.listAnnex);
28 42 }, []);
29 43  
30 44 return (
31 45 <ModalForm
32   - width={500}
  46 + width={800}
33 47 open
34 48 title="查看附件"
35 49 initialValues={newData}
... ... @@ -55,28 +69,92 @@ export default ({ data, onClose }) =&gt; {
55 69 {newListAnnex?.length <= 0 ? (
56 70 <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
57 71 ) : (
58   - <ProFormUploadDragger
59   - name="listAnnex"
60   - action="/api/service/order/fileProcess"
61   - disabled
62   - fieldProps={{
63   - headers: { Authorization: localStorage.getItem('token') },
64   - // onRemove: (file) => {
65   - // const index = fileList[listMeta.index].indexOf(file);
66   - // console.log(index);
67   - // const newFileList = fileList.slice();
68   - // newFileList.splice(index, 1);
69   - // setFileList(newFileList);
70   - // },
71   - // beforeUpload: (file) => {
72   - // fileList[listMeta.index] = [...fileList[listMeta.index], file as RcFile];
73   - // setFileList(fileList);
74   - // return true;
75   - // },
76   - fileList,
77   - // defaultFileList: itemFileList
78   - }}
79   - />
  72 + // <ProFormUploadDragger
  73 + // name="listAnnex"
  74 + // action="/api/service/order/fileProcess"
  75 + // disabled
  76 + // fieldProps={{
  77 + // headers: { Authorization: localStorage.getItem('token') },
  78 + // // onRemove: (file) => {
  79 + // // const index = fileList[listMeta.index].indexOf(file);
  80 + // // console.log(index);
  81 + // // const newFileList = fileList.slice();
  82 + // // newFileList.splice(index, 1);
  83 + // // setFileList(newFileList);
  84 + // // },
  85 + // // beforeUpload: (file) => {
  86 + // // fileList[listMeta.index] = [...fileList[listMeta.index], file as RcFile];
  87 + // // setFileList(fileList);
  88 + // // return true;
  89 + // // },
  90 + // fileList,
  91 + // // defaultFileList: itemFileList
  92 + // }}
  93 + // />
  94 + <>
  95 + <Card>
  96 + <Image.PreviewGroup
  97 + className="mr-10"
  98 + preview={{
  99 + onChange: (current, prev) =>
  100 + console.log(`current index: ${current}, prev index: ${prev}`),
  101 + }}
  102 + >
  103 + {images.map((item, index) => (
  104 + <React.Fragment key={index}>
  105 + <Image
  106 + className="max-h-[200px] max-w-[200px]"
  107 + src={item.url}
  108 + title={item.name}
  109 + />{' '}
  110 + <Divider type="vertical" />
  111 + </React.Fragment>
  112 + ))}
  113 + </Image.PreviewGroup>
  114 + </Card>
  115 + <Divider />
  116 +
  117 + <div>
  118 + <List
  119 + size="small"
  120 + header={<div>其他类型文件</div>}
  121 + bordered
  122 + dataSource={otherAnnex}
  123 + renderItem={(item) => (
  124 + <List.Item
  125 + actions={[
  126 + <Button
  127 + type="link"
  128 + key="key"
  129 + href={item.url}
  130 + className="py-1"
  131 + >
  132 + 下载
  133 + </Button>,
  134 + <Button
  135 + type="link"
  136 + key="key"
  137 + className="py-1"
  138 + onClick={() => {
  139 + message.info(item.url);
  140 + window.open(
  141 + '/previewApi/onlinePreview?url=' +
  142 + encodeURIComponent(Base64.encode(item.url)),
  143 + );
  144 + }}
  145 + >
  146 + 预览
  147 + </Button>,
  148 + ]}
  149 + >
  150 + <div>
  151 + <span>{item.name}</span>
  152 + </div>
  153 + </List.Item>
  154 + )}
  155 + />
  156 + </div>
  157 + </>
80 158 )}
81 159 </ModalForm>
82 160 );
... ...
src/pages/Order/components/BaseModal.tsx
... ... @@ -2,7 +2,7 @@ import { ModalForm } from &#39;@ant-design/pro-components&#39;;
2 2 import { Form } from 'antd';
3 3  
4 4 // import { cloneDeep } from 'lodash';
5   -export default ({ setCheckVisible, onClose }) => {
  5 +export default ({ setVisible, onClose }) => {
6 6 const [form] = Form.useForm<{ name: string; company: string }>();
7 7  
8 8 return (
... ... @@ -21,14 +21,14 @@ export default ({ setCheckVisible, onClose }) =&gt; {
21 21 cancelText: '取消',
22 22 destroyOnClose: true,
23 23 onCancel: () => {
24   - setCheckVisible(false);
  24 + setVisible(false);
25 25 },
26 26 }}
27 27 onFinish={async (values) => {
28 28 console.log(values);
29 29 onClose();
30 30 }}
31   - onOpenChange={setCheckVisible}
  31 + onOpenChange={setVisible}
32 32 ></ModalForm>
33 33 </>
34 34 );
... ...
src/pages/Order/components/CheckModal.tsx
1 1 import { RESPONSE_CODE } from '@/constants/enum';
2 2 import {
3 3 postServiceOrderAfterSalesCheck,
4   - postServiceOrderCheckOrder,
  4 + postServiceOrderAudit,
5 5 postServiceOrderFileProcess,
6 6 postServiceOrderFinanceCheckOrder,
7 7 postServiceOrderLeaderAudit,
  8 + postServiceOrderToProcureAudit,
8 9 } from '@/services';
9 10 import { ModalForm, ProFormTextArea } from '@ant-design/pro-components';
10 11 import { Button, Col, Form, Modal, Row, UploadFile, message } from 'antd';
... ... @@ -221,8 +222,9 @@ export default ({
221 222 headers: { Authorization: localStorage.getItem('token') },
222 223 };
223 224  
  225 + //仓库审核
224 226 async function doCheck(body: object) {
225   - const data = await postServiceOrderCheckOrder({
  227 + const data = await postServiceOrderAudit({
226 228 data: body,
227 229 });
228 230 if (data.result === RESPONSE_CODE.SUCCESS) {
... ... @@ -324,6 +326,20 @@ export default ({
324 326 }
325 327 }
326 328  
  329 + /**
  330 + *
  331 + * @param body 后置审核
  332 + */
  333 + async function doPostAudit(body: object) {
  334 + const data = await postServiceOrderAudit({
  335 + data: body,
  336 + });
  337 + if (data.result === RESPONSE_CODE.SUCCESS) {
  338 + message.success(data.message);
  339 + onClose();
  340 + }
  341 + }
  342 +
327 343 return (
328 344 <>
329 345 <ModalForm<{
... ... @@ -350,12 +366,12 @@ export default ({
350 366 <Button
351 367 key="驳回"
352 368 onClick={async () => {
353   - if (checkType(CHECK_TYPE.NORMAL)) {
  369 + if (checkType(CHECK_TYPE.WEARHOUSE_KEEPER)) {
354 370 doCheck({
355   - flag: false,
356   - ids: subOrderIds,
357   - externalProcurement: 0,
358   - checkNotes: form.getFieldValue('name'),
  371 + pass: false,
  372 + subOrderIds: subOrderIds,
  373 + type: 'warehouse_audit',
  374 + notes: form.getFieldValue('name'),
359 375 });
360 376 return;
361 377 }
... ... @@ -394,6 +410,15 @@ export default ({
394 410 });
395 411 return;
396 412 }
  413 +
  414 + if (checkType(CHECK_TYPE.WAITING_FOR_POST_AUDIT)) {
  415 + return doPostAudit({
  416 + pass: false,
  417 + notes: form.getFieldValue('name'),
  418 + type: 'post_audit',
  419 + subOrderIds: subOrderIds,
  420 + });
  421 + }
397 422 }}
398 423 >
399 424 驳回
... ... @@ -401,17 +426,21 @@ export default ({
401 426 );
402 427  
403 428 //如果是仓库审核,那么显示这个外部采购
404   - if (checkType(CHECK_TYPE.NORMAL)) {
  429 + if (checkType(CHECK_TYPE.WEARHOUSE_KEEPER)) {
405 430 myDoms.push(
406 431 <Button
407 432 key="外部采购"
408   - onClick={() => {
409   - doCheck({
410   - flag: false,
411   - ids: subOrderIds,
412   - externalProcurement: 1,
413   - checkNotes: form.getFieldValue('name'),
  433 + onClick={async () => {
  434 + let res = await postServiceOrderToProcureAudit({
  435 + data: {
  436 + subOrderIds: subOrderIds,
  437 + },
414 438 });
  439 +
  440 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  441 + message.success(res.message);
  442 + onClose();
  443 + }
415 444 }}
416 445 >
417 446 外部采购
... ... @@ -426,13 +455,13 @@ export default ({
426 455 }}
427 456 submitTimeout={2000}
428 457 onFinish={async (values) => {
429   - if (checkType(CHECK_TYPE.NORMAL)) {
  458 + if (checkType(CHECK_TYPE.WEARHOUSE_KEEPER)) {
430 459 //审核通过mainOrderId
431 460 return doCheck({
432   - flag: true,
433   - ids: subOrderIds,
434   - externalProcurement: 0,
435   - checkNotes: values.name,
  461 + pass: true,
  462 + subOrderIds: subOrderIds,
  463 + type: 'warehouse_audit',
  464 + notes: form.getFieldValue('name'),
436 465 });
437 466 }
438 467  
... ... @@ -469,6 +498,15 @@ export default ({
469 498 afterSalesRejectionNotes: values.name,
470 499 });
471 500 }
  501 +
  502 + if (checkType(CHECK_TYPE.WAITING_FOR_POST_AUDIT)) {
  503 + return doPostAudit({
  504 + pass: true,
  505 + notes: values.name,
  506 + type: 'post_audit',
  507 + subOrderIds: subOrderIds,
  508 + });
  509 + }
472 510 }}
473 511 onOpenChange={setCheckVisible}
474 512 >
... ... @@ -520,7 +558,6 @@ export default ({
520 558 >
521 559 <img alt="图片预览" style={{ width: '100%' }} src={previewImage} />
522 560 </Modal>
523   -
524 561 {contextHolder}
525 562 </>
526 563 );
... ...
src/pages/Order/components/ConfirmReceiptModal.tsx
... ... @@ -7,6 +7,9 @@ import { cloneDeep } from &#39;lodash&#39;;
7 7 import { useEffect, useRef, useState } from 'react';
8 8 import { COMFIR_RECEIPT_IMAGES_NUMBER } from '../constant';
9 9 export default ({ data, onClose }) => {
  10 + const subIds = data?.map((item) => {
  11 + return item.id;
  12 + });
10 13 // const [form] = Form.useForm<{ name: string; company: string }>();
11 14 const [previewOpen, setPreviewOpen] = useState(false);
12 15 const [previewImage, setPreviewImage] = useState('');
... ... @@ -117,7 +120,7 @@ export default ({ data, onClose }) =&gt; {
117 120 });
118 121 // console.log(fileList[0] as RcFile)
119 122 // formData.append('file', fileList[0] as RcFile);
120   - formData.append('id', data.id);
  123 + formData.append('subIds', subIds);
121 124 setUploading(true);
122 125 // You can use any AJAX library you like
123 126 const res = await postServiceOrderConfirmReceipt({
... ...
src/pages/Order/components/FinancialDrawer.tsx
... ... @@ -4,7 +4,7 @@ import {
4 4 postServiceOrderEditOrder,
5 5 postServiceOrderInvoicing,
6 6 } from '@/services';
7   -import { enumToSelect, enumValueToLabel } from '@/utils';
  7 +import { FloatAdd, enumToSelect, enumValueToLabel } from '@/utils';
8 8 import { getReceivingCompanyOptions } from '@/utils/order';
9 9 import {
10 10 DrawerForm,
... ... @@ -14,7 +14,7 @@ import {
14 14 ProFormText,
15 15 ProFormTextArea,
16 16 } from '@ant-design/pro-components';
17   -import { Form, message } from 'antd';
  17 +import { Button, Form, message } from 'antd';
18 18 import { useEffect, useState } from 'react';
19 19 import { INVOCING_STATUS_OPTIONS_OLD, PAYEE_OPTIONS } from '../constant';
20 20  
... ... @@ -45,6 +45,23 @@ export default ({
45 45 form.setFieldValue('payee', receivingCompany);
46 46 }
47 47  
  48 + /**
  49 + * 计算选中子订单的主订单金额之和
  50 + */
  51 + function computeTotalPayment() {
  52 + let distinctMap = new Map();
  53 +
  54 + subOrders?.forEach((item: any) => {
  55 + distinctMap.set(item.mainOrderId, item.totalPayment);
  56 + });
  57 + let sum = 0;
  58 + for (let p of distinctMap.values()) {
  59 + sum = FloatAdd(p, sum);
  60 + }
  61 +
  62 + form.setFieldValue('money', sum);
  63 + }
  64 +
48 65 return (
49 66 <DrawerForm<{
50 67 name: string;
... ... @@ -67,12 +84,9 @@ export default ({
67 84 }}
68 85 submitTimeout={2000}
69 86 onFinish={async (values) => {
70   - console.log(values);
71 87 let res;
72 88 let body = values;
73 89 body.subIds = subIds;
74   - body.mainOrderId = mainOrder.id;
75   - body.mainorderOrSubOrderInvoicing = isMainOrder;
76 90 if (isEdit) {
77 91 res = await postServiceOrderEditOrder({ data: body });
78 92 } else {
... ... @@ -195,13 +209,27 @@ export default ({
195 209 rules={[{ required: true, message: '收款单位必填' }]}
196 210 />,
197 211  
198   - <ProFormDigit
199   - key="money"
200   - name="money"
201   - width="lg"
202   - label="金额"
203   - rules={[{ required: true, message: '金额必填' }]}
204   - />,
  212 + <div id="total-payment" key="money">
  213 + <ProFormDigit
  214 + key="money"
  215 + name="money"
  216 + width="lg"
  217 + label="金额"
  218 + rules={[{ required: true, message: '金额必填' }]}
  219 + tooltip="点击计算,合计所有子订单对应主订单总额"
  220 + fieldProps={{
  221 + addonAfter: (
  222 + <Button
  223 + className="rounded-l-none"
  224 + type="primary"
  225 + onClick={computeTotalPayment}
  226 + >
  227 + 计算
  228 + </Button>
  229 + ),
  230 + }}
  231 + />
  232 + </div>,
205 233 ]
206 234 : ''}
207 235  
... ...
src/pages/Order/components/FinancialMergeDrawer.tsx
1 1 // import { PlusOutlined } from '@ant-design/icons';
2 2 import { RESPONSE_CODE } from '@/constants/enum';
3   -import { postServiceOrderMergeInvoicing } from '@/services';
4 3 import { enumToSelect } from '@/utils';
5 4 import {
6 5 DrawerForm,
... ... @@ -14,9 +13,9 @@ import { Form, message } from &#39;antd&#39;;
14 13 import { PAYEE_OPTIONS } from '../constant';
15 14  
16 15 export default ({ dataList, setVisible, onClose }) => {
17   - let mainOrderIds = dataList?.map((item) => {
18   - return item.id;
19   - });
  16 + // let subOrderIds = dataList?.map((item) => {
  17 + // return item.id;
  18 + // });
20 19 let firstMainOrder = dataList[0];
21 20 let bank = firstMainOrder?.bank;
22 21 let bankAccountNumber = firstMainOrder?.bankAccountNumber;
... ... @@ -47,13 +46,17 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
47 46 }}
48 47 submitTimeout={2000}
49 48 onFinish={async (values) => {
50   - let res = await postServiceOrderMergeInvoicing({
51   - data: {
52   - ...values,
53   - mainOrderIds: mainOrderIds,
54   - },
55   - });
56   -
  49 + console.log(values);
  50 + let res;
  51 + let body = values;
  52 + body.subIds = subIds;
  53 + body.mainOrderId = mainOrder.id;
  54 + body.mainorderOrSubOrderInvoicing = isMainOrder;
  55 + if (isEdit) {
  56 + res = await postServiceOrderEditOrder({ data: body });
  57 + } else {
  58 + res = await postServiceOrderInvoicing({ data: body });
  59 + }
57 60 if (res.result === RESPONSE_CODE.SUCCESS) {
58 61 message.success(res.message);
59 62 onClose();
... ...
src/pages/Order/components/HistoryModal.tsx
1 1 import { postServiceOrderQueryHistoryOrderRecord } from '@/services';
2   -import { enumValueToLabel, formatDateTime } from '@/utils';
  2 +import { formatDateTime } from '@/utils';
3 3 import { Button, Col, Empty, Flex, Modal, Row, Spin } from 'antd';
4 4 import { useEffect, useState } from 'react';
5   -import { HISTORY_OPT_TYPE, ORDER_STATUS_OPTIONS } from '../constant';
  5 +import { HISTORY_OPT_TYPE } from '../constant';
6 6  
7 7 export default ({ subOrders, isCancelledOrder, onClose }) => {
8 8 let subOrderIds = subOrders?.map((subOrder: any) => {
... ... @@ -46,21 +46,21 @@ export default ({ subOrders, isCancelledOrder, onClose }) =&gt; {
46 46 </span>,
47 47 );
48 48  
49   - let label = enumValueToLabel(history.status, ORDER_STATUS_OPTIONS);
50   -
51   - if (
52   - history.record !== 'INVOICING' &&
53   - history.record?.indexOf(':') === -1 &&
54   - label !== undefined &&
55   - label !== ''
56   - ) {
57   - record.push(
58   - <>
59   - <span>,订单状态为:</span>
60   - <span className="text-[#3b83e5]">{label}</span>
61   - </>,
62   - );
63   - }
  49 + // let label = enumValueToLabel(history.status, ORDER_STATUS_OPTIONS);
  50 +
  51 + // if (
  52 + // history.record !== 'INVOICING' && history.record !== 'order-change-normal' && history.record !== 'order-change-normal-CHECK' &&
  53 + // history.record?.indexOf(':') === -1 &&
  54 + // label !== undefined &&
  55 + // label !== ''
  56 + // ) {
  57 + // record.push(
  58 + // <>
  59 + // <span>,订单状态为:</span>
  60 + // <span className="text-[#3b83e5]">{label}</span>
  61 + // </>,
  62 + // );
  63 + // }
64 64  
65 65 if (history.record?.indexOf(':') !== -1) {
66 66 let values = history.record?.split(':');
... ... @@ -79,6 +79,12 @@ export default ({ subOrders, isCancelledOrder, onClose }) =&gt; {
79 79 record.push(<span className="pl-1">{'备注:' + history.notes}</span>);
80 80 }
81 81  
  82 + if (history.description !== null) {
  83 + record.push(
  84 + <span className="pl-1">{'描述:' + history.description}</span>,
  85 + );
  86 + }
  87 +
82 88 return record;
83 89 };
84 90  
... ...
src/pages/Order/components/ImportModal.tsx
... ... @@ -89,7 +89,7 @@ export default ({ onClose }) =&gt; {
89 89 <Modal
90 90 width={500}
91 91 open
92   - title="导入"
  92 + title="批量发货"
93 93 footer={[
94 94 <Button key="cancel" onClick={onClose}>
95 95 取消
... ...
src/pages/Order/components/KingdeeCustomerModal.tsx
... ... @@ -139,6 +139,10 @@ export default ({ setVisible, data, onClose }) =&gt; {
139 139 resolve(true);
140 140 });
141 141 },
  142 + beforeAddRow: (defaultValue) => {
  143 + defaultValue.id = undefined; //复制的时候要把id去掉
  144 + return defaultValue;
  145 + },
142 146 }}
143 147 deleteIconProps={{
144 148 Icon: CloseCircleOutlined,
... ...
src/pages/Order/components/ModifiedDiffModal.tsx 0 → 100644
  1 +import { postServiceOrderModifiedDiff } from '@/services';
  2 +import { enumValueToLabel, getAliYunOSSFileNameFromUrl } from '@/utils';
  3 +import { Button, Modal, Space, Table, TableProps } from 'antd';
  4 +import Base64 from 'base-64';
  5 +import { useEffect, useState } from 'react';
  6 +import {
  7 + PRODUCT_BELONG_DEPARTMENT_OPTIONS,
  8 + SHIPPING_WAREHOUSE_OPTIONS,
  9 +} from '../constant';
  10 +import '../table.less';
  11 +
  12 +export default ({ setVisible, subOrders, onClose }) => {
  13 + let ids = subOrders?.map((item: any) => {
  14 + return item.id;
  15 + });
  16 +
  17 + const [diffDatas, setDiffDatas] = useState([]);
  18 +
  19 + async function loadData() {
  20 + let res = await postServiceOrderModifiedDiff({
  21 + data: {
  22 + subOrderIds: ids,
  23 + },
  24 + });
  25 + let datas = res?.data;
  26 + setDiffDatas(datas);
  27 + }
  28 +
  29 + useEffect(() => {
  30 + loadData();
  31 + }, []);
  32 +
  33 + function toChineseName(key: any, text: any) {
  34 + let newText = text;
  35 + if (key === '所属事业部') {
  36 + newText = enumValueToLabel(text, PRODUCT_BELONG_DEPARTMENT_OPTIONS);
  37 + }
  38 + if (key === '发货仓库') {
  39 + newText = enumValueToLabel(text, SHIPPING_WAREHOUSE_OPTIONS);
  40 + }
  41 + if (key === '单价' || key === '合计') {
  42 + newText = '¥' + newText;
  43 + }
  44 + return newText;
  45 + }
  46 +
  47 + function cellRender(value: any, record: any) {
  48 + if (record.fieldName === '附件') {
  49 + return (
  50 + <Space className="max-w-[300px]" wrap>
  51 + {value?.map((item: any, index: any) => {
  52 + let fileName = getAliYunOSSFileNameFromUrl(item);
  53 + return (
  54 + <Button
  55 + className="p-0 pr-2"
  56 + key={index}
  57 + danger={record.isDiff}
  58 + type="link"
  59 + onClick={() => {
  60 + window.open(
  61 + '/previewApi/onlinePreview?url=' +
  62 + encodeURIComponent(Base64.encode(item)),
  63 + );
  64 + }}
  65 + >
  66 + {fileName}
  67 + </Button>
  68 + );
  69 + })}
  70 + </Space>
  71 + );
  72 + }
  73 + return (
  74 + <div
  75 + title={toChineseName(record.fieldName, value)}
  76 + className="max-w-[300px] whitespace-no-wrap overflow-hidden overflow-ellipsis"
  77 + >
  78 + <span className={record.isDiff ? 'text-[red]' : ''}>
  79 + {toChineseName(record.fieldName, value)}
  80 + </span>
  81 + </div>
  82 + );
  83 + }
  84 +
  85 + interface DataType {
  86 + fieldName: string;
  87 + oldValue: string;
  88 + newValue: string;
  89 + isDiff: boolean;
  90 + }
  91 +
  92 + const columns: TableProps<DataType>['columns'] = [
  93 + {
  94 + title: '字段名',
  95 + dataIndex: 'fieldName',
  96 + key: 'fieldName',
  97 + },
  98 + {
  99 + title: '修改前字段值',
  100 + dataIndex: 'oldValue',
  101 + key: 'oldValue',
  102 + render(value, record) {
  103 + return cellRender(value, record);
  104 + },
  105 + },
  106 + {
  107 + title: '修改后(当前)字段值',
  108 + dataIndex: 'newValue',
  109 + key: 'newValue',
  110 + render(value, record) {
  111 + return cellRender(value, record);
  112 + },
  113 + },
  114 + ];
  115 +
  116 + return (
  117 + <>
  118 + <Modal
  119 + width={700}
  120 + open
  121 + title="信息对比"
  122 + okText="返回"
  123 + cancelText={false}
  124 + onOk={() => {
  125 + setVisible(false);
  126 + onClose();
  127 + }}
  128 + destroyOnClose={true}
  129 + >
  130 + {diffDatas?.map((item: any, index) => {
  131 + //转换为表格数据
  132 + let oldDatas = item[0];
  133 + let curDatas = item[1];
  134 + let diffFiledNames = oldDatas?.diffFieldsName;
  135 +
  136 + let tableData = [];
  137 + let visibleFields = [
  138 + ['productName', '商品名称'],
  139 + ['productCode', '商品编码'],
  140 + ['parameters', '商品参数'],
  141 + ['quantity', '数量'],
  142 + ['productPrice', '单价'],
  143 + ['unit', '单位'],
  144 + ['subOrderPayment', '合计'],
  145 + ['productBelongBusiness', '所属事业部'],
  146 + ['shippingWarehouse', '发货仓库'],
  147 + ['notes', '备注'],
  148 + ['listAnnex', '附件'],
  149 + ];
  150 + for (let field of visibleFields) {
  151 + let filedKey = field[0];
  152 + let filedName = field[1];
  153 + tableData.push({
  154 + fieldName: filedName,
  155 + oldValue: oldDatas[filedKey],
  156 + newValue: curDatas[filedKey],
  157 + isDiff: diffFiledNames?.includes(filedKey),
  158 + });
  159 + }
  160 + return (
  161 + <Table
  162 + className="myTable"
  163 + size="small"
  164 + pagination={false}
  165 + key={index}
  166 + columns={columns}
  167 + dataSource={tableData}
  168 + />
  169 + );
  170 + })}
  171 + </Modal>
  172 + </>
  173 + );
  174 +};
... ...
src/pages/Order/components/OrderDrawer.tsx
... ... @@ -231,6 +231,10 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
231 231 function buildOrderData() {
232 232 // let mainInfoDisbled = optType('edit');
233 233 if (!optType('add')) {
  234 + if (subOrders !== undefined && subOrders.length > 0) {
  235 + copyData.subOrderInformationLists = subOrders;
  236 + }
  237 +
234 238 //如果是复制,需要开票,不回显是否需要开票字段
235 239 if (optType('copy')) {
236 240 if (copyData.invoicingStatus === 'INVOICED') {
... ... @@ -253,9 +257,9 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
253 257 copyData.subOrderInformationLists[0].invoicingStatus;
254 258  
255 259 //子订单数据处理:子订单在表单中的命名为list
  260 + let i = 0;
256 261 let newList = copyData.subOrderInformationLists?.map((item) => {
257 262 item.filePaths = item.listAnnex?.map((path) => {
258   - let i = 0;
259 263 return {
260 264 uid: i++,
261 265 name: getAliYunOSSFileNameFromUrl(path),
... ... @@ -267,11 +271,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
267 271 return item;
268 272 });
269 273  
270   - copyData.list = newList;
271   -
272   - if (subOrders !== undefined && subOrders.length > 0) {
273   - copyData.list = subOrders;
274   - }
  274 + copyData['list'] = newList;
275 275  
276 276 //发货仓库处理
277 277 for (let listItem of copyData.list) {
... ... @@ -281,7 +281,6 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
281 281 }
282 282  
283 283 setInvoicingStatus(copyData.invoicingStatus);
284   -
285 284 form.setFieldsValue({ ...copyData });
286 285  
287 286 //如果是新建,需要清空list
... ... @@ -1363,8 +1362,8 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1363 1362 placeholder="请输入备注"
1364 1363 rules={[
1365 1364 {
1366   - max: 120, // 最大长度为120个字符
1367   - message: '备注不能超过120个字符',
  1365 + max: 1000, // 最大长度为1000个字符
  1366 + message: '备注不能超过1000个字符',
1368 1367 },
1369 1368 ]}
1370 1369 />,
... ...
src/pages/Order/components/ProcureCheckModal.tsx
... ... @@ -11,18 +11,12 @@ import {
11 11 } from '@ant-design/pro-components';
12 12 import { Button, Form, Input, Popconfirm, message } from 'antd';
13 13 import { useState } from 'react';
14   -export default ({ setCheckVisible, isMainOrder, data, orders, onClose }) => {
  14 +export default ({ setCheckVisible, isMainOrder, orders, onClose }) => {
15 15 const [form] = Form.useForm<{ supplier: string }>();
16   -
  16 + console.log(isMainOrder);
17 17 const [checkNotes, setCheckNotes] = useState<string>('');
18 18  
19   - let ids: any[] = [];
20   - //是单条子订单审核
21   - if (orders === undefined) {
22   - ids = [data.id];
23   - } else {
24   - ids = orders.map((order: any) => order.id);
25   - }
  19 + let ids: any[] = orders.map((order: any) => order.id);
26 20 async function doCheck(body: object) {
27 21 const data = await postServiceOrderProcureCheckOrder({
28 22 data: body,
... ... @@ -72,22 +66,14 @@ export default ({ setCheckVisible, isMainOrder, data, orders, onClose }) =&gt; {
72 66 </div>
73 67 }
74 68 onConfirm={async () => {
75   - let res;
76   - if (isMainOrder) {
77   - res = await postServiceOrderProcureConvertWarehouseKeeper({
78   - data: {
79   - mainIds: ids,
80   - checkNotes: checkNotes,
81   - },
82   - });
83   - } else {
84   - res = await postServiceOrderProcureConvertWarehouseKeeper({
  69 + let res = await postServiceOrderProcureConvertWarehouseKeeper(
  70 + {
85 71 data: {
86 72 subIds: ids,
87 73 checkNotes: checkNotes,
88 74 },
89   - });
90   - }
  75 + },
  76 + );
91 77  
92 78 if (res?.result === RESPONSE_CODE.SUCCESS) {
93 79 message.success(res.message);
... ... @@ -112,22 +98,11 @@ export default ({ setCheckVisible, isMainOrder, data, orders, onClose }) =&gt; {
112 98 return;
113 99 }
114 100 let procureIsPrintAndSend = true;
115   - // if (values.name === '采购自行发货') {
116   - // procureIsPrintAndSend = true;
117   - // }
118   - if (isMainOrder) {
119   - return doCheck({
120   - ...values,
121   - mainOrderIds: ids,
122   - procureIsPrintAndSend: procureIsPrintAndSend,
123   - });
124   - } else {
125   - return doCheck({
126   - ...values,
127   - subOrderIds: ids,
128   - procureIsPrintAndSend: procureIsPrintAndSend,
129   - });
130   - }
  101 + return doCheck({
  102 + ...values,
  103 + subOrderIds: ids,
  104 + procureIsPrintAndSend: procureIsPrintAndSend,
  105 + });
131 106 }}
132 107 onOpenChange={setCheckVisible}
133 108 >
... ...
src/pages/Order/components/ProductionTimeModal.tsx 0 → 100644
  1 +import { RESPONSE_CODE } from '@/constants/enum';
  2 +import { postServiceOrderEditProductionTime } from '@/services';
  3 +import { ModalForm, ProFormDatePicker } from '@ant-design/pro-components';
  4 +import { Form, message } from 'antd';
  5 +
  6 +// import { cloneDeep } from 'lodash';
  7 +export default ({ setVisible, subOrders, onClose }) => {
  8 + const [form] = Form.useForm<{
  9 + productionStartTime: string;
  10 + productionEndTime: string;
  11 + }>();
  12 + let ids = subOrders?.map((item: { id: any }) => {
  13 + return item.id;
  14 + });
  15 + let defaultValue = {};
  16 + if (subOrders && subOrders.length > 0) {
  17 + defaultValue = subOrders[0];
  18 + }
  19 + return (
  20 + <>
  21 + <ModalForm<{
  22 + productionStartTime: string;
  23 + productionEndTime: string;
  24 + }>
  25 + width={500}
  26 + open
  27 + title="生产时间"
  28 + form={form}
  29 + autoFocusFirstInput
  30 + initialValues={defaultValue}
  31 + modalProps={{
  32 + okText: '保存',
  33 + cancelText: '取消',
  34 + destroyOnClose: true,
  35 + onCancel: () => {
  36 + setVisible(false);
  37 + },
  38 + }}
  39 + onFinish={async (values) => {
  40 + if (values.productionStartTime > values.productionEndTime) {
  41 + message.error('开始时间不能大于结束时间');
  42 + return;
  43 + }
  44 + let res = await postServiceOrderEditProductionTime({
  45 + data: {
  46 + ...values,
  47 + ids: ids,
  48 + },
  49 + });
  50 +
  51 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  52 + message.success(res.message);
  53 + onClose();
  54 + }
  55 + }}
  56 + onOpenChange={setVisible}
  57 + >
  58 + <span className="text-[red] leading-8">
  59 + 如果选中多个子订单,将默认回显第一个子订单的生产时间
  60 + </span>
  61 + <ProFormDatePicker
  62 + width="lg"
  63 + key="productionStartTime"
  64 + name="productionStartTime"
  65 + label="开始时间"
  66 + placeholder="请输入开始时间"
  67 + rules={[{ required: true, message: '开始时间必填' }]}
  68 + />
  69 +
  70 + <ProFormDatePicker
  71 + width="lg"
  72 + key="productionEndTime"
  73 + name="productionEndTime"
  74 + label="结束时间"
  75 + placeholder="请输入结束时间"
  76 + rules={[{ required: true, message: '结束时间必填' }]}
  77 + />
  78 + </ModalForm>
  79 + </>
  80 + );
  81 +};
... ...
src/pages/Order/constant.ts
1 1 import { postServiceOrderQueryCustomerInformation } from '@/services';
2 2 import { enumToProTableEnumValue } from '@/utils';
3 3 import { getReceivingCompanyOptions } from '@/utils/order';
4   -
5 4 export const COMFIR_RECEIPT_IMAGES_NUMBER = 3;
6 5  
7 6 export const PAYMENT_CHANNEL_OPTIONS = {
... ... @@ -90,13 +89,14 @@ export const INVOCING_STATUS = {
90 89 * 采购审核
91 90 */
92 91 export const CHECK_TYPE = {
93   - NORMAL: 'NORMAL',
  92 + WEARHOUSE_KEEPER: 'WEARHOUSE_KEEPER',
94 93 FINALCIAL: 'FINALCIAL',
95 94 PROCURE: 'PROCURE',
96 95 SUPPLIER: 'SUPPLIER',
97 96 AFTER_SALES: 'AFTER_SALES',
98 97 LEADER_AUDIT: 'LEADER_AUDIT',
99 98 MODIFY_APPLY_WAIT_FOR_AUDIT: 'MODIFY_APPLY_WAIT_FOR_AUDIT',
  99 + WAITING_FOR_POST_AUDIT: 'WAITING_FOR_POST_AUDIT',
100 100 };
101 101  
102 102 /**
... ... @@ -135,9 +135,16 @@ export const LOGISTICS_STATUS_OPTIONS = {
135 135 JINGDONG_LOGISTICS: '京东',
136 136 SF_EXPRESS: '顺丰',
137 137 DEBANG_LOGISTICS: '德邦物流',
  138 + YUNDA_LOGISTICS: '韵达快递',
138 139 OTHER_LOGISTICS: '其他物流方式',
139 140 };
140 141  
  142 +export const POST_AUDIT_OPTIONS = {
  143 + WAITING_FOR_POST_AUDIT: '待后置审核',
  144 + POST_AUDITED: '已后置审核',
  145 + POST_AUDIT_FAIL: '后置审核失败',
  146 +};
  147 +
141 148 export const ORDER_STATUS_OPTIONS = {
142 149 UNAUDITED: '未审核',
143 150 LEADER_PROCESS: '领导待审核',
... ... @@ -167,6 +174,7 @@ export const ORDER_STATUS_OPTIONS = {
167 174 export const PROCURE_PRIMARY_ORDER_STATUS_OPTIONS = {
168 175 PROCURE_UN_PROCESS: '采购未审核',
169 176 PROCURE_WAIT_SHIP: '采购待发货',
  177 + SHIPPED: '已发货',
170 178 };
171 179  
172 180 export const AFTE_SALES_PLAN_OPTIONS = {
... ... @@ -216,6 +224,9 @@ export const TAGS_COLOR = new Map&lt;string, string&gt;([
216 224 ['NO_NEED_SEND', 'success'],
217 225 ['PROCURE_CONVERT_WAREHOUSE_KEEPER', 'processing'],
218 226 ['AFTER_SALES_FAILURE', 'red'],
  227 + ['WAITING_FOR_POST_AUDIT', 'purple'],
  228 + ['POST_AUDITED', 'success'],
  229 + ['POST_AUDIT_FAIL', 'error'],
219 230 ]);
220 231 export const SALES_CODE_OPTIONS = [
221 232 { label: 'D-Linda', value: 'D-Linda' },
... ... @@ -331,6 +342,13 @@ export const HISTORY_OPT_TYPE = new Map&lt;string, string&gt;([
331 342 ['PROCURE_ORDER', '采购下单'],
332 343 ['SALES_APPLY_INVOICING', '申请开票'],
333 344 ['LEADER_AUDIT', '直属领导审核'],
  345 + ['FINANCE_APPLY_INVOICING', '财务开票'],
  346 + ['after-sales', '申请售后'],
  347 + ['after-sales-CHECK', '售后审核'],
  348 + ['order-change-normal', '申请修改'],
  349 + ['order-change-normal-CHECK', '申请修改审核'],
  350 + ['warehouse_audit', '仓库审核'],
  351 + ['post_audit', '后置审核'],
334 352 ]);
335 353  
336 354 export const MAIN_ORDER_COLUMNS = [
... ... @@ -555,6 +573,35 @@ export const MAIN_ORDER_COLUMNS = [
555 573 },
556 574 },
557 575 },
  576 + {
  577 + title: '生产开始时间',
  578 + dataIndex: 'productionStartTime',
  579 + valueType: 'dateRange',
  580 + hideInTable: true,
  581 + search: {
  582 + transform: (value) => {
  583 + return {
  584 + productionStartTimeStart: value[0],
  585 + productionStartTimeEnd: value[1],
  586 + };
  587 + },
  588 + },
  589 + },
  590 +
  591 + {
  592 + title: '生产结束时间',
  593 + dataIndex: 'productionEndTime',
  594 + valueType: 'dateRange',
  595 + hideInTable: true,
  596 + search: {
  597 + transform: (value) => {
  598 + return {
  599 + productionEndTimeStart: value[0],
  600 + productionEndTimeEnd: value[1],
  601 + };
  602 + },
  603 + },
  604 + },
558 605  
559 606 // {
560 607 // title: '是否完全收款',
... ...
src/pages/Order/index.tsx
... ... @@ -3,6 +3,7 @@ import { RESPONSE_CODE } from &#39;@/constants/enum&#39;;
3 3 import {
4 4 postKingdeeRepSalBillOutbound,
5 5 postKingdeeRepSalOrderSave,
  6 + postServiceOrderCancelSend,
6 7 postServiceOrderNoNeedSend,
7 8 postServiceOrderOrderCancel,
8 9 postServiceOrderProcureOrder,
... ... @@ -18,6 +19,8 @@ import {
18 19 enumValueToLabel,
19 20 formatDateTime,
20 21 formatdate,
  22 + getAliYunOSSFileNameFromUrl,
  23 + isImageName,
21 24 } from '@/utils';
22 25 import { getReceivingCompanyOptions } from '@/utils/order';
23 26 import { getUserInfo } from '@/utils/user';
... ... @@ -48,12 +51,15 @@ import {
48 51 Flex,
49 52 Image,
50 53 MenuProps,
  54 + Modal,
  55 + Popconfirm,
51 56 Radio,
52 57 Space,
53 58 Tag,
54 59 Tooltip,
55 60 message,
56 61 } from 'antd';
  62 +import Base64 from 'base-64';
57 63 import { cloneDeep } from 'lodash';
58 64 import React, { Key, useEffect, useRef, useState } from 'react';
59 65 import OrderPrintModal from '../OrderPrint/OrderPrintModal';
... ... @@ -70,10 +76,12 @@ import FinancialMergeDrawer from &#39;./components/FinancialMergeDrawer&#39;;
70 76 import FinancialReceiptsModal from './components/FinancialReceiptsModal';
71 77 import HistoryModal from './components/HistoryModal';
72 78 import ImportModal from './components/ImportModal';
  79 +import ModifiedDiffModal from './components/ModifiedDiffModal';
73 80 import OrderDrawer from './components/OrderDrawer';
74 81 import OrderNotesEditModal from './components/OrderNotesEditModal';
75 82 import ProcureCheckModal from './components/ProcureCheckModal';
76 83 import ProcureConvertModal from './components/ProcureConvertModal';
  84 +import ProductionTimeModal from './components/ProductionTimeModal';
77 85 import ShippingWarehouseChangeModal from './components/ShippingWarehouseChangeModal';
78 86 import SubOrderComfirmReceiptImagesModal from './components/SubOrderComfirmReceiptImagesModal';
79 87 import {
... ... @@ -85,6 +93,7 @@ import {
85 93 PAYEE_OPTIONS,
86 94 PAYMENT_CHANNEL_OPTIONS,
87 95 PAYMENT_METHOD_OPTIONS,
  96 + POST_AUDIT_OPTIONS,
88 97 PROCURE_ORDER_STATUS,
89 98 PROCURE_PRIMARY_ORDER_STATUS_OPTIONS,
90 99 PRODUCT_BELONG_DEPARTMENT_OPTIONS,
... ... @@ -111,6 +120,8 @@ const OrderPage = () =&gt; {
111 120 useState<boolean>(false);
112 121 const [attachmentModalVisible, setAttachmentModalVisible] =
113 122 useState<boolean>(false);
  123 + const [modifiedDiffModalVisible, setModifiedDiffModalVisible] =
  124 + useState<boolean>(false);
114 125 const [financialReceiptsModalVisible, setFinancialReceiptsModalVisible] =
115 126 useState(false);
116 127 const [financialVisible, setFinancialVisible] = useState<boolean>(false);
... ... @@ -132,30 +143,33 @@ const OrderPage = () =&gt; {
132 143 useState<boolean>(false);
133 144 const [confirmReceiptVisible, setConfirmReceiptVisible] =
134 145 useState<boolean>(false);
  146 + const [productionTimeModalVisible, setProductionTimeModalVisible] =
  147 + useState<boolean>(false);
135 148 const [deliverVisible, setDeliverVisible] = useState<boolean>(false);
136 149 const [deliverInfoDrawerVisible, setDeliverInfoDrawerVisible] =
137 150 useState<boolean>(false);
138 151 const [orderOptType, setOrderOptType] = useState<string>('');
139 152 const [isEdit, setIsEdit] = useState<boolean>(false);
140   - const [expandedRowKeys, setExpandedRowKeys] = useState<Key[]>([]);
141   - const [orderRow, setOrderRow] = useState<Partial<OrderType>>({});
  153 + const [expandedRowKeys] = useState<Key[]>([]);
142 154 const [notesType, setNotesType] = useState(1);
143 155 const [notes, setNotes] = useState(1);
144   - const [mainOrderAllItemKeys, setMainOrderAllItemKeys] = useState([]);
145 156 const [rolePath, setRolePath] = useState([]); //当前角色权限(新增跟打印按钮)
146 157 const userInfo = getUserInfo();
147 158 // const [tableHeight, setTableHeight] = useState(200);
148 159 const [selectedRows, setSelectedRows] = useState({});
149   - const [selectedRowObj, setSelectedRowObj] = useState({});
150   - const [selectedItems, setSelectedItems] = useState([]);
151   - const [selectedRowKeys, setSelectedRowKeys] = useState([]);
  160 + const [mainOrderIdSubOrderIdRelationsMap] = useState(new Map()); //主订单id与子订单id的对照关系,用于主订单子订单的勾选校验,子订单全选中对应的主订单自动勾选上
  161 + const [selectedMainOrderKeys, setSelectedMainOrderKeys] = useState<any[]>([]);
  162 + const [selectedSubOrderKeys, setSelectedSubOrderKeys] = useState<any[]>([]);
152 163 const [pageSize, setPageSize] = useState(10);
153 164 const [currentPage, setCurrentPage] = useState(1);
154 165 const [orderCheckType, setOrderCheckType] = useState('');
155 166 const [filterCondifion, setFilterCondition] = useState(0);
156 167 const [mainOrderSelectedMap] = useState(new Map()); //选中的主订单Map key:主订单id value:主订单数据
157 168 const [subOrderSelectedMap] = useState(new Map()); //选中的子订单Map key:主订单id value:选中的子订单数据集合
158   - const [mainOrderSelectedRows, setMainOrderSelectedRows] = useState([]); //选中的主订单集合
  169 + const [currentOptMainId, setCurrentMainId] = useState<any>(undefined); //当前操作对象的主订单id
  170 + const [curretnOptSubId, setCurretnOptSubId] = useState<any>(undefined); //当前操作对象的子订单id
  171 + const [subOrderCount, setSubOrderCount] = useState(0);
  172 + const [sorted, setSorted] = useState(false);
159 173 const mainTableRef = useRef<ActionType>();
160 174 const mainTableFormRef = useRef<ProFormInstance>();
161 175 let [searchParams, setSearchParam] = useState(Object); //表格的查询条件存储
... ... @@ -167,18 +181,6 @@ const OrderPage = () =&gt; {
167 181 const [ids, setIds] = useState([]);
168 182 const roleCode = userInfo?.roleSmallVO?.code;
169 183  
170   - // const openCheckNotes = (checkNotes: string) => {
171   - // Modal.info({
172   - // title: '驳回备注',
173   - // content: (
174   - // <div>
175   - // <p>{checkNotes}</p>
176   - // </div>
177   - // ),
178   - // onOk() { },
179   - // });
180   - // };
181   -
182 184 const exportLoading = () => {
183 185 messageApi.open({
184 186 type: 'loading',
... ... @@ -194,46 +196,10 @@ const OrderPage = () =&gt; {
194 196 const refreshTable = () => {
195 197 mainTableRef.current?.reload();
196 198 //刷新表格数据的时候,取消选中行
197   - setSelectedRowObj([]);
198 199 setSelectedRows([]);
199   - setSelectedRowKeys([]);
  200 + setSelectedSubOrderKeys([]);
200 201 };
201 202  
202   - // function changeCancelOrderShow(e: any) {
203   - // setOnlyShowCancelOrder(e.target.checked);
204   - // refreshTable();
205   - // }
206   -
207   - // function changeProcureToBeProcessed(e: any) {
208   - // setOnlyShowProcureToBeProcessed(e.target.checked);
209   - // refreshTable();
210   - // }
211   -
212   - // function changeOnlyShowOtherProcure(e: any) {
213   - // setOnlyShowOtherProcure(e.target.checked);
214   - // refreshTable();
215   - // }
216   -
217   - // function changeShowCurrentLeaderNeedAuditOrders(e: any) {
218   - // setShowCurrentLeaderNeedAuditOrders(e.target.checked);
219   - // refreshTable();
220   - // }
221   -
222   - // function changeFinancialToBeProcessed(e: any) {
223   - // setOnlyShowFinancialToBeProcessed(e.target.checked);
224   - // refreshTable();
225   - // }
226   -
227   - // function changeOnlyShowIsUrgentOrders(e: any) {
228   - // setOnlyShowIsUrgentOrders(e.target.checked);
229   - // refreshTable();
230   - // }
231   -
232   - // function changeSalesCreateProcessed(e: any) {
233   - // setOnlyShowSalesCreateProcessed(e.target.checked);
234   - // refreshTable();
235   - // }
236   -
237 203 /**
238 204 * 复制订单到剪贴板
239 205 * @param record
... ... @@ -253,6 +219,8 @@ const OrderPage = () =&gt; {
253 219 text += ' ' + item?.parameters;
254 220 text += ' ' + item?.quantity;
255 221 text += ' ' + item?.unit;
  222 + text += ' ¥' + item?.subOrderPayment;
  223 + text += ' ' + item?.id;
256 224 });
257 225 if (copyToClipboard(text)) {
258 226 message.info('已复制到剪贴板');
... ... @@ -261,31 +229,6 @@ const OrderPage = () =&gt; {
261 229 }
262 230 }
263 231  
264   - // const resize = () => {
265   - // // 计算元素底部到视口顶部的距离
266   - // let bottomDistance = document
267   - // .getElementById('mainTable')
268   - // ?.getElementsByClassName('ant-table-thead')[0]
269   - // .getBoundingClientRect().bottom;
270   - // // 获取屏幕高度
271   - // let screenHeight =
272   - // window.innerHeight || document.documentElement.clientHeight;
273   -
274   - // // 计算元素底部到屏幕底部的距离
275   - // let bottomToScreenBottomDistance = screenHeight - bottomDistance;
276   -
277   - // // //底部分页元素的高度
278   - // // var pH = screenHeight - document.getElementById("main-table").getElementsByClassName('ant-table-body')[0].getBoundingClientRect().bottom;
279   -
280   - // setTableHeight(bottomToScreenBottomDistance - 88);
281   - // };
282   -
283   - // useEffect(() => {
284   - // resize();
285   - // // 添加事件监听器,当窗口大小改变时调用resize方法
286   - // window.addEventListener('resize', resize);
287   - // });
288   -
289 232 const MyToolTip = ({ title, content }) => {
290 233 return (
291 234 <Tooltip
... ... @@ -316,65 +259,270 @@ const OrderPage = () =&gt; {
316 259 return true;
317 260 }
318 261  
319   - const onCheckboxChange = (record: never) => {
320   - console.log(subOrderSelectedMap);
321   - let newSelectedItems = [];
322   - if (selectedItems.includes(record.id)) {
323   - newSelectedItems = selectedItems.filter((key) => key !== record.id);
324   - setSelectedRowKeys([]);
325   - setSelectedRowObj({
326   - ...setSelectedRowObj,
327   - [record.id]: [],
  262 + /**
  263 + * 财务是否选中排序
  264 + * @param e
  265 + */
  266 + function financeSorted(e: any) {
  267 + let checked = e?.target.checked;
  268 + setSorted(checked);
  269 + refreshTable();
  270 + }
  271 +
  272 + /**
  273 + * 重置当前的操作对象
  274 + */
  275 + function clearOptObject() {
  276 + setCurrentMainId(undefined);
  277 + setCurretnOptSubId(undefined);
  278 + }
  279 +
  280 + /**
  281 + * 初始化当前的操作对象
  282 + * @param subId
  283 + * @param mainId
  284 + */
  285 + function createOptObject(subId: any, mainId: any) {
  286 + setCurrentMainId(mainId);
  287 + setCurretnOptSubId(subId);
  288 + }
  289 +
  290 + /**
  291 + * 检查当前操作是否异常
  292 + */
  293 + // function checkOptValid() {
  294 + // if ((currentOptMainId === undefined || currentOptMainId === null) && (curretnOptSubId === undefined || curretnOptSubId === null)) {
  295 + // message.error("页面错误:当前操作对象为空,请联系系统管理员");
  296 + // return false;
  297 + // }
  298 +
  299 + // //检查数据是否存在
  300 + // //主订单数据
  301 + // if (!Array.from(mainOrderIdSubOrderIdRelationsMap.keys()).includes(currentOptMainId)) {
  302 + // message.error("页面错误:当前操作主订单对象为空,请联系系统管理员");
  303 + // }
  304 +
  305 + // //子订单
  306 + // let allSubIds = [];
  307 + // for (const idList of mainOrderIdSubOrderIdRelationsMap.values()) {
  308 + // allSubIds.push(...idList);
  309 + // }
  310 + // if (!allSubIds.includes(curretnOptSubId)) {
  311 + // message.error("页面错误:当前操作子订单对象为空,请联系系统管理员");
  312 + // return false
  313 + // }
  314 +
  315 + // return true;
  316 + // }
  317 +
  318 + /**
  319 + * 获取当前选中子订单的其中一个主订单
  320 + */
  321 + function getFirstMainOrder() {
  322 + let mainId = [...subOrderSelectedMap.values()].flat()[0].mainOrderId;
  323 + for (let item of data) {
  324 + if (item.id === mainId) {
  325 + return item;
  326 + }
  327 + }
  328 +
  329 + return null;
  330 + }
  331 +
  332 + /**
  333 + * 返回当前操作的主订单数据
  334 + */
  335 + function buildMainOrder() {
  336 + if (currentOptMainId === undefined || currentOptMainId === null) {
  337 + message.error('页面错误:当前操作的主订单id不存在,请联系系统管理员');
  338 + return;
  339 + }
  340 +
  341 + let mainOrderClone = null;
  342 + let matchedData = data.filter((item) => {
  343 + return item.id === currentOptMainId;
  344 + });
  345 + if (matchedData.length > 0) {
  346 + mainOrderClone = cloneDeep(matchedData[0]);
  347 + }
  348 +
  349 + if (mainOrderClone === null) {
  350 + message.error('页面错误:当前操作的主订单数据不存在,请联系系统管理员');
  351 + }
  352 +
  353 + return mainOrderClone;
  354 + }
  355 +
  356 + /**
  357 + * 返回当前操作的子订单集合
  358 + */
  359 + function buildSubOrders() {
  360 + console.log('here');
  361 + if (currentOptMainId === undefined || currentOptMainId === null) {
  362 + message.error('页面错误:当前操作的主订单id不存在,请联系系统管理员');
  363 + return;
  364 + }
  365 +
  366 + let cloneSubOrders = [];
  367 +
  368 + //如果没有传当前操作的子订单id,说明是操作主订单
  369 + if (curretnOptSubId === undefined || curretnOptSubId === null) {
  370 + //如果有选中子订单,那么取选中的子订单为操作对象,否则取当前主订单的全部子订单为操作对象
  371 + let currentOptSubOrders = subOrderSelectedMap.get(currentOptMainId);
  372 + if (
  373 + currentOptSubOrders === null ||
  374 + currentOptSubOrders === undefined ||
  375 + currentOptSubOrders.length === 0
  376 + ) {
  377 + for (let item of data) {
  378 + if (item.id === currentOptMainId) {
  379 + for (let subOrder of item?.subOrderInformationLists) {
  380 + cloneSubOrders.push(cloneDeep(subOrder));
  381 + }
  382 + }
  383 + }
  384 + } else {
  385 + cloneSubOrders = currentOptSubOrders.map((item) => {
  386 + return cloneDeep(item);
  387 + });
  388 + }
  389 + } else {
  390 + //操作的是子订单
  391 + for (let item of data) {
  392 + if (item.id === currentOptMainId) {
  393 + for (let subOrder of item?.subOrderInformationLists) {
  394 + if (subOrder.id === curretnOptSubId) {
  395 + cloneSubOrders.push(cloneDeep(subOrder));
  396 + break;
  397 + }
  398 + }
  399 + }
  400 + }
  401 + }
  402 +
  403 + if (cloneSubOrders.length === 0) {
  404 + message.error('页面错误:当前操作的订单数据不存在,请联系系统管理员');
  405 + return;
  406 + }
  407 +
  408 + console.log(cloneSubOrders);
  409 +
  410 + return cloneSubOrders;
  411 + }
  412 +
  413 + /**
  414 + * 根据主订单id,将该主订单下的所有子订单取消选中
  415 + */
  416 + const removeSelectedSubOrderKeysByMainOrderId = (id: any) => {
  417 + let currentMainOrderAllSubOrderIds =
  418 + mainOrderIdSubOrderIdRelationsMap.get(id);
  419 + if (currentMainOrderAllSubOrderIds) {
  420 + let newSelectedSubOrderKeys = selectedSubOrderKeys.filter((item) => {
  421 + return !currentMainOrderAllSubOrderIds.includes(item);
  422 + });
  423 + setSelectedSubOrderKeys(newSelectedSubOrderKeys);
  424 + }
  425 + };
  426 +
  427 + /**
  428 + * 根据主订单id取消选中主订单
  429 + * @param id
  430 + */
  431 + const removeSelecetMainOrderKeyByMainOrderId = (id: any) => {
  432 + if (selectedMainOrderKeys.includes(id)) {
  433 + let newSelectedMainOrderKeys = selectedMainOrderKeys.filter((item) => {
  434 + return item !== id;
328 435 });
329   - selectedRowObj[record.id] = [];
  436 + setSelectedMainOrderKeys(newSelectedMainOrderKeys);
  437 + }
  438 + };
  439 +
  440 + const onCheckboxChange = (record: never) => {
  441 + let newSelectedMainOrderKeys = [];
  442 + if (selectedMainOrderKeys.includes(record.id)) {
  443 + newSelectedMainOrderKeys = selectedMainOrderKeys.filter(
  444 + (key) => key !== record.id,
  445 + );
  446 + removeSelectedSubOrderKeysByMainOrderId(record.id);
330 447 setSelectedRows([]);
331 448  
332   - //取消选中主订单
  449 + //删除选中主订单的信息
333 450 mainOrderSelectedMap.delete(record.id);
  451 + //删除选中主订单附属子订单的信息
  452 + subOrderSelectedMap.delete(record.id);
  453 + //总选中按钮取消选中
  454 + setAllMainChecked(false);
334 455 } else {
335   - newSelectedItems = [...selectedItems, record.id];
  456 + newSelectedMainOrderKeys = [...selectedMainOrderKeys, record.id];
336 457 //子订单全部自动选中
337 458 let subIds = record.subOrderInformationLists?.map((item) => {
338 459 return item.id;
339 460 });
340   - setSelectedRowKeys(subIds);
  461 + let newSelectedSubOrderKeys = [...selectedSubOrderKeys];
  462 + for (let subId of subIds) {
  463 + if (!selectedSubOrderKeys.includes(subId)) {
  464 + newSelectedSubOrderKeys.push(subId);
  465 + }
  466 + }
  467 + setSelectedSubOrderKeys(newSelectedSubOrderKeys);
341 468  
342   - setSelectedRowObj({
343   - ...setSelectedRowObj,
344   - [record.id]: record.subOrderInformationLists,
345   - });
346   - selectedRowObj[record.id] = record.subOrderInformationLists;
347 469 setSelectedRows(record.subOrderInformationLists);
348 470  
349 471 //选中主订单
350 472 mainOrderSelectedMap.set(record.id, record);
  473 + //选中子订单
  474 + subOrderSelectedMap.set(record.id, record.subOrderInformationLists);
  475 +
  476 + //如果所有主订单都勾选上了,那么勾选上总选中按钮
  477 + if (
  478 + mainOrderSelectedMap?.size === mainOrderIdSubOrderIdRelationsMap.size
  479 + ) {
  480 + setAllMainChecked(true);
  481 + }
351 482 }
352   - setSelectedItems(newSelectedItems);
353   - };
354   - const handleTableExpand = (mainOrderIds: any) => {
355   - setExpandedRowKeys(mainOrderIds);
  483 + setSelectedMainOrderKeys(newSelectedMainOrderKeys);
  484 +
  485 + console.log(mainOrderSelectedMap);
  486 + console.log(subOrderSelectedMap);
356 487 };
  488 + // const handleTableExpand = (mainOrderIds: any) => {
  489 + // setExpandedRowKeys(mainOrderIds);
  490 + // };
357 491  
358 492 const allMainCheckBoxChange = () => {
359 493 let checked = !allMainChecked;
360 494 setAllMainChecked(checked);
361 495  
362   - mainOrderSelectedMap.clear();
363 496 if (checked) {
364 497 let mainOrderIds = data?.map((item) => {
365 498 mainOrderSelectedMap.set(item.id, item);
366 499 return item.id;
367 500 });
368 501  
369   - let rowObj = {};
370   - data?.forEach((item) => {
371   - let id = item.id;
372   - rowObj[id] = item;
373   - });
374   - setSelectedItems(mainOrderIds);
  502 + let subOrderIds = [];
  503 + for (let subIdList of mainOrderIdSubOrderIdRelationsMap.values()) {
  504 + subOrderIds.push(...subIdList);
  505 + }
  506 +
  507 + if (data) {
  508 + for (let item of data) {
  509 + mainOrderSelectedMap.set(item.id, item);
  510 +
  511 + subOrderSelectedMap.set(item.id, item.subOrderInformationLists);
  512 + }
  513 + }
  514 +
  515 + setSelectedMainOrderKeys(mainOrderIds);
  516 + setSelectedSubOrderKeys(subOrderIds);
375 517 } else {
376   - setSelectedItems([]);
  518 + setSelectedMainOrderKeys([]);
  519 + setSelectedSubOrderKeys([]);
  520 + mainOrderSelectedMap.clear();
  521 + subOrderSelectedMap.clear();
377 522 }
  523 +
  524 + console.log(mainOrderSelectedMap);
  525 + console.log(subOrderSelectedMap);
378 526 };
379 527  
380 528 //表头渲染
... ... @@ -416,21 +564,38 @@ const OrderPage = () =&gt; {
416 564 */
417 565 function getOrderStatusTag(optRecord: any): import('react').ReactNode {
418 566 const orderStatus = optRecord.orderStatus;
  567 + const paymentMethod = optRecord.paymentMethod;
  568 + let orderStatusTagText = enumValueToLabel(
  569 + optRecord.orderStatus,
  570 + ORDER_STATUS_OPTIONS,
  571 + );
  572 +
  573 + //如果是未审核或者领导已审核,付款状态为预付款则需要财务审核【财务待审核】,否则仓库审核【仓库待审核】
  574 + if (orderStatus === 'UNAUDITED' || orderStatus === 'LEADER_AUDITED') {
  575 + if (paymentMethod === 'PAYMENT_IN_ADVANCE') {
  576 + orderStatusTagText = '财务待审核';
  577 + } else {
  578 + orderStatusTagText = '仓库待审核';
  579 + }
  580 + }
  581 +
  582 + //如果是财务已审核,显示为【仓库待审核】
  583 + if (orderStatus === 'FINANCE_PROCESS') {
  584 + orderStatusTagText = '仓库待审核';
  585 + }
  586 +
419 587 if (orderStatus === 'AUDIT_FAILED') {
420 588 return (
421 589 <MyToolTip
422 590 key="key"
423   - title={optRecord.checkNotes}
  591 + title={optRecord.checkNotes + ' ' + optRecord.postAuditNotes}
424 592 content={
425 593 <>
426 594 <Tag
427 595 color={TAGS_COLOR.get(optRecord.orderStatus)}
428 596 style={{ marginRight: '4px' }}
429 597 >
430   - {enumValueToLabel(
431   - optRecord.orderStatus,
432   - ORDER_STATUS_OPTIONS,
433   - )}
  598 + {orderStatusTagText}
434 599 </Tag>
435 600 <QuestionCircleOutlined style={{ color: '#C1C1C1' }} />
436 601 </>
... ... @@ -444,36 +609,11 @@ const OrderPage = () =&gt; {
444 609 orderStatus === 'IN_AFTER_SALES'
445 610 ) {
446 611 return (
447   - // <MyToolTip
448   - // key="key"
449   - // title={
450   - // enumValueToLabel(
451   - // optRecord.afterSalesPlan,
452   - // AFTE_SALES_PLAN_OPTIONS,
453   - // ) +
454   - // ' ' +
455   - // optRecord.afterSalesNotes
456   - // }
457   - // content={
458   - // <>
459   - // <Tag
460   - // color={TAGS_COLOR.get(optRecord.orderStatus)}
461   - // style={{ marginRight: '4px' }}
462   - // >
463   - // {enumValueToLabel(
464   - // optRecord.orderStatus,
465   - // ORDER_STATUS_OPTIONS,
466   - // )}
467   - // </Tag>
468   - // <QuestionCircleOutlined style={{ color: '#C1C1C1' }} />
469   - // </>
470   - // }
471   - // />
472 612 <Tag
473 613 color={TAGS_COLOR.get(optRecord.orderStatus)}
474 614 style={{ marginRight: '4px' }}
475 615 >
476   - {enumValueToLabel(optRecord.orderStatus, ORDER_STATUS_OPTIONS)}
  616 + {orderStatusTagText}
477 617 </Tag>
478 618 );
479 619 }
... ... @@ -489,10 +629,7 @@ const OrderPage = () =&gt; {
489 629 color={TAGS_COLOR.get(optRecord.orderStatus)}
490 630 style={{ marginRight: '4px' }}
491 631 >
492   - {enumValueToLabel(
493   - optRecord.orderStatus,
494   - ORDER_STATUS_OPTIONS,
495   - )}
  632 + {orderStatusTagText}
496 633 </Tag>
497 634 <QuestionCircleOutlined style={{ color: '#C1C1C1' }} />
498 635 </>
... ... @@ -503,27 +640,86 @@ const OrderPage = () =&gt; {
503 640  
504 641 return (
505 642 <Tag key="key" color={TAGS_COLOR.get(optRecord.orderStatus)}>
506   - {enumValueToLabel(optRecord.orderStatus, ORDER_STATUS_OPTIONS)}
  643 + {orderStatusTagText}
  644 + </Tag>
  645 + );
  646 + }
  647 +
  648 + /**
  649 + * 获取后置审核状态标签
  650 + * @param optRecord
  651 + */
  652 + function getPostAuditStatusTag(optRecord: any): import('react').ReactNode {
  653 + return (
  654 + <Tag key="key" color={TAGS_COLOR.get(optRecord.postAuditStatus)}>
  655 + {enumValueToLabel(optRecord.postAuditStatus, POST_AUDIT_OPTIONS)}
507 656 </Tag>
508 657 );
509 658 }
510 659  
511 660 //申请开票附件处理
512 661 const getAfterAnnexList = () => {
513   - let links = [];
  662 + // let links = [];
514 663 let afterAnnexList = optRecord.afterAnnexList;
515 664 let i = 1;
  665 + let images = [];
  666 + let otherAnnex = [];
516 667 if (afterAnnexList?.length > 0) {
517 668 for (let url of afterAnnexList) {
518   - links.push(
519   - <a key={i} className="pl-2" href={url}>
520   - 附件{i++}
521   - </a>,
522   - );
  669 + let name = getAliYunOSSFileNameFromUrl(url);
  670 + if (isImageName(name)) {
  671 + images.push({ name: name, url: url });
  672 + } else {
  673 + otherAnnex.push({ name: '附件' + i++, url: url });
  674 + }
523 675 }
524 676 }
525 677  
526   - return links;
  678 + return (
  679 + <div className="pl-1">
  680 + <Image.PreviewGroup
  681 + className="mr-10"
  682 + preview={{
  683 + onChange: (current, prev) =>
  684 + console.log(`current index: ${current}, prev index: ${prev}`),
  685 + }}
  686 + >
  687 + {images.map((item, index) => (
  688 + <React.Fragment key={index}>
  689 + {index > 0 ? <Divider type="vertical" /> : ''}
  690 + <Image
  691 + className="max-h-[50px] max-w-[70px]"
  692 + src={item.url}
  693 + title={item.name}
  694 + />{' '}
  695 + </React.Fragment>
  696 + ))}
  697 + </Image.PreviewGroup>
  698 + {otherAnnex.map((item, index) => {
  699 + return (
  700 + <Popconfirm
  701 + title="下载或预览"
  702 + key={index}
  703 + onConfirm={() => {
  704 + window.open(
  705 + '/previewApi/onlinePreview?url=' +
  706 + encodeURIComponent(Base64.encode(item.url)),
  707 + );
  708 + }}
  709 + onCancel={() => {
  710 + window.open(item.url);
  711 + }}
  712 + okText="预览"
  713 + cancelText="下载"
  714 + >
  715 + <Button className="px-1" key={index} type="link">
  716 + {item.name}
  717 + </Button>
  718 + </Popconfirm>
  719 + );
  720 + })}
  721 + </div>
  722 + );
527 723 };
528 724  
529 725 //财务审核附件处理
... ... @@ -554,14 +750,53 @@ const OrderPage = () =&gt; {
554 750 <Flex className="w-full border-b-indigo-500">
555 751 <Flex vertical className="w-[31%]" gap="small">
556 752 {/* 商品名称 */}
557   - <div
558   - className="overflow-hidden whitespace-no-wrap overflow-ellipsis"
559   - title={optRecord.productName}
560   - >
561   - <span className="font-medium text-black ">
562   - {optRecord.productName}
563   - </span>
  753 + <div>
  754 + <div
  755 + className="overflow-hidden whitespace-no-wrap overflow-ellipsis"
  756 + title={optRecord.productName}
  757 + >
  758 + <span className="font-medium text-black ">
  759 + {optRecord.productName}
  760 + </span>
  761 + </div>
  762 + <div className="text-xs text-[#8C8C8C]">
  763 + <span
  764 + className="cursor-pointer"
  765 + onClick={() => {
  766 + copyToClipboard(optRecord.id);
  767 + message.info('子订单编号复制成功:' + optRecord.id);
  768 + }}
  769 + >
  770 + {optRecord.id}
  771 + </span>
  772 + {(roleCode === 'salesRepresentative' ||
  773 + roleCode === 'salesManager') &&
  774 + !optRecord.isCurrentUserOrder ? (
  775 + <span className="text-[#f44e4e]">(非本账号订单)</span>
  776 + ) : (
  777 + ''
  778 + )}
  779 + {optRecord.modified ? (
  780 + <span
  781 + className="text-[#f44e4e] cursor-pointer"
  782 + onClick={async () => {
  783 + createOptObject(optRecord.id, record.id);
  784 + setModifiedDiffModalVisible(true);
  785 + }}
  786 + >
  787 + (修改过)
  788 + </span>
  789 + ) : (
  790 + ''
  791 + )}
  792 + {!optRecord.logicDelete ? (
  793 + <span className="text-[#f44e4e]">(已作废)</span>
  794 + ) : (
  795 + ''
  796 + )}
  797 + </div>
564 798 </div>
  799 +
565 800 <div
566 801 className="overflow-hidden whitespace-no-wrap overflow-ellipsis"
567 802 title={optRecord.parameters}
... ... @@ -571,7 +806,7 @@ const OrderPage = () =&gt; {
571 806 </span>
572 807 </div>
573 808 <Flex title={optRecord.notes}>
574   - <div className="max-w-[90%] whitespace-no-wrap overflow-hidden overflow-ellipsis">
  809 + <div className="max-w-[375px] whitespace-no-wrap overflow-hidden overflow-ellipsis">
575 810 <span className="text-[#8C8C8C]">
576 811 备注:
577 812 {optRecord.notes === null ? '暂无备注' : optRecord.notes}
... ... @@ -591,51 +826,60 @@ const OrderPage = () =&gt; {
591 826 {roleCode === 'procure' ||
592 827 roleCode === 'warehouseKeeper' ||
593 828 roleCode === 'admin' ? (
594   - <Flex title={optRecord.procureNotes}>
595   - <div className="max-w-[90%] whitespace-no-wrap overflow-hidden overflow-ellipsis">
596   - <span className="text-[#8C8C8C]">
597   - 采购备注:
598   - {optRecord.procureNotes === null
599   - ? '暂无备注'
600   - : optRecord.procureNotes}
601   - </span>
602   - </div>
603   - {/* 编辑备注按钮 */}
604   - <EditTwoTone
605   - className="pl-1 hover:curcor-pointer"
606   - onClick={() => {
607   - setSelectedRows([optRecord.id]);
608   - setNotes(optRecord.procureNotes);
609   - setNotesEditVisible(true);
610   - setNotesType(2);
611   - }}
612   - />
613   - </Flex>
614   - ) : (
615   - ''
616   - )}
  829 + <>
  830 + <Flex title={optRecord.supplierName}>
  831 + <div className="max-w-[90%] whitespace-no-wrap overflow-hidden overflow-ellipsis">
  832 + <span className="text-[#8C8C8C]">
  833 + 所属采购:
  834 + {optRecord.supplierName === null
  835 + ? '暂无'
  836 + : optRecord.supplierName}
  837 + </span>
  838 + </div>
617 839  
618   - {roleCode === 'procure' || roleCode === 'admin' ? (
619   - <Flex title={optRecord.supplierNotes}>
620   - <div className="max-w-[90%] whitespace-no-wrap overflow-hidden overflow-ellipsis">
621   - <span className="text-[#8C8C8C]">
622   - 供应商备注:
623   - {optRecord.supplierNotes === null
624   - ? '暂无备注'
625   - : optRecord.supplierNotes}
626   - </span>
627   - </div>
628   - {/* 编辑备注按钮 */}
629   - <EditTwoTone
630   - className="pl-1 hover:curcor-pointer"
631   - onClick={() => {
632   - setSelectedRows([optRecord.id]);
633   - setNotes(optRecord.supplierNotes);
634   - setNotesEditVisible(true);
635   - setNotesType(3);
636   - }}
637   - />
638   - </Flex>
  840 + <Divider type="vertical" />
  841 +
  842 + <div className="max-w-[90%] whitespace-no-wrap overflow-hidden overflow-ellipsis">
  843 + <span className="text-[#8C8C8C]">
  844 + 采购备注:
  845 + {optRecord.procureNotes === null
  846 + ? '暂无备注'
  847 + : optRecord.procureNotes}
  848 + </span>
  849 + </div>
  850 + {/* 编辑备注按钮 */}
  851 + <EditTwoTone
  852 + className="pl-1 hover:curcor-pointer"
  853 + onClick={() => {
  854 + setSelectedRows([optRecord.id]);
  855 + setNotes(optRecord.procureNotes);
  856 + setNotesEditVisible(true);
  857 + setNotesType(2);
  858 + }}
  859 + />
  860 + </Flex>
  861 +
  862 + <Flex title={optRecord.supplierNotes}>
  863 + <div className="max-w-[90%] whitespace-no-wrap overflow-hidden overflow-ellipsis">
  864 + <span className="text-[#8C8C8C]">
  865 + 供应商备注:
  866 + {optRecord.supplierNotes === null
  867 + ? '暂无备注'
  868 + : optRecord.supplierNotes}
  869 + </span>
  870 + </div>
  871 + {/* 编辑备注按钮 */}
  872 + <EditTwoTone
  873 + className="pl-1 hover:curcor-pointer"
  874 + onClick={() => {
  875 + setSelectedRows([optRecord.id]);
  876 + setNotes(optRecord.supplierNotes);
  877 + setNotesEditVisible(true);
  878 + setNotesType(3);
  879 + }}
  880 + />
  881 + </Flex>
  882 + </>
639 883 ) : (
640 884 ''
641 885 )}
... ... @@ -720,7 +964,7 @@ const OrderPage = () =&gt; {
720 964 </div>
721 965  
722 966 {/* 开票类型 */}
723   - {getInvoicingType(optRecord) === undefined ? (
  967 + {optRecord.invoicingStatus !== null ? (
724 968 <div className="overflow-hidden whitespace-no-wrap overflow-ellipsis">
725 969 <span className="text-slate-700">
726 970 {getInvoicingType(optRecord)}
... ... @@ -772,6 +1016,27 @@ const OrderPage = () =&gt; {
772 1016 ) : (
773 1017 ''
774 1018 )}
  1019 +
  1020 + {/* 生产时间 */}
  1021 + <div className="overflow-hidden whitespace-no-wrap overflow-ellipsis">
  1022 + {optRecord.productionStartTime !== null ||
  1023 + optRecord.productionEndTime !== null ? (
  1024 + <MyToolTip
  1025 + title={
  1026 + formatdate(optRecord.productionStartTime) +
  1027 + ' 至 ' +
  1028 + formatdate(optRecord.productionEndTime)
  1029 + }
  1030 + content={
  1031 + <Button type="link" size="small" style={{ padding: 0 }}>
  1032 + 生产时间
  1033 + </Button>
  1034 + }
  1035 + />
  1036 + ) : (
  1037 + ''
  1038 + )}
  1039 + </div>
775 1040 </Flex>
776 1041  
777 1042 <Flex className="w-[10%]" vertical gap="small">
... ... @@ -793,6 +1058,15 @@ const OrderPage = () =&gt; {
793 1058 {getOrderStatusTag(optRecord)}
794 1059 </div>
795 1060  
  1061 + {/* 后置审核状态 */}
  1062 + {optRecord.postAuditStatus !== null ? (
  1063 + <div className="overflow-hidden whitespace-no-wrap overflow-ellipsis">
  1064 + {getPostAuditStatusTag(optRecord)}
  1065 + </div>
  1066 + ) : (
  1067 + ''
  1068 + )}
  1069 +
796 1070 {/**采购是否已下单状态 */}
797 1071 {optRecord.procureOrderStatus !== null &&
798 1072 optRecord.procureOrderStatus !== undefined ? (
... ... @@ -844,9 +1118,10 @@ const OrderPage = () =&gt; {
844 1118 className="p-0"
845 1119 type="link"
846 1120 onClick={() => {
847   - setOrderRow(record);
  1121 + console.log('here');
  1122 + setCurrentMainId(record.id);
  1123 + setCurretnOptSubId(optRecord.id);
848 1124 setCheckVisible(true);
849   - setSelectedRows([optRecord]);
850 1125 setOrderCheckType(CHECK_TYPE.LEADER_AUDIT);
851 1126 }}
852 1127 >
... ... @@ -856,13 +1131,30 @@ const OrderPage = () =&gt; {
856 1131 ''
857 1132 )}
858 1133  
  1134 + {optRecord.subPath?.includes('postAudit') ? (
  1135 + <Button
  1136 + className="p-0"
  1137 + type="link"
  1138 + onClick={() => {
  1139 + setCurrentMainId(record.id);
  1140 + setCurretnOptSubId(optRecord.id);
  1141 + setCheckVisible(true);
  1142 + setOrderCheckType(CHECK_TYPE.WAITING_FOR_POST_AUDIT);
  1143 + }}
  1144 + >
  1145 + 后置审核
  1146 + </Button>
  1147 + ) : (
  1148 + ''
  1149 + )}
  1150 +
859 1151 {optRecord.subPath?.includes('shippingWarehouseChangeRequest') ? (
860 1152 <Button
861 1153 className="p-0"
862 1154 type="link"
863 1155 onClick={() => {
864 1156 setIds([optRecord.id]);
865   - setOrderRow(optRecord);
  1157 + createOptObject(optRecord.id, record.id);
866 1158 setShippingWarehouseChangeModalVisible(true);
867 1159 }}
868 1160 >
... ... @@ -898,9 +1190,8 @@ const OrderPage = () =&gt; {
898 1190 className="p-0"
899 1191 type="link"
900 1192 onClick={() => {
  1193 + createOptObject(optRecord.id, record.id);
901 1194 setFinancialEditVisible(true);
902   - setSelectedRows([optRecord]);
903   - setOrderRow(record);
904 1195 setIsMainOrder(false);
905 1196 }}
906 1197 >
... ... @@ -914,11 +1205,10 @@ const OrderPage = () =&gt; {
914 1205 className="p-0"
915 1206 type="link"
916 1207 onClick={() => {
917   - optRecord.mainOrderId = record.id;
918   - setSelectedRows([cloneDeep(optRecord)]); //克隆一份数据,避免后续修改污染
  1208 + createOptObject(optRecord.id, record.id);
919 1209 setDeliverVisible(true);
920 1210 setIsSendProduct(true);
921   - setOrderCheckType(CHECK_TYPE.NORMAL);
  1211 + setOrderCheckType(CHECK_TYPE.WEARHOUSE_KEEPER);
922 1212 }}
923 1213 >
924 1214 仓库发货
... ... @@ -945,19 +1235,33 @@ const OrderPage = () =&gt; {
945 1235 ''
946 1236 )}
947 1237  
948   - {optRecord.subPath?.includes('procureSend') ? (
  1238 + {optRecord.subPath?.includes('procureSend') ? (
  1239 + <Button
  1240 + className="p-0"
  1241 + type="link"
  1242 + onClick={() => {
  1243 + createOptObject(optRecord.id, record.id);
  1244 + setDeliverVisible(true);
  1245 + setIsSendProduct(true);
  1246 + setOrderCheckType(CHECK_TYPE.PROCURE);
  1247 + }}
  1248 + >
  1249 + 采购发货
  1250 + </Button>
  1251 + ) : (
  1252 + ''
  1253 + )}
  1254 +
  1255 + {optRecord.subPath?.includes('editProductionTime') ? (
949 1256 <Button
950 1257 className="p-0"
951 1258 type="link"
952 1259 onClick={() => {
953   - optRecord.mainOrderId = record.id;
954   - setSelectedRows([cloneDeep(optRecord)]); //克隆一份数据,避免后续修改污染
955   - setDeliverVisible(true);
956   - setIsSendProduct(true);
957   - setOrderCheckType(CHECK_TYPE.PROCURE);
  1260 + createOptObject(optRecord.id, record.id);
  1261 + setProductionTimeModalVisible(true);
958 1262 }}
959 1263 >
960   - 采购发货
  1264 + 生产时间
961 1265 </Button>
962 1266 ) : (
963 1267 ''
... ... @@ -970,8 +1274,8 @@ const OrderPage = () =&gt; {
970 1274 type="link"
971 1275 onClick={() => {
972 1276 optRecord.mainOrderId = record.id;
  1277 + createOptObject(optRecord.id, record.id);
973 1278 setAttachmentModalVisible(true);
974   - setOrderRow(optRecord);
975 1279 }}
976 1280 >
977 1281 附件
... ... @@ -985,8 +1289,7 @@ const OrderPage = () =&gt; {
985 1289 className="p-0"
986 1290 type="link"
987 1291 onClick={() => {
988   - optRecord.mainOrderId = record.id;
989   - setSelectedRows([cloneDeep(optRecord)]); //克隆一份数据,避免后续修改污染
  1292 + createOptObject(optRecord.id, record.id);
990 1293 setDeliverVisible(true);
991 1294 setIsSendProduct(false);
992 1295 }}
... ... @@ -1002,10 +1305,9 @@ const OrderPage = () =&gt; {
1002 1305 className="p-0"
1003 1306 type="link"
1004 1307 onClick={async () => {
  1308 + createOptObject(optRecord.id, record.id);
1005 1309 setOrderPrintVisible(true);
1006   - setSelectedRows([optRecord]);
1007   - setOrderRow(record);
1008   - setOrderCheckType(CHECK_TYPE.NORMAL);
  1310 + setOrderCheckType(CHECK_TYPE.WEARHOUSE_KEEPER);
1009 1311 }}
1010 1312 >
1011 1313 仓库打印
... ... @@ -1019,9 +1321,8 @@ const OrderPage = () =&gt; {
1019 1321 className="p-0"
1020 1322 type="link"
1021 1323 onClick={async () => {
  1324 + createOptObject(optRecord.id, record.id);
1022 1325 setOrderPrintVisible(true);
1023   - setSelectedRows([optRecord]);
1024   - setOrderRow(record);
1025 1326 setOrderCheckType(CHECK_TYPE.SUPPLIER);
1026 1327 }}
1027 1328 >
... ... @@ -1070,9 +1371,8 @@ const OrderPage = () =&gt; {
1070 1371 className="p-0"
1071 1372 type="link"
1072 1373 onClick={() => {
  1374 + createOptObject(optRecord.id, record.id);
1073 1375 setFinancialVisible(true);
1074   - setOrderRow(record);
1075   - setSelectedRows([optRecord]);
1076 1376 setIsEdit(true);
1077 1377 }}
1078 1378 >
... ... @@ -1087,10 +1387,9 @@ const OrderPage = () =&gt; {
1087 1387 className="p-0"
1088 1388 type="link"
1089 1389 onClick={() => {
  1390 + createOptObject(optRecord.id, record.id);
1090 1391 setFinancialVisible(true);
1091 1392 setIsEdit(false);
1092   - setOrderRow(record);
1093   - setSelectedRows([optRecord]);
1094 1393 setIsMainOrder(false);
1095 1394 }}
1096 1395 >
... ... @@ -1106,7 +1405,7 @@ const OrderPage = () =&gt; {
1106 1405 type="link"
1107 1406 onClick={() => {
1108 1407 setApplyForInvoicingVisible(true);
1109   - setSelectedRows([optRecord]);
  1408 + createOptObject(optRecord.id, record.id);
1110 1409 setIsEdit(false);
1111 1410 setIsMainOrder(false);
1112 1411 }}
... ... @@ -1122,10 +1421,10 @@ const OrderPage = () =&gt; {
1122 1421 className="p-0"
1123 1422 type="link"
1124 1423 onClick={() => {
1125   - setOrderRow(record);
  1424 + setCurrentMainId(record.id);
  1425 + setCurretnOptSubId(optRecord.id);
1126 1426 setCheckVisible(true);
1127   - setSelectedRows([optRecord]);
1128   - setOrderCheckType(CHECK_TYPE.NORMAL);
  1427 + setOrderCheckType(CHECK_TYPE.WEARHOUSE_KEEPER);
1129 1428 }}
1130 1429 >
1131 1430 审核
... ... @@ -1139,9 +1438,8 @@ const OrderPage = () =&gt; {
1139 1438 className="p-0"
1140 1439 type="link"
1141 1440 onClick={() => {
1142   - setOrderRow(record);
  1441 + createOptObject(optRecord.id, record.id);
1143 1442 setCheckVisible(true);
1144   - setSelectedRows([optRecord]);
1145 1443 setOrderCheckType(CHECK_TYPE.AFTER_SALES);
1146 1444 }}
1147 1445 >
... ... @@ -1156,9 +1454,8 @@ const OrderPage = () =&gt; {
1156 1454 className="p-0"
1157 1455 type="link"
1158 1456 onClick={() => {
1159   - setOrderRow(record);
  1457 + createOptObject(optRecord.id, record.id);
1160 1458 setCheckVisible(true);
1161   - setSelectedRows([optRecord]);
1162 1459 setOrderCheckType(CHECK_TYPE.FINALCIAL);
1163 1460 }}
1164 1461 >
... ... @@ -1173,8 +1470,7 @@ const OrderPage = () =&gt; {
1173 1470 className="p-0"
1174 1471 type="link"
1175 1472 onClick={() => {
1176   - setOrderRow(record);
1177   - setSelectedRows([optRecord]);
  1473 + createOptObject(optRecord.id, record.id);
1178 1474 setOrderCheckType(CHECK_TYPE.PROCURE);
1179 1475 setProcureCheckModalVisible(true);
1180 1476 }}
... ... @@ -1206,9 +1502,8 @@ const OrderPage = () =&gt; {
1206 1502 className="p-0"
1207 1503 type="link"
1208 1504 onClick={() => {
  1505 + createOptObject(optRecord.id, record.id);
1209 1506 setOrderPrintVisible(true);
1210   - setSelectedRows([optRecord]);
1211   - setOrderRow(record);
1212 1507 setIsRePrintOrder(true);
1213 1508 }}
1214 1509 >
... ... @@ -1223,8 +1518,8 @@ const OrderPage = () =&gt; {
1223 1518 className="p-0"
1224 1519 type="link"
1225 1520 onClick={() => {
  1521 + createOptObject(optRecord.id, record.id);
1226 1522 setConfirmReceiptVisible(true);
1227   - setOrderRow(optRecord);
1228 1523 }}
1229 1524 >
1230 1525 确认收货
... ... @@ -1238,9 +1533,8 @@ const OrderPage = () =&gt; {
1238 1533 className="p-0"
1239 1534 type="link"
1240 1535 onClick={() => {
1241   - setSelectedRows([optRecord]);
  1536 + createOptObject(optRecord.id, record.id);
1242 1537 setOrderDrawerVisible(true);
1243   - setOrderRow(record);
1244 1538 setOrderOptType('after-sales');
1245 1539 }}
1246 1540 >
... ... @@ -1270,6 +1564,26 @@ const OrderPage = () =&gt; {
1270 1564 ''
1271 1565 )}
1272 1566  
  1567 + {optRecord.subPath?.includes('cancelSend') ? (
  1568 + <ButtonConfirm
  1569 + className="p-0"
  1570 + title="是否取消发货"
  1571 + text="取消发货"
  1572 + onConfirm={async () => {
  1573 + let res = await postServiceOrderCancelSend({
  1574 + data: { subIds: [optRecord.id] },
  1575 + });
  1576 + if (res.result === RESPONSE_CODE.SUCCESS) {
  1577 + message.success(res.message);
  1578 + refreshTable();
  1579 + return true;
  1580 + }
  1581 + }}
  1582 + />
  1583 + ) : (
  1584 + ''
  1585 + )}
  1586 +
1273 1587 {optRecord.subPath?.includes('noNeedSend') ? (
1274 1588 <ButtonConfirm
1275 1589 className="p-0"
... ... @@ -1295,8 +1609,8 @@ const OrderPage = () =&gt; {
1295 1609 className="p-0"
1296 1610 type="link"
1297 1611 onClick={() => {
  1612 + createOptObject(optRecord.id, record.id);
1298 1613 setSubOrderConfirmReceiptImagesVisible(true);
1299   - setOrderRow(optRecord);
1300 1614 }}
1301 1615 >
1302 1616 查看收货凭证
... ... @@ -1406,16 +1720,81 @@ const OrderPage = () =&gt; {
1406 1720 },
1407 1721 ]}
1408 1722 rowSelection={{
1409   - onChange: (selectedRowKeys: any, selectedRows: any) => {
1410   - setSelectedRowKeys(selectedRowKeys);
1411   - setSelectedRowObj({
1412   - ...setSelectedRowObj,
1413   - [record.id]: selectedRows,
1414   - });
1415   - selectedRowObj[record.id] = selectedRows;
1416   - setSelectedRows(selectedRows);
  1723 + onSelect: (row: any) => {
  1724 + let subId = row.id;
  1725 + let mainId = row.mainOrderId;
  1726 + let newSelectedSubOrderKeys = [...selectedSubOrderKeys];
  1727 + let currentMainOrderSelectedSubOrderList =
  1728 + subOrderSelectedMap.get(mainId);
  1729 + if (!selectedSubOrderKeys.includes(subId)) {
  1730 + //选中子订单
  1731 + newSelectedSubOrderKeys.push(subId);
  1732 +
  1733 + //在Map中添加对应的主订单中的子订单
  1734 + if (currentMainOrderSelectedSubOrderList) {
  1735 + currentMainOrderSelectedSubOrderList.push(row);
  1736 + } else {
  1737 + currentMainOrderSelectedSubOrderList = [row];
  1738 + }
  1739 +
  1740 + //如果该主订单的所有子订单都选中了,那么勾选上主订单
  1741 + if (
  1742 + currentMainOrderSelectedSubOrderList?.length ===
  1743 + mainOrderIdSubOrderIdRelationsMap.get(mainId)?.length
  1744 + ) {
  1745 + selectedMainOrderKeys.push(mainId, record);
  1746 + mainOrderSelectedMap.set(mainId, record);
  1747 + }
  1748 +
  1749 + //如果所有主订单都勾选上了,那么勾选上总选中按钮
  1750 + if (
  1751 + mainOrderSelectedMap?.size ===
  1752 + mainOrderIdSubOrderIdRelationsMap.size
  1753 + ) {
  1754 + setAllMainChecked(true);
  1755 + }
  1756 + } else {
  1757 + //取消选中子订单
  1758 + newSelectedSubOrderKeys = newSelectedSubOrderKeys.filter(
  1759 + (item) => {
  1760 + return item !== subId;
  1761 + },
  1762 + );
  1763 +
  1764 + removeSelecetMainOrderKeyByMainOrderId(mainId); //某个子订单取消勾选了,对应的主订单也要取消勾选
  1765 +
  1766 + //在Map中删除掉对应的主订单中的子订单
  1767 + if (currentMainOrderSelectedSubOrderList) {
  1768 + currentMainOrderSelectedSubOrderList =
  1769 + currentMainOrderSelectedSubOrderList.filter((item) => {
  1770 + return item.id !== subId;
  1771 + });
  1772 + } else {
  1773 + subOrderSelectedMap.set(mainId, [row]);
  1774 + }
  1775 +
  1776 + mainOrderSelectedMap.delete(mainId);
  1777 + //总选中按钮取消选中
  1778 + setAllMainChecked(false);
  1779 + }
  1780 +
  1781 + //如果该主订单已经没有子订单选中,删除key
  1782 + if (currentMainOrderSelectedSubOrderList.length === 0) {
  1783 + subOrderSelectedMap.delete(record.id);
  1784 + } else {
  1785 + subOrderSelectedMap.set(
  1786 + record.id,
  1787 + currentMainOrderSelectedSubOrderList,
  1788 + );
  1789 + }
  1790 +
  1791 + setSelectedSubOrderKeys(newSelectedSubOrderKeys);
  1792 + setSelectedRows(currentMainOrderSelectedSubOrderList);
  1793 +
  1794 + console.log(mainOrderSelectedMap);
  1795 + console.log(subOrderSelectedMap);
1417 1796 },
1418   - selectedRowKeys: selectedRowKeys,
  1797 + selectedRowKeys: selectedSubOrderKeys,
1419 1798 // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom
1420 1799 // 注释该行则默认不显示下拉选项
1421 1800 // selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],
... ... @@ -1446,7 +1825,7 @@ const OrderPage = () =&gt; {
1446 1825 <Flex>
1447 1826 <Checkbox
1448 1827 onChange={() => onCheckboxChange(record)}
1449   - checked={selectedItems.includes(record.id)}
  1828 + checked={selectedMainOrderKeys.includes(record.id)}
1450 1829 >
1451 1830 <Space split={<Divider type="vertical" />}>
1452 1831 <div>
... ... @@ -1494,8 +1873,8 @@ const OrderPage = () =&gt; {
1494 1873 <ContainerTwoTone
1495 1874 className="hover:curcor-pointer"
1496 1875 onClick={() => {
  1876 + createOptObject(null, record.id);
1497 1877 setDeliverInfoDrawerVisible(true);
1498   - setOrderRow(record);
1499 1878 }}
1500 1879 />
1501 1880 </Tooltip>
... ... @@ -1564,15 +1943,10 @@ const OrderPage = () =&gt; {
1564 1943 <CopyTwoTone
1565 1944 className="hover:cursor-pointer"
1566 1945 onClick={() => {
  1946 + createOptObject(null, record.id);
1567 1947 copyOrderToClipboard(record);
1568 1948 setOrderOptType('copy');
1569 1949 setOrderDrawerVisible(true);
1570   - let copy = cloneDeep(record);
1571   - copy.id = undefined;
1572   - copy.subOrderInformationLists?.forEach((item) => {
1573   - item.id = undefined;
1574   - });
1575   - setOrderRow(copy);
1576 1950 }}
1577 1951 />
1578 1952 </Tooltip>
... ... @@ -1592,8 +1966,8 @@ const OrderPage = () =&gt; {
1592 1966 className="hover:cursor-pointer"
1593 1967 onClick={() => {
1594 1968 setHistoryModalVisible(true);
1595   - if (selectedRowObj[record.id]?.length) {
1596   - setSelectedRows(selectedRowObj[record.id]);
  1969 + if (subOrderSelectedMap.get(record.id)?.length) {
  1970 + setSelectedRows(subOrderSelectedMap.get(record.id));
1597 1971 } else {
1598 1972 setSelectedRows(record.subOrderInformationLists);
1599 1973 }
... ... @@ -1604,15 +1978,14 @@ const OrderPage = () =&gt; {
1604 1978 </Flex>
1605 1979 <Flex justify="flex-end">
1606 1980 <Space.Compact direction="vertical" align="end">
1607   - <Space>
  1981 + <Space wrap>
1608 1982 {false ? (
1609 1983 <Button
1610 1984 className="p-0"
1611 1985 type="link"
1612 1986 onClick={() => {
  1987 + createOptObject(null, record.id);
1613 1988 setFinancialReceiptsModalVisible(true);
1614   - setOrderRow(record);
1615   - setSelectedRows([record]);
1616 1989 setIsEdit(true);
1617 1990 }}
1618 1991 >
... ... @@ -1622,13 +1995,94 @@ const OrderPage = () =&gt; {
1622 1995 ''
1623 1996 )}
1624 1997  
  1998 + {record.mainPath?.includes('postAudit') ? (
  1999 + <Button
  2000 + className="p-0"
  2001 + type="link"
  2002 + onClick={() => {
  2003 + setCurrentMainId(record.id);
  2004 + setCurretnOptSubId(null);
  2005 + setCheckVisible(true);
  2006 + setOrderCheckType(CHECK_TYPE.WAITING_FOR_POST_AUDIT);
  2007 + }}
  2008 + >
  2009 + 后置审核
  2010 + </Button>
  2011 + ) : (
  2012 + ''
  2013 + )}
  2014 +
  2015 + {record.mainPath?.includes('procureOrder') ? (
  2016 + <ButtonConfirm
  2017 + className="p-0"
  2018 + title="是否下单?"
  2019 + text="下单"
  2020 + onConfirm={async () => {
  2021 + let subIds = subOrderSelectedMap
  2022 + .get(record.id)
  2023 + ?.map((item) => {
  2024 + return item.id;
  2025 + });
  2026 + if (subIds === null || subIds === undefined) {
  2027 + subIds = record.subOrderInformationLists.map(
  2028 + (item) => {
  2029 + return item.id;
  2030 + },
  2031 + );
  2032 + }
  2033 + let res = await postServiceOrderProcureOrder({
  2034 + data: { subIds: subIds },
  2035 + });
  2036 + if (res.result === RESPONSE_CODE.SUCCESS) {
  2037 + message.success(res.message);
  2038 + refreshTable();
  2039 + return true;
  2040 + }
  2041 + }}
  2042 + />
  2043 + ) : (
  2044 + ''
  2045 + )}
  2046 +
  2047 + {record.mainPath?.includes('cancelSend') ? (
  2048 + <ButtonConfirm
  2049 + className="p-0"
  2050 + title="是否取消发货?"
  2051 + text="取消发货"
  2052 + onConfirm={async () => {
  2053 + let subIds = subOrderSelectedMap
  2054 + .get(record.id)
  2055 + ?.map((item) => {
  2056 + return item.id;
  2057 + });
  2058 + if (subIds === null || subIds === undefined) {
  2059 + subIds = record.subOrderInformationLists.map(
  2060 + (item) => {
  2061 + return item.id;
  2062 + },
  2063 + );
  2064 + }
  2065 + let res = await postServiceOrderCancelSend({
  2066 + data: { subIds: subIds },
  2067 + });
  2068 + if (res.result === RESPONSE_CODE.SUCCESS) {
  2069 + message.success(res.message);
  2070 + refreshTable();
  2071 + return true;
  2072 + }
  2073 + }}
  2074 + />
  2075 + ) : (
  2076 + ''
  2077 + )}
  2078 +
1625 2079 {record.mainPath?.includes('orderChangeRequest') ? (
1626 2080 <Button
1627 2081 className="p-0"
1628 2082 type="link"
1629 2083 onClick={() => {
  2084 + createOptObject(null, record.id);
1630 2085 setOrderDrawerVisible(true);
1631   - setOrderRow(record);
1632 2086 setOrderOptType('order-change-normal');
1633 2087 }}
1634 2088 >
... ... @@ -1643,7 +2097,9 @@ const OrderPage = () =&gt; {
1643 2097 className="p-0"
1644 2098 type="link"
1645 2099 onClick={() => {
1646   - let selectedSubOrders = selectedRowObj[record.id];
  2100 + let selectedSubOrders = subOrderSelectedMap.get(
  2101 + record.id,
  2102 + );
1647 2103 setSelectedRows(selectedSubOrders);
1648 2104 if (selectedSubOrders === undefined) {
1649 2105 selectedSubOrders = record.subOrderInformationLists;
... ... @@ -1657,9 +2113,8 @@ const OrderPage = () =&gt; {
1657 2113 return;
1658 2114 }
1659 2115 }
1660   - setOrderRow(record);
  2116 + createOptObject(null, record.id);
1661 2117 setCheckVisible(true);
1662   - setSelectedRows(selectedSubOrders);
1663 2118 setOrderCheckType(CHECK_TYPE.LEADER_AUDIT);
1664 2119 }}
1665 2120 >
... ... @@ -1674,7 +2129,9 @@ const OrderPage = () =&gt; {
1674 2129 className="p-0"
1675 2130 type="link"
1676 2131 onClick={() => {
1677   - let selectedSubOrders = selectedRowObj[record.id];
  2132 + let selectedSubOrders = subOrderSelectedMap.get(
  2133 + record.id,
  2134 + );
1678 2135 setSelectedRows(selectedSubOrders);
1679 2136 if (selectedSubOrders === undefined) {
1680 2137 selectedSubOrders = record.subOrderInformationLists;
... ... @@ -1688,9 +2145,8 @@ const OrderPage = () =&gt; {
1688 2145 return;
1689 2146 }
1690 2147 }
1691   - setOrderRow(record);
  2148 + createOptObject(null, record.id);
1692 2149 setCheckVisible(true);
1693   - setSelectedRows(selectedSubOrders);
1694 2150 setOrderCheckType(
1695 2151 CHECK_TYPE.MODIFY_APPLY_WAIT_FOR_AUDIT,
1696 2152 );
... ... @@ -1702,12 +2158,29 @@ const OrderPage = () =&gt; {
1702 2158 ''
1703 2159 )}
1704 2160  
  2161 + {record.mainPath?.includes('editProductionTime') ? (
  2162 + <Button
  2163 + className="p-0"
  2164 + type="link"
  2165 + onClick={() => {
  2166 + createOptObject(null, record.id);
  2167 + setProductionTimeModalVisible(true);
  2168 + }}
  2169 + >
  2170 + 生产时间
  2171 + </Button>
  2172 + ) : (
  2173 + ''
  2174 + )}
  2175 +
1705 2176 {record.mainPath?.includes('procureConvertProcure') ? (
1706 2177 <Button
1707 2178 className="p-0"
1708 2179 type="link"
1709 2180 onClick={() => {
1710   - let selectedSubOrders = selectedRowObj[record.id];
  2181 + let selectedSubOrders = subOrderSelectedMap.get(
  2182 + record.id,
  2183 + );
1711 2184 if (selectedSubOrders === undefined) {
1712 2185 selectedSubOrders = record.subOrderInformationLists;
1713 2186 }
... ... @@ -1738,13 +2211,13 @@ const OrderPage = () =&gt; {
1738 2211 className="p-0"
1739 2212 type="link"
1740 2213 onClick={() => {
1741   - if (!selectedRowObj[record.id]?.length) {
  2214 + if (!subOrderSelectedMap.get(record.id)?.length) {
1742 2215 return message.error('请选择选择子订单');
1743 2216 }
1744   - setSelectedRows(selectedRowObj[record.id]);
  2217 + createOptObject(null, record.id);
1745 2218 setDeliverVisible(true);
1746 2219 setIsSendProduct(true);
1747   - setOrderCheckType(CHECK_TYPE.NORMAL);
  2220 + setOrderCheckType(CHECK_TYPE.WEARHOUSE_KEEPER);
1748 2221 }}
1749 2222 >
1750 2223 仓库发货
... ... @@ -1759,10 +2232,10 @@ const OrderPage = () =&gt; {
1759 2232 className="p-0"
1760 2233 type="link"
1761 2234 onClick={() => {
1762   - if (!selectedRowObj[record.id]?.length) {
  2235 + if (!subOrderSelectedMap.get(record.id)?.length) {
1763 2236 return message.error('请选择选择子订单');
1764 2237 }
1765   - setSelectedRows(selectedRowObj[record.id]);
  2238 + createOptObject(null, record.id);
1766 2239 setDeliverVisible(true);
1767 2240 setIsSendProduct(true);
1768 2241 setOrderCheckType(CHECK_TYPE.SUPPLIER);
... ... @@ -1779,10 +2252,10 @@ const OrderPage = () =&gt; {
1779 2252 className="p-0"
1780 2253 type="link"
1781 2254 onClick={() => {
1782   - if (!selectedRowObj[record.id]?.length) {
  2255 + if (!subOrderSelectedMap.get(record.id)?.length) {
1783 2256 return message.error('请选择选择子订单');
1784 2257 }
1785   - setSelectedRows(selectedRowObj[record.id]);
  2258 + createOptObject(null, record.id);
1786 2259 setDeliverVisible(true);
1787 2260 setIsSendProduct(true);
1788 2261 setOrderCheckType(CHECK_TYPE.PROCURE);
... ... @@ -1799,7 +2272,9 @@ const OrderPage = () =&gt; {
1799 2272 className="p-0"
1800 2273 type="link"
1801 2274 onClick={() => {
1802   - const selectedSubOrders = selectedRowObj[record.id];
  2275 + const selectedSubOrders = subOrderSelectedMap.get(
  2276 + record.id,
  2277 + );
1803 2278 if (!selectedSubOrders?.length) {
1804 2279 return message.error('请选择选择子订单');
1805 2280 }
... ... @@ -1810,10 +2285,9 @@ const OrderPage = () =&gt; {
1810 2285 return message.error('请选择可以打印的子订单');
1811 2286 }
1812 2287 }
1813   - setSelectedRows(selectedSubOrders);
1814   - setOrderRow(record);
  2288 + createOptObject(null, record.id);
1815 2289 setOrderPrintVisible(true);
1816   - setOrderCheckType(CHECK_TYPE.NORMAL);
  2290 + setOrderCheckType(CHECK_TYPE.WEARHOUSE_KEEPER);
1817 2291 }}
1818 2292 >
1819 2293 仓库打印
... ... @@ -1827,11 +2301,11 @@ const OrderPage = () =&gt; {
1827 2301 className="p-0"
1828 2302 type="link"
1829 2303 onClick={() => {
1830   - if (!selectedRowObj[record.id]?.length) {
  2304 + if (!subOrderSelectedMap.get(record.id)?.length) {
1831 2305 return message.error('请选择选择子订单');
1832 2306 }
1833   - setSelectedRows(selectedRowObj[record.id]);
1834   - setOrderRow(record);
  2307 +
  2308 + createOptObject(null, record.id);
1835 2309 setOrderPrintVisible(true);
1836 2310 setOrderCheckType(CHECK_TYPE.SUPPLIER);
1837 2311 }}
... ... @@ -1847,11 +2321,10 @@ const OrderPage = () =&gt; {
1847 2321 className="p-0"
1848 2322 type="link"
1849 2323 onClick={() => {
1850   - if (!selectedRowObj[record.id]?.length) {
  2324 + if (!subOrderSelectedMap.get(record.id)?.length) {
1851 2325 return message.error('请选择选择子订单');
1852 2326 }
1853   - setSelectedRows(selectedRowObj[record.id]);
1854   - setOrderRow(record);
  2327 + createOptObject(null, record.id);
1855 2328 setOrderPrintVisible(true);
1856 2329 setIsRePrintOrder(true);
1857 2330 }}
... ... @@ -1861,17 +2334,31 @@ const OrderPage = () =&gt; {
1861 2334 ) : (
1862 2335 ''
1863 2336 )}
  2337 + {record.mainPath?.includes('confirmReceipt') ? (
  2338 + <Button
  2339 + className="p-0"
  2340 + type="link"
  2341 + onClick={() => {
  2342 + createOptObject(null, record.id);
  2343 + setConfirmReceiptVisible(true);
  2344 + }}
  2345 + >
  2346 + 确认收货
  2347 + </Button>
  2348 + ) : (
  2349 + ''
  2350 + )}
1864 2351 {record.mainPath?.includes('modifySendInformation') ? (
1865 2352 <Button
1866 2353 className="p-0"
1867 2354 type="link"
1868 2355 onClick={() => {
1869   - if (!selectedRowObj[record.id]?.length) {
  2356 + if (!subOrderSelectedMap.get(record.id)?.length) {
1870 2357 return message.error(
1871 2358 '请选择已经发货或者已经确认收货的子订单',
1872 2359 );
1873 2360 }
1874   - for (let row of selectedRowObj[record.id]) {
  2361 + for (let row of subOrderSelectedMap.get(record.id)) {
1875 2362 if (
1876 2363 row.orderStatus !== 'CONFIRM_RECEIPT' &&
1877 2364 row.orderStatus !== 'SHIPPED'
... ... @@ -1881,7 +2368,7 @@ const OrderPage = () =&gt; {
1881 2368 );
1882 2369 }
1883 2370 }
1884   - setSelectedRows(selectedRowObj[record.id]);
  2371 + createOptObject(null, record.id);
1885 2372 setDeliverVisible(true);
1886 2373 setIsSendProduct(false);
1887 2374 }}
... ... @@ -1896,15 +2383,7 @@ const OrderPage = () =&gt; {
1896 2383 type="link"
1897 2384 className="p-0"
1898 2385 onClick={() => {
1899   - let selectedSubOrders = selectedRowObj[record.id];
1900   - setSelectedRows(selectedSubOrders);
1901   - if (selectedSubOrders === undefined) {
1902   - setIsMainOrder(true);
1903   - setSelectedRows(record.subOrderInformationLists);
1904   - } else {
1905   - setIsMainOrder(false);
1906   - }
1907   - setOrderRow(record);
  2386 + createOptObject(null, record.id);
1908 2387 setFinancialVisible(true);
1909 2388 setIsEdit(false);
1910 2389 }}
... ... @@ -1920,12 +2399,12 @@ const OrderPage = () =&gt; {
1920 2399 type="link"
1921 2400 className="p-0"
1922 2401 onClick={() => {
1923   - let selectedSubOrders = selectedRowObj[record.id];
  2402 + let selectedSubOrders = subOrderSelectedMap.get(
  2403 + record.id,
  2404 + );
1924 2405 if (selectedSubOrders === undefined) {
1925 2406 selectedSubOrders = record.subOrderInformationLists;
1926 2407 }
1927   -
1928   - setSelectedRows(selectedSubOrders);
1929 2408 for (let i = 0; i < selectedSubOrders.length; i++) {
1930 2409 if (
1931 2410 selectedSubOrders[i].invoicingStatus ===
... ... @@ -1939,6 +2418,8 @@ const OrderPage = () =&gt; {
1939 2418 return;
1940 2419 }
1941 2420 }
  2421 +
  2422 + createOptObject(null, record.id);
1942 2423 setApplyForInvoicingVisible(true);
1943 2424 setIsEdit(false);
1944 2425 setIsMainOrder(false);
... ... @@ -1957,7 +2438,9 @@ const OrderPage = () =&gt; {
1957 2438 onClick={() => {
1958 2439 //勾选的子订单:如果有勾选,后面只校验有勾选的
1959 2440  
1960   - let selectedSubOrders = selectedRowObj[record.id];
  2441 + let selectedSubOrders = subOrderSelectedMap.get(
  2442 + record.id,
  2443 + );
1961 2444 if (
1962 2445 selectedSubOrders === undefined ||
1963 2446 selectedSubOrders.length === 0
... ... @@ -1999,9 +2482,9 @@ const OrderPage = () =&gt; {
1999 2482 }
2000 2483 }
2001 2484 }
  2485 +
  2486 + createOptObject(null, record.id);
2002 2487 setOrderDrawerVisible(true);
2003   - setOrderRow(record);
2004   - setSelectedRows(selectedSubOrders);
2005 2488 setOrderOptType('edit');
2006 2489 }}
2007 2490 >
... ... @@ -2018,10 +2501,8 @@ const OrderPage = () =&gt; {
2018 2501 className="p-0"
2019 2502 type="link"
2020 2503 onClick={() => {
2021   - let selectedSubOrders = record.subOrderInformationLists;
  2504 + createOptObject(null, record.id);
2022 2505 setFinancialEditVisible(true);
2023   - setSelectedRows(selectedSubOrders);
2024   - setOrderRow(record);
2025 2506 setIsMainOrder(true);
2026 2507 }}
2027 2508 >
... ... @@ -2036,7 +2517,9 @@ const OrderPage = () =&gt; {
2036 2517 className="p-0"
2037 2518 type="link"
2038 2519 onClick={() => {
2039   - let selectedSubOrders = selectedRowObj[record.id];
  2520 + let selectedSubOrders = subOrderSelectedMap.get(
  2521 + record.id,
  2522 + );
2040 2523 setSelectedRows(selectedSubOrders);
2041 2524 if (selectedSubOrders === undefined) {
2042 2525 selectedSubOrders = record.subOrderInformationLists;
... ... @@ -2054,10 +2537,10 @@ const OrderPage = () =&gt; {
2054 2537 return;
2055 2538 }
2056 2539 }
2057   - setOrderRow(record);
  2540 +
  2541 + createOptObject(null, record.id);
2058 2542 setCheckVisible(true);
2059   - setSelectedRows(selectedSubOrders);
2060   - setOrderCheckType(CHECK_TYPE.NORMAL);
  2543 + setOrderCheckType(CHECK_TYPE.WEARHOUSE_KEEPER);
2061 2544 }}
2062 2545 >
2063 2546 审核
... ... @@ -2071,7 +2554,9 @@ const OrderPage = () =&gt; {
2071 2554 className="p-0"
2072 2555 type="link"
2073 2556 onClick={() => {
2074   - let selectedSubOrders = selectedRowObj[record.id];
  2557 + let selectedSubOrders = subOrderSelectedMap.get(
  2558 + record.id,
  2559 + );
2075 2560 setSelectedRows(selectedSubOrders);
2076 2561 if (selectedSubOrders === undefined) {
2077 2562 selectedSubOrders = record.subOrderInformationLists;
... ... @@ -2085,9 +2570,9 @@ const OrderPage = () =&gt; {
2085 2570 return;
2086 2571 }
2087 2572 }
2088   - setOrderRow(record);
  2573 +
  2574 + createOptObject(null, record.id);
2089 2575 setCheckVisible(true);
2090   - setSelectedRows(selectedSubOrders);
2091 2576 setOrderCheckType(CHECK_TYPE.AFTER_SALES);
2092 2577 }}
2093 2578 >
... ... @@ -2103,7 +2588,9 @@ const OrderPage = () =&gt; {
2103 2588 title="此订单是否无需发货?"
2104 2589 text="无需发货"
2105 2590 onConfirm={async () => {
2106   - let selectedSubOrders = selectedRowObj[record.id];
  2591 + let selectedSubOrders = subOrderSelectedMap.get(
  2592 + record.id,
  2593 + );
2107 2594 if (selectedSubOrders === undefined) {
2108 2595 selectedSubOrders = record.subOrderInformationLists;
2109 2596 }
... ... @@ -2151,11 +2638,14 @@ const OrderPage = () =&gt; {
2151 2638 title="确认取消申请开票?"
2152 2639 text="取消申请"
2153 2640 onConfirm={async () => {
2154   - let selectedSubOrders = selectedRowObj[record.id];
  2641 + let selectedSubOrders = subOrderSelectedMap.get(
  2642 + record.id,
  2643 + );
2155 2644 if (selectedSubOrders === undefined) {
2156 2645 selectedSubOrders = record.subOrderInformationLists;
2157 2646 }
2158   - setSelectedRows(selectedSubOrders);
  2647 +
  2648 + console.log(selectedSubOrders);
2159 2649 for (let i = 0; i < selectedSubOrders.length; i++) {
2160 2650 if (
2161 2651 selectedSubOrders[i].afterInvoicingStatus !==
... ... @@ -2191,7 +2681,9 @@ const OrderPage = () =&gt; {
2191 2681 className="p-0"
2192 2682 type="link"
2193 2683 onClick={() => {
2194   - let selectedSubOrders = selectedRowObj[record.id];
  2684 + let selectedSubOrders = subOrderSelectedMap.get(
  2685 + record.id,
  2686 + );
2195 2687 setSelectedRows(selectedSubOrders);
2196 2688 if (selectedSubOrders === undefined) {
2197 2689 selectedSubOrders = record.subOrderInformationLists;
... ... @@ -2210,9 +2702,8 @@ const OrderPage = () =&gt; {
2210 2702 return;
2211 2703 }
2212 2704 }
2213   - setOrderRow(record);
  2705 + createOptObject(null, record.id);
2214 2706 setCheckVisible(true);
2215   - setSelectedRows(selectedSubOrders);
2216 2707 setOrderCheckType(CHECK_TYPE.FINALCIAL);
2217 2708 }}
2218 2709 >
... ... @@ -2228,7 +2719,9 @@ const OrderPage = () =&gt; {
2228 2719 className="p-0"
2229 2720 type="link"
2230 2721 onClick={() => {
2231   - let selectedSubOrders = selectedRowObj[record.id];
  2722 + let selectedSubOrders = subOrderSelectedMap.get(
  2723 + record.id,
  2724 + );
2232 2725 setSelectedRows(selectedSubOrders);
2233 2726 if (selectedSubOrders === undefined) {
2234 2727 selectedSubOrders = record.subOrderInformationLists;
... ... @@ -2242,9 +2735,9 @@ const OrderPage = () =&gt; {
2242 2735 return;
2243 2736 }
2244 2737 }
2245   - setOrderRow(record);
  2738 +
  2739 + createOptObject(null, record.id);
2246 2740 setProcureCheckModalVisible(true);
2247   - setSelectedRows(selectedSubOrders);
2248 2741 setOrderCheckType(CHECK_TYPE.PROCURE);
2249 2742 }}
2250 2743 >
... ... @@ -2259,7 +2752,9 @@ const OrderPage = () =&gt; {
2259 2752 className="p-0"
2260 2753 type="link"
2261 2754 onClick={() => {
2262   - let selectedSubOrders = selectedRowObj[record.id];
  2755 + let selectedSubOrders = subOrderSelectedMap.get(
  2756 + record.id,
  2757 + );
2263 2758 if (selectedSubOrders === undefined) {
2264 2759 selectedSubOrders = record.subOrderInformationLists;
2265 2760 }
... ... @@ -2275,8 +2770,9 @@ const OrderPage = () =&gt; {
2275 2770 return;
2276 2771 }
2277 2772 }
  2773 +
  2774 + createOptObject(null, record.id);
2278 2775 setOrderDrawerVisible(true);
2279   - setOrderRow(record);
2280 2776 setOrderOptType('after-sales');
2281 2777 }}
2282 2778 >
... ... @@ -2292,7 +2788,7 @@ const OrderPage = () =&gt; {
2292 2788 title="售后是否已完成?"
2293 2789 text="完成售后"
2294 2790 onConfirm={async () => {
2295   - let selectedSubOrders = selectedRowObj[record.id];
  2791 + let selectedSubOrders = subOrderSelectedMap.get(record.id);
2296 2792 if (selectedSubOrders === undefined) {
2297 2793 selectedSubOrders = record.subOrderInformationLists;
2298 2794 }
... ... @@ -2403,7 +2899,9 @@ const OrderPage = () =&gt; {
2403 2899 title="确认打印?"
2404 2900 text="采购打印"
2405 2901 onConfirm={async () => {
2406   - let selectedSubOrders = selectedRowObj[record.id];
  2902 + let selectedSubOrders = subOrderSelectedMap.get(
  2903 + record.id,
  2904 + );
2407 2905 if (selectedSubOrders === undefined) {
2408 2906 selectedSubOrders = record.subOrderInformationLists;
2409 2907 }
... ... @@ -2439,10 +2937,10 @@ const OrderPage = () =&gt; {
2439 2937 // className="p-0"
2440 2938 // type="link"
2441 2939 // onClick={() => {
2442   - // if (!selectedRowObj[record.id]?.length) {
  2940 + // if (!subOrderSelectedMap.get(record.id)?.length) {
2443 2941 // return message.error('请选择选择子订单');
2444 2942 // }
2445   - // setSelectedRows(selectedRowObj[record.id]);
  2943 + // setSelectedRows(subOrderSelectedMap.get(record.id));
2446 2944 // setOrderRow(record);
2447 2945 // setOrderPrintVisible(true);
2448 2946 // setOrderCheckType(CHECK_TYPE.PROCURE);
... ... @@ -2574,11 +3072,11 @@ const OrderPage = () =&gt; {
2574 3072  
2575 3073 //财务可以将需要处理的订单排序到前面
2576 3074 if (roleCode === 'finance') {
2577   - radios.push(<Radio value={20}>排序</Radio>);
2578   -
2579 3075 radios.push(<Radio value={50}>加急</Radio>);
2580 3076  
2581 3077 radios.push(<Radio value={40}>待处理</Radio>);
  3078 +
  3079 + radios.push(<Checkbox onChange={financeSorted}>排序</Checkbox>);
2582 3080 }
2583 3081  
2584 3082 if (roleCode === 'salesRepresentative' || roleCode === 'salesManager') {
... ... @@ -2589,7 +3087,7 @@ const OrderPage = () =&gt; {
2589 3087  
2590 3088 if (roleCode === 'admin') {
2591 3089 radios.push(<Radio value={10}>待处理</Radio>);
2592   - radios.push(<Radio value={20}>排序</Radio>);
  3090 + radios.push(<Checkbox onChange={financeSorted}>排序</Checkbox>);
2593 3091 }
2594 3092  
2595 3093 //筛选按钮配置
... ... @@ -2608,7 +3106,7 @@ const OrderPage = () =&gt; {
2608 3106 toolBtns.push(radioGroup);
2609 3107  
2610 3108 //导出按钮配置
2611   - const items: MenuProps['items'] = [
  3109 + const exportItems: MenuProps['items'] = [
2612 3110 {
2613 3111 label: '导出查询结果订单',
2614 3112 key: '2',
... ... @@ -2622,28 +3120,15 @@ const OrderPage = () =&gt; {
2622 3120 label: '导出已选中订单',
2623 3121 key: '1',
2624 3122 onClick: async () => {
2625   - if (selectedItems.length === 0) {
  3123 + if (selectedMainOrderKeys.length === 0) {
2626 3124 message.error('请选择订单');
2627 3125 return;
2628 3126 }
2629   - let body = { flag: 30, ids: selectedItems };
  3127 + let body = { flag: 30, ids: selectedMainOrderKeys };
2630 3128 exportLoading();
2631 3129 orderExport('/api/service/order/export', body, exportLoadingDestory);
2632 3130 },
2633 3131 },
2634   - // {
2635   - // label: '导出当前页订单',
2636   - // key: '2',
2637   - // onClick: async () => {
2638   - // if (mainOrderAllItemKeys.length === 0) {
2639   - // message.error('当前没有订单');
2640   - // return;
2641   - // }
2642   - // let body = { flag: 20, ids: mainOrderAllItemKeys };
2643   - // exportLoading();
2644   - // orderExport('/api/service/order/export', body, exportLoadingDestory);
2645   - // },
2646   - // },
2647 3132 {
2648 3133 label: '导出当天订单',
2649 3134 key: '4',
... ... @@ -2664,50 +3149,125 @@ const OrderPage = () =&gt; {
2664 3149 },
2665 3150 ];
2666 3151  
2667   - const menuProps = {
2668   - items,
  3152 + const exportMenuProps = {
  3153 + items: exportItems,
  3154 + onClick: () => {},
  3155 + };
  3156 +
  3157 + //导出按钮配置
  3158 + const auditItems: MenuProps['items'] = [
  3159 + {
  3160 + label: '领导审核',
  3161 + key: '2',
  3162 + onClick: async () => {
  3163 + setIsMainOrder(true);
  3164 + setCheckVisible(true);
  3165 + setOrderCheckType(CHECK_TYPE.LEADER_AUDIT);
  3166 + },
  3167 + },
  3168 + {
  3169 + label: '后置审核',
  3170 + key: '1',
  3171 + onClick: async () => {
  3172 + setIsMainOrder(true);
  3173 + setCheckVisible(true);
  3174 + setOrderCheckType(CHECK_TYPE.WAITING_FOR_POST_AUDIT);
  3175 + },
  3176 + },
  3177 + {
  3178 + label: '修改申请审核',
  3179 + key: '3',
  3180 + onClick: async () => {
  3181 + setIsMainOrder(true);
  3182 + setCheckVisible(true);
  3183 + setOrderCheckType(CHECK_TYPE.MODIFY_APPLY_WAIT_FOR_AUDIT);
  3184 + },
  3185 + },
  3186 + ];
  3187 +
  3188 + const auditProps = {
  3189 + items: auditItems,
2669 3190 onClick: () => {},
2670 3191 };
2671 3192  
  3193 + if (rolePath?.includes('leaderMergeAudit')) {
  3194 + toolBtns.push(
  3195 + <Dropdown
  3196 + disabled={selectedSubOrderKeys.length === 0}
  3197 + menu={auditProps}
  3198 + >
  3199 + <Button>
  3200 + <Space>
  3201 + 一键审核
  3202 + <DownOutlined />
  3203 + </Space>
  3204 + </Button>
  3205 + </Dropdown>,
  3206 + );
  3207 + }
  3208 +
2672 3209 if (rolePath?.includes('mergeAudit')) {
2673 3210 toolBtns.push(
2674 3211 <Button
2675 3212 type="primary"
2676 3213 key="out"
2677 3214 onClick={() => {
2678   - //选中订单
2679   - let mainOrderList = [];
2680   - for (let order of mainOrderSelectedMap.values()) {
2681   - mainOrderList.push(order);
2682   - }
2683 3215 setIsMainOrder(true);
2684   - setSelectedRows(mainOrderList);
2685   - setProcureCheckModalVisible(true);
  3216 + if (roleCode === 'procure') {
  3217 + setProcureCheckModalVisible(true);
  3218 + }
  3219 +
  3220 + if (roleCode === 'warehouseKeeper') {
  3221 + setCheckVisible(true);
  3222 + setOrderCheckType(CHECK_TYPE.WEARHOUSE_KEEPER);
  3223 + }
2686 3224 }}
2687   - disabled={selectedItems?.length === 0}
  3225 + disabled={selectedSubOrderKeys?.length === 0}
2688 3226 >
2689 3227 一键审核
2690 3228 </Button>,
2691 3229 );
2692 3230 }
2693 3231  
  3232 + if (rolePath?.includes('mergeProcureOrder')) {
  3233 + toolBtns.push(
  3234 + <Button
  3235 + key="mergeProcureOrder"
  3236 + type="primary"
  3237 + disabled={selectedSubOrderKeys.length === 0}
  3238 + onClick={() => {
  3239 + Modal.confirm({
  3240 + title: '一键下单',
  3241 + content: '选中的订单是否都已下单?',
  3242 + onOk: async () => {
  3243 + let res = await postServiceOrderProcureOrder({
  3244 + data: { subIds: [...selectedSubOrderKeys.values()].flat() },
  3245 + });
  3246 + if (res.result === RESPONSE_CODE.SUCCESS) {
  3247 + message.success(res.message);
  3248 + refreshTable();
  3249 + return true;
  3250 + }
  3251 + },
  3252 + });
  3253 + }}
  3254 + >
  3255 + 一键下单
  3256 + </Button>,
  3257 + );
  3258 + }
  3259 +
2694 3260 if (rolePath?.includes('mergeApplyInvoicing')) {
2695 3261 toolBtns.push(
2696 3262 <Button
2697 3263 type="primary"
2698 3264 key="out"
2699 3265 onClick={() => {
2700   - setApplyForInvoicingVisible(true);
2701   - //选中订单
2702 3266 setIsEdit(false);
2703 3267 setIsMainOrder(true);
2704   - let mainOrderList = [];
2705   - for (let order of mainOrderSelectedMap.values()) {
2706   - mainOrderList.push(order);
2707   - }
2708   - setSelectedRows(mainOrderList);
  3268 + setApplyForInvoicingVisible(true);
2709 3269 }}
2710   - disabled={selectedItems?.length === 0}
  3270 + disabled={selectedSubOrderKeys?.length === 0}
2711 3271 >
2712 3272 {roleCode === 'admin' ? '合并(销售)' : '合并开票'}
2713 3273 </Button>,
... ... @@ -2722,33 +3282,28 @@ const OrderPage = () =&gt; {
2722 3282 onClick={() => {
2723 3283 //检查订单状态是否正确
2724 3284 // 遍历Map中的键值对
2725   - let errorIds = [];
2726   - let mainOrders = [];
2727   - mainOrderSelectedMap.forEach((value) => {
2728   - mainOrders.push(value);
2729   - for (let subOrder of value.subOrderInformationLists) {
2730   - if (
2731   - subOrder.afterInvoicingStatus !== 'APPLY_FOR_INVOICING' &&
2732   - subOrder.afterInvoicingStatus !== 'PARTIAL_INVOICING'
2733   - ) {
2734   - errorIds.push(value.id);
2735   - return;
2736   - }
  3285 + let errorIds = new Set();
  3286 + [...subOrderSelectedMap.values()].flat().forEach((subOrder) => {
  3287 + if (
  3288 + subOrder.afterInvoicingStatus !== 'APPLY_FOR_INVOICING' &&
  3289 + subOrder.afterInvoicingStatus !== 'PARTIAL_INVOICING'
  3290 + ) {
  3291 + errorIds.add(subOrder.mainOrderId);
  3292 + return;
2737 3293 }
2738 3294 });
2739   - if (errorIds.length > 0) {
  3295 + if (errorIds.size > 0) {
2740 3296 message.error(
2741 3297 '订单号为:' +
2742   - errorIds.join(',') +
  3298 + [...errorIds.values()].join(',') +
2743 3299 '的订单存在不是[申请开票]或者[部分开票]状态的子订单,请检查!',
2744 3300 );
2745 3301 return;
2746 3302 }
2747   -
2748   - setMainOrderSelectedRows(mainOrders);
2749   - setFinancialMergeDrawerVisible(true);
  3303 + setIsMainOrder(true);
  3304 + setFinancialVisible(true);
2750 3305 }}
2751   - disabled={selectedItems?.length === 0}
  3306 + disabled={selectedSubOrderKeys?.length === 0}
2752 3307 >
2753 3308 {roleCode === 'admin' ? '合并(财务)' : '合并开票'}
2754 3309 </Button>,
... ... @@ -2779,14 +3334,14 @@ const OrderPage = () =&gt; {
2779 3334 setImportModalVisible(true);
2780 3335 }}
2781 3336 >
2782   - 导入
  3337 + 批量发货
2783 3338 </Button>,
2784 3339 );
2785 3340 }
2786 3341  
2787 3342 if (rolePath?.includes('export')) {
2788 3343 toolBtns.push(
2789   - <Dropdown menu={menuProps}>
  3344 + <Dropdown menu={exportMenuProps}>
2790 3345 <Button>
2791 3346 <Space>
2792 3347 导出
... ... @@ -2797,19 +3352,6 @@ const OrderPage = () =&gt; {
2797 3352 );
2798 3353 }
2799 3354  
2800   - // toolBtns.push(
2801   - // <Button
2802   - // key="show"
2803   - // onClick={() => {
2804   - // handleAllExpand();
2805   - // }}
2806   - // >
2807   - // {mainOrderAllItemKeys?.length !== expandedRowKeys.length
2808   - // ? '一键展开'
2809   - // : '一键收起'}
2810   - // </Button>,
2811   - // );
2812   -
2813 3355 return toolBtns;
2814 3356 }
2815 3357  
... ... @@ -2878,6 +3420,24 @@ const OrderPage = () =&gt; {
2878 3420 setPageSize(size);
2879 3421 setCurrentPage(page);
2880 3422 },
  3423 + showTotal: (total, range) => {
  3424 + return (
  3425 + <>
  3426 + <span>
  3427 + {'第 ' +
  3428 + range[0] +
  3429 + '-' +
  3430 + range[1] +
  3431 + ' 条/总共 ' +
  3432 + total +
  3433 + ' 条主订单 '}
  3434 + </span>
  3435 + <span className="text-[#8C8C8C]">
  3436 + {' (' + subOrderCount + ' 条子订单)'}
  3437 + </span>
  3438 + </>
  3439 + );
  3440 + },
2881 3441 }}
2882 3442 // showHeader={false}
2883 3443 expandedRowKeys={expandedRowKeys}
... ... @@ -2914,6 +3474,8 @@ const OrderPage = () =&gt; {
2914 3474  
2915 3475 params.condition = filterCondifion;
2916 3476  
  3477 + //排序
  3478 + params.sorted = sorted;
2917 3479 //是否只查看已作废
2918 3480 params.isDeleteQueryOrder = filterCondifion === 70;
2919 3481 //保存这个搜索条件
... ... @@ -2927,15 +3489,24 @@ const OrderPage = () =&gt; {
2927 3489 data: { ...params },
2928 3490 });
2929 3491  
2930   - let mainOrderIds = data?.data?.map((d) => d.id);
2931   - if (mainOrderAllItemKeys === undefined) {
2932   - setMainOrderAllItemKeys([]);
2933   - } else {
2934   - setMainOrderAllItemKeys(mainOrderIds);
2935   - }
2936 3492 setRolePath(data.specialPath);
2937   - handleTableExpand(mainOrderIds);
  3493 + setSubOrderCount(data.count);
  3494 + setAllMainChecked(false);
  3495 + setSelectedMainOrderKeys([]);
  3496 + subOrderSelectedMap.clear();
  3497 + mainOrderSelectedMap.clear();
2938 3498 setData(data?.data);
  3499 +
  3500 + //主订单id与子订单id的对照关系保存
  3501 + mainOrderIdSubOrderIdRelationsMap.clear();
  3502 + for (let row of data?.data) {
  3503 + let mianOrderId = row.id;
  3504 + let subOrderIds = row.subOrderInformationLists?.map((item) => {
  3505 + return item.id;
  3506 + });
  3507 + mainOrderIdSubOrderIdRelationsMap.set(mianOrderId, subOrderIds);
  3508 + }
  3509 +
2939 3510 return {
2940 3511 data: data?.data || [],
2941 3512 total: data?.total || 0,
... ... @@ -2951,11 +3522,11 @@ const OrderPage = () =&gt; {
2951 3522  
2952 3523 {orderDrawerVisible && (
2953 3524 <OrderDrawer
2954   - data={orderRow}
2955   - subOrders={selectedRows}
  3525 + data={orderOptType === 'add' ? {} : buildMainOrder()}
  3526 + subOrders={orderOptType === 'add' ? [] : buildSubOrders()}
2956 3527 onClose={(isSuccess: boolean) => {
2957 3528 setOrderDrawerVisible(false);
2958   - setOrderRow({});
  3529 + // clearOptObject();
2959 3530 if (isSuccess) {
2960 3531 refreshTable();
2961 3532 }
... ... @@ -2967,18 +3538,21 @@ const OrderPage = () =&gt; {
2967 3538 {checkVisible && (
2968 3539 <CheckModal
2969 3540 setCheckVisible={setCheckVisible}
2970   - data={orderRow}
2971   - subOrders={selectedRows}
  3541 + data={isMainOrder ? getFirstMainOrder() : buildMainOrder()}
  3542 + subOrders={
  3543 + isMainOrder
  3544 + ? [...subOrderSelectedMap.values()].flat()
  3545 + : buildSubOrders()
  3546 + }
2972 3547 orderCheckType={orderCheckType}
2973 3548 openOrderDrawer={(type: any, id: any) => {
2974   - setOrderRow({ id: id });
  3549 + setCurrentMainId(id);
2975 3550 setOrderOptType(type);
2976 3551 setOrderDrawerVisible(true);
2977 3552 }}
2978 3553 onClose={() => {
  3554 + clearOptObject();
2979 3555 setCheckVisible(false);
2980   - setOrderRow({});
2981   - setSelectedRows({});
2982 3556 refreshTable();
2983 3557 }}
2984 3558 />
... ... @@ -2987,14 +3561,17 @@ const OrderPage = () =&gt; {
2987 3561 {applyForInvoicingVisible && (
2988 3562 <ApplyForInvoicingModal
2989 3563 setCheckVisible={setApplyForInvoicingVisible}
2990   - data={selectedItems}
2991   - subOrders={selectedRows}
  3564 + subOrders={
  3565 + isMainOrder
  3566 + ? [...subOrderSelectedMap.values()].flat()
  3567 + : buildSubOrders()
  3568 + }
2992 3569 isMainOrder={isMainOrder}
2993 3570 isEdit={isEdit}
2994 3571 onClose={() => {
2995 3572 setApplyForInvoicingVisible(false);
2996   - setSelectedRows({});
2997 3573 setIsMainOrder(false);
  3574 + clearOptObject();
2998 3575 refreshTable();
2999 3576 }}
3000 3577 />
... ... @@ -3018,15 +3595,15 @@ const OrderPage = () =&gt; {
3018 3595  
3019 3596 {deliverVisible && (
3020 3597 <DeliverModal
3021   - data={selectedRows}
  3598 + data={buildSubOrders()}
3022 3599 isSendProduct={isSendProduct}
3023 3600 setVisible={(b: boolean) => {
3024 3601 setDeliverVisible(b);
3025 3602 }}
3026 3603 sendType={orderCheckType}
3027 3604 onClose={() => {
  3605 + clearOptObject();
3028 3606 setDeliverVisible(false);
3029   - setOrderRow({});
3030 3607 setIsSendProduct(false);
3031 3608 refreshTable();
3032 3609 }}
... ... @@ -3036,18 +3613,22 @@ const OrderPage = () =&gt; {
3036 3613 {financialVisible && (
3037 3614 <FinancialDrawer
3038 3615 isEdit={isEdit}
3039   - mainOrder={orderRow}
3040   - subOrders={selectedRows}
  3616 + mainOrder={isMainOrder ? getFirstMainOrder() : buildMainOrder()}
  3617 + subOrders={
  3618 + isMainOrder
  3619 + ? [...subOrderSelectedMap.values()].flat()
  3620 + : buildSubOrders()
  3621 + }
3041 3622 isMainOrder={isMainOrder}
3042 3623 cancel={() => {
3043 3624 setFinancialVisible(false);
3044   - setOrderRow({});
  3625 + clearOptObject();
3045 3626 setIsMainOrder(false);
3046 3627 setIsEdit(false);
3047 3628 }}
3048 3629 onClose={() => {
3049 3630 setFinancialVisible(false);
3050   - setOrderRow({});
  3631 + clearOptObject();
3051 3632 refreshTable();
3052 3633 setIsMainOrder(false);
3053 3634 setIsEdit(false);
... ... @@ -3057,8 +3638,8 @@ const OrderPage = () =&gt; {
3057 3638  
3058 3639 {financialEditVisible && (
3059 3640 <FinancialEditDrawer
3060   - mainOrder={orderRow}
3061   - subOrders={selectedRows}
  3641 + mainOrder={buildMainOrder()}
  3642 + subOrders={buildSubOrders()}
3062 3643 isMainOrder={isMainOrder}
3063 3644 setVisible={() => {
3064 3645 setFinancialEditVisible(false);
... ... @@ -3068,15 +3649,15 @@ const OrderPage = () =&gt; {
3068 3649 setFinancialEditVisible(false);
3069 3650 refreshTable();
3070 3651 setIsMainOrder(false);
3071   - setOrderRow({});
  3652 + clearOptObject();
3072 3653 }}
3073 3654 />
3074 3655 )}
3075 3656  
3076 3657 {orderPrintVisible && (
3077 3658 <OrderPrintModal
3078   - mainOrder={orderRow}
3079   - subOrders={selectedRows}
  3659 + mainOrder={buildMainOrder()}
  3660 + subOrders={buildSubOrders()}
3080 3661 isRePrint={isRePrintOrder}
3081 3662 setVisible={(b: boolean) => {
3082 3663 setOrderPrintVisible(b);
... ... @@ -3084,7 +3665,7 @@ const OrderPage = () =&gt; {
3084 3665 printOptType={orderCheckType}
3085 3666 onClose={() => {
3086 3667 setOrderPrintVisible(false);
3087   - setOrderRow({});
  3668 + clearOptObject();
3088 3669 setIsRePrintOrder(false);
3089 3670 refreshTable();
3090 3671 }}
... ... @@ -3093,10 +3674,10 @@ const OrderPage = () =&gt; {
3093 3674  
3094 3675 {confirmReceiptVisible && (
3095 3676 <ConfirmReceiptModal
3096   - data={orderRow}
  3677 + data={buildSubOrders()}
3097 3678 onClose={() => {
3098 3679 setConfirmReceiptVisible(false);
3099   - setOrderRow({});
  3680 + clearOptObject();
3100 3681 refreshTable();
3101 3682 }}
3102 3683 />
... ... @@ -3108,7 +3689,7 @@ const OrderPage = () =&gt; {
3108 3689 onClose={() => {
3109 3690 setSubOrderConfirmReceiptImagesVisible(false);
3110 3691 }}
3111   - orderRow={orderRow}
  3692 + orderRow={buildSubOrders()[0]}
3112 3693 />
3113 3694 )}
3114 3695  
... ... @@ -3123,10 +3704,10 @@ const OrderPage = () =&gt; {
3123 3704  
3124 3705 {attachmentModalVisible && (
3125 3706 <AttachmentModal
3126   - data={orderRow}
  3707 + data={buildSubOrders()[0]}
3127 3708 onClose={() => {
3128 3709 setAttachmentModalVisible(false);
3129   - setOrderRow({});
  3710 + clearOptObject();
3130 3711 }}
3131 3712 />
3132 3713 )}
... ... @@ -3144,20 +3725,20 @@ const OrderPage = () =&gt; {
3144 3725  
3145 3726 {deliverInfoDrawerVisible && (
3146 3727 <DeliverInfoDrawer
3147   - data={orderRow}
  3728 + data={buildMainOrder()}
3148 3729 onClose={() => {
3149 3730 setDeliverInfoDrawerVisible(false);
3150   - setOrderRow({});
  3731 + clearOptObject();
3151 3732 }}
3152 3733 />
3153 3734 )}
3154 3735  
3155 3736 {deliverInfoDrawerVisible && (
3156 3737 <DeliverInfoDrawer
3157   - data={orderRow}
  3738 + data={buildMainOrder()}
3158 3739 onClose={() => {
3159 3740 setDeliverInfoDrawerVisible(false);
3160   - setOrderRow({});
  3741 + clearOptObject();
3161 3742 }}
3162 3743 />
3163 3744 )}
... ... @@ -3165,13 +3746,15 @@ const OrderPage = () =&gt; {
3165 3746 {procureCheckModalVisible && (
3166 3747 <ProcureCheckModal
3167 3748 setCheckVisible={setProcureCheckModalVisible}
3168   - data={orderRow}
3169 3749 isMainOrder={isMainOrder}
3170   - orders={selectedRows}
  3750 + orders={
  3751 + isMainOrder
  3752 + ? [...subOrderSelectedMap.values()].flat()
  3753 + : buildSubOrders()
  3754 + }
3171 3755 onClose={() => {
3172 3756 setProcureCheckModalVisible(false);
3173   - setOrderRow({});
3174   - setSelectedRows({});
  3757 + clearOptObject();
3175 3758 setIsMainOrder(false);
3176 3759 refreshTable();
3177 3760 }}
... ... @@ -3181,12 +3764,11 @@ const OrderPage = () =&gt; {
3181 3764 {afterSalesDrawerVisible && (
3182 3765 <AfterSalesDrawer
3183 3766 setVisible={setAfterSalesDrawerVisible}
3184   - mainOrder={orderRow}
3185   - subOrders={selectedRows}
  3767 + mainOrder={buildMainOrder()}
  3768 + subOrders={buildSubOrders()}
3186 3769 onClose={() => {
3187 3770 setAfterSalesDrawerVisible(false);
3188   - setSelectedRows({});
3189   - setOrderRow({});
  3771 + clearOptObject();
3190 3772 refreshTable();
3191 3773 }}
3192 3774 />
... ... @@ -3207,10 +3789,15 @@ const OrderPage = () =&gt; {
3207 3789 {financialMergeDrawerVisible && (
3208 3790 <FinancialMergeDrawer
3209 3791 setVisible={setFinancialMergeDrawerVisible}
3210   - dataList={mainOrderSelectedRows}
  3792 + dataList={
  3793 + isMainOrder
  3794 + ? [...subOrderSelectedMap.values()].flat()
  3795 + : buildSubOrders()
  3796 + }
3211 3797 onClose={() => {
3212 3798 setFinancialMergeDrawerVisible(false);
3213   - setMainOrderSelectedRows([]);
  3799 + setIsMainOrder(false);
  3800 + clearOptObject();
3214 3801 refreshTable();
3215 3802 }}
3216 3803 />
... ... @@ -3232,16 +3819,38 @@ const OrderPage = () =&gt; {
3232 3819 <ShippingWarehouseChangeModal
3233 3820 setVisible={setShippingWarehouseChangeModalVisible}
3234 3821 subOrderIds={ids}
3235   - originShippingWarehouse={orderRow?.shippingWarehouse}
  3822 + originShippingWarehouse={buildSubOrders()[0].shippingWarehouse}
3236 3823 onClose={() => {
3237 3824 setShippingWarehouseChangeModalVisible(false);
3238   - setOrderRow({});
  3825 + clearOptObject();
3239 3826 setIds([]);
3240 3827 refreshTable();
3241 3828 }}
3242 3829 />
3243 3830 )}
3244 3831  
  3832 + {productionTimeModalVisible && (
  3833 + <ProductionTimeModal
  3834 + setVisible={setProductionTimeModalVisible}
  3835 + subOrders={buildSubOrders()}
  3836 + onClose={() => {
  3837 + setProductionTimeModalVisible(false);
  3838 + clearOptObject();
  3839 + refreshTable();
  3840 + }}
  3841 + />
  3842 + )}
  3843 +
  3844 + {modifiedDiffModalVisible && (
  3845 + <ModifiedDiffModal
  3846 + setVisible={setModifiedDiffModalVisible}
  3847 + subOrders={buildSubOrders()}
  3848 + onClose={() => {
  3849 + setModifiedDiffModalVisible(false);
  3850 + clearOptObject();
  3851 + }}
  3852 + />
  3853 + )}
3245 3854 {contextHolder}
3246 3855 </PageContainer>
3247 3856 );
... ...
src/pages/Order/table.less 0 → 100644
  1 +.myTable td {
  2 + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial,
  3 + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC',
  4 + 'WenQuanYi Micro Hei', sans-serif;
  5 + font-size: 13px;
  6 +}
... ...
src/pages/OrderReport/components/OrderDualAxes.tsx
1 1 import { DualAxes } from '@ant-design/charts';
2 2  
3 3 const OrderDualAxes = ({ data, statisticMethod }) => {
4   - let yFiledString = '';
5   - if (statisticMethod === 'MONTH_STATISTICS') {
  4 + console.log(data);
  5 + let yFiledString = 'curTime';
  6 + if (
  7 + statisticMethod === 'MONTH_STATISTICS' ||
  8 + statisticMethod === 'LAST_MONTH_STATISTICS'
  9 + ) {
6 10 yFiledString = 'curTime';
7 11 } else {
8 12 yFiledString = 'curMonth';
9 13 }
10 14 const config = {
11 15 data: [
12   - data.targetAndTotalPaymentDtoList === undefined
  16 + data.targetAndTotalPaymentDtoList === undefined ||
  17 + data.targetAndTotalPaymentDtoList === null
13 18 ? []
14 19 : data.targetAndTotalPaymentDtoList,
15   - data.orderNumberDtoList === undefined ? [] : data.orderNumberDtoList,
  20 + data.orderNumberDtoList === undefined || data.orderNumberDtoList === null
  21 + ? []
  22 + : data.orderNumberDtoList,
16 23 ],
17 24 xField: yFiledString,
18 25 yField: ['curDayTotalPayment', 'curDayTotalOrderNumber'],
... ...
src/pages/OrderReport/components/OrderStatisticCard.tsx
1 1 import { RESPONSE_CODE } from '@/constants/enum';
2 2 import { postServiceOrderUpdateReportFormsTarget } from '@/services';
3   -import Icon, { EditTwoTone } from '@ant-design/icons';
  3 +import { EditTwoTone } from '@ant-design/icons';
4 4 import {
5 5 ModalForm,
6 6 ProCard,
... ... @@ -27,6 +27,22 @@ export default ({ data, statisticsMethod, reFreshData }) =&gt; {
27 27 }
28 28 }, []);
29 29  
  30 + function getStatisticsMethodString() {
  31 + if (statisticsMethod === 'MONTH_STATISTICS') {
  32 + return '本月';
  33 + }
  34 +
  35 + if (statisticsMethod === 'LAST_MONTH_STATISTICS') {
  36 + return '上月';
  37 + }
  38 +
  39 + if (statisticsMethod === 'YEAR_STATISTICS') {
  40 + return '本年';
  41 + }
  42 +
  43 + return '';
  44 + }
  45 +
30 46 const [edit, setEdit] = useState(false);
31 47 const [form] = Form.useForm<{
32 48 statisticsMethod: string;
... ... @@ -36,40 +52,40 @@ export default ({ data, statisticsMethod, reFreshData }) =&gt; {
36 52 }>();
37 53 const [targetValue, setTargetValue] = useState(0);
38 54  
39   - const UpBig = () => (
40   - <svg width="44" height="auto" fill="#d81e06" viewBox="0 0 1024 1024">
41   - <path
42   - d="M255.857413 855.291523h-58.175337c-16.996324 0-30.798708-13.802384-30.798707-30.798708V166.084884c0-16.996324 13.802384-30.798708 30.798707-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v658.293862c0 16.996324-13.916453 30.912777-30.798708 30.912777z m-54.867327-34.220787h51.331179V169.506962h-51.331179v651.563774zM442.816977 855.291523h-58.175337c-16.996324 0-30.798708-13.802384-30.798708-30.798708V348.367606c0-16.996324 13.802384-30.798708 30.798708-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v476.01114c0 16.996324-13.802384 30.912777-30.798708 30.912777z m-54.753259-34.220787h51.33118V351.789685h-51.33118v469.281051zM629.890609 855.291523h-58.175337c-16.996324 0-30.798708-13.802384-30.798707-30.798708V525.517211c0-16.996324 13.802384-30.798708 30.798707-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v298.975604c0 16.882255-13.802384 30.798708-30.798708 30.798708z m-54.753258-34.220787h51.33118V528.939289h-51.33118v292.131447zM816.964242 855.291523h-58.175337c-16.996324 0-30.798708-13.802384-30.798708-30.798708V702.552746c0-16.996324 13.802384-30.798708 30.798708-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v121.940069c0 16.882255-13.802384 30.798708-30.798708 30.798708z m-54.753258-34.220787h51.331179V705.974825h-51.331179v115.095911zM830.652557 589.167873c-6.38788 0-12.547622-3.650217-15.513424-9.809958l-71.977721-152.168431-162.206527-45.855854c-6.844157-1.939178-11.863206-7.98485-12.433553-15.057146l-10.950651-133.803275-143.271026-77.567116c-8.327058-4.448702-11.406929-14.829007-6.844158-23.156065 4.448702-8.327058 14.829007-11.406929 23.156066-6.844157l151.484015 82.015818c5.133118 2.737663 8.441127 7.870781 8.897404 13.688314l10.722513 131.179682 158.328172 44.715161c4.79091 1.368831 8.669266 4.676841 10.836583 9.125543l75.28573 159.126657c3.992425 8.555197 0.342208 18.707363-8.09892 22.813857-2.509524 1.026624-5.019049 1.59697-7.414503 1.59697z"
43   - fill="#d81e06"
44   - ></path>
45   - <path d="M456.163083 261.903086c-6.844157 0-13.232037-4.106494-15.855631-10.722513l-42.433775-106.426646c-1.825109-4.676841-1.59697-10.038097 0.798485-14.4868 2.395455-4.448702 6.616019-7.642642 11.635068-8.669266l130.153057-26.692213c9.239612-1.939178 18.251086 4.106494 20.190264 13.346106 1.939178 9.239612-4.106494 18.251086-13.346106 20.190264l-110.076863 22.58572 34.905202 87.377074c3.536148 8.783335-0.798485 18.707363-9.58182 22.243511-2.053247 0.798485-4.220564 1.254762-6.387881 1.254763z" />
46   - </svg>
47   - );
  55 + // const UpBig = () => (
  56 + // <svg width="44" height="auto" fill="#d81e06" viewBox="0 0 1024 1024">
  57 + // <path
  58 + // d="M255.857413 855.291523h-58.175337c-16.996324 0-30.798708-13.802384-30.798707-30.798708V166.084884c0-16.996324 13.802384-30.798708 30.798707-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v658.293862c0 16.996324-13.916453 30.912777-30.798708 30.912777z m-54.867327-34.220787h51.331179V169.506962h-51.331179v651.563774zM442.816977 855.291523h-58.175337c-16.996324 0-30.798708-13.802384-30.798708-30.798708V348.367606c0-16.996324 13.802384-30.798708 30.798708-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v476.01114c0 16.996324-13.802384 30.912777-30.798708 30.912777z m-54.753259-34.220787h51.33118V351.789685h-51.33118v469.281051zM629.890609 855.291523h-58.175337c-16.996324 0-30.798708-13.802384-30.798707-30.798708V525.517211c0-16.996324 13.802384-30.798708 30.798707-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v298.975604c0 16.882255-13.802384 30.798708-30.798708 30.798708z m-54.753258-34.220787h51.33118V528.939289h-51.33118v292.131447zM816.964242 855.291523h-58.175337c-16.996324 0-30.798708-13.802384-30.798708-30.798708V702.552746c0-16.996324 13.802384-30.798708 30.798708-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v121.940069c0 16.882255-13.802384 30.798708-30.798708 30.798708z m-54.753258-34.220787h51.331179V705.974825h-51.331179v115.095911zM830.652557 589.167873c-6.38788 0-12.547622-3.650217-15.513424-9.809958l-71.977721-152.168431-162.206527-45.855854c-6.844157-1.939178-11.863206-7.98485-12.433553-15.057146l-10.950651-133.803275-143.271026-77.567116c-8.327058-4.448702-11.406929-14.829007-6.844158-23.156065 4.448702-8.327058 14.829007-11.406929 23.156066-6.844157l151.484015 82.015818c5.133118 2.737663 8.441127 7.870781 8.897404 13.688314l10.722513 131.179682 158.328172 44.715161c4.79091 1.368831 8.669266 4.676841 10.836583 9.125543l75.28573 159.126657c3.992425 8.555197 0.342208 18.707363-8.09892 22.813857-2.509524 1.026624-5.019049 1.59697-7.414503 1.59697z"
  59 + // fill="#d81e06"
  60 + // ></path>
  61 + // <path d="M456.163083 261.903086c-6.844157 0-13.232037-4.106494-15.855631-10.722513l-42.433775-106.426646c-1.825109-4.676841-1.59697-10.038097 0.798485-14.4868 2.395455-4.448702 6.616019-7.642642 11.635068-8.669266l130.153057-26.692213c9.239612-1.939178 18.251086 4.106494 20.190264 13.346106 1.939178 9.239612-4.106494 18.251086-13.346106 20.190264l-110.076863 22.58572 34.905202 87.377074c3.536148 8.783335-0.798485 18.707363-9.58182 22.243511-2.053247 0.798485-4.220564 1.254762-6.387881 1.254763z" />
  62 + // </svg>
  63 + // );
48 64  
49   - const DownBig = () => (
50   - <svg width="44" height="auto" fill="#1DB302" viewBox="0 0 1024 1024">
51   - <path
52   - d="M727.990197 852.667929V194.374067c0-16.996324 13.802384-30.798708 30.798708-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v658.293862c0 16.996324-13.802384 30.798708-30.798708 30.798708h-58.175337c-16.996324 0-30.798708-13.802384-30.798708-30.798708z m85.551966-654.871783h-51.331179v651.449705h51.331179V197.796146zM540.916565 852.667929V376.65679c0-16.996324 13.802384-30.798708 30.798707-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v476.011139c0 16.996324-13.802384 30.798708-30.798708 30.798708h-58.175337c-16.996324 0-30.798708-13.802384-30.798707-30.798708z m85.551966-472.589061h-51.33118v469.166983h51.33118V380.078868zM353.842932 852.667929v-298.861535c0-16.996324 13.802384-30.798708 30.798708-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v298.975604c0 16.996324-13.802384 30.798708-30.798708 30.798708h-58.175337c-16.996324-0.114069-30.798708-13.916453-30.798708-30.912777z m85.551966-295.439456h-51.33118v292.131447h51.33118V557.228473zM166.769299 852.667929V730.72786c0-16.996324 13.802384-30.798708 30.798708-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v121.940069c0 16.996324-13.802384 30.798708-30.798708 30.798708h-58.175337c-16.882255 0-30.798708-13.802384-30.798708-30.798708z m85.666036-118.51799h-51.33118v115.095912h51.33118V734.149939zM660.347109 189.012811c-0.684416 6.38788-4.904979 12.091345-11.406929 14.37273l-158.898518 55.437674-62.738108 156.503063c-2.623594 6.616019-9.125543 10.950652-16.311909 10.722513l-134.145483-3.308009-92.282054 134.259552c-5.361257 7.756712-15.9697 9.809959-23.840481 4.448702-7.756712-5.361257-9.809959-15.9697-4.448702-23.840481l97.529241-141.902194c3.308009-4.79091 8.783335-7.528573 14.4868-7.414504l131.521889 3.308009 61.255208-152.738777c1.825109-4.562772 5.589395-8.212989 10.266236-9.809958L637.647321 171.103932c8.897404-3.079871 18.707363 1.59697 21.787234 10.494375 0.912554 2.509524 1.140693 5.019049 0.912554 7.414504z"
53   - fill="#1DB302"
54   - ></path>
55   - <path
56   - d="M295.211318 526.771973c-0.684416 6.730088-5.475326 12.77576-12.433553 14.714938l-110.305001 30.912777c-4.904979 1.368831-10.152167 0.456277-14.258661-2.395455-4.220564-2.851732-6.844157-7.414504-7.414504-12.433552l-12.661691-132.206305c-0.912554-9.353682 6.045672-17.794809 15.399354-18.707364 9.353682-0.912554 17.794809 6.045672 18.707363 15.399354l10.722513 111.901972 90.571015-25.437451c9.125543-2.509524 18.593294 2.737663 21.102818 11.863206 0.684416 2.053247 0.798485 4.220564 0.570347 6.38788z"
57   - fill="#1DB302"
58   - />
59   - </svg>
60   - );
  65 + // const DownBig = () => (
  66 + // <svg width="44" height="auto" fill="#1DB302" viewBox="0 0 1024 1024">
  67 + // <path
  68 + // d="M727.990197 852.667929V194.374067c0-16.996324 13.802384-30.798708 30.798708-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v658.293862c0 16.996324-13.802384 30.798708-30.798708 30.798708h-58.175337c-16.996324 0-30.798708-13.802384-30.798708-30.798708z m85.551966-654.871783h-51.331179v651.449705h51.331179V197.796146zM540.916565 852.667929V376.65679c0-16.996324 13.802384-30.798708 30.798707-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v476.011139c0 16.996324-13.802384 30.798708-30.798708 30.798708h-58.175337c-16.996324 0-30.798708-13.802384-30.798707-30.798708z m85.551966-472.589061h-51.33118v469.166983h51.33118V380.078868zM353.842932 852.667929v-298.861535c0-16.996324 13.802384-30.798708 30.798708-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v298.975604c0 16.996324-13.802384 30.798708-30.798708 30.798708h-58.175337c-16.996324-0.114069-30.798708-13.916453-30.798708-30.912777z m85.551966-295.439456h-51.33118v292.131447h51.33118V557.228473zM166.769299 852.667929V730.72786c0-16.996324 13.802384-30.798708 30.798708-30.798708h58.175337c16.996324 0 30.798708 13.802384 30.798708 30.798708v121.940069c0 16.996324-13.802384 30.798708-30.798708 30.798708h-58.175337c-16.882255 0-30.798708-13.802384-30.798708-30.798708z m85.666036-118.51799h-51.33118v115.095912h51.33118V734.149939zM660.347109 189.012811c-0.684416 6.38788-4.904979 12.091345-11.406929 14.37273l-158.898518 55.437674-62.738108 156.503063c-2.623594 6.616019-9.125543 10.950652-16.311909 10.722513l-134.145483-3.308009-92.282054 134.259552c-5.361257 7.756712-15.9697 9.809959-23.840481 4.448702-7.756712-5.361257-9.809959-15.9697-4.448702-23.840481l97.529241-141.902194c3.308009-4.79091 8.783335-7.528573 14.4868-7.414504l131.521889 3.308009 61.255208-152.738777c1.825109-4.562772 5.589395-8.212989 10.266236-9.809958L637.647321 171.103932c8.897404-3.079871 18.707363 1.59697 21.787234 10.494375 0.912554 2.509524 1.140693 5.019049 0.912554 7.414504z"
  69 + // fill="#1DB302"
  70 + // ></path>
  71 + // <path
  72 + // d="M295.211318 526.771973c-0.684416 6.730088-5.475326 12.77576-12.433553 14.714938l-110.305001 30.912777c-4.904979 1.368831-10.152167 0.456277-14.258661-2.395455-4.220564-2.851732-6.844157-7.414504-7.414504-12.433552l-12.661691-132.206305c-0.912554-9.353682 6.045672-17.794809 15.399354-18.707364 9.353682-0.912554 17.794809 6.045672 18.707363 15.399354l10.722513 111.901972 90.571015-25.437451c9.125543-2.509524 18.593294 2.737663 21.102818 11.863206 0.684416 2.053247 0.798485 4.220564 0.570347 6.38788z"
  73 + // fill="#1DB302"
  74 + // />
  75 + // </svg>
  76 + // );
61 77  
62   - const UpSmall = () => (
63   - <svg width="14" height="auto" fill="#d81e06" viewBox="0 0 1024 1024">
64   - <path d="M511.976976 945.959599c-239.47514 0-433.597349-194.300264-433.597349-433.964716 0-239.677754 194.122209-433.955506 433.597349-433.955506s433.642374 194.277752 433.642374 433.955506C945.61935 751.659335 751.453139 945.959599 511.976976 945.959599zM666.05312 408.869155l-131.822304-132.292002c-2.899026-4.303003-7.091512-7.870248-12.509918-9.766434-2.876514-1.137916-5.952572-1.64957-9.119705-1.582031-0.222057 0-0.401136-0.112564-0.623193-0.112564-0.289596 0-0.535189 0.13303-0.847298 0.156566-3.03308-0.044002-6.021134 0.423649-8.830109 1.515516-5.507434 1.918699-9.787924 5.528923-12.664438 9.945513L357.945857 408.869155c-9.275247 9.29776-8.562003 25.061792 1.560542 35.184337 10.168594 10.146081 25.463951 10.413164 34.739199 1.11438 0.73678-0.735757 1.471514-1.248434 2.073218-2.073218l89.747024-89.456405 0.245593 399.136489c-0.155543 0.936325 0 1.783623 0 2.76395 0 12.352329 10.992355 22.342868 25.352411 22.342868 14.314007 0 25.976628-9.990538 25.976628-22.342868l0.289596-401.923976 89.771583 89.478917c0.599657 0.825808 1.335415 1.337461 2.049682 2.073218 9.29776 9.29776 24.595164 9.030677 34.740222-1.11438C674.615123 433.930947 675.351903 418.166915 666.05312 408.869155z" />{' '}
65   - </svg>
66   - );
  78 + // const UpSmall = () => (
  79 + // <svg width="14" height="auto" fill="#d81e06" viewBox="0 0 1024 1024">
  80 + // <path d="M511.976976 945.959599c-239.47514 0-433.597349-194.300264-433.597349-433.964716 0-239.677754 194.122209-433.955506 433.597349-433.955506s433.642374 194.277752 433.642374 433.955506C945.61935 751.659335 751.453139 945.959599 511.976976 945.959599zM666.05312 408.869155l-131.822304-132.292002c-2.899026-4.303003-7.091512-7.870248-12.509918-9.766434-2.876514-1.137916-5.952572-1.64957-9.119705-1.582031-0.222057 0-0.401136-0.112564-0.623193-0.112564-0.289596 0-0.535189 0.13303-0.847298 0.156566-3.03308-0.044002-6.021134 0.423649-8.830109 1.515516-5.507434 1.918699-9.787924 5.528923-12.664438 9.945513L357.945857 408.869155c-9.275247 9.29776-8.562003 25.061792 1.560542 35.184337 10.168594 10.146081 25.463951 10.413164 34.739199 1.11438 0.73678-0.735757 1.471514-1.248434 2.073218-2.073218l89.747024-89.456405 0.245593 399.136489c-0.155543 0.936325 0 1.783623 0 2.76395 0 12.352329 10.992355 22.342868 25.352411 22.342868 14.314007 0 25.976628-9.990538 25.976628-22.342868l0.289596-401.923976 89.771583 89.478917c0.599657 0.825808 1.335415 1.337461 2.049682 2.073218 9.29776 9.29776 24.595164 9.030677 34.740222-1.11438C674.615123 433.930947 675.351903 418.166915 666.05312 408.869155z" />{' '}
  81 + // </svg>
  82 + // );
67 83  
68   - const DownSmall = () => (
69   - <svg width="14" height="auto" fill="#1DB302" viewBox="0 0 1024 1024">
70   - <path d="M945.61935 512.005117c0 239.677754-194.166211 433.955506-433.642374 433.955506S78.379627 751.682871 78.379627 512.005117c0-239.664452 194.122209-433.964716 433.597349-433.964716S945.61935 272.340665 945.61935 512.005117zM664.492578 579.947532c-10.145058-10.146081-25.442462-10.413164-34.740222-1.115404-0.714268 0.735757-1.450025 1.248434-2.049682 2.073218l-89.771583 89.478917-0.289596-401.923976c0-12.352329-11.661597-22.342868-25.976628-22.342868-14.360056 0-25.352411 9.990538-25.352411 22.342868 0 0.980327-0.155543 1.827625 0 2.76395l-0.245593 399.136489-89.747024-89.456405c-0.602727-0.825808-1.337461-1.338485-2.073218-2.073218-9.275247-9.29776-24.571628-9.030677-34.739199 1.115404-10.123568 10.122545-10.836813 25.886577-1.560542 35.184337l131.689275 132.135436c2.876514 4.415566 7.157004 8.027837 12.664438 9.945513 2.808976 1.091868 5.79703 1.559519 8.830109 1.515516 0.312108 0.022513 0.557702 0.155543 0.847298 0.155543 0.223081 0 0.402159-0.11154 0.623193-0.11154 3.167133 0.067538 6.244214-0.445138 9.119705-1.583055 5.418406-1.895163 9.610892-5.462408 12.509918-9.765411l131.822304-132.292002C675.351903 605.833085 674.615123 590.069053 664.492578 579.947532z" />{' '}
71   - </svg>
72   - );
  84 + // const DownSmall = () => (
  85 + // <svg width="14" height="auto" fill="#1DB302" viewBox="0 0 1024 1024">
  86 + // <path d="M945.61935 512.005117c0 239.677754-194.166211 433.955506-433.642374 433.955506S78.379627 751.682871 78.379627 512.005117c0-239.664452 194.122209-433.964716 433.597349-433.964716S945.61935 272.340665 945.61935 512.005117zM664.492578 579.947532c-10.145058-10.146081-25.442462-10.413164-34.740222-1.115404-0.714268 0.735757-1.450025 1.248434-2.049682 2.073218l-89.771583 89.478917-0.289596-401.923976c0-12.352329-11.661597-22.342868-25.976628-22.342868-14.360056 0-25.352411 9.990538-25.352411 22.342868 0 0.980327-0.155543 1.827625 0 2.76395l-0.245593 399.136489-89.747024-89.456405c-0.602727-0.825808-1.337461-1.338485-2.073218-2.073218-9.275247-9.29776-24.571628-9.030677-34.739199 1.115404-10.123568 10.122545-10.836813 25.886577-1.560542 35.184337l131.689275 132.135436c2.876514 4.415566 7.157004 8.027837 12.664438 9.945513 2.808976 1.091868 5.79703 1.559519 8.830109 1.515516 0.312108 0.022513 0.557702 0.155543 0.847298 0.155543 0.223081 0 0.402159-0.11154 0.623193-0.11154 3.167133 0.067538 6.244214-0.445138 9.119705-1.583055 5.418406-1.895163 9.610892-5.462408 12.509918-9.765411l131.822304-132.292002C675.351903 605.833085 674.615123 590.069053 664.492578 579.947532z" />{' '}
  87 + // </svg>
  88 + // );
73 89  
74 90 const CardTitle = ({ title }) => {
75 91 return <span className="text-sm text-stone-600">{title}</span>;
... ... @@ -88,33 +104,33 @@ export default ({ data, statisticsMethod, reFreshData }) =&gt; {
88 104  
89 105 let trendIcon;
90 106 let trendPercentage;
91   - if (sameMonthPercentageChange > 0) {
92   - trendIcon = <Icon component={UpBig} />;
93   - trendPercentage = (
94   - <div style={{ minWidth: '130px' }}>
95   - <span className="text-xs text-stone-500">
96   - 同比上
97   - {statisticsMethod === 'MONTH_STATISTICS' ? '个月' : '年'}
98   - </span>
99   - <Icon component={UpSmall} />
100   - <span className="text-[#d81e06]">+{sameMonthPercentageChange}%</span>
101   - </div>
102   - );
103   - }
  107 + // if (sameMonthPercentageChange > 0) {
  108 + // trendIcon = <Icon component={UpBig} />;
  109 + // trendPercentage = (
  110 + // <div style={{ minWidth: '130px' }}>
  111 + // <span className="text-xs text-stone-500">
  112 + // 同比上
  113 + // {statisticsMethod === 'MONTH_STATISTICS' ? '个月' : '年'}
  114 + // </span>
  115 + // <Icon component={UpSmall} />
  116 + // <span className="text-[#d81e06]">+{sameMonthPercentageChange}%</span>
  117 + // </div>
  118 + // );
  119 + // }
104 120  
105   - if (sameMonthPercentageChange < 0) {
106   - trendIcon = <Icon component={DownBig} />;
107   - trendPercentage = (
108   - <div style={{ minWidth: '130px' }}>
109   - <span className="text-xs text-stone-500">
110   - 同比上
111   - {statisticsMethod === 'MONTH_STATISTICS' ? '个月' : '年'}
112   - </span>
113   - <Icon component={DownSmall} />
114   - <span className="text-[#1DB302]">{sameMonthPercentageChange}%</span>
115   - </div>
116   - );
117   - }
  121 + // if (sameMonthPercentageChange < 0) {
  122 + // trendIcon = <Icon component={DownBig} />;
  123 + // trendPercentage = (
  124 + // <div style={{ minWidth: '130px' }}>
  125 + // <span className="text-xs text-stone-500">
  126 + // 同比上
  127 + // {statisticsMethod === 'MONTH_STATISTICS' ? '个月' : '年'}
  128 + // </span>
  129 + // <Icon component={DownSmall} />
  130 + // <span className="text-[#1DB302]">{sameMonthPercentageChange}%</span>
  131 + // </div>
  132 + // );
  133 + // }
118 134  
119 135 if (sameMonthPercentageChange === -1000) {
120 136 trendIcon = '';
... ... @@ -131,7 +147,9 @@ export default ({ data, statisticsMethod, reFreshData }) =&gt; {
131 147 {content}
132 148 {editable ? (
133 149 <span className="pl-1 text-xs">
134   - {statisticsMethod === 'YEAR_STATISTICS' ? '每年' : '每月'}
  150 + {statisticsMethod === 'YEAR_STATISTICS'
  151 + ? '平均每月'
  152 + : '每月'}
135 153 </span>
136 154 ) : (
137 155 ''
... ... @@ -234,7 +252,7 @@ export default ({ data, statisticsMethod, reFreshData }) =&gt; {
234 252 <ProCard
235 253 className="order-statictis-card"
236 254 bordered
237   - title={<CardTitle title={'总收入'} />}
  255 + title={<CardTitle title={getStatisticsMethodString() + '总收入'} />}
238 256 >
239 257 <CardContent
240 258 unit="¥"
... ... @@ -244,14 +262,14 @@ export default ({ data, statisticsMethod, reFreshData }) =&gt; {
244 262 </ProCard>
245 263 <ProCard
246 264 className="order-statictis-card"
247   - title={<CardTitle title={'指标'} />}
  265 + title={<CardTitle title={getStatisticsMethodString() + '指标'} />}
248 266 bordered
249 267 >
250 268 <CardContent unit="¥" content={data?.target} editable={true} />
251 269 </ProCard>
252 270 <ProCard
253 271 className="order-statictis-card"
254   - title={<CardTitle title={'总订单量'} />}
  272 + title={<CardTitle title={getStatisticsMethodString() + '总订单量'} />}
255 273 bordered
256 274 >
257 275 <CardContent
... ... @@ -262,21 +280,27 @@ export default ({ data, statisticsMethod, reFreshData }) =&gt; {
262 280 </ProCard>
263 281 <ProCard
264 282 className="order-statictis-card"
265   - title={<CardTitle title={'总子订单量'} />}
  283 + title={
  284 + <CardTitle title={getStatisticsMethodString() + '总子订单量'} />
  285 + }
266 286 bordered
267 287 >
268 288 <CardContent unit="单" content={data?.subTotalOrderNumber} />
269 289 </ProCard>
270 290 <ProCard
271 291 className="order-statictis-card"
272   - title={<CardTitle title={'未审核子订单'} />}
  292 + title={
  293 + <CardTitle title={getStatisticsMethodString() + '未审核子订单'} />
  294 + }
273 295 bordered
274 296 >
275 297 <CardContent unit="单" content={data?.unCheckOrderNumber} />
276 298 </ProCard>
277 299 <ProCard
278 300 className="order-statictis-card"
279   - title={<CardTitle title={'待发货子订单'} />}
  301 + title={
  302 + <CardTitle title={getStatisticsMethodString() + '待发货子订单'} />
  303 + }
280 304 bordered
281 305 >
282 306 <CardContent unit="单" content={data?.unSendOrderNumber} />
... ...
src/pages/OrderReport/index.less
... ... @@ -7,10 +7,10 @@
7 7 }
8 8  
9 9 //将报表卡片的extra左边内容调到适中位置
10   -#order-dual-axes-card .ant-pro-card-extra {
11   - width: 60%;
12   - max-height: 24px;
13   -}
  10 +// #order-dual-axes-card .ant-pro-card-extra {
  11 +// width: 60%;
  12 +// max-height: 24px;
  13 +// }
14 14  
15 15 //报表卡片中tabs作为单选项,去掉多余的margin
16 16 #order-dual-axes-card .ant-tabs-nav {
... ...
src/pages/OrderReport/index.tsx
... ... @@ -5,21 +5,19 @@ import { EllipsisOutlined } from &#39;@ant-design/icons&#39;;
5 5 import {
6 6 PageContainer,
7 7 ProCard,
  8 + ProFormCheckbox,
8 9 ProFormDigit,
9 10 ProFormSelect,
10 11 QueryFilter,
11 12 } from '@ant-design/pro-components';
12   -import { history } from '@umijs/max';
13 13 import {
14 14 Avatar,
15 15 Button,
16 16 Dropdown,
17   - Flex,
18 17 Form,
  18 + Segmented,
19 19 Space,
20 20 Spin,
21   - Tabs,
22   - TabsProps,
23 21 Tag,
24 22 } from 'antd';
25 23 import { useEffect, useState } from 'react';
... ... @@ -42,7 +40,17 @@ const OrderReportPage = () =&gt; {
42 40 const [loading, setLoading] = useState(false);
43 41 const [statisticsMethod, setStatisticsMethod] = useState('MONTH_STATISTICS');
44 42 const onChange = (key: string) => {
45   - setStatisticsMethod(key);
  43 + if (key === '本月') {
  44 + setStatisticsMethod('MONTH_STATISTICS');
  45 + }
  46 +
  47 + if (key === '上月') {
  48 + setStatisticsMethod('LAST_MONTH_STATISTICS');
  49 + }
  50 +
  51 + if (key === '本年') {
  52 + setStatisticsMethod('YEAR_STATISTICS');
  53 + }
46 54 };
47 55  
48 56 /**
... ... @@ -55,6 +63,9 @@ const OrderReportPage = () =&gt; {
55 63 salesCode: form.getFieldValue('salesCode'),
56 64 productBelongBusiness: form.getFieldValue('productBelongBusiness'),
57 65 maxAccount: form.getFieldValue('maxAccount'),
  66 + includeExperimentalEquipment: form.getFieldValue(
  67 + 'includeExperimentalEquipment',
  68 + ),
58 69 // beginTime:"",
59 70 // endTime:""
60 71 };
... ... @@ -82,18 +93,18 @@ const OrderReportPage = () =&gt; {
82 93 loadData();
83 94 }, []);
84 95  
85   - const items: TabsProps['items'] = [
86   - {
87   - key: 'MONTH_STATISTICS',
88   - label: '本月统计',
89   - children: '',
90   - },
91   - {
92   - key: 'YEAR_STATISTICS',
93   - label: '本年统计',
94   - children: '',
95   - },
96   - ];
  96 + // const items: TabsProps['items'] = [
  97 + // {
  98 + // key: 'MONTH_STATISTICS',
  99 + // label: '本月统计',
  100 + // children: '',
  101 + // },
  102 + // {
  103 + // key: 'YEAR_STATISTICS',
  104 + // label: '本年统计',
  105 + // children: '',
  106 + // },
  107 + // ];
97 108 return (
98 109 <PageContainer
99 110 header={{
... ... @@ -165,24 +176,35 @@ const OrderReportPage = () =&gt; {
165 176 name="productBelongBusiness"
166 177 label="所属事业部"
167 178 options={enumToSelect(PRODUCT_BELONG_DEPARTMENT_OPTIONS)}
  179 + onChange={(val: any) => {
  180 + if (val === 'EXPERIMENTAL_EQUIPMENT') {
  181 + //勾选上包含设备事业部
  182 + form.setFieldValue('includeExperimentalEquipment', true);
  183 + }
  184 + }}
168 185 />
169 186 <ProFormDigit label="排除大订单金额" name="maxAccount" min={0} />
170 187  
171   - {/* <ProFormDateRangePicker
172   - key="dateRange"
173   - name="dateRange"
174   - label="时间"
175   - /> */}
  188 + <ProFormCheckbox
  189 + key="includeExperimentalEquipment"
  190 + name="includeExperimentalEquipment"
  191 + initialValue={false}
  192 + label="包含实验设备事业部汇总统计"
  193 + />
176 194 </QueryFilter>
177 195 </ProCard>
178 196  
179 197 <ProCard
180 198 id="order-dual-axes-card"
181   - title="统计图表"
  199 + title="汇总统计"
  200 + tooltip="下方汇总统计未统计实验设备事业部数据,如需要请勾选包含实验设备事业部汇总统计"
182 201 extra={
183   - <Flex>
184   - <Tabs defaultActiveKey="1" items={items} onChange={onChange} />
185   - </Flex>
  202 + <Segmented
  203 + options={['本月', '上月', '本年']}
  204 + onChange={(val: any) => {
  205 + onChange(val);
  206 + }}
  207 + />
186 208 }
187 209 bordered
188 210 >
... ...
src/services/definition.ts
... ... @@ -311,6 +311,13 @@ export interface AdminUserVO {
311 311 userName?: string;
312 312 }
313 313  
  314 +export interface AuditDto {
  315 + notes?: string;
  316 + pass?: boolean;
  317 + subOrderIds?: Array<number>;
  318 + type?: string;
  319 +}
  320 +
314 321 export interface AuditVO {
315 322 /** @format int32 */
316 323 current?: number;
... ... @@ -381,6 +388,10 @@ export interface CancelInvoiceAndBankStatementDto {
381 388 invoiceId?: number;
382 389 }
383 390  
  391 +export interface CancelSendOrderDto {
  392 + subIds?: Array<number>;
  393 +}
  394 +
384 395 export interface CaptchaMessageVO {
385 396 /** @format int32 */
386 397 current?: number;
... ... @@ -1413,6 +1424,11 @@ export interface QueryMainOrderDto {
1413 1424 export interface QueryReportFormsDto {
1414 1425 /**
1415 1426 * @description
  1427 + * 是否包含实验设备事业部
  1428 + */
  1429 + includeExperimentalEquipment?: boolean;
  1430 + /**
  1431 + * @description
1416 1432 * 最大金额
1417 1433 * @example
1418 1434 * 2343
... ... @@ -1490,6 +1506,16 @@ export interface SystemCustomFieldReq {
1490 1506 entityNumber?: string;
1491 1507 }
1492 1508  
  1509 +export interface ToProcureAuditDto {
  1510 + procure?: string;
  1511 + subOrderIds?: Array<number>;
  1512 +}
  1513 +
  1514 +export interface TokenApiDto {
  1515 + password?: string;
  1516 + username?: string;
  1517 +}
  1518 +
1493 1519 export interface Unit {
1494 1520 /** @format float */
1495 1521 coefficient?: number;
... ...
src/services/request.ts
... ... @@ -21,8 +21,10 @@ import type {
21 21 AdminUserQueryVO,
22 22 AdminUserRegisterVO,
23 23 AdminUserVO,
  24 + AuditDto,
24 25 AuditVO,
25 26 CancelInvoiceAndBankStatementDto,
  27 + CancelSendOrderDto,
26 28 CaptchaMessageVO,
27 29 CustomFieldRes,
28 30 CustomerCustomerListReq,
... ... @@ -39,6 +41,7 @@ import type {
39 41 MaterialStockRes,
40 42 MaterialUnitListRes,
41 43 MeasureUnitListRes,
  44 + ModelAndView,
42 45 OrderAddVO,
43 46 OrderAuditLogQueryVO,
44 47 OrderBaseInfoQueryVO,
... ... @@ -66,6 +69,8 @@ import type {
66 69 ShippingWarehouseChangeDto,
67 70 SysLogQueryVO,
68 71 SystemCustomFieldReq,
  72 + ToProcureAuditDto,
  73 + TokenApiDto,
69 74 UnitMaterialUnitListReq,
70 75 UnitMeasureUnitListReq,
71 76 UpdateHirePurchaseDto,
... ... @@ -248,9 +253,7 @@ export interface GetErrorResponse {
248 253 * @description
249 254 * OK
250 255 */
251   - 200: {
252   - [propertyName: string]: any;
253   - };
  256 + 200: ModelAndView;
254 257 /**
255 258 * @description
256 259 * Unauthorized
... ... @@ -271,9 +274,9 @@ export interface GetErrorResponse {
271 274 export type GetErrorResponseSuccess = GetErrorResponse[200];
272 275 /**
273 276 * @description
274   - * error
  277 + * errorHtml
275 278 * @tags basic-error-controller
276   - * @produces *
  279 + * @produces text/html
277 280 */
278 281 export const getError = /* #__PURE__ */ (() => {
279 282 const method = 'get';
... ... @@ -297,9 +300,7 @@ export interface PutErrorResponse {
297 300 * @description
298 301 * OK
299 302 */
300   - 200: {
301   - [propertyName: string]: any;
302   - };
  303 + 200: ModelAndView;
303 304 /**
304 305 * @description
305 306 * Created
... ... @@ -325,9 +326,9 @@ export interface PutErrorResponse {
325 326 export type PutErrorResponseSuccess = PutErrorResponse[200];
326 327 /**
327 328 * @description
328   - * error
  329 + * errorHtml
329 330 * @tags basic-error-controller
330   - * @produces *
  331 + * @produces text/html
331 332 * @consumes application/json
332 333 */
333 334 export const putError = /* #__PURE__ */ (() => {
... ... @@ -352,9 +353,7 @@ export interface PostErrorResponse {
352 353 * @description
353 354 * OK
354 355 */
355   - 200: {
356   - [propertyName: string]: any;
357   - };
  356 + 200: ModelAndView;
358 357 /**
359 358 * @description
360 359 * Created
... ... @@ -380,9 +379,9 @@ export interface PostErrorResponse {
380 379 export type PostErrorResponseSuccess = PostErrorResponse[200];
381 380 /**
382 381 * @description
383   - * error
  382 + * errorHtml
384 383 * @tags basic-error-controller
385   - * @produces *
  384 + * @produces text/html
386 385 * @consumes application/json
387 386 */
388 387 export const postError = /* #__PURE__ */ (() => {
... ... @@ -407,9 +406,7 @@ export interface DeleteErrorResponse {
407 406 * @description
408 407 * OK
409 408 */
410   - 200: {
411   - [propertyName: string]: any;
412   - };
  409 + 200: ModelAndView;
413 410 /**
414 411 * @description
415 412 * No Content
... ... @@ -430,9 +427,9 @@ export interface DeleteErrorResponse {
430 427 export type DeleteErrorResponseSuccess = DeleteErrorResponse[200];
431 428 /**
432 429 * @description
433   - * error
  430 + * errorHtml
434 431 * @tags basic-error-controller
435   - * @produces *
  432 + * @produces text/html
436 433 */
437 434 export const deleteError = /* #__PURE__ */ (() => {
438 435 const method = 'delete';
... ... @@ -456,9 +453,7 @@ export interface OptionsErrorResponse {
456 453 * @description
457 454 * OK
458 455 */
459   - 200: {
460   - [propertyName: string]: any;
461   - };
  456 + 200: ModelAndView;
462 457 /**
463 458 * @description
464 459 * No Content
... ... @@ -479,9 +474,9 @@ export interface OptionsErrorResponse {
479 474 export type OptionsErrorResponseSuccess = OptionsErrorResponse[200];
480 475 /**
481 476 * @description
482   - * error
  477 + * errorHtml
483 478 * @tags basic-error-controller
484   - * @produces *
  479 + * @produces text/html
485 480 * @consumes application/json
486 481 */
487 482 export const optionsError = /* #__PURE__ */ (() => {
... ... @@ -506,9 +501,7 @@ export interface HeadErrorResponse {
506 501 * @description
507 502 * OK
508 503 */
509   - 200: {
510   - [propertyName: string]: any;
511   - };
  504 + 200: ModelAndView;
512 505 /**
513 506 * @description
514 507 * No Content
... ... @@ -529,9 +522,9 @@ export interface HeadErrorResponse {
529 522 export type HeadErrorResponseSuccess = HeadErrorResponse[200];
530 523 /**
531 524 * @description
532   - * error
  525 + * errorHtml
533 526 * @tags basic-error-controller
534   - * @produces *
  527 + * @produces text/html
535 528 * @consumes application/json
536 529 */
537 530 export const headError = /* #__PURE__ */ (() => {
... ... @@ -556,9 +549,7 @@ export interface PatchErrorResponse {
556 549 * @description
557 550 * OK
558 551 */
559   - 200: {
560   - [propertyName: string]: any;
561   - };
  552 + 200: ModelAndView;
562 553 /**
563 554 * @description
564 555 * No Content
... ... @@ -579,9 +570,9 @@ export interface PatchErrorResponse {
579 570 export type PatchErrorResponseSuccess = PatchErrorResponse[200];
580 571 /**
581 572 * @description
582   - * error
  573 + * errorHtml
583 574 * @tags basic-error-controller
584   - * @produces *
  575 + * @produces text/html
585 576 * @consumes application/json
586 577 */
587 578 export const patchError = /* #__PURE__ */ (() => {
... ... @@ -2287,6 +2278,77 @@ export const postOrderErpAuthSendPasswordRecoverMail = /* #__PURE__ */ (() =&gt; {
2287 2278 return request;
2288 2279 })();
2289 2280  
  2281 +/** @description request parameter type for postOrderErpAuthToken */
  2282 +export interface PostOrderErpAuthTokenOption {
  2283 + /**
  2284 + * @description
  2285 + * tokenApiDto
  2286 + */
  2287 + body: {
  2288 + /**
  2289 + @description
  2290 + tokenApiDto */
  2291 + tokenApiDto: TokenApiDto;
  2292 + };
  2293 +}
  2294 +
  2295 +/** @description response type for postOrderErpAuthToken */
  2296 +export interface PostOrderErpAuthTokenResponse {
  2297 + /**
  2298 + * @description
  2299 + * OK
  2300 + */
  2301 + 200: ServerResult;
  2302 + /**
  2303 + * @description
  2304 + * Created
  2305 + */
  2306 + 201: any;
  2307 + /**
  2308 + * @description
  2309 + * Unauthorized
  2310 + */
  2311 + 401: any;
  2312 + /**
  2313 + * @description
  2314 + * Forbidden
  2315 + */
  2316 + 403: any;
  2317 + /**
  2318 + * @description
  2319 + * Not Found
  2320 + */
  2321 + 404: any;
  2322 +}
  2323 +
  2324 +export type PostOrderErpAuthTokenResponseSuccess =
  2325 + PostOrderErpAuthTokenResponse[200];
  2326 +/**
  2327 + * @description
  2328 + * 获取token
  2329 + * @tags login-controller
  2330 + * @produces *
  2331 + * @consumes application/json
  2332 + */
  2333 +export const postOrderErpAuthToken = /* #__PURE__ */ (() => {
  2334 + const method = 'post';
  2335 + const url = '/order/erp/auth/token';
  2336 + function request(
  2337 + option: PostOrderErpAuthTokenOption,
  2338 + ): Promise<PostOrderErpAuthTokenResponseSuccess> {
  2339 + return requester(request.url, {
  2340 + method: request.method,
  2341 + ...option,
  2342 + }) as unknown as Promise<PostOrderErpAuthTokenResponseSuccess>;
  2343 + }
  2344 +
  2345 + /** http method */
  2346 + request.method = method;
  2347 + /** request url */
  2348 + request.url = url;
  2349 + return request;
  2350 +})();
  2351 +
2290 2352 /** @description response type for postOrderErpCaptchaGetImgCaptchaCode */
2291 2353 export interface PostOrderErpCaptchaGetImgCaptchaCodeResponse {
2292 2354 /**
... ... @@ -6574,8 +6636,8 @@ export const postServiceOrderApplyInvoicing = /* #__PURE__ */ (() =&gt; {
6574 6636 return request;
6575 6637 })();
6576 6638  
6577   -/** @description request parameter type for postServiceOrderCheckOrder */
6578   -export interface PostServiceOrderCheckOrderOption {
  6639 +/** @description request parameter type for postServiceOrderAudit */
  6640 +export interface PostServiceOrderAuditOption {
6579 6641 /**
6580 6642 * @description
6581 6643 * dto
... ... @@ -6584,12 +6646,12 @@ export interface PostServiceOrderCheckOrderOption {
6584 6646 /**
6585 6647 @description
6586 6648 dto */
6587   - dto: Dto;
  6649 + dto: AuditDto;
6588 6650 };
6589 6651 }
6590 6652  
6591   -/** @description response type for postServiceOrderCheckOrder */
6592   -export interface PostServiceOrderCheckOrderResponse {
  6653 +/** @description response type for postServiceOrderAudit */
  6654 +export interface PostServiceOrderAuditResponse {
6593 6655 /**
6594 6656 * @description
6595 6657 * OK
... ... @@ -6617,25 +6679,96 @@ export interface PostServiceOrderCheckOrderResponse {
6617 6679 404: any;
6618 6680 }
6619 6681  
6620   -export type PostServiceOrderCheckOrderResponseSuccess =
6621   - PostServiceOrderCheckOrderResponse[200];
  6682 +export type PostServiceOrderAuditResponseSuccess =
  6683 + PostServiceOrderAuditResponse[200];
6622 6684 /**
6623 6685 * @description
6624   - * 审核订单
  6686 + * 订单审核
6625 6687 * @tags 内部订单
6626 6688 * @produces *
6627 6689 * @consumes application/json
6628 6690 */
6629   -export const postServiceOrderCheckOrder = /* #__PURE__ */ (() => {
  6691 +export const postServiceOrderAudit = /* #__PURE__ */ (() => {
6630 6692 const method = 'post';
6631   - const url = '/service/order/checkOrder';
  6693 + const url = '/service/order/audit';
6632 6694 function request(
6633   - option: PostServiceOrderCheckOrderOption,
6634   - ): Promise<PostServiceOrderCheckOrderResponseSuccess> {
  6695 + option: PostServiceOrderAuditOption,
  6696 + ): Promise<PostServiceOrderAuditResponseSuccess> {
6635 6697 return requester(request.url, {
6636 6698 method: request.method,
6637 6699 ...option,
6638   - }) as unknown as Promise<PostServiceOrderCheckOrderResponseSuccess>;
  6700 + }) as unknown as Promise<PostServiceOrderAuditResponseSuccess>;
  6701 + }
  6702 +
  6703 + /** http method */
  6704 + request.method = method;
  6705 + /** request url */
  6706 + request.url = url;
  6707 + return request;
  6708 +})();
  6709 +
  6710 +/** @description request parameter type for postServiceOrderCancelSend */
  6711 +export interface PostServiceOrderCancelSendOption {
  6712 + /**
  6713 + * @description
  6714 + * dto
  6715 + */
  6716 + body: {
  6717 + /**
  6718 + @description
  6719 + dto */
  6720 + dto: CancelSendOrderDto;
  6721 + };
  6722 +}
  6723 +
  6724 +/** @description response type for postServiceOrderCancelSend */
  6725 +export interface PostServiceOrderCancelSendResponse {
  6726 + /**
  6727 + * @description
  6728 + * OK
  6729 + */
  6730 + 200: ServerResult;
  6731 + /**
  6732 + * @description
  6733 + * Created
  6734 + */
  6735 + 201: any;
  6736 + /**
  6737 + * @description
  6738 + * Unauthorized
  6739 + */
  6740 + 401: any;
  6741 + /**
  6742 + * @description
  6743 + * Forbidden
  6744 + */
  6745 + 403: any;
  6746 + /**
  6747 + * @description
  6748 + * Not Found
  6749 + */
  6750 + 404: any;
  6751 +}
  6752 +
  6753 +export type PostServiceOrderCancelSendResponseSuccess =
  6754 + PostServiceOrderCancelSendResponse[200];
  6755 +/**
  6756 + * @description
  6757 + * 取消发货
  6758 + * @tags 内部订单
  6759 + * @produces *
  6760 + * @consumes application/json
  6761 + */
  6762 +export const postServiceOrderCancelSend = /* #__PURE__ */ (() => {
  6763 + const method = 'post';
  6764 + const url = '/service/order/cancelSend';
  6765 + function request(
  6766 + option: PostServiceOrderCancelSendOption,
  6767 + ): Promise<PostServiceOrderCancelSendResponseSuccess> {
  6768 + return requester(request.url, {
  6769 + method: request.method,
  6770 + ...option,
  6771 + }) as unknown as Promise<PostServiceOrderCancelSendResponseSuccess>;
6639 6772 }
6640 6773  
6641 6774 /** http method */
... ... @@ -6663,15 +6796,13 @@ export interface PostServiceOrderConfirmReceiptOption {
6663 6796 export interface PostServiceOrderConfirmReceiptOption {
6664 6797 /**
6665 6798 * @description
6666   - * id
6667   - * @format int64
  6799 + * subIds
6668 6800 */
6669 6801 query: {
6670 6802 /**
6671 6803 @description
6672   - id
6673   - @format int64 */
6674   - id: number;
  6804 + subIds */
  6805 + subIds: Array<number>;
6675 6806 };
6676 6807 }
6677 6808  
... ... @@ -6803,6 +6934,77 @@ export const postServiceOrderEditOrder = /* #__PURE__ */ (() =&gt; {
6803 6934 return request;
6804 6935 })();
6805 6936  
  6937 +/** @description request parameter type for postServiceOrderEditProductionTime */
  6938 +export interface PostServiceOrderEditProductionTimeOption {
  6939 + /**
  6940 + * @description
  6941 + * editProductiontimeDto
  6942 + */
  6943 + body: {
  6944 + /**
  6945 + @description
  6946 + editProductiontimeDto */
  6947 + editProductiontimeDto: Dto;
  6948 + };
  6949 +}
  6950 +
  6951 +/** @description response type for postServiceOrderEditProductionTime */
  6952 +export interface PostServiceOrderEditProductionTimeResponse {
  6953 + /**
  6954 + * @description
  6955 + * OK
  6956 + */
  6957 + 200: ServerResult;
  6958 + /**
  6959 + * @description
  6960 + * Created
  6961 + */
  6962 + 201: any;
  6963 + /**
  6964 + * @description
  6965 + * Unauthorized
  6966 + */
  6967 + 401: any;
  6968 + /**
  6969 + * @description
  6970 + * Forbidden
  6971 + */
  6972 + 403: any;
  6973 + /**
  6974 + * @description
  6975 + * Not Found
  6976 + */
  6977 + 404: any;
  6978 +}
  6979 +
  6980 +export type PostServiceOrderEditProductionTimeResponseSuccess =
  6981 + PostServiceOrderEditProductionTimeResponse[200];
  6982 +/**
  6983 + * @description
  6984 + * 修改生产时间
  6985 + * @tags 内部订单
  6986 + * @produces *
  6987 + * @consumes application/json
  6988 + */
  6989 +export const postServiceOrderEditProductionTime = /* #__PURE__ */ (() => {
  6990 + const method = 'post';
  6991 + const url = '/service/order/editProductionTime';
  6992 + function request(
  6993 + option: PostServiceOrderEditProductionTimeOption,
  6994 + ): Promise<PostServiceOrderEditProductionTimeResponseSuccess> {
  6995 + return requester(request.url, {
  6996 + method: request.method,
  6997 + ...option,
  6998 + }) as unknown as Promise<PostServiceOrderEditProductionTimeResponseSuccess>;
  6999 + }
  7000 +
  7001 + /** http method */
  7002 + request.method = method;
  7003 + /** request url */
  7004 + request.url = url;
  7005 + return request;
  7006 +})();
  7007 +
6806 7008 /** @description request parameter type for postServiceOrderErrorExcelInformation */
6807 7009 export interface PostServiceOrderErrorExcelInformationOption {
6808 7010 /**
... ... @@ -7188,7 +7390,7 @@ export type PostServiceOrderImportExcelResponseSuccess =
7188 7390 PostServiceOrderImportExcelResponse[200];
7189 7391 /**
7190 7392 * @description
7191   - * 表格导入
  7393 + * 批量发货
7192 7394 * @tags 内部订单
7193 7395 * @produces *
7194 7396 * @consumes multipart/form-data
... ... @@ -7496,6 +7698,77 @@ export const postServiceOrderMergeInvoicing = /* #__PURE__ */ (() =&gt; {
7496 7698 return request;
7497 7699 })();
7498 7700  
  7701 +/** @description request parameter type for postServiceOrderModifiedDiff */
  7702 +export interface PostServiceOrderModifiedDiffOption {
  7703 + /**
  7704 + * @description
  7705 + * dto
  7706 + */
  7707 + body: {
  7708 + /**
  7709 + @description
  7710 + dto */
  7711 + dto: Dto;
  7712 + };
  7713 +}
  7714 +
  7715 +/** @description response type for postServiceOrderModifiedDiff */
  7716 +export interface PostServiceOrderModifiedDiffResponse {
  7717 + /**
  7718 + * @description
  7719 + * OK
  7720 + */
  7721 + 200: ServerResult;
  7722 + /**
  7723 + * @description
  7724 + * Created
  7725 + */
  7726 + 201: any;
  7727 + /**
  7728 + * @description
  7729 + * Unauthorized
  7730 + */
  7731 + 401: any;
  7732 + /**
  7733 + * @description
  7734 + * Forbidden
  7735 + */
  7736 + 403: any;
  7737 + /**
  7738 + * @description
  7739 + * Not Found
  7740 + */
  7741 + 404: any;
  7742 +}
  7743 +
  7744 +export type PostServiceOrderModifiedDiffResponseSuccess =
  7745 + PostServiceOrderModifiedDiffResponse[200];
  7746 +/**
  7747 + * @description
  7748 + * 修改对比
  7749 + * @tags 内部订单
  7750 + * @produces *
  7751 + * @consumes application/json
  7752 + */
  7753 +export const postServiceOrderModifiedDiff = /* #__PURE__ */ (() => {
  7754 + const method = 'post';
  7755 + const url = '/service/order/modifiedDiff';
  7756 + function request(
  7757 + option: PostServiceOrderModifiedDiffOption,
  7758 + ): Promise<PostServiceOrderModifiedDiffResponseSuccess> {
  7759 + return requester(request.url, {
  7760 + method: request.method,
  7761 + ...option,
  7762 + }) as unknown as Promise<PostServiceOrderModifiedDiffResponseSuccess>;
  7763 + }
  7764 +
  7765 + /** http method */
  7766 + request.method = method;
  7767 + /** request url */
  7768 + request.url = url;
  7769 + return request;
  7770 +})();
  7771 +
7499 7772 /** @description request parameter type for postServiceOrderNoNeedInvoicingEdit */
7500 7773 export interface PostServiceOrderNoNeedInvoicingEditOption {
7501 7774 /**
... ... @@ -8112,7 +8385,7 @@ export type PostServiceOrderProcureOrderResponseSuccess =
8112 8385 PostServiceOrderProcureOrderResponse[200];
8113 8386 /**
8114 8387 * @description
8115   - * 采购下单按钮
  8388 + * 采购下单
8116 8389 * @tags 内部订单
8117 8390 * @produces *
8118 8391 * @consumes application/json
... ... @@ -8254,7 +8527,7 @@ export type PostServiceOrderProcureSendResponseSuccess =
8254 8527 PostServiceOrderProcureSendResponse[200];
8255 8528 /**
8256 8529 * @description
8257   - * 采购发订单
  8530 + * 采购发订单
8258 8531 * @tags 内部订单
8259 8532 * @produces *
8260 8533 * @consumes application/json
... ... @@ -9734,6 +10007,77 @@ export const postServiceOrderSupplierSendOrder = /* #__PURE__ */ (() =&gt; {
9734 10007 return request;
9735 10008 })();
9736 10009  
  10010 +/** @description request parameter type for postServiceOrderToProcureAudit */
  10011 +export interface PostServiceOrderToProcureAuditOption {
  10012 + /**
  10013 + * @description
  10014 + * dto
  10015 + */
  10016 + body: {
  10017 + /**
  10018 + @description
  10019 + dto */
  10020 + dto: ToProcureAuditDto;
  10021 + };
  10022 +}
  10023 +
  10024 +/** @description response type for postServiceOrderToProcureAudit */
  10025 +export interface PostServiceOrderToProcureAuditResponse {
  10026 + /**
  10027 + * @description
  10028 + * OK
  10029 + */
  10030 + 200: ServerResult;
  10031 + /**
  10032 + * @description
  10033 + * Created
  10034 + */
  10035 + 201: any;
  10036 + /**
  10037 + * @description
  10038 + * Unauthorized
  10039 + */
  10040 + 401: any;
  10041 + /**
  10042 + * @description
  10043 + * Forbidden
  10044 + */
  10045 + 403: any;
  10046 + /**
  10047 + * @description
  10048 + * Not Found
  10049 + */
  10050 + 404: any;
  10051 +}
  10052 +
  10053 +export type PostServiceOrderToProcureAuditResponseSuccess =
  10054 + PostServiceOrderToProcureAuditResponse[200];
  10055 +/**
  10056 + * @description
  10057 + * 转给采购审核
  10058 + * @tags 内部订单
  10059 + * @produces *
  10060 + * @consumes application/json
  10061 + */
  10062 +export const postServiceOrderToProcureAudit = /* #__PURE__ */ (() => {
  10063 + const method = 'post';
  10064 + const url = '/service/order/toProcureAudit';
  10065 + function request(
  10066 + option: PostServiceOrderToProcureAuditOption,
  10067 + ): Promise<PostServiceOrderToProcureAuditResponseSuccess> {
  10068 + return requester(request.url, {
  10069 + method: request.method,
  10070 + ...option,
  10071 + }) as unknown as Promise<PostServiceOrderToProcureAuditResponseSuccess>;
  10072 + }
  10073 +
  10074 + /** http method */
  10075 + request.method = method;
  10076 + /** request url */
  10077 + request.url = url;
  10078 + return request;
  10079 +})();
  10080 +
9737 10081 /** @description request parameter type for postServiceOrderUpdateAnnex */
9738 10082 export interface PostServiceOrderUpdateAnnexOption {
9739 10083 /**
... ... @@ -9923,7 +10267,7 @@ export type PostServiceOrderUpdateOrderResponseSuccess =
9923 10267 PostServiceOrderUpdateOrderResponse[200];
9924 10268 /**
9925 10269 * @description
9926   - * 编辑订单
  10270 + * 修改订单
9927 10271 * @tags 内部订单
9928 10272 * @produces *
9929 10273 * @consumes application/json
... ...
src/utils/index.ts
... ... @@ -55,6 +55,25 @@ function formatDateTime(inputDateTime: string) {
55 55 return formattedDateTime;
56 56 }
57 57  
  58 +// const resize = () => {
  59 +// // 计算元素底部到视口顶部的距离
  60 +// let bottomDistance = document
  61 +// .getElementById('mainTable')
  62 +// ?.getElementsByClassName('ant-table-thead')[0]
  63 +// .getBoundingClientRect().bottom;
  64 +// // 获取屏幕高度
  65 +// let screenHeight =
  66 +// window.innerHeight || document.documentElement.clientHeight;
  67 +
  68 +// // 计算元素底部到屏幕底部的距离
  69 +// let bottomToScreenBottomDistance = screenHeight - bottomDistance;
  70 +
  71 +// // //底部分页元素的高度
  72 +// // var pH = screenHeight - document.getElementById("main-table").getElementsByClassName('ant-table-body')[0].getBoundingClientRect().bottom;
  73 +
  74 +// setTableHeight(bottomToScreenBottomDistance - 88);
  75 +// };
  76 +
58 77 function formatdate(inputDateTime: string) {
59 78 const parsedDateTime = new Date(inputDateTime);
60 79  
... ... @@ -321,6 +340,38 @@ async function blobToJson(blob: any) {
321 340 });
322 341 }
323 342  
  343 +/**
  344 + * 判断文件名是否为图片
  345 + * @param name
  346 + */
  347 +function isImageName(name: any) {
  348 + if (name === undefined || name === null) {
  349 + return false;
  350 + }
  351 + // 获取文件后缀
  352 + let suffix = '';
  353 + try {
  354 + const fileArr = name.split('.');
  355 + suffix = fileArr[fileArr.length - 1];
  356 + } catch (err) {
  357 + suffix = '';
  358 + }
  359 +
  360 + // 如果文件名无后缀,返回 false
  361 + if (!suffix) {
  362 + return false;
  363 + }
  364 +
  365 + // 图片格式
  366 + const imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp'];
  367 +
  368 + // 进行图片匹配
  369 + const isImage = imglist.some((item) => item === suffix);
  370 + if (isImage) {
  371 + return true;
  372 + }
  373 +}
  374 +
324 375 export {
325 376 FloatAdd,
326 377 FloatDiv,
... ... @@ -340,6 +391,7 @@ export {
340 391 formatdate,
341 392 getAliYunOSSFileNameFromUrl,
342 393 getUserInfo,
  394 + isImageName,
343 395 splitByFirstTwoDashes,
344 396 transImageFile,
345 397 };
... ...