diff --git a/package-lock.json b/package-lock.json index 5e59eef..48cca21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,19 +9,19 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@blueprintjs/core": "^6.8.0", - "@blueprintjs/icons": "^6.5.2", - "@blueprintjs/select": "^6.1.0", + "@blueprintjs/core": "^6.9.1", + "@blueprintjs/icons": "^6.6.0", + "@blueprintjs/select": "^6.1.3", "@emotion/styled": "^11.14.1", "@vitejs/plugin-react": "^5.1.4", - "@zakodium/nmrium-core": "^0.6.5", - "@zakodium/nmrium-core-plugins": "^0.6.39", + "@zakodium/nmrium-core": "^0.7.1", + "@zakodium/nmrium-core-plugins": "^0.7.1", "fifo-logger": "^2.0.1", "filelist-utils": "^1.11.3", - "nmr-processing": "^22.5.0", - "nmrium": "^1.12.0", + "nmr-processing": "^22.5.2", + "nmrium": "^2.0.0", "openchemlib": "^9.20.0", - "react-science": "^19.9.1" + "react-science": "^19.10.1" }, "devDependencies": { "@babel/plugin-transform-modules-commonjs": "^7.28.6", @@ -30,7 +30,7 @@ "@playwright/test": "^1.58.2", "@simbathesailor/use-what-changed": "^2.0.0", "@types/jest": "^30.0.0", - "@types/node": "^25.3.0", + "@types/node": "^25.3.5", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@types/react-router-dom": "^5.3.3", @@ -42,8 +42,8 @@ "prettier": "3.8.1", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-router-dom": "^7.13.0", - "serve": "^14.2.5", + "react-router-dom": "^7.13.1", + "serve": "^14.2.6", "typescript": "^5.9.3", "vite": "^7.3.1", "vite-plugin-pwa": "^1.2.0" @@ -60,9 +60,9 @@ } }, "node_modules/@atlaskit/pragmatic-drag-and-drop": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/@atlaskit/pragmatic-drag-and-drop/-/pragmatic-drag-and-drop-1.7.7.tgz", - "integrity": "sha512-jX+68AoSTqO/fhCyJDTZ38Ey6/wyL2Iq+J/moanma0YyktpnoHxevjY1UNJHYp0NCburdQDZSL1ZFac1mO1osQ==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/@atlaskit/pragmatic-drag-and-drop/-/pragmatic-drag-and-drop-1.7.9.tgz", + "integrity": "sha512-m/bcw5flyjfcF/rdX4JeomtIBrWuDNOwcQieiywHv7zkfIRmUC34Q9ZLeNGVoz73UiGsRqxysMuw4tC7lSJ89g==", "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.0.0", @@ -2000,14 +2000,14 @@ } }, "node_modules/@blueprintjs/core": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@blueprintjs/core/-/core-6.8.0.tgz", - "integrity": "sha512-46PkgSz/txIy3gNdXm4RblMYAv7lhENAU5LXbXaqVdy0EQllQLaEDLj3LnqXmrQ9jpB4EV65xb/YBK+TO8C/Lw==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@blueprintjs/core/-/core-6.9.1.tgz", + "integrity": "sha512-RmkIpN6dGch7ZCT8dkmbK80JgcIqV4w19SmzJTot7QKm7fDRsi2hcusV/LOvn7WgZvS9Z8URzIp357jAN9Nv5A==", "license": "Apache-2.0", "peer": true, "dependencies": { "@blueprintjs/colors": "^5.1.14", - "@blueprintjs/icons": "^6.5.2", + "@blueprintjs/icons": "^6.6.0", "@floating-ui/react": "^0.27.13", "@popperjs/core": "^2.11.8", "classnames": "^2.3.1", @@ -2033,9 +2033,9 @@ } }, "node_modules/@blueprintjs/icons": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@blueprintjs/icons/-/icons-6.5.2.tgz", - "integrity": "sha512-nYLoDGhkEsmLicmnpnrJs0wDBTuhVhGZuKIzDNEnaNEUjO8q8X6YQUHr8yJdSg9x6Th7i8pMNvUKzBnK+KHihg==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@blueprintjs/icons/-/icons-6.6.0.tgz", + "integrity": "sha512-IaMTAAY554iqUCvfO9+okAnC/qprypQqkNOkBdAkID6lXud8PSyfJWdXneSBQnU/fHU1UA+7xILJ6Wr4wGoJGw==", "license": "Apache-2.0", "peer": true, "dependencies": { @@ -2055,15 +2055,15 @@ } }, "node_modules/@blueprintjs/select": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@blueprintjs/select/-/select-6.1.0.tgz", - "integrity": "sha512-0+Xdlpt2Ci72Fk38KkGNfLzsVPku83u9tRUbXkaI0R/f+IzGmrJ4NRODRidXxxGgjh6ImcSj+RCx3BGh7Vlk9w==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@blueprintjs/select/-/select-6.1.3.tgz", + "integrity": "sha512-BsDVwHvDplhNplcPizYVPi6y0KOqAB18Nw+spaQlACKYN9A2MmRe1EOCb1xYUu2dyx3Xz1sUMr1/2l6Dy/I2Ug==", "license": "Apache-2.0", "peer": true, "dependencies": { "@blueprintjs/colors": "^5.1.14", - "@blueprintjs/core": "^6.8.0", - "@blueprintjs/icons": "^6.5.2", + "@blueprintjs/core": "^6.9.1", + "@blueprintjs/icons": "^6.6.0", "classnames": "^2.3.1", "tslib": "~2.6.2" }, @@ -2085,9 +2085,9 @@ "license": "MIT" }, "node_modules/@emnapi/core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", - "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "dev": true, "license": "MIT", "optional": true, @@ -2097,9 +2097,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "dev": true, "license": "MIT", "optional": true, @@ -4157,7 +4157,7 @@ } } }, - "node_modules/@tanstack/react-form/node_modules/@tanstack/react-store": { + "node_modules/@tanstack/react-store": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.8.1.tgz", "integrity": "sha512-XItJt+rG8c5Wn/2L/bnxys85rBpm0BfMbhb4zmPVLXAKY9POrp1xd6IbU4PKoOI+jSEGc3vntPRfLGSgXfE2Ig==", @@ -4378,9 +4378,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz", - "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", + "version": "25.3.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz", + "integrity": "sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -5075,50 +5075,50 @@ } }, "node_modules/@zakodium/nmr-types": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.2.tgz", - "integrity": "sha512-tT7mezDYiiIFrgE1xunmobO9vbMOCMRHtJ3Ei3ArHHq49oGBPoe7a5rWWK6mX4YCUsahhgO503HKwufwge8pLg==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.3.tgz", + "integrity": "sha512-9NYQZO0yh/cmmW8TqtGk9YX9ZaZk8Fnmsgxvy1ol4wFsqQpLnWX8gpmW17fAmU+/NBn50tmh0tXraygdUer31A==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "ml-peak-shape-generator": "^4.2.0", "ml-signal-processing": "^2.2.0", - "ml-spectra-processing": "^14.19.0" + "ml-spectra-processing": "^14.21.0" } }, "node_modules/@zakodium/nmrium-core": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.6.5.tgz", - "integrity": "sha512-xSlz1uL1xFZQkFyIqd3c8dffDfixHFrDU7MuZzDJcomC1lu8/uFqnveqq0I+XFhRrFPlf48gXTF9AuOb9GLA/g==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.7.1.tgz", + "integrity": "sha512-9o+uRkfBVXMu+W01KfD81SWrLbzJoRY51fxXfsHmqgZWegKZj61Xc79xcgHuV8DPG/xYA1bUHRd0RBOWFtY3fA==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "cheminfo-types": "^1.10.0", "fifo-logger": "^2.0.1", - "file-collection": "^6.6.0", + "file-collection": "^6.6.1", "is-any-array": "^2.0.1", "lodash.merge": "^4.6.2", - "ml-spectra-processing": "^14.19.0", + "ml-spectra-processing": "^14.21.0", "nmr-correlation": "^2.3.5" } }, "node_modules/@zakodium/nmrium-core-plugins": { - "version": "0.6.39", - "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.6.39.tgz", - "integrity": "sha512-1kgPHIpP7vDXGgG17w9NkeGx0TQJNTXokzKYw/CIh5SqYNuPSZut4r28gWcqP3QBZzlnK+fXUFL2eSjZm35VFg==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.7.1.tgz", + "integrity": "sha512-jKxB/Bt/Tp89ltepSFlJWgNynV6GILUcNoVTqR02YxS3WaI6jNAKhXofXWpGgFMlKFGc2TVtmfoCPEOCMAWLeQ==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "@date-fns/utc": "^2.1.1", - "@zakodium/nmrium-core": "^0.6.5", + "@zakodium/nmrium-core": "^0.7.1", "cheminfo-types": "^1.10.0", "convert-to-jcamp": "^6.0.0", "date-fns": "^4.1.0", - "file-collection": "^6.6.0", + "file-collection": "^6.6.1", "gyromagnetic-ratio": "^2.0.0", "is-any-array": "^2.0.1", - "jcampconverter": "^12.2.0", + "jcampconverter": "^12.2.1", "linear-sum-assignment": "^1.0.9", "lodash.merge": "^4.6.2", - "ml-spectra-processing": "^14.19.0", - "nmr-processing": "^22.5.0", + "ml-spectra-processing": "^14.21.0", + "nmr-processing": "^22.5.2", "openchemlib": "^9.20.0", "openchemlib-utils": "^8.12.1", "sdf-parser": "^7.0.4" @@ -5143,9 +5143,9 @@ "license": "MIT" }, "node_modules/@zip.js/zip.js": { - "version": "2.8.21", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.21.tgz", - "integrity": "sha512-fkyzXISE3IMrstDO1AgPkJCx14MYHP/suIGiAovEYEuBjq3mffsuL6aMV7ohOSjW4rXtuACuUfpA3GtITgdtYg==", + "version": "2.8.23", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.23.tgz", + "integrity": "sha512-RB+RLnxPJFPrGvQ9rgO+4JOcsob6lD32OcF0QE0yg24oeW9q8KnTTNlugcDaIveEcCbclobJcZP+fLQ++sH0bw==", "license": "BSD-3-Clause", "engines": { "bun": ">=0.7.0", @@ -5919,9 +5919,9 @@ } }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "license": "MIT", "engines": { @@ -6102,9 +6102,9 @@ } }, "node_modules/chemical-elements": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/chemical-elements/-/chemical-elements-2.2.1.tgz", - "integrity": "sha512-Khr3m8RhBbNwDb2MSo9Zb9O+dcUuFourUC0hK+YxNhAtEhOwJPVTMDQeDi1vUwH44tUeNRNKriUs2QQFNQvxgg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/chemical-elements/-/chemical-elements-2.2.2.tgz", + "integrity": "sha512-EL7cKE8FSyTcsWbs3uECKfYtdZW6Z8tD2OAeRXK4+rRc3+AMsJUqu/Sl790Ej4qbcy11/35ErdfnI5Yy7zQopw==", "license": "MIT" }, "node_modules/chemical-groups": { @@ -6114,9 +6114,9 @@ "license": "MIT" }, "node_modules/cheminfo-font": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/cheminfo-font/-/cheminfo-font-1.13.1.tgz", - "integrity": "sha512-FIT5ybXaNolIAl8V64a3YQWZ28YaJgRz93ApBloI6NDIA5kGifTma822/bSDA/ABSwqOJAWwr/cMipIZxMjE/g==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/cheminfo-font/-/cheminfo-font-1.21.0.tgz", + "integrity": "sha512-Eou8OIegiaA+BV6aQJKsXPJkaWotvkAOGy5vchtBRDhrDhlsKryat8N/BuHPWBCBkUnyja5FG0YKDccPlmA7Hw==", "license": "CC-BY-4.0" }, "node_modules/cheminfo-types": { @@ -6339,6 +6339,13 @@ "dev": true, "license": "MIT" }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/comment-parser": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.4.tgz", @@ -6391,16 +6398,6 @@ "node": ">= 0.8.0" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -7081,13 +7078,12 @@ "license": "MIT" }, "node_modules/ensure-string": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ensure-string/-/ensure-string-1.2.0.tgz", - "integrity": "sha512-Hvv2Xocfn6CSvCWgIGNzf0D5bgE6fAa65cayGOWsEXz03ej3aDpsogP3zstuLKt43zVuojQFST4XHPt9+PtuGQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ensure-string/-/ensure-string-2.0.0.tgz", + "integrity": "sha512-qej9cbqY36/lD8TdFFGugkTybqdxIWLXcqXPlLsuMoW4GJ8ExUGvLEXr+2sXbjssHiAO0hMpkK6tk3E8xphArQ==", "license": "MIT", "dependencies": { - "cheminfo-types": "^1.1.0", - "isutf8": "^4.0.0" + "cheminfo-types": "^1.10.0" } }, "node_modules/error-ex": { @@ -8066,13 +8062,13 @@ } }, "node_modules/file-collection": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/file-collection/-/file-collection-6.6.0.tgz", - "integrity": "sha512-QO1CaaSoqslwib8atFXiavl7OXQMf8JzlRmsDWg1rCWwdFjmzZDnpfkvrrS32XL4Q47Z8fKXOr21r2SMTt/EBQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/file-collection/-/file-collection-6.6.1.tgz", + "integrity": "sha512-YJtg82Xo3pqhfXdM3tT7+vYAYj2GgC+J4jQvhYT2GDk3UsochfrHr7BxGEiQQmjIPu05ogQx9ZJ1VclhNViPJQ==", "license": "MIT", "dependencies": { - "@zip.js/zip.js": "^2.8.8", - "cheminfo-types": "^1.8.1" + "@zip.js/zip.js": "^2.8.15", + "cheminfo-types": "^1.10.0" } }, "node_modules/file-entry-cache": { @@ -8468,6 +8464,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -9569,9 +9566,9 @@ } }, "node_modules/jcampconverter": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/jcampconverter/-/jcampconverter-12.2.0.tgz", - "integrity": "sha512-gHEIRlIdz1n8NujQbyv4U8iCfS5go2gCRk+Z00fbtq1NMoPlwMmrUfW+VhE9rezqSlACe7roqMNIZOKV0JtBow==", + "version": "12.2.1", + "resolved": "https://registry.npmjs.org/jcampconverter/-/jcampconverter-12.2.1.tgz", + "integrity": "sha512-eskEMLdlOPMmaYBIEsHz0SS+OE92/8n+OEtRnv/nzmnDMydMv4zgpNH9wCRETyPYanPGOCUJck/3/6TIpsO6ww==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "cheminfo-types": "^1.10.0", @@ -9582,15 +9579,6 @@ "openchemlib": "^9.20.0" } }, - "node_modules/jcampconverter/node_modules/ensure-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ensure-string/-/ensure-string-2.0.0.tgz", - "integrity": "sha512-qej9cbqY36/lD8TdFFGugkTybqdxIWLXcqXPlLsuMoW4GJ8ExUGvLEXr+2sXbjssHiAO0hMpkK6tk3E8xphArQ==", - "license": "MIT", - "dependencies": { - "cheminfo-types": "^1.10.0" - } - }, "node_modules/jest": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", @@ -10552,13 +10540,13 @@ "license": "MIT" }, "node_modules/mf-parser": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/mf-parser/-/mf-parser-3.6.0.tgz", - "integrity": "sha512-vBE7hE8ZB2rtMPxJZHgfuMQIF98ebqXUDTtG/EzapRJ/CDurI/bEo8ZEyQI+ZKznGXr6HGcnBdoE2+U52v/JtA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/mf-parser/-/mf-parser-3.7.1.tgz", + "integrity": "sha512-JgVo43b7rkb/miykgXpE0eT+udACCvKWg2BYPysLnkOOQtosI3wP2dq7mUS8guGx2I75PnVs8/HLXbXM4K+IdQ==", "license": "MIT", "dependencies": { "atom-sorter": "^2.2.1", - "chemical-elements": "^2.2.1", + "chemical-elements": "^2.2.2", "chemical-groups": "^2.2.3" } }, @@ -10586,6 +10574,29 @@ "node": ">= 0.6" } }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -10597,9 +10608,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -10961,9 +10972,9 @@ } }, "node_modules/ml-spectra-processing": { - "version": "14.19.0", - "resolved": "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.19.0.tgz", - "integrity": "sha512-PbvRh/cFneCDY629qpURsaq58oz0pF+TM8w5lLtvAVfZmA6QOHEf5eh93n73HXS7HgkAzLJNXnKefCW8kSBmKQ==", + "version": "14.22.0", + "resolved": "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.22.0.tgz", + "integrity": "sha512-rafMp7ny4J96mMM7AUmRKKXYhNw7J4keolHaYZjiQbqSqknlAntHlng1H0O30KpsOnqHH2XBPFIlGAaQruQAxw==", "license": "MIT", "dependencies": { "binary-search": "^1.3.6", @@ -11083,9 +11094,9 @@ } }, "node_modules/nmr-processing": { - "version": "22.5.0", - "resolved": "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.5.0.tgz", - "integrity": "sha512-/FLaMtROD1gwf8qqOfpynYNdtwRwqjSWzVtgcJvQekmHKFoALFwuxTV3Wj+LGmjCNWtAUauw/xb6fQ0DHAT0Tg==", + "version": "22.5.2", + "resolved": "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.5.2.tgz", + "integrity": "sha512-Dv0WsGuzMP9pxVTcX2YTdr5MEixLZ9ZUzBcu53IGfA9YororXZs6ZTIG10tteZtQKvqDutVBQhf8xOZqqy7IGQ==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "binary-search": "^1.3.6", @@ -11112,7 +11123,7 @@ "ml-signal-processing": "^2.2.0", "ml-simple-clustering": "^1.0.0", "ml-sparse-matrix": "^3.1.0", - "ml-spectra-processing": "^14.19.0", + "ml-spectra-processing": "^14.21.0", "ml-tree-set": "^1.0.1", "multiplet-analysis": "^2.1.5", "nmr-correlation": "^3.0.0", @@ -11153,23 +11164,24 @@ } }, "node_modules/nmrium": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/nmrium/-/nmrium-1.12.0.tgz", - "integrity": "sha512-5FH4LJFPoIodoMXBMQHKjj8ejuFjrOe4RZm8ePBMLqpjM9QZhbDnIp9rmkpu2gJyogpWXv6ig+H1dcuS/1o8sA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nmrium/-/nmrium-2.0.0.tgz", + "integrity": "sha512-6hWeBoQ6vIj/nTU/xnF8KBH1YK/pmb/uTKIGnCzLJPO/eGg+tSpVCOER9VllU45i973SFeGu5owGukJLCZvMDg==", "license": "MIT", "dependencies": { - "@atlaskit/pragmatic-drag-and-drop": "^1.7.7", + "@atlaskit/pragmatic-drag-and-drop": "^1.7.9", "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", "@hookform/resolvers": "^5.2.2", "@tanstack/react-form": "^1.28.3", - "@zakodium/nmr-types": "^0.5.1", - "@zakodium/nmrium-core": "^0.6.5", - "@zakodium/nmrium-core-plugins": "^0.6.39", + "@tanstack/react-table": "^8.21.3", + "@zakodium/nmr-types": "^0.5.3", + "@zakodium/nmrium-core": "^0.7.1", + "@zakodium/nmrium-core-plugins": "^0.7.1", "@zakodium/pdnd-esm": "^1.0.2", - "@zip.js/zip.js": "^2.8.20", - "cheminfo-font": "^1.13.1", + "@zip.js/zip.js": "^2.8.22", + "cheminfo-font": "^1.20.0", "cheminfo-types": "^1.10.0", "clipboard-polyfill": "^4.1.1", "d3-array": "^3.2.4", @@ -11178,37 +11190,37 @@ "dlv": "^1.1.3", "eventemitter3": "^5.0.4", "fifo-logger": "^2.0.1", - "file-collection": "^6.6.0", + "file-collection": "^6.6.1", "file-saver": "^2.0.5", "get-jpaths": "^1.4.0", "immer": "^11.1.4", "lodash": "^4.17.23", - "mf-parser": "^3.6.0", + "mf-parser": "^3.7.0", "ml-array-mean": "^1.1.6", "ml-array-median": "^1.1.6", "ml-conrec": "^5.0.3", "ml-gsd": "^13.1.1", "ml-signal-processing": "^2.2.0", - "ml-spectra-processing": "^14.19.0", + "ml-spectra-processing": "^14.21.0", "ml-tree-similarity": "^2.2.0", "nmr-correlation": "2.3.3", - "nmr-processing": "^22.4.0", + "nmr-processing": "^22.5.2", "numeral": "^2.0.6", "openchemlib": "^9.20.0", - "openchemlib-utils": "^8.12.1", + "openchemlib-utils": "^8.13.1", "papaparse": "^5.5.3", "react-d3-utils": "^3.1.2", "react-dropzone": "^15.0.0", "react-error-boundary": "^6.1.1", - "react-hook-form": "^7.71.1", - "react-icons": "^5.5.0", + "react-hook-form": "^7.71.2", + "react-icons": "^5.6.0", "react-inspector": "^9.0.0", "react-mf": "^3.1.1", - "react-ocl": "^8.5.0", + "react-ocl": "^8.6.0", "react-ocl-nmr": "^4.1.1", "react-plot": "^3.1.2", "react-rnd": "^10.5.2", - "react-science": "^19.9.0", + "react-science": "^19.10.1", "react-table": "^7.8.0", "smart-array-filter": "^5.0.0", "yup": "^1.7.1", @@ -11480,13 +11492,13 @@ "peer": true }, "node_modules/openchemlib-utils": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/openchemlib-utils/-/openchemlib-utils-8.12.1.tgz", - "integrity": "sha512-aQbEzLxunuRqwEVw6I98J9NL+Mxo3uASLbFjhsFe4ZuJZWN7G+s8tgmXO43+9kaNNeD8lAjcG6+EHNhwX+TV3w==", + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/openchemlib-utils/-/openchemlib-utils-8.13.1.tgz", + "integrity": "sha512-kt7ChPBM3lJw0cya4qp0Qk+YXrYdJgDBJjgZTMZjeY7bfMjeFFtCA66yZaVxkIdEIOmOa/Kd3t+ohS8mOpNrpw==", "license": "MIT", "dependencies": { "atom-sorter": "^2.2.1", - "ensure-string": "^1.2.0", + "ensure-string": "^2.0.0", "get-value": "^4.0.1", "ml-floyd-warshall": "^3.0.1", "ml-matrix": "^6.12.1", @@ -12235,9 +12247,9 @@ } }, "node_modules/react-hook-form": { - "version": "7.71.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.1.tgz", - "integrity": "sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w==", + "version": "7.71.2", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.2.tgz", + "integrity": "sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA==", "license": "MIT", "peer": true, "engines": { @@ -12252,9 +12264,9 @@ } }, "node_modules/react-icons": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", - "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.6.0.tgz", + "integrity": "sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==", "license": "MIT", "peerDependencies": { "react": "*" @@ -12289,12 +12301,13 @@ } }, "node_modules/react-ocl": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/react-ocl/-/react-ocl-8.5.0.tgz", - "integrity": "sha512-IOgPuJCcGs36iiiWjVz1EuHzutlmFQak7H+YXEy0cjEodZeL7HWAqrjWzd1/uyKIpDL+Hkqzk8RNVyWt2j18xg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/react-ocl/-/react-ocl-8.6.0.tgz", + "integrity": "sha512-ThIaeh578kRvYJ3Ib5Vm6C5FzUSUFOmCPurxO6orN3lGHOKzTOI1BYS1QYfwQGPwO7pRUMqSshnihPaFVDbELA==", "license": "MIT", "dependencies": { - "@emotion/styled": "^11.14.1" + "@emotion/styled": "^11.14.1", + "@floating-ui/react-dom": "^2.1.7" }, "peerDependencies": { "openchemlib": ">=8", @@ -12375,9 +12388,9 @@ } }, "node_modules/react-router": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz", - "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.1.tgz", + "integrity": "sha512-td+xP4X2/6BJvZoX6xw++A2DdEi++YypA69bJUV5oVvqf6/9/9nNlD70YO1e9d3MyamJEBQFEzk6mbfDYbqrSA==", "dev": true, "license": "MIT", "dependencies": { @@ -12398,13 +12411,13 @@ } }, "node_modules/react-router-dom": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.0.tgz", - "integrity": "sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.1.tgz", + "integrity": "sha512-UJnV3Rxc5TgUPJt2KJpo1Jpy0OKQr0AjgbZzBFjaPJcFOb2Y8jA5H3LT8HUJAiRLlWrEXWHbF1Z4SCZaQjWDHw==", "dev": true, "license": "MIT", "dependencies": { - "react-router": "7.13.0" + "react-router": "7.13.1" }, "engines": { "node": ">=20.0.0" @@ -12415,9 +12428,9 @@ } }, "node_modules/react-science": { - "version": "19.9.1", - "resolved": "https://registry.npmjs.org/react-science/-/react-science-19.9.1.tgz", - "integrity": "sha512-5ykYCRov4+V21XDJS/pxhdlz9AFgNr8TLRtzCaQLUuOMewcyc0C1zDdcmyAYdcuIHq7qd90n8Q9RnpSUL3EWuw==", + "version": "19.10.1", + "resolved": "https://registry.npmjs.org/react-science/-/react-science-19.10.1.tgz", + "integrity": "sha512-QDsZPEiog8IvG9s35M7gMIYoWbxsxEYx7VBCGf2GkotKuM/lIUlVUReDGiKL9IexEoYCVlemH+kkme5xBMiWSA==", "license": "MIT", "dependencies": { "@atlaskit/pragmatic-drag-and-drop": "^1.7.7", @@ -12852,6 +12865,16 @@ "ensure-string": "^1.2.0" } }, + "node_modules/sdf-parser/node_modules/ensure-string": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ensure-string/-/ensure-string-1.2.0.tgz", + "integrity": "sha512-Hvv2Xocfn6CSvCWgIGNzf0D5bgE6fAa65cayGOWsEXz03ej3aDpsogP3zstuLKt43zVuojQFST4XHPt9+PtuGQ==", + "license": "MIT", + "dependencies": { + "cheminfo-types": "^1.1.0", + "isutf8": "^4.0.0" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -12883,14 +12906,14 @@ } }, "node_modules/serve": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.5.tgz", - "integrity": "sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==", + "version": "14.2.6", + "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.6.tgz", + "integrity": "sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q==", "dev": true, "license": "MIT", "dependencies": { "@zeit/schemas": "2.36.0", - "ajv": "8.12.0", + "ajv": "8.18.0", "arg": "5.0.2", "boxen": "7.0.0", "chalk": "5.0.1", @@ -12898,7 +12921,7 @@ "clipboardy": "3.0.0", "compression": "1.8.1", "is-port-reachable": "4.0.0", - "serve-handler": "6.1.6", + "serve-handler": "6.1.7", "update-check": "1.5.4" }, "bin": { @@ -12909,55 +12932,42 @@ } }, "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz", + "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==", "dev": true, "license": "MIT", "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "mime-types": "2.1.18", - "minimatch": "3.1.2", + "minimatch": "3.1.5", "path-is-inside": "1.0.2", "path-to-regexp": "3.3.0", "range-parser": "1.2.0" } }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/serve/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -13754,13 +13764,6 @@ "node": ">=10" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true, - "license": "MIT" - }, "node_modules/terser/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -13801,7 +13804,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -14880,6 +14883,7 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -15279,6 +15283,23 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/package.json b/package.json index b174d89..adca3a2 100644 --- a/package.json +++ b/package.json @@ -13,19 +13,19 @@ "node": "24.4.0" }, "dependencies": { - "@blueprintjs/core": "^6.8.0", - "@blueprintjs/icons": "^6.5.2", - "@blueprintjs/select": "^6.1.0", + "@blueprintjs/core": "^6.9.1", + "@blueprintjs/icons": "^6.6.0", + "@blueprintjs/select": "^6.1.3", "@emotion/styled": "^11.14.1", "@vitejs/plugin-react": "^5.1.4", - "@zakodium/nmrium-core": "^0.6.5", - "@zakodium/nmrium-core-plugins": "^0.6.39", + "@zakodium/nmrium-core": "^0.7.1", + "@zakodium/nmrium-core-plugins": "^0.7.1", "fifo-logger": "^2.0.1", "filelist-utils": "^1.11.3", - "nmr-processing": "^22.5.0", - "nmrium": "^1.12.0", + "nmr-processing": "^22.5.2", + "nmrium": "^2.0.0", "openchemlib": "^9.20.0", - "react-science": "^19.9.1" + "react-science": "^19.10.1" }, "scripts": { "start": "vite --host localhost --port 3000 --open", @@ -49,7 +49,7 @@ "@playwright/test": "^1.58.2", "@simbathesailor/use-what-changed": "^2.0.0", "@types/jest": "^30.0.0", - "@types/node": "^25.3.0", + "@types/node": "^25.3.5", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@types/react-router-dom": "^5.3.3", @@ -61,8 +61,8 @@ "prettier": "3.8.1", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-router-dom": "^7.13.0", - "serve": "^14.2.5", + "react-router-dom": "^7.13.1", + "serve": "^14.2.6", "typescript": "^5.9.3", "vite": "^7.3.1", "vite-plugin-pwa": "^1.2.0" diff --git a/src/Loadingindicator.tsx b/src/Loadingindicator.tsx new file mode 100644 index 0000000..0e8d57a --- /dev/null +++ b/src/Loadingindicator.tsx @@ -0,0 +1,45 @@ +import { Spinner } from '@blueprintjs/core'; +import styled from '@emotion/styled'; + +const Overlay = styled.div` + position: absolute; + inset: 0; + z-index: 10; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: rgba(255, 255, 255, 0.7); + backdrop-filter: blur(4px); + -webkit-backdrop-filter: blur(4px); + gap: 12px; + user-select: none; + -webkit-user-select: none; +`; + +const Label = styled.span` + font-size: 0.8125rem; + font-weight: 500; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #6b7280; +`; + +interface LoadingIndicatorProps { + label?: string; + visible: boolean; +} + +export function LoadingIndicator({ + label = 'Loading', + visible, +}: LoadingIndicatorProps) { + if (!visible) return null; + + return ( + + + + + ); +} diff --git a/src/NMRiumWrapper.tsx b/src/NMRiumWrapper.tsx index c4ad11c..6677a02 100644 --- a/src/NMRiumWrapper.tsx +++ b/src/NMRiumWrapper.tsx @@ -1,39 +1,20 @@ -import type { NmriumData } from '@zakodium/nmrium-core'; import type { NMRiumChangeCb, NMRiumRefAPI } from 'nmrium'; import { NMRium } from 'nmrium'; import type { CSSProperties } from 'react'; import { useCallback, useEffect, useRef } from 'react'; import { RootLayout } from 'react-science/ui'; +import { LoadingIndicator } from './Loadingindicator.js'; import events from './events/event.js'; -import type { NMRiumData } from './hooks/useLoadSpectra.js'; import { useLoadSpectra } from './hooks/useLoadSpectra.js'; import { usePreferences } from './hooks/usePreferences.js'; import { useWhiteList } from './hooks/useWhiteList.js'; import AboutUsModal from './modal/AboutUsModal.js'; -const styles: Record<'container' | 'loadingContainer', CSSProperties> = { - container: { - height: '100%', - width: '100%', - position: 'relative', - }, - - loadingContainer: { - position: 'absolute', - top: 0, - left: 0, - right: 0, - bottom: 0, - zIndex: 1, - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - backgroundColor: '#ffffffc9', - fontSize: '1.4em', - userSelect: 'none', - WebkitUserSelect: 'none', - }, +const containerStyle: CSSProperties = { + height: '100%', + width: '100%', + position: 'relative', }; export default function NMRiumWrapper() { @@ -41,15 +22,13 @@ export default function NMRiumWrapper() { const nmriumRef = useRef(null); const { workspace, preferences, defaultEmptyMessage, customWorkspaces } = usePreferences(); + + const { load: loadSpectra, data, isLoading } = useLoadSpectra(); + const dataChangeHandler = useCallback((state, source) => { - events.trigger('data-change', { - state, - source, - }); + events.trigger('data-change', { state, source }); }, []); - const { load: loadSpectra, data, setData } = useLoadSpectra(); - useEffect(() => { const clearActionListener = events.on( 'action-request', @@ -67,33 +46,36 @@ export default function NMRiumWrapper() { } default: { throw new Error( - `ERROR! Property 'type' accept only 'exportViewerAsBlob'.`, + `ERROR! Property 'type' accepts only 'exportViewerAsBlob'.`, ); } } }, { allowedOrigins }, ); + const clearLoadListener = events.on( 'load', (loadData) => { switch (loadData.type) { - case 'nmrium': - setData(loadData.data as unknown as NMRiumData); + case 'nmrium': { + const { data, activeTab = '' } = loadData; + void loadSpectra({ nmrium: data, activeTab }); break; + } case 'file': { const { data: files, activeTab = '' } = loadData; - loadSpectra({ files, activeTab }); + void loadSpectra({ files, activeTab }); break; } case 'url': { const { data: urls, activeTab = '' } = loadData; - loadSpectra({ urls, activeTab }); + void loadSpectra({ urls, activeTab }); break; } default: { throw new Error( - `ERROR! Property 'type' accept only nmrium, url or file.`, + `ERROR! Property 'type' accepts only 'nmrium', 'url', or 'file'.`, ); } } @@ -106,16 +88,16 @@ export default function NMRiumWrapper() { clearActionListener(); }; }); + + const isShowingOverlay = isFetchAllowedOriginsPending || isLoading; + return ( - - {isFetchAllowedOriginsPending && ( -
- Loading .... -
- )} + + = { - [K in keyof T]?: T[K] extends object ? DeepPartial : T[K]; +type LoadOptions = + | { nmrium: object; activeTab?: string } + | { urls: string[]; activeTab?: string } + | { files: File[]; activeTab?: string }; + +// CoreReadReturn with `state.view` made optional to allow partial injection. +export type NMRiumData = Omit & { + state: Omit & { view?: ViewState }; }; -const core = init(); +interface UseLoadSpectraResult { + data: NMRiumData | null; + load: (options: LoadOptions) => Promise; + isLoading: boolean; +} +const core = init(); const logger = new FifoLogger(); -function handleLogger({ detail: { logs } }) { +logger.addEventListener('change', ({ detail: { logs } }) => { const log = logs.at(-1); - if (log && ['error', 'fatal', 'warn'].includes(log.levelLabel)) { - const error = log?.error || new Error(log?.message); - events.trigger('error', error); - // eslint-disable-next-line no-console - console.log(error); - } -} + if (!log || !['error', 'fatal', 'warn'].includes(log.levelLabel)) return; -logger.addEventListener('change', handleLogger); + const error = log.error ?? new Error(log.message); + events.trigger('error', error); + // eslint-disable-next-line no-console + console.log(error); +}); const PARSING_OPTIONS: Partial = { onLoadProcessing: { autoProcessing: true }, @@ -37,73 +49,57 @@ const PARSING_OPTIONS: Partial = { logger, }; -async function loadSpectraFromFiles(files: File[]) { +async function loadSpectraFromNMRium(nmrium: object): Promise { + return core.readNMRiumObject(nmrium, PARSING_OPTIONS); +} + +async function loadSpectraFromFiles(files: File[]): Promise { const fileCollection = await new FileCollection().appendFileList(files); - const { - nmriumState: { data, version }, - } = await core.read(fileCollection, PARSING_OPTIONS); - return { data, version } as NMRiumData; + return core.read(fileCollection, PARSING_OPTIONS); } -async function loadSpectraFromURLs(urls: string[]) { +async function loadSpectraFromURLs(urls: string[]): Promise { const entries = urls.map((url) => { const refURL = new URL(url); const name = getFileNameFromURL(url); let path = refURL.pathname; - const hasExtension = name?.includes('.'); - if (!hasExtension) { + + if (!name?.includes('.')) { path = `${path}.zip`; } - return { relativePath: path, baseURL: refURL.origin }; - }, []); - - const [{ data, version }] = await core.readFromWebSource( - { entries }, - PARSING_OPTIONS, - ); - return { data, version } as NMRiumData; -} - -type LoadOptions = - | { urls: string[]; activeTab?: string } - | { files: File[]; activeTab?: string }; -export type NMRiumData = Pick; + return { relativePath: path, baseURL: refURL.origin }; + }); -interface UseLoadSpectraResult { - data: NMRiumData; - load: (options: LoadOptions) => void; - setData: (data: NMRiumData) => void; - isLoading: boolean; + return core.readFromWebSource({ entries }, PARSING_OPTIONS); } export function useLoadSpectra(): UseLoadSpectraResult { - const [data, setData] = useState({ - data: { spectra: [], molecules: [] }, - version: CURRENT_EXPORT_VERSION, - }); - const [activeTab, setActiveTab] = useState(); - const [isLoading, setLoading] = useState(false); + const [result, setResult] = useState(null); + const [activeTab, setActiveTab] = useState(); + const [isLoading, setLoading] = useState(false); const load = useCallback(async (options: LoadOptions) => { setLoading(true); try { - if ('urls' in options) { - if (isArrayOfString(options.urls)) { - const result = await loadSpectraFromURLs(options.urls); - setData(result); - setActiveTab(options?.activeTab); - } else { + if ('nmrium' in options) { + const nmriumResult = await loadSpectraFromNMRium(options.nmrium); + setResult(nmriumResult); + setActiveTab( + options.activeTab ?? nmriumResult.state.view?.spectra?.activeTab, + ); + } else if ('urls' in options) { + if (!isArrayOfString(options.urls)) { throw new Error('The input must be a valid urls array of string[]'); } - } else if ('files' in options) { - const result = await loadSpectraFromFiles(options.files); - setData(result); - setActiveTab(options?.activeTab); + setResult(await loadSpectraFromURLs(options.urls)); + setActiveTab(options.activeTab); + } else { + setResult(await loadSpectraFromFiles(options.files)); + setActiveTab(options.activeTab); } } catch (error: unknown) { - const loadError = error as Error; - events.trigger('error', loadError); + events.trigger('error', error as Error); // eslint-disable-next-line no-console console.log(error); } finally { @@ -112,14 +108,19 @@ export function useLoadSpectra(): UseLoadSpectraResult { }, []); return useMemo(() => { - let view: DeepPartial = {}; - view = { spectra: { activeTab } }; - const { version, ...other } = data; - return { - data: { version: version ?? CURRENT_EXPORT_VERSION, ...other, view }, - load, - isLoading, - setData, - }; - }, [activeTab, data, isLoading, load]); + const view = { spectra: { activeTab } } as unknown as ViewState; + + const data: NMRiumData | null = result + ? { + ...result, + state: { + version: result.state.version ?? CURRENT_EXPORT_VERSION, + ...result.state, + view, + }, + } + : null; + + return { data, load, isLoading }; + }, [activeTab, result, isLoading, load]); } diff --git a/src/hooks/useWhiteList.ts b/src/hooks/useWhiteList.ts index 4a2f6ae..e4b6e52 100644 --- a/src/hooks/useWhiteList.ts +++ b/src/hooks/useWhiteList.ts @@ -1,25 +1,29 @@ import { useEffect, useState, useTransition } from 'react'; -async function readAllowedOrigins() { - return fetch( - 'https://raw.githubusercontent.com/NFDI4Chem/nmrium-react-wrapper/main/src/allowed-origins.json', - ).then((response) => response.json()); +const ALLOWED_ORIGINS_URL = + 'https://raw.githubusercontent.com/NFDI4Chem/nmrium-react-wrapper/main/src/allowed-origins.json'; + +async function readAllowedOrigins(): Promise { + const response = await fetch(ALLOWED_ORIGINS_URL); + + if (!response.ok) { + throw new Error( + `Failed to fetch allowed origins: ${response.status} ${response.statusText}`, + ); + } + + return response.json(); } export function useWhiteList() { - const [allowedOrigins, setAllowedOrigins] = useState([]); + const [allowedOrigins, setAllowedOrigins] = useState([]); const [isFetchAllowedOriginsPending, startTransition] = useTransition(); useEffect(() => { startTransition(() => { - void readAllowedOrigins().then((whitelist) => - setAllowedOrigins(whitelist), - ); + void readAllowedOrigins().then(setAllowedOrigins); }); }, []); - return { - allowedOrigins, - isFetchAllowedOriginsPending, - }; + return { allowedOrigins, isFetchAllowedOriginsPending }; } diff --git a/yarn.lock b/yarn.lock index 6da9fd7..90e7959 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32,10 +32,10 @@ "@atlaskit/pragmatic-drag-and-drop" "^1.6.0" "@babel/runtime" "^7.0.0" -"@atlaskit/pragmatic-drag-and-drop@^1.6.0", "@atlaskit/pragmatic-drag-and-drop@^1.7.0", "@atlaskit/pragmatic-drag-and-drop@^1.7.7": - version "1.7.7" - resolved "https://registry.npmjs.org/@atlaskit/pragmatic-drag-and-drop/-/pragmatic-drag-and-drop-1.7.7.tgz" - integrity sha512-jX+68AoSTqO/fhCyJDTZ38Ey6/wyL2Iq+J/moanma0YyktpnoHxevjY1UNJHYp0NCburdQDZSL1ZFac1mO1osQ== +"@atlaskit/pragmatic-drag-and-drop@^1.6.0", "@atlaskit/pragmatic-drag-and-drop@^1.7.0", "@atlaskit/pragmatic-drag-and-drop@^1.7.7", "@atlaskit/pragmatic-drag-and-drop@^1.7.9": + version "1.7.9" + resolved "https://registry.npmjs.org/@atlaskit/pragmatic-drag-and-drop/-/pragmatic-drag-and-drop-1.7.9.tgz" + integrity sha512-m/bcw5flyjfcF/rdX4JeomtIBrWuDNOwcQieiywHv7zkfIRmUC34Q9ZLeNGVoz73UiGsRqxysMuw4tC7lSJ89g== dependencies: "@babel/runtime" "^7.0.0" bind-event-listener "^3.0.0" @@ -1035,13 +1035,13 @@ dependencies: tslib "~2.6.2" -"@blueprintjs/core@^6.0.0", "@blueprintjs/core@^6.8.0": - version "6.8.0" - resolved "https://registry.npmjs.org/@blueprintjs/core/-/core-6.8.0.tgz" - integrity sha512-46PkgSz/txIy3gNdXm4RblMYAv7lhENAU5LXbXaqVdy0EQllQLaEDLj3LnqXmrQ9jpB4EV65xb/YBK+TO8C/Lw== +"@blueprintjs/core@^6.0.0", "@blueprintjs/core@^6.9.1": + version "6.9.1" + resolved "https://registry.npmjs.org/@blueprintjs/core/-/core-6.9.1.tgz" + integrity sha512-RmkIpN6dGch7ZCT8dkmbK80JgcIqV4w19SmzJTot7QKm7fDRsi2hcusV/LOvn7WgZvS9Z8URzIp357jAN9Nv5A== dependencies: "@blueprintjs/colors" "^5.1.14" - "@blueprintjs/icons" "^6.5.2" + "@blueprintjs/icons" "^6.6.0" "@floating-ui/react" "^0.27.13" "@popperjs/core" "^2.11.8" classnames "^2.3.1" @@ -1051,23 +1051,23 @@ tslib "~2.6.2" use-sync-external-store "^1.2.0" -"@blueprintjs/icons@^6.0.0", "@blueprintjs/icons@^6.5.2": - version "6.5.2" - resolved "https://registry.npmjs.org/@blueprintjs/icons/-/icons-6.5.2.tgz" - integrity sha512-nYLoDGhkEsmLicmnpnrJs0wDBTuhVhGZuKIzDNEnaNEUjO8q8X6YQUHr8yJdSg9x6Th7i8pMNvUKzBnK+KHihg== +"@blueprintjs/icons@^6.0.0", "@blueprintjs/icons@^6.6.0": + version "6.6.0" + resolved "https://registry.npmjs.org/@blueprintjs/icons/-/icons-6.6.0.tgz" + integrity sha512-IaMTAAY554iqUCvfO9+okAnC/qprypQqkNOkBdAkID6lXud8PSyfJWdXneSBQnU/fHU1UA+7xILJ6Wr4wGoJGw== dependencies: change-case "^4.1.2" classnames "^2.3.1" tslib "~2.6.2" -"@blueprintjs/select@^6.0.0", "@blueprintjs/select@^6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@blueprintjs/select/-/select-6.1.0.tgz" - integrity sha512-0+Xdlpt2Ci72Fk38KkGNfLzsVPku83u9tRUbXkaI0R/f+IzGmrJ4NRODRidXxxGgjh6ImcSj+RCx3BGh7Vlk9w== +"@blueprintjs/select@^6.0.0", "@blueprintjs/select@^6.1.3": + version "6.1.3" + resolved "https://registry.npmjs.org/@blueprintjs/select/-/select-6.1.3.tgz" + integrity sha512-BsDVwHvDplhNplcPizYVPi6y0KOqAB18Nw+spaQlACKYN9A2MmRe1EOCb1xYUu2dyx3Xz1sUMr1/2l6Dy/I2Ug== dependencies: "@blueprintjs/colors" "^5.1.14" - "@blueprintjs/core" "^6.8.0" - "@blueprintjs/icons" "^6.5.2" + "@blueprintjs/core" "^6.9.1" + "@blueprintjs/icons" "^6.6.0" classnames "^2.3.1" tslib "~2.6.2" @@ -1966,10 +1966,10 @@ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/node@*", "@types/node@^20.19.0 || >=22.12.0", "@types/node@^25.3.0": - version "25.3.0" - resolved "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz" - integrity sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A== +"@types/node@*", "@types/node@^20.19.0 || >=22.12.0", "@types/node@^25.3.5": + version "25.3.5" + resolved "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz" + integrity sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA== dependencies: undici-types "~7.18.0" @@ -2168,48 +2168,48 @@ "@typescript-eslint/scope-manager" "^8.51.0" "@typescript-eslint/utils" "^8.51.0" -"@zakodium/nmr-types@^0.5.1": - version "0.5.2" - resolved "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.2.tgz" - integrity sha512-tT7mezDYiiIFrgE1xunmobO9vbMOCMRHtJ3Ei3ArHHq49oGBPoe7a5rWWK6mX4YCUsahhgO503HKwufwge8pLg== +"@zakodium/nmr-types@^0.5.3": + version "0.5.3" + resolved "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.3.tgz" + integrity sha512-9NYQZO0yh/cmmW8TqtGk9YX9ZaZk8Fnmsgxvy1ol4wFsqQpLnWX8gpmW17fAmU+/NBn50tmh0tXraygdUer31A== dependencies: ml-peak-shape-generator "^4.2.0" ml-signal-processing "^2.2.0" - ml-spectra-processing "^14.19.0" + ml-spectra-processing "^14.21.0" -"@zakodium/nmrium-core-plugins@^0.6.39": - version "0.6.39" - resolved "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.6.39.tgz" - integrity sha512-1kgPHIpP7vDXGgG17w9NkeGx0TQJNTXokzKYw/CIh5SqYNuPSZut4r28gWcqP3QBZzlnK+fXUFL2eSjZm35VFg== +"@zakodium/nmrium-core-plugins@^0.7.1": + version "0.7.1" + resolved "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.7.1.tgz" + integrity sha512-jKxB/Bt/Tp89ltepSFlJWgNynV6GILUcNoVTqR02YxS3WaI6jNAKhXofXWpGgFMlKFGc2TVtmfoCPEOCMAWLeQ== dependencies: "@date-fns/utc" "^2.1.1" - "@zakodium/nmrium-core" "^0.6.5" + "@zakodium/nmrium-core" "^0.7.1" cheminfo-types "^1.10.0" convert-to-jcamp "^6.0.0" date-fns "^4.1.0" - file-collection "^6.6.0" + file-collection "^6.6.1" gyromagnetic-ratio "^2.0.0" is-any-array "^2.0.1" - jcampconverter "^12.2.0" + jcampconverter "^12.2.1" linear-sum-assignment "^1.0.9" lodash.merge "^4.6.2" - ml-spectra-processing "^14.19.0" - nmr-processing "^22.5.0" + ml-spectra-processing "^14.21.0" + nmr-processing "^22.5.2" openchemlib "^9.20.0" openchemlib-utils "^8.12.1" sdf-parser "^7.0.4" -"@zakodium/nmrium-core@^0.6.5": - version "0.6.5" - resolved "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.6.5.tgz" - integrity sha512-xSlz1uL1xFZQkFyIqd3c8dffDfixHFrDU7MuZzDJcomC1lu8/uFqnveqq0I+XFhRrFPlf48gXTF9AuOb9GLA/g== +"@zakodium/nmrium-core@^0.7.1": + version "0.7.1" + resolved "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.7.1.tgz" + integrity sha512-9o+uRkfBVXMu+W01KfD81SWrLbzJoRY51fxXfsHmqgZWegKZj61Xc79xcgHuV8DPG/xYA1bUHRd0RBOWFtY3fA== dependencies: cheminfo-types "^1.10.0" fifo-logger "^2.0.1" - file-collection "^6.6.0" + file-collection "^6.6.1" is-any-array "^2.0.1" lodash.merge "^4.6.2" - ml-spectra-processing "^14.19.0" + ml-spectra-processing "^14.21.0" nmr-correlation "^2.3.5" "@zakodium/pdnd-esm@^1.0.2": @@ -2226,10 +2226,10 @@ resolved "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz" integrity sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg== -"@zip.js/zip.js@^2.8.20", "@zip.js/zip.js@^2.8.8": - version "2.8.21" - resolved "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.21.tgz" - integrity sha512-fkyzXISE3IMrstDO1AgPkJCx14MYHP/suIGiAovEYEuBjq3mffsuL6aMV7ohOSjW4rXtuACuUfpA3GtITgdtYg== +"@zip.js/zip.js@^2.8.15", "@zip.js/zip.js@^2.8.22": + version "2.8.23" + resolved "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.23.tgz" + integrity sha512-RB+RLnxPJFPrGvQ9rgO+4JOcsob6lD32OcF0QE0yg24oeW9q8KnTTNlugcDaIveEcCbclobJcZP+fLQ++sH0bw== acorn-jsx@^5.3.2: version "5.3.2" @@ -2261,15 +2261,15 @@ ajv@^8.6.0, ajv@>=8: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" -ajv@8.12.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== +ajv@8.18.0: + version "8.18.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz" + integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" ansi-align@^3.0.1: version "3.0.1" @@ -2789,20 +2789,20 @@ char-regex@^1.0.2: resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chemical-elements@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/chemical-elements/-/chemical-elements-2.2.1.tgz" - integrity sha512-Khr3m8RhBbNwDb2MSo9Zb9O+dcUuFourUC0hK+YxNhAtEhOwJPVTMDQeDi1vUwH44tUeNRNKriUs2QQFNQvxgg== +chemical-elements@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/chemical-elements/-/chemical-elements-2.2.2.tgz" + integrity sha512-EL7cKE8FSyTcsWbs3uECKfYtdZW6Z8tD2OAeRXK4+rRc3+AMsJUqu/Sl790Ej4qbcy11/35ErdfnI5Yy7zQopw== chemical-groups@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/chemical-groups/-/chemical-groups-2.2.3.tgz" integrity sha512-rIhA7dC2OJNbQeEFM6+3u81hItYWkaYbWh7awn3hy9RI1qCvhQgdTkrvt7zlLCmcp2nuMzJZUXSju6etBsf6lA== -cheminfo-font@^1.13.1: - version "1.13.1" - resolved "https://registry.npmjs.org/cheminfo-font/-/cheminfo-font-1.13.1.tgz" - integrity sha512-FIT5ybXaNolIAl8V64a3YQWZ28YaJgRz93ApBloI6NDIA5kGifTma822/bSDA/ABSwqOJAWwr/cMipIZxMjE/g== +cheminfo-font@^1.20.0: + version "1.21.0" + resolved "https://registry.npmjs.org/cheminfo-font/-/cheminfo-font-1.21.0.tgz" + integrity sha512-Eou8OIegiaA+BV6aQJKsXPJkaWotvkAOGy5vchtBRDhrDhlsKryat8N/BuHPWBCBkUnyja5FG0YKDccPlmA7Hw== cheminfo-types@^1.1.0, cheminfo-types@^1.10.0, cheminfo-types@^1.4.0, cheminfo-types@^1.7.2, cheminfo-types@^1.7.3, cheminfo-types@^1.8.0, cheminfo-types@^1.8.1: version "1.10.0" @@ -3874,13 +3874,13 @@ fft.js@^4.0.3, fft.js@^4.0.4: dependencies: typescript-event-target "^1.1.1" -file-collection@^6.6.0: - version "6.6.0" - resolved "https://registry.npmjs.org/file-collection/-/file-collection-6.6.0.tgz" - integrity sha512-QO1CaaSoqslwib8atFXiavl7OXQMf8JzlRmsDWg1rCWwdFjmzZDnpfkvrrS32XL4Q47Z8fKXOr21r2SMTt/EBQ== +file-collection@^6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/file-collection/-/file-collection-6.6.1.tgz" + integrity sha512-YJtg82Xo3pqhfXdM3tT7+vYAYj2GgC+J4jQvhYT2GDk3UsochfrHr7BxGEiQQmjIPu05ogQx9ZJ1VclhNViPJQ== dependencies: - "@zip.js/zip.js" "^2.8.8" - cheminfo-types "^1.8.1" + "@zip.js/zip.js" "^2.8.15" + cheminfo-types "^1.10.0" file-entry-cache@^8.0.0: version "8.0.0" @@ -4006,16 +4006,6 @@ fscreen@^1.0.2: resolved "https://registry.npmjs.org/fscreen/-/fscreen-1.2.0.tgz" integrity sha512-hlq4+BU0hlPmwsFjwGGzZ+OZ9N/wq9Ljg/sq3pX+2CD7hrJsX9tJgWWK/wiNTFM212CLHWhicOoqwXyZGGetJg== -fsevents@^2.3.3, fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -fsevents@2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" @@ -4712,10 +4702,10 @@ jake@^10.8.5: filelist "^1.0.4" picocolors "^1.1.1" -jcampconverter@^12.2.0: - version "12.2.0" - resolved "https://registry.npmjs.org/jcampconverter/-/jcampconverter-12.2.0.tgz" - integrity sha512-gHEIRlIdz1n8NujQbyv4U8iCfS5go2gCRk+Z00fbtq1NMoPlwMmrUfW+VhE9rezqSlACe7roqMNIZOKV0JtBow== +jcampconverter@^12.2.1: + version "12.2.1" + resolved "https://registry.npmjs.org/jcampconverter/-/jcampconverter-12.2.1.tgz" + integrity sha512-eskEMLdlOPMmaYBIEsHz0SS+OE92/8n+OEtRnv/nzmnDMydMv4zgpNH9wCRETyPYanPGOCUJck/3/6TIpsO6ww== dependencies: cheminfo-types "^1.10.0" dynamic-typing "^1.0.1" @@ -5333,13 +5323,13 @@ merge-stream@^2.0.0: resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -mf-parser@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/mf-parser/-/mf-parser-3.6.0.tgz" - integrity sha512-vBE7hE8ZB2rtMPxJZHgfuMQIF98ebqXUDTtG/EzapRJ/CDurI/bEo8ZEyQI+ZKznGXr6HGcnBdoE2+U52v/JtA== +mf-parser@^3.6.0, mf-parser@^3.7.0: + version "3.7.1" + resolved "https://registry.npmjs.org/mf-parser/-/mf-parser-3.7.1.tgz" + integrity sha512-JgVo43b7rkb/miykgXpE0eT+udACCvKWg2BYPysLnkOOQtosI3wP2dq7mUS8guGx2I75PnVs8/HLXbXM4K+IdQ== dependencies: atom-sorter "^2.2.1" - chemical-elements "^2.2.1" + chemical-elements "^2.2.2" chemical-groups "^2.2.3" micromatch@^4.0.8: @@ -5379,10 +5369,10 @@ minimatch@^10.1.1: dependencies: "@isaacs/brace-expansion" "^5.0.0" -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== dependencies: brace-expansion "^1.1.7" @@ -5698,10 +5688,10 @@ ml-spectra-fitting@^5.0.1: ml-peak-shape-generator "^4.1.4" ml-spectra-processing "^14.2.0" -ml-spectra-processing@^14.10.0, ml-spectra-processing@^14.12.0, ml-spectra-processing@^14.18.0, ml-spectra-processing@^14.19.0, ml-spectra-processing@^14.2.0, ml-spectra-processing@^14.2.2, ml-spectra-processing@^14.5.0, ml-spectra-processing@^14.7.0: - version "14.19.0" - resolved "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.19.0.tgz" - integrity sha512-PbvRh/cFneCDY629qpURsaq58oz0pF+TM8w5lLtvAVfZmA6QOHEf5eh93n73HXS7HgkAzLJNXnKefCW8kSBmKQ== +ml-spectra-processing@^14.10.0, ml-spectra-processing@^14.12.0, ml-spectra-processing@^14.18.0, ml-spectra-processing@^14.19.0, ml-spectra-processing@^14.2.0, ml-spectra-processing@^14.2.2, ml-spectra-processing@^14.21.0, ml-spectra-processing@^14.5.0, ml-spectra-processing@^14.7.0: + version "14.22.0" + resolved "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.22.0.tgz" + integrity sha512-rafMp7ny4J96mMM7AUmRKKXYhNw7J4keolHaYZjiQbqSqknlAntHlng1H0O30KpsOnqHH2XBPFIlGAaQruQAxw== dependencies: binary-search "^1.3.6" cheminfo-types "^1.10.0" @@ -5801,10 +5791,10 @@ nmr-correlation@2.3.3: ml-matrix-peaks-finder "^1.0.0" ml-peak-shape-generator "^4.1.1" -nmr-processing@^22.4.0, nmr-processing@^22.5.0: - version "22.5.0" - resolved "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.5.0.tgz" - integrity sha512-/FLaMtROD1gwf8qqOfpynYNdtwRwqjSWzVtgcJvQekmHKFoALFwuxTV3Wj+LGmjCNWtAUauw/xb6fQ0DHAT0Tg== +nmr-processing@^22.5.2: + version "22.5.2" + resolved "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.5.2.tgz" + integrity sha512-Dv0WsGuzMP9pxVTcX2YTdr5MEixLZ9ZUzBcu53IGfA9YororXZs6ZTIG10tteZtQKvqDutVBQhf8xOZqqy7IGQ== dependencies: binary-search "^1.3.6" d3-color "3.1.0" @@ -5830,7 +5820,7 @@ nmr-processing@^22.4.0, nmr-processing@^22.5.0: ml-signal-processing "^2.2.0" ml-simple-clustering "^1.0.0" ml-sparse-matrix "^3.1.0" - ml-spectra-processing "^14.19.0" + ml-spectra-processing "^14.21.0" ml-tree-set "^1.0.1" multiplet-analysis "^2.1.5" nmr-correlation "^3.0.0" @@ -5839,23 +5829,24 @@ nmr-processing@^22.4.0, nmr-processing@^22.5.0: openchemlib-utils "^8.12.1" spectrum-generator "^8.1.1" -nmrium@^1.12.0: - version "1.12.0" - resolved "https://registry.npmjs.org/nmrium/-/nmrium-1.12.0.tgz" - integrity sha512-5FH4LJFPoIodoMXBMQHKjj8ejuFjrOe4RZm8ePBMLqpjM9QZhbDnIp9rmkpu2gJyogpWXv6ig+H1dcuS/1o8sA== +nmrium@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/nmrium/-/nmrium-2.0.0.tgz" + integrity sha512-6hWeBoQ6vIj/nTU/xnF8KBH1YK/pmb/uTKIGnCzLJPO/eGg+tSpVCOER9VllU45i973SFeGu5owGukJLCZvMDg== dependencies: - "@atlaskit/pragmatic-drag-and-drop" "^1.7.7" + "@atlaskit/pragmatic-drag-and-drop" "^1.7.9" "@atlaskit/pragmatic-drag-and-drop-hitbox" "^1.1.0" "@emotion/react" "^11.14.0" "@emotion/styled" "^11.14.1" "@hookform/resolvers" "^5.2.2" "@tanstack/react-form" "^1.28.3" - "@zakodium/nmr-types" "^0.5.1" - "@zakodium/nmrium-core" "^0.6.5" - "@zakodium/nmrium-core-plugins" "^0.6.39" + "@tanstack/react-table" "^8.21.3" + "@zakodium/nmr-types" "^0.5.3" + "@zakodium/nmrium-core" "^0.7.1" + "@zakodium/nmrium-core-plugins" "^0.7.1" "@zakodium/pdnd-esm" "^1.0.2" - "@zip.js/zip.js" "^2.8.20" - cheminfo-font "^1.13.1" + "@zip.js/zip.js" "^2.8.22" + cheminfo-font "^1.20.0" cheminfo-types "^1.10.0" clipboard-polyfill "^4.1.1" d3-array "^3.2.4" @@ -5864,37 +5855,37 @@ nmrium@^1.12.0: dlv "^1.1.3" eventemitter3 "^5.0.4" fifo-logger "^2.0.1" - file-collection "^6.6.0" + file-collection "^6.6.1" file-saver "^2.0.5" get-jpaths "^1.4.0" immer "^11.1.4" lodash "^4.17.23" - mf-parser "^3.6.0" + mf-parser "^3.7.0" ml-array-mean "^1.1.6" ml-array-median "^1.1.6" ml-conrec "^5.0.3" ml-gsd "^13.1.1" ml-signal-processing "^2.2.0" - ml-spectra-processing "^14.19.0" + ml-spectra-processing "^14.21.0" ml-tree-similarity "^2.2.0" nmr-correlation "2.3.3" - nmr-processing "^22.4.0" + nmr-processing "^22.5.2" numeral "^2.0.6" openchemlib "^9.20.0" - openchemlib-utils "^8.12.1" + openchemlib-utils "^8.13.1" papaparse "^5.5.3" react-d3-utils "^3.1.2" react-dropzone "^15.0.0" react-error-boundary "^6.1.1" - react-hook-form "^7.71.1" - react-icons "^5.5.0" + react-hook-form "^7.71.2" + react-icons "^5.6.0" react-inspector "^9.0.0" react-mf "^3.1.1" - react-ocl "^8.5.0" + react-ocl "^8.6.0" react-ocl-nmr "^4.1.1" react-plot "^3.1.2" react-rnd "^10.5.2" - react-science "^19.9.0" + react-science "^19.10.1" react-table "^7.8.0" smart-array-filter "^5.0.0" yup "^1.7.1" @@ -6035,13 +6026,13 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -openchemlib-utils@^8.1.1, openchemlib-utils@^8.12.1: - version "8.12.1" - resolved "https://registry.npmjs.org/openchemlib-utils/-/openchemlib-utils-8.12.1.tgz" - integrity sha512-aQbEzLxunuRqwEVw6I98J9NL+Mxo3uASLbFjhsFe4ZuJZWN7G+s8tgmXO43+9kaNNeD8lAjcG6+EHNhwX+TV3w== +openchemlib-utils@^8.1.1, openchemlib-utils@^8.12.1, openchemlib-utils@^8.13.1: + version "8.13.1" + resolved "https://registry.npmjs.org/openchemlib-utils/-/openchemlib-utils-8.13.1.tgz" + integrity sha512-kt7ChPBM3lJw0cya4qp0Qk+YXrYdJgDBJjgZTMZjeY7bfMjeFFtCA66yZaVxkIdEIOmOa/Kd3t+ohS8mOpNrpw== dependencies: atom-sorter "^2.2.1" - ensure-string "^1.2.0" + ensure-string "^2.0.0" get-value "^4.0.1" ml-floyd-warshall "^3.0.1" ml-matrix "^6.12.1" @@ -6436,15 +6427,15 @@ react-full-screen@^1.1.1: dependencies: fscreen "^1.0.2" -react-hook-form@^7.55.0, react-hook-form@^7.71.1: - version "7.71.1" - resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.1.tgz" - integrity sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w== +react-hook-form@^7.55.0, react-hook-form@^7.71.2: + version "7.71.2" + resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.2.tgz" + integrity sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA== -react-icons@^5.5.0: - version "5.5.0" - resolved "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz" - integrity sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw== +react-icons@^5.5.0, react-icons@^5.6.0: + version "5.6.0" + resolved "https://registry.npmjs.org/react-icons/-/react-icons-5.6.0.tgz" + integrity sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA== react-inspector@^9.0.0: version "9.0.0" @@ -6477,12 +6468,13 @@ react-ocl-nmr@^4.1.1: openchemlib-utils "^8.1.1" react-ocl "^8.2.0" -react-ocl@^8.2.0, react-ocl@^8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/react-ocl/-/react-ocl-8.5.0.tgz" - integrity sha512-IOgPuJCcGs36iiiWjVz1EuHzutlmFQak7H+YXEy0cjEodZeL7HWAqrjWzd1/uyKIpDL+Hkqzk8RNVyWt2j18xg== +react-ocl@^8.2.0, react-ocl@^8.6.0: + version "8.6.0" + resolved "https://registry.npmjs.org/react-ocl/-/react-ocl-8.6.0.tgz" + integrity sha512-ThIaeh578kRvYJ3Ib5Vm6C5FzUSUFOmCPurxO6orN3lGHOKzTOI1BYS1QYfwQGPwO7pRUMqSshnihPaFVDbELA== dependencies: "@emotion/styled" "^11.14.1" + "@floating-ui/react-dom" "^2.1.7" react-plot@^3.1.2: version "3.1.2" @@ -6519,25 +6511,25 @@ react-rnd@^10.5.2: react-draggable "4.4.6" tslib "2.6.2" -react-router-dom@^7.13.0: - version "7.13.0" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.0.tgz" - integrity sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g== +react-router-dom@^7.13.1: + version "7.13.1" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.1.tgz" + integrity sha512-UJnV3Rxc5TgUPJt2KJpo1Jpy0OKQr0AjgbZzBFjaPJcFOb2Y8jA5H3LT8HUJAiRLlWrEXWHbF1Z4SCZaQjWDHw== dependencies: - react-router "7.13.0" + react-router "7.13.1" -react-router@7.13.0: - version "7.13.0" - resolved "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz" - integrity sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw== +react-router@7.13.1: + version "7.13.1" + resolved "https://registry.npmjs.org/react-router/-/react-router-7.13.1.tgz" + integrity sha512-td+xP4X2/6BJvZoX6xw++A2DdEi++YypA69bJUV5oVvqf6/9/9nNlD70YO1e9d3MyamJEBQFEzk6mbfDYbqrSA== dependencies: cookie "^1.0.1" set-cookie-parser "^2.6.0" -react-science@^19.9.0, react-science@^19.9.1: - version "19.9.1" - resolved "https://registry.npmjs.org/react-science/-/react-science-19.9.1.tgz" - integrity sha512-5ykYCRov4+V21XDJS/pxhdlz9AFgNr8TLRtzCaQLUuOMewcyc0C1zDdcmyAYdcuIHq7qd90n8Q9RnpSUL3EWuw== +react-science@^19.10.1: + version "19.10.1" + resolved "https://registry.npmjs.org/react-science/-/react-science-19.10.1.tgz" + integrity sha512-QDsZPEiog8IvG9s35M7gMIYoWbxsxEYx7VBCGf2GkotKuM/lIUlVUReDGiKL9IexEoYCVlemH+kkme5xBMiWSA== dependencies: "@atlaskit/pragmatic-drag-and-drop" "^1.7.7" "@atlaskit/pragmatic-drag-and-drop-auto-scroll" "^2.1.5" @@ -6860,26 +6852,26 @@ serialize-javascript@^6.0.1: dependencies: randombytes "^2.1.0" -serve-handler@6.1.6: - version "6.1.6" - resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz" - integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ== +serve-handler@6.1.7: + version "6.1.7" + resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz" + integrity sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg== dependencies: bytes "3.0.0" content-disposition "0.5.2" mime-types "2.1.18" - minimatch "3.1.2" + minimatch "3.1.5" path-is-inside "1.0.2" path-to-regexp "3.3.0" range-parser "1.2.0" -serve@^14.2.5: - version "14.2.5" - resolved "https://registry.npmjs.org/serve/-/serve-14.2.5.tgz" - integrity sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA== +serve@^14.2.6: + version "14.2.6" + resolved "https://registry.npmjs.org/serve/-/serve-14.2.6.tgz" + integrity sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q== dependencies: "@zeit/schemas" "2.36.0" - ajv "8.12.0" + ajv "8.18.0" arg "5.0.2" boxen "7.0.0" chalk "5.0.1" @@ -6887,7 +6879,7 @@ serve@^14.2.5: clipboardy "3.0.0" compression "1.8.1" is-port-reachable "4.0.0" - serve-handler "6.1.6" + serve-handler "6.1.7" update-check "1.5.4" set-cookie-parser@^2.6.0: @@ -8005,6 +7997,11 @@ yaml@^1.10.0: resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.4.2: + version "2.8.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"