diff --git a/.env b/.env new file mode 100644 index 00000000..53bc6170 --- /dev/null +++ b/.env @@ -0,0 +1,7 @@ +REACT_APP_CONTEXT=development +REACT_APP_ID=al-ontographer +REACT_APP_URL=http://localhost:3000 +REACT_APP_COMPONENTS=YWwtc2dvdi1zZXJ2ZXI6CiAgbmFtZTogU0dvViBTZXJ2aWNlCiAgdXJsOiBodHRwOi8vbG9jYWxob3N0L21vZGVsdWplbWUvc2x1emJ5L3Nnb3Ytc2VydmVyCiAgbWV0YToge30KYWwtZGItc2VydmVyOgogIG5hbWU6IEEgZ3JhcGggZGF0YWJhc2UKICB1cmw6IGh0dHA6Ly9sb2NhbGhvc3Q6NzIwMC9yZXBvc2l0b3JpZXMvdGVzdE9HCiAgbWV0YToge30KYWwtYXV0aC1zZXJ2ZXI6CiAgbmFtZTogT0lEQyBBdXRoZW50aWNhdGlvbiBTZXJ2aWNlCiAgdXJsOiBodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL2Fzc2VtYmx5LWxpbmUKICBtZXRhOiB7fQphbC1vbnRvZ3JhcGhlcjoKICBuYW1lOiBvbnRvR3JhcGhlcgogIHVybDogaHR0cDovL2xvY2FsaG9zdC9tb2RlbHVqZW1lL3YtbsOhc3Ryb2ppL29udG9ncmFwaGVyCiAgbWV0YToKICAgIHdvcmtzcGFjZS1wYXRoOiAnLz93b3Jrc3BhY2U9JVdPUktTUEFDRV9JUkklJwphbC10ZXJtaXQtc2VydmVyOgogIG5hbWU6IFRlcm1JVCBiYWNrZW5kCiAgdXJsOiBodHRwOi8vbG9jYWxob3N0L21vZGVsdWplbWUvc2x1emJ5L3Rlcm1pdC1zZXJ2ZXIKICBtZXRhOiB7fQphbC10ZXJtaXQ6CiAgbmFtZTogVGVybUlUCiAgdXJsOiBodHRwOi8vbG9jYWxob3N0L21vZGVsdWplbWUvdi1uw6FzdHJvamkvdGVybWl0CiAgbWV0YToKICAgIHdvcmtzcGFjZS1wYXRoOiAnLyN2b2NhYnVsYXJpZXM/d29ya3NwYWNlPSVXT1JLU1BBQ0VfSVJJJScKYWwtbWlzc2lvbi1jb250cm9sOgogIG5hbWU6IE1pc3Npb24gQ29udHJvbAogIHVybDogaHR0cDovL2xvY2FsaG9zdC9tb2RlbHVqZW1lCiAgbWV0YToge30KYWwtaXNzdWUtdHJhY2tlcjoKICBuYW1lOiBJc3N1ZSBUcmFja2VyCiAgdXJsOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbmRhdGEtbXZjci9zZ292LWFzc2VtYmx5LWxpbmUvaXNzdWVzCiAgbWV0YToKICAgIG5ldy1idWc6IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuZGF0YS1tdmNyL3Nnb3YtYXNzZW1ibHktbGluZS9pc3N1ZXMvbmV3P2xhYmVscz1idWcmdGVtcGxhdGU9cG8tYWRhdmVrLW5hLW9wcmF2dS5tZCZ0aXRsZT0KICAgIG5ldy1mZWF0dXJlOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbmRhdGEtbXZjci9zZ292LWFzc2VtYmx5LWxpbmUvaXNzdWVzL25ldz9sYWJlbHM9ZW5oYW5jZW1lbnQmdGVtcGxhdGU9cG8tYWRhdmVrLW5hLW5vdm91LWZ1bmtjaW9uYWxpdHUubWQmdGl0bGU9Cg== +BROWSER=none +REACT_APP_DEBUG=false +REACT_APP_AUTHENTICATION=true diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 983cf1f9..3f4cb85c 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -1,13 +1,15 @@ -name: Docker +name: Publish Docker Image on: push: # Publish `master` as Docker `latest` image. branches: - main + workflow_dispatch: env: IMAGE_NAME: al-ontographer + AL_DEV_URL: ${{ vars.AL_DEV_URL }} # e.g. https://xn--slovnk-test-scb.dia.gov.cz/modelujeme jobs: @@ -59,4 +61,4 @@ jobs: uses: wei/curl@v1.1.1 with: args: | - -H \"X-Secret: ${{ secrets.AL_DEV_SECRET }}\" -X POST https://xn--slovnk-test-scb.mvcr.gov.cz/modelujeme/update/${{ env.IMAGE_NAME }}.php + -H \"X-Secret: ${{ secrets.AL_DEV_SECRET }}\" -X POST ${{ env.AL_DEV_URL }}/update/${{ env.IMAGE_NAME }}.php diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..a612ad98 --- /dev/null +++ b/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/package-lock.json b/package-lock.json index 993a9b57..8e8429f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,11 +47,11 @@ "hammerjs": "^2.0.8", "hotkeys-js": "^3.8.5", "is-url": "^1.2.4", - "jointjs": "^3.3.1", + "jointjs": "^3.7.4", "jquery": "^3.6.0", "lodash": "^4.17.21", "md5": "^2.3.0", - "node-sass": "^7.0.0", + "node-sass": "^9.0.0", "pullstate": "^1.23.0", "rdf-js": "^1.0.2", "react": "^17.0.2", @@ -120,9 +120,9 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -153,9 +153,9 @@ } }, "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -223,9 +223,9 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -287,9 +287,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -1633,9 +1633,9 @@ } }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -1844,9 +1844,9 @@ } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -4787,20 +4787,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/experimental-utils": { "version": "5.47.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.47.1.tgz", @@ -4973,20 +4959,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils": { "version": "5.47.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.47.1.tgz", @@ -5012,20 +4984,6 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.47.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.1.tgz", @@ -5639,6 +5597,8 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "optional": true, + "peer": true, "dependencies": { "safer-buffer": "~2.1.0" } @@ -5646,7 +5606,9 @@ "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "peer": true, "engines": { "node": ">=0.8" } @@ -5728,15 +5690,19 @@ "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "optional": true, + "peer": true, "engines": { "node": "*" } }, "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "optional": true, + "peer": true }, "node_modules/axe-core": { "version": "4.6.1", @@ -5903,9 +5869,9 @@ } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -5999,9 +5965,9 @@ } }, "node_modules/backbone": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", - "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.1.tgz", + "integrity": "sha512-ADy1ztN074YkWbHi8ojJVFe3vAanO/lrzMGZWUClIP7oDD/Pjy2vrASraUP+2EVCfIiTtCW4FChVow01XneivA==", "dependencies": { "underscore": ">=1.8.3" } @@ -6038,7 +6004,9 @@ "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "optional": true, + "peer": true, "dependencies": { "tweetnacl": "^0.14.3" } @@ -6367,9 +6335,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001436", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz", - "integrity": "sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg==", + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", "funding": [ { "type": "opencollective", @@ -6378,6 +6346,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -6392,7 +6364,9 @@ "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "optional": true, + "peer": true }, "node_modules/chalk": { "version": "4.1.2", @@ -7054,20 +7028,6 @@ "webpack": "^5.0.0" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/css-minimizer-webpack-plugin": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", @@ -7388,7 +7348,9 @@ "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0" }, @@ -7820,7 +7782,9 @@ "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "optional": true, + "peer": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -8383,9 +8347,9 @@ } }, "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -8476,9 +8440,9 @@ } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -9016,15 +8980,19 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "optional": true, + "peer": true }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" - ] + ], + "optional": true, + "peer": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -9340,7 +9308,9 @@ "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "optional": true, + "peer": true, "engines": { "node": "*" } @@ -9667,7 +9637,9 @@ "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0" } @@ -9877,7 +9849,9 @@ "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "optional": true, + "peer": true, "engines": { "node": ">=4" } @@ -9887,6 +9861,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", + "optional": true, + "peer": true, "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -10244,7 +10220,9 @@ "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -10839,7 +10817,9 @@ "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "optional": true, + "peer": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -10865,9 +10845,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -12529,21 +12509,21 @@ } }, "node_modules/jointjs": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/jointjs/-/jointjs-3.4.4.tgz", - "integrity": "sha512-X4eBjO7P8Uxi06+V2hgvF1PCNWGbz6jSYPIbFgnJ4sSYL8dbgPWOA7+LNA8QXswTP9EIHsHhoh03HLiHqKkjWA==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/jointjs/-/jointjs-3.7.4.tgz", + "integrity": "sha512-TQgtukMfRjZp/N7GBM5Tb9jK72wX0i9XBtcqaZL8G04WVZzsH3/oaTFzik5//y/4mL7Ont+qPUd3D1t/rYzq/A==", "dependencies": { - "backbone": "~1.4.0", + "backbone": "~1.4.1", "dagre": "~0.8.5", "graphlib": "~2.1.8", - "jquery": "~3.6.0", + "jquery": "~3.6.4", "lodash": "~4.17.21" } }, "node_modules/jquery": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", - "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", + "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==" }, "node_modules/js-base64": { "version": "2.6.4", @@ -12579,7 +12559,9 @@ "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "optional": true, + "peer": true }, "node_modules/jsdom": { "version": "16.7.0", @@ -12671,7 +12653,9 @@ "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "optional": true, + "peer": true }, "node_modules/json5": { "version": "2.2.3", @@ -12733,6 +12717,8 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "optional": true, + "peer": true, "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -12951,9 +12937,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -13393,9 +13379,9 @@ } }, "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" }, "node_modules/nanoid": { "version": "3.3.4", @@ -13524,9 +13510,9 @@ "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" }, "node_modules/node-sass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.3.tgz", - "integrity": "sha512-8MIlsY/4dXUkJDYht9pIWBhMil3uHmE8b/AdJPjmFn1nBx9X9BASzfzmsCy0uCCb8eqI3SYYzVPDswWqSx7gjw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz", + "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==", "hasInstallScript": true, "dependencies": { "async-foreach": "^0.1.3", @@ -13536,62 +13522,237 @@ "get-stdin": "^4.0.1", "glob": "^7.0.3", "lodash": "^4.17.15", + "make-fetch-happen": "^10.0.4", "meow": "^9.0.0", - "nan": "^2.13.2", + "nan": "^2.17.0", "node-gyp": "^8.4.1", - "npmlog": "^5.0.0", - "request": "^2.88.0", "sass-graph": "^4.0.1", "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" + "true-case-path": "^2.2.1" }, "bin": { "node-sass": "bin/node-sass" }, "engines": { - "node": ">=12" + "node": ">=16" + } + }, + "node_modules/node-sass/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/node-sass/node_modules/are-we-there-yet": { + "node_modules/node-sass/node_modules/@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-sass/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-sass/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-sass/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-sass/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/node-sass/node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, - "node_modules/node-sass/node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "node_modules/node-sass/node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/node-sass/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" } }, - "node_modules/node-sass/node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "node_modules/node-sass/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-sass/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sass/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/nodeify-fetch": { @@ -13707,6 +13868,8 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "optional": true, + "peer": true, "engines": { "node": "*" } @@ -15568,6 +15731,8 @@ "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "optional": true, + "peer": true, "engines": { "node": ">=0.6" } @@ -15940,6 +16105,20 @@ } } }, + "node_modules/react-scripts/node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "optional": true, + "peer": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/react-scripts/node_modules/camelcase": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", @@ -15951,6 +16130,118 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/react-scripts/node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "optional": true, + "peer": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-scripts/node_modules/node-sass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.3.tgz", + "integrity": "sha512-8MIlsY/4dXUkJDYht9pIWBhMil3uHmE8b/AdJPjmFn1nBx9X9BASzfzmsCy0uCCb8eqI3SYYzVPDswWqSx7gjw==", + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "meow": "^9.0.0", + "nan": "^2.13.2", + "node-gyp": "^8.4.1", + "npmlog": "^5.0.0", + "request": "^2.88.0", + "sass-graph": "^4.0.1", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "bin": { + "node-sass": "bin/node-sass" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/react-scripts/node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "optional": true, + "peer": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/react-scripts/node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/react-scripts/node_modules/true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.2" + } + }, "node_modules/react-select": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.0.tgz", @@ -16097,9 +16388,9 @@ } }, "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -16326,6 +16617,8 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "optional": true, + "peer": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -16356,6 +16649,8 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "optional": true, + "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -16369,6 +16664,8 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "optional": true, + "peer": true, "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -16382,6 +16679,8 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "optional": true, + "peer": true, "bin": { "uuid": "bin/uuid" } @@ -16706,43 +17005,6 @@ "node": ">=12" } }, - "node_modules/sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, "node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -16819,9 +17081,9 @@ } }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -17246,6 +17508,8 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "optional": true, + "peer": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -18065,9 +18329,9 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -18106,12 +18370,9 @@ } }, "node_modules/true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dependencies": { - "glob": "^7.1.2" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" }, "node_modules/tryer": { "version": "1.0.1", @@ -18249,7 +18510,9 @@ "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "optional": true, + "peer": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -18260,7 +18523,9 @@ "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "optional": true, + "peer": true }, "node_modules/type-check": { "version": "0.4.0", @@ -18599,10 +18864,12 @@ "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "engines": [ "node >=0.6.0" ], + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -19073,9 +19340,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "engines": { "node": ">=0.10.0" } @@ -19540,9 +19807,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "source-map": { "version": "0.5.7", @@ -19562,9 +19829,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -19616,9 +19883,9 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "yallist": { "version": "3.1.1", @@ -19664,9 +19931,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -20542,9 +20809,9 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -20698,9 +20965,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -22870,14 +23137,6 @@ "requires": { "ms": "2.1.2" } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -22966,14 +23225,6 @@ "requires": { "ms": "2.1.2" } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -22990,16 +23241,6 @@ "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/visitor-keys": { @@ -23499,6 +23740,8 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "optional": true, + "peer": true, "requires": { "safer-buffer": "~2.1.0" } @@ -23506,7 +23749,9 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "peer": true }, "ast-types-flow": { "version": "0.0.7", @@ -23554,12 +23799,16 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "optional": true, + "peer": true }, "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "optional": true, + "peer": true }, "axe-core": { "version": "4.6.1", @@ -23689,9 +23938,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -23769,9 +24018,9 @@ } }, "backbone": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", - "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.1.tgz", + "integrity": "sha512-ADy1ztN074YkWbHi8ojJVFe3vAanO/lrzMGZWUClIP7oDD/Pjy2vrASraUP+2EVCfIiTtCW4FChVow01XneivA==", "requires": { "underscore": ">=1.8.3" } @@ -23794,7 +24043,9 @@ "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "optional": true, + "peer": true, "requires": { "tweetnacl": "^0.14.3" } @@ -24044,9 +24295,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001436", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz", - "integrity": "sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg==" + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==" }, "case-sensitive-paths-webpack-plugin": { "version": "2.4.0", @@ -24056,7 +24307,9 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "optional": true, + "peer": true }, "chalk": { "version": "4.1.2", @@ -24551,16 +24804,6 @@ "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.3.8" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "css-minimizer-webpack-plugin": { @@ -24791,7 +25034,9 @@ "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0" } @@ -25108,7 +25353,9 @@ "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "optional": true, + "peer": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -25590,9 +25837,9 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -25650,9 +25897,9 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -25991,12 +26238,16 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "optional": true, + "peer": true }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "optional": true, + "peer": true }, "fast-deep-equal": { "version": "3.1.3", @@ -26236,7 +26487,9 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "optional": true, + "peer": true }, "fork-ts-checker-webpack-plugin": { "version": "6.5.2", @@ -26457,7 +26710,9 @@ "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0" } @@ -26619,12 +26874,16 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "optional": true, + "peer": true }, "har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "optional": true, + "peer": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -26895,7 +27154,9 @@ "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -27308,7 +27569,9 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "optional": true, + "peer": true }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -27328,9 +27591,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -28645,21 +28908,21 @@ } }, "jointjs": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/jointjs/-/jointjs-3.4.4.tgz", - "integrity": "sha512-X4eBjO7P8Uxi06+V2hgvF1PCNWGbz6jSYPIbFgnJ4sSYL8dbgPWOA7+LNA8QXswTP9EIHsHhoh03HLiHqKkjWA==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/jointjs/-/jointjs-3.7.4.tgz", + "integrity": "sha512-TQgtukMfRjZp/N7GBM5Tb9jK72wX0i9XBtcqaZL8G04WVZzsH3/oaTFzik5//y/4mL7Ont+qPUd3D1t/rYzq/A==", "requires": { - "backbone": "~1.4.0", + "backbone": "~1.4.1", "dagre": "~0.8.5", "graphlib": "~2.1.8", - "jquery": "~3.6.0", + "jquery": "~3.6.4", "lodash": "~4.17.21" } }, "jquery": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", - "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", + "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==" }, "js-base64": { "version": "2.6.4", @@ -28688,7 +28951,9 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "optional": true, + "peer": true }, "jsdom": { "version": "16.7.0", @@ -28759,7 +29024,9 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "optional": true, + "peer": true }, "json5": { "version": "2.2.3", @@ -28801,6 +29068,8 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "optional": true, + "peer": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -28968,9 +29237,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -29297,9 +29566,9 @@ } }, "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" }, "nanoid": { "version": "3.3.4", @@ -29401,9 +29670,9 @@ "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" }, "node-sass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.3.tgz", - "integrity": "sha512-8MIlsY/4dXUkJDYht9pIWBhMil3uHmE8b/AdJPjmFn1nBx9X9BASzfzmsCy0uCCb8eqI3SYYzVPDswWqSx7gjw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz", + "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==", "requires": { "async-foreach": "^0.1.3", "chalk": "^4.1.2", @@ -29412,50 +29681,179 @@ "get-stdin": "^4.0.1", "glob": "^7.0.3", "lodash": "^4.17.15", + "make-fetch-happen": "^10.0.4", "meow": "^9.0.0", - "nan": "^2.13.2", + "nan": "^2.17.0", "node-gyp": "^8.4.1", - "npmlog": "^5.0.0", - "request": "^2.88.0", "sass-graph": "^4.0.1", "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" + "true-case-path": "^2.2.1" }, "dependencies": { - "are-we-there-yet": { + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "balanced-match": "^1.0.0" } }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "dependencies": { + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + } } }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + }, + "make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "requires": { + "imurmurhash": "^0.1.4" } } } @@ -29542,7 +29940,9 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "optional": true, + "peer": true }, "object-assign": { "version": "4.1.1", @@ -30710,7 +31110,9 @@ "qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "optional": true, + "peer": true }, "querystringify": { "version": "2.2.0", @@ -31001,10 +31403,95 @@ "workbox-webpack-plugin": "^6.4.1" }, "dependencies": { + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "optional": true, + "peer": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, "camelcase": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==" + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "optional": true, + "peer": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "node-sass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.3.tgz", + "integrity": "sha512-8MIlsY/4dXUkJDYht9pIWBhMil3uHmE8b/AdJPjmFn1nBx9X9BASzfzmsCy0uCCb8eqI3SYYzVPDswWqSx7gjw==", + "optional": true, + "peer": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "meow": "^9.0.0", + "nan": "^2.13.2", + "node-gyp": "^8.4.1", + "npmlog": "^5.0.0", + "request": "^2.88.0", + "sass-graph": "^4.0.1", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "optional": true, + "peer": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "optional": true, + "peer": true, + "requires": { + "glob": "^7.1.2" + } } } }, @@ -31071,9 +31558,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, "type-fest": { "version": "0.6.0", @@ -31310,6 +31797,8 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "optional": true, + "peer": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -31337,6 +31826,8 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "optional": true, + "peer": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -31347,6 +31838,8 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "optional": true, + "peer": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -31355,7 +31848,9 @@ "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "optional": true, + "peer": true } } }, @@ -31577,15 +32072,6 @@ } } }, - "sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -31648,9 +32134,9 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -32009,6 +32495,8 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "optional": true, + "peer": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -32619,9 +33107,9 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -32650,12 +33138,9 @@ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" }, "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "requires": { - "glob": "^7.1.2" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" }, "tryer": { "version": "1.0.1", @@ -32756,7 +33241,9 @@ "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "optional": true, + "peer": true, "requires": { "safe-buffer": "^5.0.1" } @@ -32764,7 +33251,9 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "optional": true, + "peer": true }, "type-check": { "version": "0.4.0", @@ -33014,7 +33503,9 @@ "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -33359,9 +33850,9 @@ } }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==" }, "workbox-background-sync": { "version": "6.5.4", diff --git a/package.json b/package.json index 7a6d5339..f9bbade8 100644 --- a/package.json +++ b/package.json @@ -42,11 +42,11 @@ "hammerjs": "^2.0.8", "hotkeys-js": "^3.8.5", "is-url": "^1.2.4", - "jointjs": "^3.3.1", + "jointjs": "^3.7.4", "jquery": "^3.6.0", "lodash": "^4.17.21", "md5": "^2.3.0", - "node-sass": "^7.0.0", + "node-sass": "^9.0.0", "pullstate": "^1.23.0", "rdf-js": "^1.0.2", "react": "^17.0.2", diff --git a/src/components/modals/CreationModals.tsx b/src/components/modals/CreationModals.tsx index 48631f8b..4688928d 100644 --- a/src/components/modals/CreationModals.tsx +++ b/src/components/modals/CreationModals.tsx @@ -1,18 +1,16 @@ import React, { useEffect, useState } from "react"; -import NewLinkModal from "./NewLinkModal"; -import NewElemModal from "./NewElemModal"; -import { resetDiagramSelection } from "../../function/FunctionDiagram"; import { ElemCreationStrategy, Representation } from "../../config/Enum"; -import { createTerm } from "../../function/FunctionCreateElem"; -import { saveNewLink } from "../../function/FunctionLink"; import { AppSettings } from "../../config/Variables"; -import { setRepresentation } from "../../function/FunctionGraph"; +import { CellColors } from "../../config/visual/CellColors"; +import { createTerm } from "../../function/FunctionCreateElem"; +import { resetDiagramSelection } from "../../function/FunctionDiagram"; +import { drawGraphElement, highlightCells } from "../../function/FunctionDraw"; import { getElementPosition } from "../../function/FunctionElem"; +import { setRepresentation } from "../../function/FunctionGraph"; +import { saveNewLink } from "../../function/FunctionLink"; import { graph } from "../../graph/Graph"; -import { drawGraphElement, highlightCells } from "../../function/FunctionDraw"; -import { initConnections } from "../../function/FunctionRestriction"; -import { updateProjectLink } from "../../queries/update/UpdateLinkQueries"; -import { CellColors } from "../../config/visual/CellColors"; +import NewElemModal from "./NewElemModal"; +import NewLinkModal from "./NewLinkModal"; export type ElemCreationConfiguration = { strategy: ElemCreationStrategy; @@ -79,8 +77,7 @@ export const CreationModals: React.FC = (props) => { props.linkConfiguration.sourceID, props.linkConfiguration.targetID, ] - ), - updateProjectLink(false, ...initConnections().add) + ) ); setRepresentation( Representation.COMPACT, diff --git a/src/config/Variables.ts b/src/config/Variables.ts index 8ea56161..79fcf24f 100644 --- a/src/config/Variables.ts +++ b/src/config/Variables.ts @@ -82,6 +82,7 @@ export var WorkspaceTerms: { definitions: { [key: string]: string }; inScheme: string; types: string[]; + // term is subclass of these terms subClassOf: string[]; restrictions: Restriction[]; topConcept: string | undefined; diff --git a/src/function/FunctionCreateElem.ts b/src/function/FunctionCreateElem.ts index 97779471..517ac738 100644 --- a/src/function/FunctionCreateElem.ts +++ b/src/function/FunctionCreateElem.ts @@ -27,14 +27,8 @@ export const createTerm: ( strategy, position = { x: 0, y: 0 }, connections -) => { - return CreateElemStrategy[strategy]( - conceptName, - vocabulary, - position, - connections - ); -}; +) => + CreateElemStrategy[strategy](conceptName, vocabulary, position, connections); const CreateElemStrategy: { [key in ElemCreationStrategy]: CreateElemStrategyType; diff --git a/src/function/FunctionCreateVars.ts b/src/function/FunctionCreateVars.ts index 3c9191a7..d4d5e73f 100644 --- a/src/function/FunctionCreateVars.ts +++ b/src/function/FunctionCreateVars.ts @@ -18,7 +18,7 @@ import { } from "../config/Variables"; import { initLanguageObject } from "./FunctionEditVars"; import { - getLinkIRI, + getOntographerLinkIRI, getNewDiagramContextIRI, getNewDiagramIRI, getVocabularyFromScheme, @@ -171,6 +171,6 @@ export function addLink( vertices: {}, active: true, hasInverse: type !== LinkType.GENERALIZATION && iri in Links, - linkIRI: getLinkIRI(id), + linkIRI: getOntographerLinkIRI(id), }; } diff --git a/src/function/FunctionDebug.ts b/src/function/FunctionDebug.ts index 98ce63e9..46ce5e01 100644 --- a/src/function/FunctionDebug.ts +++ b/src/function/FunctionDebug.ts @@ -26,7 +26,6 @@ export function dumpDebugData() { } export function loadDebugData(): boolean { - console.trace(); const json = require("../debug-data.json"); if (!json) return false; for (const setting in json) { @@ -71,6 +70,12 @@ export function loadDebugData(): boolean { if (setting === "Diagrams") { for (const element in json["Diagrams"]) { Diagrams[element] = json["Diagrams"][element]; + Diagrams[element].creationDate = new Date( + json["Diagrams"][element]["creationDate"] + ); + Diagrams[element].modifiedDate = new Date( + json["Diagrams"][element]["modifiedDate"] + ); } } if (setting === "AppSettings") { diff --git a/src/function/FunctionDiagram.ts b/src/function/FunctionDiagram.ts index e0eb7910..13dd6a8e 100644 --- a/src/function/FunctionDiagram.ts +++ b/src/function/FunctionDiagram.ts @@ -16,8 +16,7 @@ export function changeDiagrams(diagram?: string) { .reduce((a, b) => (Diagrams[a].index < Diagrams[b].index ? a : b)); if (diagram && Diagrams[diagram]) { graph.clear(); - AppSettings.selectedLinks = []; - AppSettings.selectedElements = []; + clearSelection(); AppSettings.selectedDiagram = diagram; for (const id in WorkspaceElements) { if ( diff --git a/src/function/FunctionDraw.ts b/src/function/FunctionDraw.ts index 89ed8271..f6427659 100644 --- a/src/function/FunctionDraw.ts +++ b/src/function/FunctionDraw.ts @@ -37,12 +37,8 @@ export function getListClassNamesObject(arr: any[], i: number) { export function setDisplayLabel(id: string, languageCode: string) { if (WorkspaceElements[id].selectedLabel[languageCode] === "") { - const altLabel = WorkspaceTerms[id].altLabels.find( - (alt) => alt.language === languageCode - ); - WorkspaceElements[id].selectedLabel[languageCode] = altLabel - ? altLabel.label - : WorkspaceTerms[id].labels[languageCode]; + WorkspaceElements[id].selectedLabel[languageCode] = + WorkspaceTerms[id].labels[languageCode]; } } @@ -131,31 +127,23 @@ export function highlightCells( const cell = graph.getCell(id); if (!cell) return; if (cell.isLink()) { - cell.attr({ - line: { - filter: { - name: "dropShadow", - args: { - dx: 2, - dy: 2, - blur: 3, - color: color, - }, - }, + cell.attr(`line/filter`, { + name: "dropShadow", + args: { + dx: 2, + dy: 2, + blur: 3, + color: color, }, }); } else if (cell.id) { - cell.attr({ - [getElementShape(cell.id)]: { - filter: { - name: "highlight", - args: { - color: color, - width: 2, - opacity: 0.5, - blur: 5, - }, - }, + cell.attr(`${getElementShape(cell.id)}/filter`, { + name: "highlight", + args: { + color: color, + width: 2, + opacity: 0.5, + blur: 5, }, }); } diff --git a/src/function/FunctionElem.ts b/src/function/FunctionElem.ts index e899e425..77b9d797 100644 --- a/src/function/FunctionElem.ts +++ b/src/function/FunctionElem.ts @@ -151,7 +151,7 @@ export function createNewTerm( /** * Returns whether the element (based on its types) should be visible given a representation. * By default, true is returned even if the types contain none of the requested types. - * This behaviour can be + * This behaviour can be modified with the strict parameter. * @param types Types of the element. * @param representation Requested representation. * @param strict Enforce that the types must contain a requested representation type. @@ -236,7 +236,7 @@ export function isElementPositionOutdated(elem: joint.dia.Element) { */ export function moveElements( sourceElem: joint.dia.Element, - evt: JQuery.MouseUpEvent + evt: joint.dia.Event ): string[] { // get the selection rectangle data const { rect, bbox, ox, oy } = evt.data; diff --git a/src/function/FunctionGetVars.ts b/src/function/FunctionGetVars.ts index b42cbeae..993ccc11 100644 --- a/src/function/FunctionGetVars.ts +++ b/src/function/FunctionGetVars.ts @@ -69,10 +69,6 @@ export function getLabelOrBlank( : ""; } -export function getNameOrBlank(name: string) { - return name ? name : ""; -} - export function checkLabels() { for (const link in Links) { for (const lang in Languages) { @@ -239,7 +235,7 @@ export function getLastChangeDay() { return `${day}. ${month}. ${year}`; } -export function getLinkIRI(linkID: string) { +export function getOntographerLinkIRI(linkID: string) { return `${AppSettings.ontographerContext}/link/instance-${linkID}`; } diff --git a/src/function/FunctionGraph.ts b/src/function/FunctionGraph.ts index 3001d02b..7a3f554d 100644 --- a/src/function/FunctionGraph.ts +++ b/src/function/FunctionGraph.ts @@ -1,3 +1,7 @@ +import isUrl from "is-url"; +import * as joint from "jointjs"; +import * as _ from "lodash"; +import { LinkType, Representation } from "../config/Enum"; import { AppSettings, Diagrams, @@ -6,37 +10,39 @@ import { WorkspaceLinks, WorkspaceTerms, } from "../config/Variables"; +import { graph } from "../graph/Graph"; +import { graphElement } from "../graph/GraphElement"; +import { paper } from "../main/DiagramCanvas"; +import { + fetchReadOnlyTerms, + fetchRelationships, +} from "../queries/get/CacheQueries"; +import { updateDiagram } from "../queries/update/UpdateDiagramQueries"; +import { + updateProjectElement, + updateProjectElementDiagram, +} from "../queries/update/UpdateElementQueries"; +import { + updateDeleteProjectLinkVertex, + updateProjectLink, +} from "../queries/update/UpdateLinkQueries"; +import { insertNewCacheTerms, insertNewRestrictions } from "./FunctionCache"; +import { addLink } from "./FunctionCreateVars"; +import { clearSelection, updateDiagramPosition } from "./FunctionDiagram"; +import { drawGraphElement, getDisplayLabel } from "./FunctionDraw"; import { initElements, initLanguageObject, parsePrefix, } from "./FunctionEditVars"; -import { graph } from "../graph/Graph"; +import { filterEquivalent } from "./FunctionEquivalents"; import { getActiveToConnections, getElementShape, - getLinkOrVocabElem, + getIntrinsicTropeTypeIDs, + getLabelOrBlank, getNewLink, } from "./FunctionGetVars"; -import * as joint from "jointjs"; -import * as _ from "lodash"; -import { graphElement } from "../graph/GraphElement"; -import { LinkType, Representation } from "../config/Enum"; -import { drawGraphElement, getDisplayLabel } from "./FunctionDraw"; -import { - updateDeleteProjectLinkVertex, - updateProjectLink, -} from "../queries/update/UpdateLinkQueries"; -import { - updateProjectElement, - updateProjectElementDiagram, -} from "../queries/update/UpdateElementQueries"; -import { - fetchReadOnlyTerms, - fetchRelationships, -} from "../queries/get/CacheQueries"; -import { initConnections } from "./FunctionRestriction"; -import isUrl from "is-url"; import { getOtherConnectionElementID, isLinkVertexArrayEmpty, @@ -44,12 +50,7 @@ import { setLinkVertices, setSelfLoopConnectionPoints, } from "./FunctionLink"; -import { insertNewCacheTerms, insertNewRestrictions } from "./FunctionCache"; -import { updateDiagram } from "../queries/update/UpdateDiagramQueries"; -import { addLink } from "./FunctionCreateVars"; -import { updateDiagramPosition } from "./FunctionDiagram"; -import { paper } from "../main/DiagramCanvas"; -import { filterEquivalent } from "./FunctionEquivalents"; +import { initConnections } from "./FunctionRestriction"; export const mvp1IRI = "https://slovník.gov.cz/základní/pojem/má-vztažený-prvek-1"; @@ -160,36 +161,137 @@ export async function spreadConnections( return queries; } -export function setLabels(link: joint.dia.Link, centerLabel: string) { +export function setLabels(link: joint.dia.Link) { + if (WorkspaceLinks[link.id].type !== LinkType.DEFAULT) return; + const iri = WorkspaceLinks[link.id].iri; + let label: string = ""; + let tropes: string[] = []; + if (iri in Links) + label = getLabelOrBlank(Links[iri].labels, AppSettings.canvasLanguage); + if (iri in WorkspaceTerms) { + label = getDisplayLabel(iri, AppSettings.canvasLanguage); + tropes = getIntrinsicTropeTypeIDs(iri).flatMap((trope) => + getDisplayLabel(trope, AppSettings.canvasLanguage) + ); + } link.labels([]); - if (WorkspaceLinks[link.id].type === LinkType.DEFAULT) { + link.appendLabel({ + markup: [ + { + tagName: "g", + selector: "global", + children: [ + { tagName: "rect", selector: "body" }, + { + tagName: "g", + selector: "labels", + children: [ + { tagName: "text", selector: "label" }, + { tagName: "text", selector: "labelAttrs" }, + ], + }, + ], + }, + ], + attrs: { + global: { + y: "-50%", + }, + label: { + text: label, + fill: "#000000", + fontSize: tropes.length === 0 ? 14 : 16, + textVerticalAnchor: tropes.length === 0 ? "middle" : "top", + textAnchor: "middle", + pointerEvents: "none", + y: tropes.length === 0 ? 0 : -(11 + Math.floor(tropes.length * 6.5)), + }, + labelAttrs: { + ref: "label", + text: tropes.join("\n"), + fill: "#000000", + fontSize: 14, + textVerticalAnchor: "top", + textAnchor: "start", + x: "calc(-0.55*w)", + y: "calc(y + 22)", + pointerEvents: "none", + }, + body: { + ref: "labels", + width: "calc(1.1*w)", + height: "calc(1.1*h)", + x: "calc(-0.55*w)", + y: "calc(-0.55*h)", + rx: 3, + ry: 3, + stroke: "black", + strokeWidth: "0.5", + fill: "white", + }, + }, + position: { distance: 0.5 }, + }); + if ( + WorkspaceLinks[link.id].sourceCardinality && + WorkspaceLinks[link.id].sourceCardinality.getString() !== "" + ) link.appendLabel({ - attrs: { text: { text: centerLabel } }, - position: { distance: 0.5 }, + markup: [ + { tagName: "rect", selector: "body" }, + { tagName: "text", selector: "label" }, + ], + attrs: { + label: { + text: WorkspaceLinks[link.id].sourceCardinality.getString(), + textVerticalAnchor: "middle", + textAnchor: "middle", + }, + body: { + ref: "label", + fill: "white", + width: "calc(1.1*w)", + height: "calc(1.1*h)", + x: "calc(-0.55*w)", + y: "calc(-0.55*h)", + rx: 3, + ry: 3, + stroke: "black", + strokeWidth: "0.5", + }, + }, + position: { distance: 30 }, }); - if ( - WorkspaceLinks[link.id].sourceCardinality && - WorkspaceLinks[link.id].sourceCardinality.getString() !== "" - ) { - link.appendLabel({ - attrs: { - text: { text: WorkspaceLinks[link.id].sourceCardinality.getString() }, + if ( + WorkspaceLinks[link.id].targetCardinality && + WorkspaceLinks[link.id].targetCardinality.getString() !== "" + ) + link.appendLabel({ + markup: [ + { tagName: "rect", selector: "body" }, + { tagName: "text", selector: "label" }, + ], + attrs: { + label: { + text: WorkspaceLinks[link.id].sourceCardinality.getString(), + textVerticalAnchor: "middle", + textAnchor: "middle", }, - position: { distance: 20 }, - }); - } - if ( - WorkspaceLinks[link.id].targetCardinality && - WorkspaceLinks[link.id].targetCardinality.getString() !== "" - ) { - link.appendLabel({ - attrs: { - text: { text: WorkspaceLinks[link.id].targetCardinality.getString() }, + body: { + ref: "label", + fill: "white", + width: "calc(1.1*w)", + height: "calc(1.1*h)", + x: "calc(-0.55*w)", + y: "calc(-0.55*h)", + rx: 3, + ry: 3, + stroke: "black", + strokeWidth: "0.5", }, - position: { distance: -20 }, - }); - } - } + }, + position: { distance: -30 }, + }); } function storeElement(elem: joint.dia.Cell) { @@ -237,8 +339,7 @@ export function setRepresentation( Diagrams[diag].representation = representation; } queries.push(updateDiagram(diag)); - AppSettings.selectedLinks = []; - AppSettings.selectedElements = []; + clearSelection(); let del = false; if (representation === Representation.COMPACT) { for (const id of Object.keys(WorkspaceElements).filter( @@ -303,10 +404,7 @@ export function setRepresentation( sourceLink, targetLink ); - setLabels( - newLink, - getDisplayLabel(id, AppSettings.canvasLanguage) - ); + setLabels(newLink); } } } @@ -339,7 +437,7 @@ export function setRepresentation( } else if (WorkspaceLinks[link.id].iri in WorkspaceTerms) { const elem = WorkspaceLinks[link.id].iri; if (!elem) continue; - setLabels(link, getDisplayLabel(elem, AppSettings.canvasLanguage)); + setLabels(link); } } for (const elem of g.getElements()) { @@ -424,12 +522,7 @@ export function setupLink( g: joint.dia.Graph = graph ) { const lnk = getNewLink(WorkspaceLinks[link].type, link); - setLabels( - lnk, - getLinkOrVocabElem(WorkspaceLinks[link].iri).labels[ - AppSettings.canvasLanguage - ] - ); + setLabels(lnk); lnk.source({ id: WorkspaceLinks[link].source, connectionPoint: { @@ -562,18 +655,8 @@ export function restoreHiddenElem( ); setLinkBoundary(domainLink, relID, WorkspaceLinks[link].target); setLinkBoundary(rangeLink, relID, WorkspaceLinks[targetLink].target); - setLabels( - domainLink, - getLinkOrVocabElem(WorkspaceLinks[link].iri).labels[ - AppSettings.canvasLanguage - ] - ); - setLabels( - rangeLink, - getLinkOrVocabElem(WorkspaceLinks[targetLink].iri).labels[ - AppSettings.canvasLanguage - ] - ); + setLabels(domainLink); + setLabels(rangeLink); relationship.addTo(g); queries.push( updateProjectElementDiagram(AppSettings.selectedDiagram, relID) diff --git a/src/function/FunctionLink.ts b/src/function/FunctionLink.ts index 4a94d0b1..c027cc63 100644 --- a/src/function/FunctionLink.ts +++ b/src/function/FunctionLink.ts @@ -24,7 +24,6 @@ import { } from "../queries/update/UpdateLinkQueries"; import { addLink } from "./FunctionCreateVars"; import { - getLinkOrVocabElem, getNewLink, getUnderlyingFullConnections, getVocabularyFromScheme, @@ -237,8 +236,7 @@ export function saveNewLink( updateProjectLink(true, sourceId, targetId) ); } - if (type === LinkType.DEFAULT) - setLabels(link, getLinkOrVocabElem(iri).labels[AppSettings.canvasLanguage]); + setLabels(link); if (isLinkVisible(iri, type, AppSettings.representation)) link.addTo(graph); return queries; } diff --git a/src/interface/TransactionInterface.ts b/src/interface/TransactionInterface.ts index 95550964..361bb504 100644 --- a/src/interface/TransactionInterface.ts +++ b/src/interface/TransactionInterface.ts @@ -28,7 +28,12 @@ export async function processTransaction( .then((headers) => { let location = headers.get("location"); if (location) return location; - else return undefined; + else { + console.error( + "Unable to get location header to proceed with transaction." + ); + return undefined; + } }) .catch((e) => { console.error(e); diff --git a/src/locale/cs.ts b/src/locale/cs.ts index 7444361e..9be8bdc6 100644 --- a/src/locale/cs.ts +++ b/src/locale/cs.ts @@ -57,7 +57,7 @@ export const cs: { [Property in keyof typeof en]: string } = { modalNewElemIRI: "Pojem bude vytvořen s tímto IRI:", terms: "pojmy", termsCase: "pojmů", - fromList: "Ze seznamu", + fromList: "Z projektu", otherVocabularies: "Ostatní slovníky", authenticationError: "Chyba autentikace. Prosím, kontaktujte serverového administrátora.", diff --git a/src/locale/en.ts b/src/locale/en.ts index e8bbc068..a913edac 100644 --- a/src/locale/en.ts +++ b/src/locale/en.ts @@ -195,7 +195,7 @@ export const en = { help: "Help", modalNewElemError: "You must enter a label in order to create a new term.", selectVocabulary: "Term will be created in:", - fromList: "From the list", + fromList: "From project", otherVocabularies: "Other vocabularies", view: "View", switchColors: "Vocabulary color scheme", diff --git a/src/main/DiagramCanvas.tsx b/src/main/DiagramCanvas.tsx index ed4fce30..151e436a 100644 --- a/src/main/DiagramCanvas.tsx +++ b/src/main/DiagramCanvas.tsx @@ -122,6 +122,7 @@ export default class DiagramCanvas extends React.Component { }, clickThreshold: 0, async: false, + frozen: false, sorting: joint.dia.Paper.sorting.APPROX, connectionStrategy: joint.connectionStrategies.pinAbsolute, defaultConnectionPoint: { @@ -148,7 +149,7 @@ export default class DiagramCanvas extends React.Component { const vocabulary = Object.keys(WorkspaceVocabularies).find( (vocab) => !WorkspaceVocabularies[vocab].readOnly ); - if (vocabulary) { + if (vocabulary && evt.clientX && evt.clientY) { this.props.handleCreation({ strategy: ElemCreationStrategy.DEFAULT, position: { x: evt.clientX, y: evt.clientY }, @@ -156,7 +157,10 @@ export default class DiagramCanvas extends React.Component { header: Locale[AppSettings.interfaceLanguage].modalNewElemTitle, connections: [], }); - } + } else + console.warn( + "Unable to create term as there is no writable vocabulary open." + ); this.newLink = false; unHighlightAll(); resetDiagramSelection(); @@ -173,18 +177,16 @@ export default class DiagramCanvas extends React.Component { */ "element:pointerup": (cellView, evt) => { const { rect } = evt.data; + const id = cellView.model.id as string; if (rect) rect.remove(); if (!this.newLink && !evt.ctrlKey) { if (isElementPositionOutdated(cellView.model)) { this.props.performTransaction(...moveElements(cellView.model, evt)); } else { resetDiagramSelection(); - highlightCells(CellColors.detail, cellView.model.id); - this.props.updateElementPanel(cellView.model.id); - this.props.updateDetailPanel( - DetailPanelMode.TERM, - cellView.model.id - ); + highlightCells(CellColors.detail, id); + this.props.updateElementPanel(id); + this.props.updateDetailPanel(DetailPanelMode.TERM, id); } } else if (evt.ctrlKey) { this.props.updateDetailPanel(DetailPanelMode.HIDDEN); @@ -192,10 +194,10 @@ export default class DiagramCanvas extends React.Component { (elem) => elem === cellView.model.id ); find !== -1 - ? unHighlightCells(cellView.model.id) - : highlightCells(CellColors.detail, cellView.model.id); + ? unHighlightCells(id) + : highlightCells(CellColors.detail, id); } else if (this.newLink) { - this.tid = cellView.model.id; + this.tid = id; this.props.handleCreation({ sourceID: this.sid, targetID: this.tid }); this.newLink = false; unHighlightAll(); @@ -245,7 +247,7 @@ export default class DiagramCanvas extends React.Component { */ "link:mouseenter": (linkView) => { if ( - AppSettings.selectedLinks.includes(linkView.model.id) && + AppSettings.selectedLinks.includes(linkView.model.id as string) && AppSettings.selectedLinks.length === 1 ) addLinkTools( @@ -383,9 +385,10 @@ export default class DiagramCanvas extends React.Component { ) { const { rect, bbox, ox, oy } = evt.data; if (rect && bbox && ox && oy) { + const mouseEvent = evt.originalEvent as MouseEvent; const newBbox = new joint.g.Rect( - bbox.x + evt.originalEvent.movementX, - bbox.y + evt.originalEvent.movementY, + bbox.x + mouseEvent.movementX, + bbox.y + mouseEvent.movementY, bbox.width, bbox.height ); @@ -434,34 +437,31 @@ export default class DiagramCanvas extends React.Component { * Highlight link and open the Detail panel */ "link:pointerclick": (linkView, evt) => { + const id = linkView.model.id as string; if (evt.ctrlKey) { this.props.updateDetailPanel(DetailPanelMode.HIDDEN); const find = AppSettings.selectedLinks.findIndex( - (elem) => elem === linkView.model.id + (elem) => elem === id ); find !== -1 - ? unHighlightCells(linkView.model.id) - : highlightCells(CellColors.detail, linkView.model.id); + ? unHighlightCells(id) + : highlightCells(CellColors.detail, id); if (AppSettings.selectedLinks.length > 1) this.props.updateDetailPanel(DetailPanelMode.MULTIPLE_LINKS); - else - this.props.updateDetailPanel( - DetailPanelMode.LINK, - linkView.model.id - ); + else this.props.updateDetailPanel(DetailPanelMode.LINK, id); } else { resetDiagramSelection(); if (this.newLink) { this.newLink = false; unHighlightAll(); } - highlightCells(CellColors.detail, linkView.model.id); + highlightCells(CellColors.detail, id); addLinkTools( linkView, this.props.performTransaction, this.props.updateElementPanel ); - this.props.updateDetailPanel(DetailPanelMode.LINK, linkView.model.id); + this.props.updateDetailPanel(DetailPanelMode.LINK, id); } }, /** @@ -469,9 +469,9 @@ export default class DiagramCanvas extends React.Component { * Save changes of link vertices */ "link:pointerup": (cellView) => { - const id = cellView.model.id; + const id = cellView.model.id as string; const link = cellView.model; - link.findView(paper).removeRedundantLinearVertices(); + cellView.removeRedundantLinearVertices(); this.props.performTransaction(...updateVertices(id, link.vertices())); }, /** @@ -479,9 +479,9 @@ export default class DiagramCanvas extends React.Component { * Save changes of link vertices */ "link:pointerdblclick": (cellView) => { - const id = cellView.model.id; + const id = cellView.model.id as string; const link = cellView.model; - link.findView(paper).removeRedundantLinearVertices(); + cellView.removeRedundantLinearVertices(); this.props.performTransaction(...updateVertices(id, link.vertices())); }, }); diff --git a/src/main/MainView.tsx b/src/main/MainView.tsx index f585a8c8..c209f0b0 100644 --- a/src/main/MainView.tsx +++ b/src/main/MainView.tsx @@ -29,14 +29,25 @@ type Props = { export const MainView: React.FC = (props: Props) => { const mode = useStoreState(StoreSettings, (s) => s.mainViewMode); + const getStyle = () => { + const diagramPanel = document.getElementById("diagramPanel"); + const menuPanel = document.getElementById("menuPanel"); + const subtract = + (diagramPanel ? diagramPanel.offsetHeight : 81) + + (menuPanel ? menuPanel.offsetHeight : 31); + return { + cursor: props.freeze ? "not-allowed" : "inherit", + opacity: props.freeze ? "0.5" : "1", + height: `calc(100vh - ${subtract}px)`, + }; + }; + let timer: NodeJS.Timeout; + window.addEventListener("resize", () => { + clearTimeout(timer); + timer = setTimeout(getStyle, 200); + }); return ( -
+
{mode === MainViewMode.CANVAS && ( = (props: Props) => { )}
- - - - {Locale[AppSettings.interfaceLanguage].collaborators} - - - {Diagrams[props.selectedDiagram].collaborators - ? Diagrams[props.selectedDiagram].collaborators.map( - (c) => ( - - {c in Users - ? Users[c].given_name.toUpperCase()[0] + - Users[c].family_name.toUpperCase()[0] - : ""} - +
+ + + + {Locale[AppSettings.interfaceLanguage].collaborators} + + + {Diagrams[props.selectedDiagram].collaborators + ? Diagrams[props.selectedDiagram].collaborators.map( + (c) => ( + + {c in Users + ? Users[c].given_name.toUpperCase()[0] + + Users[c].family_name.toUpperCase()[0] + : ""} + + ) ) - ) - : Locale[AppSettings.interfaceLanguage].unknown} - - - - - - - {Locale[AppSettings.interfaceLanguage].creationDate} - - - {Diagrams[props.selectedDiagram].creationDate - ? Diagrams[ - props.selectedDiagram - ].creationDate.toLocaleDateString( - AppSettings.interfaceLanguage - ) - : Locale[AppSettings.interfaceLanguage].unknown} - - - - - - - {Locale[AppSettings.interfaceLanguage].lastModifiedDate} - - - {Diagrams[props.selectedDiagram].modifiedDate - ? Diagrams[ - props.selectedDiagram - ].modifiedDate.toLocaleDateString( - AppSettings.interfaceLanguage - ) - : Locale[AppSettings.interfaceLanguage].unknown} - - - - - - - - {Locale[AppSettings.interfaceLanguage].name} - - - setSelectedDiagramName(event.currentTarget.value) - } - onBlur={() => save()} - /> - - - - {Locale[AppSettings.interfaceLanguage].description} - - - setSelectedDiagramDescription(event.currentTarget.value) - } - onBlur={() => save()} - /> - - - - {Locale[AppSettings.interfaceLanguage].vocabularies} -   - - { - Locale[AppSettings.interfaceLanguage] - .vocabularySelectInfo - } - + : Locale[AppSettings.interfaceLanguage].unknown} + + + + + + + {Locale[AppSettings.interfaceLanguage].creationDate} + + + {Diagrams[props.selectedDiagram].creationDate + ? Diagrams[ + props.selectedDiagram + ].creationDate.toLocaleDateString( + AppSettings.interfaceLanguage + ) + : Locale[AppSettings.interfaceLanguage].unknown} + + + + + + + {Locale[AppSettings.interfaceLanguage].lastModifiedDate} + + + {Diagrams[props.selectedDiagram].modifiedDate + ? Diagrams[ + props.selectedDiagram + ].modifiedDate.toLocaleDateString( + AppSettings.interfaceLanguage + ) + : Locale[AppSettings.interfaceLanguage].unknown} + + + + + + + + {Locale[AppSettings.interfaceLanguage].name} + + + setSelectedDiagramName(event.currentTarget.value) + } + onBlur={() => save()} + /> + + + + {Locale[AppSettings.interfaceLanguage].description} + + + setSelectedDiagramDescription( + event.currentTarget.value + ) + } + onBlur={() => save()} + /> + + + + {Locale[AppSettings.interfaceLanguage].vocabularies} +   + + { + Locale[AppSettings.interfaceLanguage] + .vocabularySelectInfo + } + + } + > + + + + - Locale[AppSettings.interfaceLanguage].noOptions - } - isSearchable - backspaceRemovesValue={false} - hideSelectedOptions={true} - isClearable={false} - value={inputVocabs} - styles={{ - multiValue: (baseStyles, state) => ({ - ...baseStyles, - backgroundColor: - WorkspaceVocabularies[state.data.value].color, - borderRadius: "10px", - }), - }} - placeholder={ - Locale[AppSettings.interfaceLanguage] - .filterVocabulariesPlaceholder - } - options={props.availableVocabularies.map((vocab) => ({ - value: vocab, - label: getLabelOrBlank( - WorkspaceVocabularies[vocab].labels, - props.projectLanguage - ), - }))} - onChange={(option) => { - if (option.length === 0) return; - setInputVocabs(_.clone(option)); - Diagrams[props.selectedDiagram].vocabularies = - option.map((o) => o.value); - save(); - }} - /> - - - + options={props.availableVocabularies.map((vocab) => ({ + value: vocab, + label: getLabelOrBlank( + WorkspaceVocabularies[vocab].labels, + props.projectLanguage + ), + }))} + onChange={(option) => { + if (option.length === 0) return; + setInputVocabs(_.clone(option)); + Diagrams[props.selectedDiagram].vocabularies = + option.map((o) => o.value); + save(); + }} + /> + + + +
diff --git a/src/main/manager/list/DiagramManagerDiagrams.tsx b/src/main/manager/list/DiagramManagerDiagrams.tsx index cdd46e4c..957ddc44 100644 --- a/src/main/manager/list/DiagramManagerDiagrams.tsx +++ b/src/main/manager/list/DiagramManagerDiagrams.tsx @@ -26,9 +26,21 @@ interface Props { export const DiagramManagerDiagrams: React.FC = (props: Props) => { const [hovered, setHovered] = useState(false); const [modalRemoveDiagram, setModalRemoveDiagram] = useState(""); + const getStyle = () => { + const diagramSearch = document.getElementById("diagramSearch"); + const subtract = (diagramSearch ? diagramSearch.offsetHeight : 0) + 200; + return { + height: `calc(100% - ${subtract}px)`, + }; + }; + let timer: NodeJS.Timeout; + window.addEventListener("resize", () => { + clearTimeout(timer); + timer = setTimeout(getStyle, 200); + }); return ( -
+
{props.diagrams.map((diag) => ( = (props: Props) => { return ( -
+
diff --git a/src/panels/DetailPanel.tsx b/src/panels/DetailPanel.tsx index a2c91cbd..2f863658 100644 --- a/src/panels/DetailPanel.tsx +++ b/src/panels/DetailPanel.tsx @@ -20,6 +20,8 @@ interface State { } export default class DetailPanel extends React.Component { + private timer: NodeJS.Timeout; + constructor(props: Props) { super(props); this.state = { @@ -41,12 +43,28 @@ export default class DetailPanel extends React.Component { } } ); + this.timer = setTimeout(this.getStyle, 200); + window.addEventListener("resize", () => { + clearTimeout(this.timer); + this.timer = setTimeout(this.getStyle, 200); + }); } save(id: string) { this.props.update(id in WorkspaceElements && id); } + getStyle() { + const diagramPanel = document.getElementById("diagramPanel"); + const menuPanel = document.getElementById("menuPanel"); + const subtract = + (diagramPanel ? diagramPanel.offsetHeight : 81) + + (menuPanel ? menuPanel.offsetHeight : 31); + return { + height: `calc(100vh - ${subtract}px)`, + }; + } + render() { return (
@@ -59,7 +77,7 @@ export default class DetailPanel extends React.Component { resizeHandles={["sw"]} className={"details" + (this.props.freeze ? " disabled" : "")} > -
+
{this.state.mode === DetailPanelMode.TERM && ( { render() { return ( -
+
{ this.forceUpdate(); diff --git a/src/panels/MenuPanel.tsx b/src/panels/MenuPanel.tsx index 2a556709..4c5b30c1 100644 --- a/src/panels/MenuPanel.tsx +++ b/src/panels/MenuPanel.tsx @@ -67,7 +67,7 @@ export default class MenuPanel extends React.Component< render() { return ( -
))} diff --git a/src/panels/detail/components/element/ConnectionOverlay.tsx b/src/panels/detail/components/element/ConnectionOverlay.tsx index 89aaefb1..0a0a370a 100644 --- a/src/panels/detail/components/element/ConnectionOverlay.tsx +++ b/src/panels/detail/components/element/ConnectionOverlay.tsx @@ -8,7 +8,7 @@ interface Props { id: string; performTransaction: (...queries: string[]) => void; visible: boolean; - close: Function; + close: () => void; save: (id: string) => void; } @@ -22,6 +22,7 @@ export default class ConnectionOverlay extends React.Component { projectLanguage={this.props.projectLanguage} save={this.props.save} performTransaction={this.props.performTransaction} + close={this.props.close} /> )}
diff --git a/src/panels/detail/components/element/DetailElementDescriptionCard.tsx b/src/panels/detail/components/element/DetailElementDescriptionCard.tsx index 52bb7f1f..7585d8d3 100644 --- a/src/panels/detail/components/element/DetailElementDescriptionCard.tsx +++ b/src/panels/detail/components/element/DetailElementDescriptionCard.tsx @@ -1,30 +1,20 @@ -import RemoveIcon from "@mui/icons-material/Remove"; -import classNames from "classnames"; import * as _ from "lodash"; import React from "react"; -import { - Accordion, - Button, - Form, - OverlayTrigger, - Tooltip, -} from "react-bootstrap"; +import { Accordion, Form } from "react-bootstrap"; +import { Representation } from "../../../../config/Enum"; import { Locale } from "../../../../config/Locale"; import { AlternativeLabel, AppSettings, Stereotypes, WorkspaceElements, - WorkspaceLinks, WorkspaceTerms, WorkspaceVocabularies, } from "../../../../config/Variables"; import { Shapes } from "../../../../config/visual/Shapes"; import { drawGraphElement, - getListClassNamesObject, getSelectedLabels, - redrawElement, } from "../../../../function/FunctionDraw"; import { parsePrefix } from "../../../../function/FunctionEditVars"; import { @@ -37,23 +27,19 @@ import { isEquivalent, } from "../../../../function/FunctionEquivalents"; import { - getIntrinsicTropeTypeIDs, - getLabelOrBlank, getParentOfIntrinsicTropeType, getVocabularyFromScheme, } from "../../../../function/FunctionGetVars"; -import { deleteLink } from "../../../../function/FunctionLink"; import { graph } from "../../../../graph/Graph"; import { updateProjectElement } from "../../../../queries/update/UpdateElementQueries"; +import { IntrinsicTropeControls } from "../IntrinsicTropeControls"; import { DetailPanelAltLabels } from "../description/DetailPanelAltLabels"; -import { ListItemControls } from "../items/ListItemControls"; -import { ModalAddTrope } from "./ModalAddTrope"; type Props = { id: string; performTransaction: (...queries: string[]) => void; selectedLanguage: string; - save: Function; + save: (id: string) => void; }; type State = { @@ -241,8 +227,7 @@ export class DetailElementDescriptionCard extends React.Component< } render() { - const tropes = getIntrinsicTropeTypeIDs(this.props.id); - + // const tropes = getIntrinsicTropeTypeIDs(this.props.id); return ( @@ -269,6 +254,22 @@ export class DetailElementDescriptionCard extends React.Component< selectedLabel: { ...prev.selectedLabel, [language]: name }, })) } + deleteAltLabel={(alt: AlternativeLabel) => { + this.setState((prev) => ({ + changes: true, + inputAltLabels: _.without(prev.inputAltLabels, alt), + selectedLabel: + prev.selectedLabel[this.props.selectedLanguage] === alt.label + ? { + ...prev.selectedLabel, + [this.props.selectedLanguage]: + WorkspaceTerms[this.props.id].labels[ + this.props.selectedLanguage + ], + } + : prev.selectedLabel, + })); + }} />
{Locale[AppSettings.interfaceLanguage].detailPanelStereotype}
-
{Locale[AppSettings.interfaceLanguage].intrinsicTropes}
- {tropes.map((iri, i) => ( -
this.setState({ hoveredTrope: i })} - onMouseLeave={() => this.setState({ hoveredTrope: -1 })} - className={classNames( - "detailInput", - "form-control", - "form-control-sm", - getListClassNamesObject(tropes, i) - )} - > - - {getLabelOrBlank( - WorkspaceTerms[iri].labels, - this.props.selectedLanguage - )} - - - - {Locale[AppSettings.interfaceLanguage].removeTrope} - - } - > - - - -
- ))} - {tropes.length === 0 && ( - )} - this.setState({ modalTropes: true })} - popover={false} - tooltipText={Locale[AppSettings.interfaceLanguage].assignTrope} - disableAddControl={this.state.readOnly} - /> - this.setState({ modalTropes: false })} - selectedLanguage={this.props.selectedLanguage} - performTransaction={this.props.performTransaction} - update={this.props.save} - id={this.props.id} - />
); } diff --git a/src/panels/detail/components/element/ModalAddTrope.tsx b/src/panels/detail/components/element/ModalAddTrope.tsx index 4561e26a..07a42d39 100644 --- a/src/panels/detail/components/element/ModalAddTrope.tsx +++ b/src/panels/detail/components/element/ModalAddTrope.tsx @@ -37,6 +37,7 @@ import { trimLanguageObjectInput, } from "../../../../function/FunctionEditVars"; import { getElementPosition } from "../../../../function/FunctionElem"; +import { filterEquivalent } from "../../../../function/FunctionEquivalents"; import { getLabelOrBlank, getVocabularyFromScheme, @@ -46,7 +47,6 @@ import { saveNewLink } from "../../../../function/FunctionLink"; import { graph } from "../../../../graph/Graph"; import { updateProjectElementDiagram } from "../../../../queries/update/UpdateElementQueries"; import { ListLanguageControls } from "../items/ListLanguageControls"; -import { filterEquivalent } from "../../../../function/FunctionEquivalents"; interface Props { modalTropes: boolean; @@ -54,7 +54,7 @@ interface Props { selectedLanguage: string; performTransaction: (...queries: string[]) => void; update: Function; - id: string; + term: string; } export const ModalAddTrope: React.FC = (props: Props) => { @@ -115,8 +115,8 @@ export const ModalAddTrope: React.FC = (props: Props) => { setError(errorText); }, [input, vocabulary]); - const getUnusedTropes: () => string[] = () => { - return Object.keys(WorkspaceTerms) + const getUnusedTropes: () => string[] = () => + Object.keys(WorkspaceTerms) .filter( (term) => filterEquivalent( @@ -134,44 +134,43 @@ export const ModalAddTrope: React.FC = (props: Props) => { WorkspaceLinks[l].active ) ); - }; const save = () => { if (activeKey === "new") { props.performTransaction( ...createTerm( trimLanguageObjectInput(input), - getVocabularyFromScheme(WorkspaceTerms[props.id].inScheme), + getVocabularyFromScheme(WorkspaceTerms[props.term].inScheme), ElemCreationStrategy.INTRINSIC_TROPE_TYPE, - getElementPosition(props.id), - [props.id] + getElementPosition(props.term), + [props.term] ) ); - const elem = graph.getElements().find((elem) => elem.id === props.id); + const elem = graph.getElements().find((elem) => elem.id === props.term); if (elem) { drawGraphElement( elem, props.selectedLanguage, AppSettings.representation ); - highlightCells(CellColors.detail, props.id); + highlightCells(CellColors.detail, props.term); } props.update(); } else if (activeKey === "exist" && selectedTrope) { WorkspaceElements[selectedTrope].position[AppSettings.selectedDiagram] = - getElementPosition(props.id); + getElementPosition(props.term); WorkspaceElements[selectedTrope].hidden[AppSettings.selectedDiagram] = false; props.performTransaction( ...saveNewLink( parsePrefix("z-sgov-pojem", "má-vlastnost"), - props.id, + props.term, selectedTrope, Representation.FULL ), updateProjectElementDiagram(AppSettings.selectedDiagram, selectedTrope) ); - redrawElement(props.id, props.selectedLanguage); + redrawElement(props.term, props.selectedLanguage); } else { throw new Error("Invalid save request."); } @@ -210,155 +209,159 @@ export const ModalAddTrope: React.FC = (props: Props) => { {Locale[AppSettings.interfaceLanguage].assignTropeHeader} {getLabelOrBlank( - WorkspaceTerms[props.id].labels, + WorkspaceTerms[props.term].labels, props.selectedLanguage )} - - setActiveKey(key as string)} - > - { + event.preventDefault(); + save(); + }} + > + + setActiveKey(key as string)} > -
-

- {Locale[AppSettings.interfaceLanguage].modalNewTropeDescription} -

- {activatedInputs.map((lang, i) => ( - - - {Languages[lang]} +
+

+ {Locale[AppSettings.interfaceLanguage].modalNewTropeDescription} +

+ {activatedInputs.map((lang, i) => ( + + + {Languages[lang]} + {lang === AppSettings.canvasLanguage ? "*" : ""} + + { + setInput((prev) => ({ + ...prev, + [lang]: event.target.value, + })); + }} /> - {lang === AppSettings.canvasLanguage ? "*" : ""} -
- { - setInput((prev) => ({ - ...prev, - [lang]: event.target.value, - })); - }} - /> -
- ))} - { - const removeLang = _.last(activatedInputs); - setInput((prev) => ({ - ...prev, - [removeLang!]: "", - })); - setActivatedInputs((prev) => _.dropRight(prev, 1)); - }} - tooltipText={Locale[AppSettings.interfaceLanguage].addLanguage} - unfilledLanguages={Object.keys(Languages).filter( - (l) => !activatedInputs.includes(l) - )} - addLanguageInput={(lang: string) => - setActivatedInputs((prev) => [...prev, lang]) - } - disableAddControl={ - activatedInputs.length === Object.keys(Languages).length - } - disableRemoveControl={activatedInputs.length === 1} - /> -
- {!error && ( - {`${ - Locale[AppSettings.interfaceLanguage].modalNewElemIRI - } + + ))} + { + const removeLang = _.last(activatedInputs); + setInput((prev) => ({ + ...prev, + [removeLang!]: "", + })); + setActivatedInputs((prev) => _.dropRight(prev, 1)); + }} + tooltipText={Locale[AppSettings.interfaceLanguage].addLanguage} + unfilledLanguages={Object.keys(Languages).filter( + (l) => !activatedInputs.includes(l) + )} + addLanguageInput={(lang: string) => + setActivatedInputs((prev) => [...prev, lang]) + } + disableAddControl={ + activatedInputs.length === Object.keys(Languages).length + } + disableRemoveControl={activatedInputs.length === 1} + /> +
+ {!error && ( + {`${ + Locale[AppSettings.interfaceLanguage].modalNewElemIRI + } ${createNewElemIRI( WorkspaceVocabularies[vocabulary].glossary, input[AppSettings.defaultLanguage] )}`} - )} - {error && {error}} -
- -

- {availableTropes.length === 0 && ( - - {Locale[AppSettings.interfaceLanguage].noExistingTropes} - - )} - {availableTropes.length > 0 && ( - setTropeSearch(e.target.value)} - placeholder={ - Locale[AppSettings.interfaceLanguage].searchExistingTropes - } - /> - )} -
-

- - {availableTropes - .filter((t) => - getLabelOrBlank( - WorkspaceTerms[t].labels, - props.selectedLanguage - ) - .toLowerCase() - .trim() - .includes(tropeSearch.toLowerCase().trim()) - ) - .sort() - .map((t) => ( - { - setSelectedTrope(t); - }} - > - {getLabelOrBlank( + )} + {error && {error}} + + +

+ {availableTropes.length === 0 && ( + + {Locale[AppSettings.interfaceLanguage].noExistingTropes} + + )} + {availableTropes.length > 0 && ( + setTropeSearch(e.target.value)} + placeholder={ + Locale[AppSettings.interfaceLanguage].searchExistingTropes + } + /> + )} +
+

+ + {availableTropes + .filter((t) => + getLabelOrBlank( WorkspaceTerms[t].labels, props.selectedLanguage - )} - - ))} - -
-
- {!selectedTrope && availableTropes.length > 0 && ( - - {Locale[AppSettings.interfaceLanguage].mustAssignTropeConfirm} - - )} -
- - - - - - + ) + .toLowerCase() + .trim() + .includes(tropeSearch.toLowerCase().trim()) + ) + .sort() + .map((t) => ( + { + event.preventDefault(); + setSelectedTrope(t); + }} + > + {getLabelOrBlank( + WorkspaceTerms[t].labels, + props.selectedLanguage + )} + + ))} +
+
+
+ {!selectedTrope && availableTropes.length > 0 && ( + + {Locale[AppSettings.interfaceLanguage].mustAssignTropeConfirm} + + )} +
+
+
+ + + + + ); }; diff --git a/src/panels/menu/modal/export/ExportModalTerms.tsx b/src/panels/menu/modal/export/ExportModalTerms.tsx index bf073fdb..a743c8d7 100644 --- a/src/panels/menu/modal/export/ExportModalTerms.tsx +++ b/src/panels/menu/modal/export/ExportModalTerms.tsx @@ -99,11 +99,9 @@ export const ExportModalTerms: React.FC = (props: Props) => { - {exportType === "CSV" && ( - - {Locale[AppSettings.interfaceLanguage].listExportAlert} - - )} + + {Locale[AppSettings.interfaceLanguage].listExportAlert} + {error && {error}} diff --git a/src/panels/menu/modal/export/ExportTermsCSV.ts b/src/panels/menu/modal/export/ExportTermsCSV.ts index ae343174..038cf9a1 100644 --- a/src/panels/menu/modal/export/ExportTermsCSV.ts +++ b/src/panels/menu/modal/export/ExportTermsCSV.ts @@ -1,91 +1,28 @@ -import { RepresentationConfig } from "./../../../../config/logic/RepresentationConfig"; -import { Representation } from "../../../../config/Enum"; +import { Locale } from "../../../../config/Locale"; import { - WorkspaceElements, AppSettings, - WorkspaceTerms, + Links, Stereotypes, WorkspaceLinks, } from "../../../../config/Variables"; +import { RepresentationConfig } from "../../../../config/logic/RepresentationConfig"; import { parsePrefix } from "../../../../function/FunctionEditVars"; -import { - isElementHidden, - isElementVisible, -} from "../../../../function/FunctionElem"; -import { - getLabelOrBlank, - getIntrinsicTropeTypeIDs, - getActiveToConnections, -} from "../../../../function/FunctionGetVars"; -import { processQuery } from "../../../../interface/TransactionInterface"; -import _ from "lodash"; -import { Locale } from "../../../../config/Locale"; import { filterEquivalent } from "../../../../function/FunctionEquivalents"; +import { getLabelOrBlank } from "../../../../function/FunctionGetVars"; +import { mvp1IRI, mvp2IRI } from "../../../../function/FunctionGraph"; +import { Representation } from "./../../../../config/Enum"; +import { WorkspaceTerms } from "./../../../../config/Variables"; +import { exportFunctions } from "./FunctionExportTerms"; export async function exportTermsCSV( exportLanguage: string ): Promise<[source: Blob, error: string]> { const fileID = "data:text/csv;charset=utf-8"; const carriageReturn = "\r\n"; - const diagramTerms = Object.keys(WorkspaceElements) - .filter( - (iri) => - WorkspaceElements[iri].active && - !isElementHidden(iri, AppSettings.selectedDiagram) && - isElementVisible( - WorkspaceTerms[iri].types, - Representation.COMPACT, - true - ) - ) - .sort(); - if (diagramTerms.length === 0) - return [ - new Blob(), - Locale[AppSettings.interfaceLanguage].listExportErrorNoTerms, - ]; - const query = [ - "PREFIX dct: ", - "select ?term ?source where {", - "?term dct:source ?source.", - `values ?term {<${_.uniq( - diagramTerms - .concat(diagramTerms.flatMap((t) => getIntrinsicTropeTypeIDs(t))) - .concat( - diagramTerms - .flatMap((t) => getActiveToConnections(t)) - .map((c) => WorkspaceLinks[c].iri) - ) - ).join("> <")}>}`, - "}", - ].join(` - `); const separator = ","; const compile = (arr: string[]) => arr.map((a) => '"' + a.replaceAll('"', '""') + '"').join(separator); - const result: { [key: string]: string } = await processQuery( - AppSettings.contextEndpoint, - query - ) - .then((response) => response.json()) - .then((data) => { - const r: { [key: string]: string } = {}; - for (const row of data.results.bindings) { - r[row.term.value] = row.source.value; - } - return r; - }) - .catch((e) => { - console.error(e); - return { error: e }; - }); - if (Object.keys(result).length === 0) - console.warn("None of the terms from this diagram have a dct:source."); - if ("error" in result) - return [ - new Blob(), - Locale[AppSettings.interfaceLanguage].listExportErrorNoConnection, - ]; + const rowDescriptionRow = compile([ "Subjekt/objekt", @@ -96,78 +33,172 @@ export async function exportTermsCSV( "Právní předpis (vč. ustanovení)", "Typ", ]) + carriageReturn; - const source = - rowDescriptionRow + - diagramTerms - .map((term) => { - const termType = WorkspaceTerms[term].types.find((f) => + const exportTerms = exportFunctions.constructExportTerms(); + if (Object.keys(exportTerms).length === 0) + return [ + new Blob(), + Locale[AppSettings.interfaceLanguage].listExportErrorNoTerms, + ]; + const sources: { [key: string]: string } = await exportFunctions.getSources( + exportTerms + ); + if (Object.keys(sources).length === 0) + console.warn("None of the terms from this diagram have a dct:source."); + if ("error" in sources) + return [ + new Blob(), + Locale[AppSettings.interfaceLanguage].listExportErrorNoConnection, + ]; + let output = rowDescriptionRow; + Object.keys(exportTerms).forEach((term) => { + const termLabel = getLabelOrBlank( + WorkspaceTerms[term].labels, + exportLanguage + ); + const termType = WorkspaceTerms[term].types.find((f) => + filterEquivalent( + RepresentationConfig[Representation.FULL].visibleStereotypes, + f + ) + ); + const superClassAttributes = exportFunctions.getSuperClassAttributes( + exportTerms, + term + ); + if (!termType) { + return [new Blob(), `Could not find type for term ${term}`]; + } + const termOutput = compile([ + termLabel, + WorkspaceTerms[term].definitions[exportLanguage], + term in sources ? sources[term] : "", + "", + "", + "", + getLabelOrBlank(Stereotypes[termType!].labels, exportLanguage), + ]); + const relationshipOutputs = exportTerms[term] + .concat(superClassAttributes) + .filter((r) => + WorkspaceTerms[r].types.includes( + parsePrefix("z-sgov-pojem", "typ-vztahu") + ) + ) + .map((link) => + compile([ + termLabel, + "", + "", + getLabelOrBlank(WorkspaceTerms[link].labels, exportLanguage), + WorkspaceTerms[link].definitions[exportLanguage], + link in sources ? sources[link] : "", + getLabelOrBlank( + Stereotypes[parsePrefix("z-sgov-pojem", "typ-vztahu")].labels, + exportLanguage + ), + ]) + ); + const eventOutputs = exportTerms[term] + .concat(superClassAttributes) + .filter((r) => + WorkspaceTerms[r].types.includes( + parsePrefix("z-sgov-pojem", "typ-události") + ) + ) + .map((link) => + compile([ + termLabel, + "", + "", + getLabelOrBlank(WorkspaceTerms[link].labels, exportLanguage), + WorkspaceTerms[link].definitions[exportLanguage], + link in sources ? sources[link] : "", + getLabelOrBlank( + Stereotypes[parsePrefix("z-sgov-pojem", "typ-události")].labels, + exportLanguage + ), + ]) + ); + const tropeOutputs = exportTerms[term] + .concat(superClassAttributes) + .filter((r) => + WorkspaceTerms[r].types.includes( + parsePrefix("z-sgov-pojem", "typ-vlastnosti") + ) + ) + .map((link) => + compile([ + termLabel, + "", + "", + getLabelOrBlank(WorkspaceTerms[link].labels, exportLanguage), + WorkspaceTerms[link].definitions[exportLanguage], + link in sources ? sources[link] : "", + getLabelOrBlank( + Stereotypes[parsePrefix("z-sgov-pojem", "typ-vlastnosti")].labels, + exportLanguage + ), + ]) + ); + output += termOutput + carriageReturn; + for (const o of eventOutputs) output += o + carriageReturn; + for (const o of tropeOutputs) output += o + carriageReturn; + for (const o of relationshipOutputs) output += o + carriageReturn; + if (termType === parsePrefix("z-sgov-pojem", "typ-vztahu")) { + const linkID = Object.keys(WorkspaceLinks).find( + (l) => WorkspaceLinks[l].iri === term + ); + if (linkID) { + const sourceIRI = WorkspaceLinks[linkID].source; + const targetIRI = WorkspaceLinks[linkID].target; + const sourceType = WorkspaceTerms[sourceIRI].types.find((f) => filterEquivalent( - RepresentationConfig[Representation.COMPACT].visibleStereotypes, + RepresentationConfig[Representation.FULL].visibleStereotypes, f ) ); - const termRow = - compile([ - getLabelOrBlank(WorkspaceTerms[term].labels, exportLanguage), - WorkspaceTerms[term].definitions[exportLanguage], - term in result ? result[term] : "", - "", - "", - "", - termType - ? getLabelOrBlank(Stereotypes[termType].labels, exportLanguage) - : "", - ]) + carriageReturn; - - const tropeRows = getIntrinsicTropeTypeIDs(term) - .map((trope) => + const targetType = WorkspaceTerms[targetIRI].types.find((f) => + filterEquivalent( + RepresentationConfig[Representation.FULL].visibleStereotypes, + f + ) + ); + if (sourceType) + output += compile([ + termLabel, "", "", - "", - getLabelOrBlank(WorkspaceTerms[trope].labels, exportLanguage), - WorkspaceTerms[trope].definitions[exportLanguage], - term in result ? result[term] : "", - getLabelOrBlank( - Stereotypes[parsePrefix("z-sgov-pojem", "typ-vlastnosti")] - .labels, + `${getLabelOrBlank( + Links[mvp1IRI].labels, exportLanguage - ), - ]) - ) - .join(carriageReturn); - - const relationshipRows = getActiveToConnections(term) - .filter((link) => WorkspaceLinks[link].iri in WorkspaceTerms) - .map((link) => - compile([ + )} ${getLabelOrBlank( + WorkspaceTerms[sourceIRI].labels, + exportLanguage + )}`, "", "", + getLabelOrBlank(Links[mvp1IRI].labels, exportLanguage), + ]) + carriageReturn; + if (targetType) + output += + compile([ + termLabel, "", - getLabelOrBlank( - WorkspaceTerms[WorkspaceLinks[link].iri].labels, - exportLanguage - ), - WorkspaceTerms[WorkspaceLinks[link].iri].definitions[ + "", + `${getLabelOrBlank( + Links[mvp2IRI].labels, exportLanguage - ], - term in result ? result[term] : "", - getLabelOrBlank( - Stereotypes[parsePrefix("z-sgov-pojem", "typ-vztahu")].labels, + )} ${getLabelOrBlank( + WorkspaceTerms[targetIRI].labels, exportLanguage - ), - ]) - ) - .join(carriageReturn); - - return ( - termRow + - tropeRows + - (tropeRows && relationshipRows ? carriageReturn : "") + - relationshipRows + - (tropeRows !== relationshipRows ? carriageReturn : "") - ); - }) - .join(carriageReturn); - return [new Blob([source], { type: fileID }), ""]; + )}`, + "", + "", + getLabelOrBlank(Links[mvp2IRI].labels, exportLanguage), + ]) + carriageReturn; + } + } + }); + return [new Blob([output], { type: fileID }), ""]; } diff --git a/src/panels/menu/modal/export/ExportTermsText.ts b/src/panels/menu/modal/export/ExportTermsText.ts index 6b21d00e..25a68696 100644 --- a/src/panels/menu/modal/export/ExportTermsText.ts +++ b/src/panels/menu/modal/export/ExportTermsText.ts @@ -1,65 +1,138 @@ import { Representation } from "../../../../config/Enum"; +import { Locale } from "../../../../config/Locale"; import { - WorkspaceElements, AppSettings, - WorkspaceTerms, + Links, WorkspaceLinks, + WorkspaceTerms, } from "../../../../config/Variables"; -import { - isElementHidden, - isElementVisible, -} from "../../../../function/FunctionElem"; -import { - getActiveToConnections, - getIntrinsicTropeTypeIDs, - getLabelOrBlank, -} from "../../../../function/FunctionGetVars"; +import { RepresentationConfig } from "../../../../config/logic/RepresentationConfig"; +import { parsePrefix } from "../../../../function/FunctionEditVars"; +import { filterEquivalent } from "../../../../function/FunctionEquivalents"; +import { getLabelOrBlank } from "../../../../function/FunctionGetVars"; +import { mvp1IRI, mvp2IRI } from "../../../../function/FunctionGraph"; +import { exportFunctions } from "./FunctionExportTerms"; export async function exportTermsText( exportLanguage: string ): Promise<[source: Blob, error: string]> { const fileID = "data:text/plain;charset=utf-8"; const carriageReturn = "\r\n"; - const diagramTerms = Object.keys(WorkspaceElements) - .filter( - (iri) => - WorkspaceElements[iri].active && - !isElementHidden(iri, AppSettings.selectedDiagram) && - isElementVisible(WorkspaceTerms[iri].types, Representation.COMPACT) - ) - .sort(); - const source = diagramTerms - .map((term) => { - const termName = - "- " + - getLabelOrBlank(WorkspaceTerms[term].labels, exportLanguage) + - carriageReturn; - const tropes = getIntrinsicTropeTypeIDs(term) - .map( - (trope) => - "\t - " + - getLabelOrBlank(WorkspaceTerms[trope].labels, exportLanguage) + const bullet = "- "; + const tab = "\t"; + const exportTerms = exportFunctions.constructExportTerms(); + if (Object.keys(exportTerms).length === 0) + return [ + new Blob(), + Locale[AppSettings.interfaceLanguage].listExportErrorNoTerms, + ]; + let output = ""; + Object.keys(exportTerms).forEach((term) => { + const termLabel = getLabelOrBlank( + WorkspaceTerms[term].labels, + exportLanguage + ); + const termType = WorkspaceTerms[term].types.find((f) => + filterEquivalent( + RepresentationConfig[Representation.FULL].visibleStereotypes, + f + ) + ); + if (!termType) { + return [new Blob(), `Could not find type for term ${term}`]; + } + const superClassAttributes = exportFunctions.getSuperClassAttributes( + exportTerms, + term + ); + const relationshipOutputs = exportTerms[term] + .concat(superClassAttributes) + .filter((r) => + WorkspaceTerms[r].types.includes( + parsePrefix("z-sgov-pojem", "typ-vztahu") ) - .join(carriageReturn); - const relationships = getActiveToConnections(term) - .filter((link) => WorkspaceLinks[link].iri in WorkspaceTerms) - .map( - (link) => - "\t - " + - getLabelOrBlank( - WorkspaceTerms[WorkspaceLinks[link].iri].labels, - exportLanguage - ) + ) + .map( + (link) => + tab + + bullet + + getLabelOrBlank(WorkspaceTerms[link].labels, exportLanguage) + ); + const eventOutputs = exportTerms[term] + .concat(superClassAttributes) + .filter((r) => + WorkspaceTerms[r].types.includes( + parsePrefix("z-sgov-pojem", "typ-události") ) - .join(carriageReturn); - return ( - termName + - tropes + - (tropes && relationships ? carriageReturn : "") + - relationships + - (tropes !== relationships ? carriageReturn : "") + ) + .map( + (link) => + tab + + bullet + + getLabelOrBlank(WorkspaceTerms[link].labels, exportLanguage) ); - }) - .join(carriageReturn); - return [new Blob([source], { type: fileID }), ""]; + const tropeOutputs = exportTerms[term] + .concat(superClassAttributes) + .filter((r) => + WorkspaceTerms[r].types.includes( + parsePrefix("z-sgov-pojem", "typ-vlastnosti") + ) + ) + .map( + (link) => + tab + + bullet + + getLabelOrBlank(WorkspaceTerms[link].labels, exportLanguage) + ); + output += bullet + termLabel + carriageReturn; + for (const o of eventOutputs) output += o + carriageReturn; + for (const o of tropeOutputs) output += o + carriageReturn; + for (const o of relationshipOutputs) output += o + carriageReturn; + if (termType === parsePrefix("z-sgov-pojem", "typ-vztahu")) { + const linkID = Object.keys(WorkspaceLinks).find( + (l) => WorkspaceLinks[l].iri === term + ); + if (linkID) { + const sourceIRI = WorkspaceLinks[linkID].source; + const targetIRI = WorkspaceLinks[linkID].target; + const sourceType = WorkspaceTerms[sourceIRI].types.find((f) => + filterEquivalent( + RepresentationConfig[Representation.FULL].visibleStereotypes, + f + ) + ); + const targetType = WorkspaceTerms[targetIRI].types.find((f) => + filterEquivalent( + RepresentationConfig[Representation.FULL].visibleStereotypes, + f + ) + ); + if (sourceType) + output += + tab + + bullet + + `${getLabelOrBlank( + Links[mvp1IRI].labels, + exportLanguage + )} ${getLabelOrBlank( + WorkspaceTerms[sourceIRI].labels, + exportLanguage + )}` + + carriageReturn; + if (targetType) + output += + tab + + bullet + + `${getLabelOrBlank( + Links[mvp2IRI].labels, + exportLanguage + )} ${getLabelOrBlank( + WorkspaceTerms[targetIRI].labels, + exportLanguage + )}` + + carriageReturn; + } + } + }); + return [new Blob([output], { type: fileID }), ""]; } diff --git a/src/panels/menu/modal/export/FunctionExportTerms.ts b/src/panels/menu/modal/export/FunctionExportTerms.ts new file mode 100644 index 00000000..1c20a4e3 --- /dev/null +++ b/src/panels/menu/modal/export/FunctionExportTerms.ts @@ -0,0 +1,143 @@ +import _ from "lodash"; +import { + AppSettings, + WorkspaceElements, + WorkspaceLinks, + WorkspaceTerms, +} from "../../../../config/Variables"; +import { processQuery } from "../../../../interface/TransactionInterface"; +import { Representation } from "../../../../config/Enum"; +import { parsePrefix } from "../../../../function/FunctionEditVars"; +import { + isElementHidden, + isElementVisible, +} from "../../../../function/FunctionElem"; +import { + getIntrinsicTropeTypeIDs, + getActiveToConnections, +} from "../../../../function/FunctionGetVars"; + +type exportTermObject = { [key: string]: string[] }; +export const exportFunctions: { + getSources: (terms: exportTermObject) => Promise<{ [key: string]: string }>; + getSuperClassAttributes: (terms: exportTermObject, term: string) => string[]; + constructExportTerms: () => exportTermObject; +} = { + getSources: async (terms) => { + const query = [ + "PREFIX dct: ", + "select ?term ?source where {", + "?term dct:source ?source.", + `values ?term {<${_.uniq( + Object.keys(terms).concat(_.flatten(Object.values(terms))) + ).join("> <")}>}`, + "}", + ].join(` +`); + return await processQuery(AppSettings.contextEndpoint, query) + .then((response) => response.json()) + .then((data) => { + const r: { [key: string]: string } = {}; + for (const row of data.results.bindings) { + r[row.term.value] = row.source.value; + } + return r; + }) + .catch((e) => { + console.error(e); + return { error: e }; + }); + }, + getSuperClassAttributes: (terms, term) => { + const stack = _.clone(WorkspaceTerms[term].subClassOf); + const attributes: string[] = []; + while (stack.length > 0) { + const superClass = stack.pop(); + if (superClass && superClass in terms) { + attributes.push(...terms[superClass]); + stack.push(...WorkspaceTerms[superClass].subClassOf); + } + } + return attributes; + }, + constructExportTerms: () => { + let exportTerms: exportTermObject = _.fromPairs( + Object.keys(WorkspaceTerms) + .filter( + (t) => + WorkspaceElements[t].active && + !isElementHidden(t, AppSettings.selectedDiagram) && + // support all representations + isElementVisible(WorkspaceTerms[t].types, Representation.FULL, true) + ) + .map((t) => [t, []]) + ); + const relationships: exportTermObject = _.fromPairs( + Object.keys(WorkspaceTerms) + .filter((c) => { + const id = Object.keys(WorkspaceLinks).find( + (l) => WorkspaceLinks[l].iri === c + ); + if (!id) return false; + else + return ( + WorkspaceTerms[c].types.includes( + parsePrefix("z-sgov-pojem", "typ-vztahu") + ) && + _.intersection(Object.keys(exportTerms), [ + WorkspaceLinks[id].source, + WorkspaceLinks[id].target, + ]).length > 0 + ); + }) + .map((t) => [t, []]) + ); + exportTerms = Object.assign(exportTerms, relationships); + // relationships, but only those that don't have tropes + const simpleRelationships = Object.keys(exportTerms).filter( + (c) => + WorkspaceTerms[c].types.includes( + parsePrefix("z-sgov-pojem", "typ-vztahu") + ) && getIntrinsicTropeTypeIDs(c).length === 0 + ); + // event types, but only those that don't have tropes + const simpleEvents = Object.keys(exportTerms).filter( + (t) => + WorkspaceTerms[t].types.includes( + parsePrefix("z-sgov-pojem", "typ-události") + ) && getIntrinsicTropeTypeIDs(t).length === 0 + ); + // we don't treat code lists any differently for now + Object.keys(exportTerms).forEach((t) => { + const activeToConnections = getActiveToConnections(t); + exportTerms[t].push(...getIntrinsicTropeTypeIDs(t)); + exportTerms[t].push( + ..._.intersection( + activeToConnections.map((c) => WorkspaceLinks[c].iri), + simpleRelationships + ) + ); + exportTerms[t].push( + ...simpleEvents.filter( + (e) => + activeToConnections.find((c) => WorkspaceLinks[c].target === e) || + getActiveToConnections(e).find( + (c) => WorkspaceLinks[c].target === t + ) + ) + ); + }); + exportTerms = _.fromPairs( + Object.entries(exportTerms).filter( + (t) => + !simpleRelationships.includes(t[0]) && + !simpleEvents.includes(t[0]) && + (WorkspaceTerms[t[0]].types.includes( + parsePrefix("z-sgov-pojem", "typ-objektu") + ) || + t[1].length > 0) + ) + ); + return exportTerms; + }, +}; diff --git a/src/queries/get/FetchQueries.ts b/src/queries/get/FetchQueries.ts index a5614569..3fa3aa65 100644 --- a/src/queries/get/FetchQueries.ts +++ b/src/queries/get/FetchQueries.ts @@ -24,7 +24,7 @@ import * as _ from "lodash"; function pushEquivalentClass(iri: string, equivalent: string) { const push = (iri: string, equivalent: string) => - _.flatten(_.compact([EquivalentClasses[iri], equivalent])); + _.flatten(_.compact([EquivalentClasses[iri], iri, equivalent])); EquivalentClasses[iri] = push(iri, equivalent); EquivalentClasses[equivalent] = push(equivalent, iri); for (const eq of EquivalentClasses[equivalent]) push(eq, equivalent); diff --git a/src/queries/update/UpdateConnectionQueries.ts b/src/queries/update/UpdateConnectionQueries.ts index b8e2f4e5..611f1c00 100644 --- a/src/queries/update/UpdateConnectionQueries.ts +++ b/src/queries/update/UpdateConnectionQueries.ts @@ -164,7 +164,7 @@ function updateDefaultLink(ids: string[]): string { const inserts: string[] = []; for (const vocabulary of Object.keys(vocabulariesAndTerms)) { - checkReadOnlyVocabulary(vocabulary); + if (WorkspaceVocabularies[vocabulary].readOnly) continue; const contextIRI = WorkspaceVocabularies[vocabulary].graph; const terms = vocabulariesAndTerms[vocabulary]; const insertConnections: Connection[] = []; diff --git a/src/queries/update/UpdateElementQueries.ts b/src/queries/update/UpdateElementQueries.ts index 06358350..7918284d 100644 --- a/src/queries/update/UpdateElementQueries.ts +++ b/src/queries/update/UpdateElementQueries.ts @@ -75,7 +75,6 @@ export function updateProjectElement(del: boolean, ...iris: string[]): string { qb.s(qb.i(iri), "og:name", qb.a(names), names.length > 0), qb.s(qb.i(iri), "og:active", qb.ll(WorkspaceElements[iri].active)), ]; - data[AppSettings.applicationContext].push(...ogStatements); Object.values(Diagrams) .filter((diag) => !diag.toBeDeleted) diff --git a/src/scss/diagram/DiagramApp.scss b/src/scss/diagram/DiagramApp.scss index d9b26292..0ca2e4cf 100644 --- a/src/scss/diagram/DiagramApp.scss +++ b/src/scss/diagram/DiagramApp.scss @@ -1,5 +1,4 @@ .mainView { display: flex; - height: calc(100vh - 112px) !important; width: auto; } diff --git a/src/scss/diagram/DiagramManager.scss b/src/scss/diagram/DiagramManager.scss index b6a22c78..1da26209 100644 --- a/src/scss/diagram/DiagramManager.scss +++ b/src/scss/diagram/DiagramManager.scss @@ -1,11 +1,13 @@ .diagramManager { background-color: #e3e3e3; + height: 100%; .row { height: 100%; } .vstack { + height: 100%; height: calc(100% - 30px); display: flex; flex-direction: column; @@ -16,7 +18,6 @@ .diagramList { border: 1px rgba(0, 0, 0, .125) solid; border-radius: .25rem; - height: 100%; flex: 1; background-color: white; overflow: auto; @@ -28,13 +29,37 @@ .col-6 { height: 100%; - overflow: auto; } .diagramDetail { flex: 1; display: flex; height: 100%; + + .card-body { + height: 100%; + } + + .container { + height: 100%; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: flex-start; + align-content: flex-start; + align-items: stretch; + + .diagramContent { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: flex-start; + align-content: flex-start; + align-items: stretch; + overflow-y: auto; + overflow-x: hidden; + } + } } .setPreview { diff --git a/src/scss/panels/DetailPanel.scss b/src/scss/panels/DetailPanel.scss index 0233dbba..4af780c0 100644 --- a/src/scss/panels/DetailPanel.scss +++ b/src/scss/panels/DetailPanel.scss @@ -115,7 +115,7 @@ word-wrap: break-word; background-color: white; float: right; - height: calc(100vh - 112px) !important; + height: fit-content; max-width: 600px; .spinnerFlex { @@ -147,9 +147,9 @@ .overlay { min-height: 33%; - overflow: hidden; + height: fit-content; position: absolute; - bottom: 0; + bottom: 1000; right: 0; border: 1px solid rgba(190, 190, 190, 0.75); background-color: white; @@ -162,7 +162,7 @@ transition: transform 0.25s ease; &.visible { - transform: translateY(0%); + transform: translateY(-100%); transition: transform 0.25s ease; } @@ -201,14 +201,10 @@ } } - - - .detailsFlex { display: flex; align-items: flex-start; flex-direction: column; - height: 100%; } .disabled {