aboutsummaryrefslogtreecommitdiffstats
path: root/language-web
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2021-07-01 12:31:07 +0200
committerLibravatar Kristóf Marussy <marussy@mit.bme.hu>2021-07-01 12:31:07 +0200
commit8595c9a22830b1baacc49bb694d70389b2539eba (patch)
treecb496cd34661a0d3ec4c9b5a333e948f24e437f4 /language-web
parentConvert to React app (diff)
downloadrefinery-8595c9a22830b1baacc49bb694d70389b2539eba.tar.gz
refinery-8595c9a22830b1baacc49bb694d70389b2539eba.tar.zst
refinery-8595c9a22830b1baacc49bb694d70389b2539eba.zip
Add material-ui and mobx integration
Diffstat (limited to 'language-web')
-rw-r--r--language-web/package-lock.json784
-rw-r--r--language-web/package.json5
-rw-r--r--language-web/src/main/css/index.scss64
-rw-r--r--language-web/src/main/js/App.jsx73
-rw-r--r--language-web/src/main/js/Navbar.jsx37
-rw-r--r--language-web/src/main/js/RootStore.jsx30
-rw-r--r--language-web/src/main/js/components/XtextCodeMirror.jsx32
-rw-r--r--language-web/src/main/js/editor/Editor.jsx50
-rw-r--r--language-web/src/main/js/editor/EditorButtons.jsx27
-rw-r--r--language-web/src/main/js/editor/EditorStore.jsx75
-rw-r--r--language-web/src/main/js/index.jsx21
-rw-r--r--language-web/webpack.config.js27
12 files changed, 1118 insertions, 107 deletions
diff --git a/language-web/package-lock.json b/language-web/package-lock.json
index 2b23e6aa..b237bfa2 100644
--- a/language-web/package-lock.json
+++ b/language-web/package-lock.json
@@ -8,8 +8,12 @@
8 "version": "1.0.0", 8 "version": "1.0.0",
9 "license": "EPL-2.0", 9 "license": "EPL-2.0",
10 "dependencies": { 10 "dependencies": {
11 "@material-ui/core": "^4.11.4",
12 "@material-ui/icons": "^4.11.2",
11 "codemirror": "^5.62.0", 13 "codemirror": "^5.62.0",
12 "jquery": "^3.6.0", 14 "jquery": "^3.6.0",
15 "mobx": "^6.3.2",
16 "mobx-react-lite": "^3.2.0",
13 "react": "^16.14.0", 17 "react": "^16.14.0",
14 "react-codemirror2": "^7.2.1", 18 "react-codemirror2": "^7.2.1",
15 "react-dom": "^16.14.0" 19 "react-dom": "^16.14.0"
@@ -28,6 +32,7 @@
28 "sass": "^1.35.1", 32 "sass": "^1.35.1",
29 "sass-loader": "^12.1.0", 33 "sass-loader": "^12.1.0",
30 "style-loader": "^3.0.0", 34 "style-loader": "^3.0.0",
35 "url-loader": "^4.1.1",
31 "webpack": "^5.41.0", 36 "webpack": "^5.41.0",
32 "webpack-cli": "^4.7.2", 37 "webpack-cli": "^4.7.2",
33 "webpack-dev-server": "^3.11.2", 38 "webpack-dev-server": "^3.11.2",
@@ -1602,7 +1607,6 @@
1602 "version": "7.14.6", 1607 "version": "7.14.6",
1603 "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", 1608 "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz",
1604 "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", 1609 "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==",
1605 "dev": true,
1606 "dependencies": { 1610 "dependencies": {
1607 "regenerator-runtime": "^0.13.4" 1611 "regenerator-runtime": "^0.13.4"
1608 }, 1612 },
@@ -1666,6 +1670,167 @@
1666 "node": ">=10.0.0" 1670 "node": ">=10.0.0"
1667 } 1671 }
1668 }, 1672 },
1673 "node_modules/@emotion/hash": {
1674 "version": "0.8.0",
1675 "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
1676 "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
1677 },
1678 "node_modules/@material-ui/core": {
1679 "version": "4.11.4",
1680 "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.11.4.tgz",
1681 "integrity": "sha512-oqb+lJ2Dl9HXI9orc6/aN8ZIAMkeThufA5iZELf2LQeBn2NtjVilF5D2w7e9RpntAzDb4jK5DsVhkfOvFY/8fg==",
1682 "dependencies": {
1683 "@babel/runtime": "^7.4.4",
1684 "@material-ui/styles": "^4.11.4",
1685 "@material-ui/system": "^4.11.3",
1686 "@material-ui/types": "5.1.0",
1687 "@material-ui/utils": "^4.11.2",
1688 "@types/react-transition-group": "^4.2.0",
1689 "clsx": "^1.0.4",
1690 "hoist-non-react-statics": "^3.3.2",
1691 "popper.js": "1.16.1-lts",
1692 "prop-types": "^15.7.2",
1693 "react-is": "^16.8.0 || ^17.0.0",
1694 "react-transition-group": "^4.4.0"
1695 },
1696 "engines": {
1697 "node": ">=8.0.0"
1698 },
1699 "funding": {
1700 "type": "opencollective",
1701 "url": "https://opencollective.com/material-ui"
1702 },
1703 "peerDependencies": {
1704 "@types/react": "^16.8.6 || ^17.0.0",
1705 "react": "^16.8.0 || ^17.0.0",
1706 "react-dom": "^16.8.0 || ^17.0.0"
1707 },
1708 "peerDependenciesMeta": {
1709 "@types/react": {
1710 "optional": true
1711 }
1712 }
1713 },
1714 "node_modules/@material-ui/icons": {
1715 "version": "4.11.2",
1716 "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.2.tgz",
1717 "integrity": "sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ==",
1718 "dependencies": {
1719 "@babel/runtime": "^7.4.4"
1720 },
1721 "engines": {
1722 "node": ">=8.0.0"
1723 },
1724 "peerDependencies": {
1725 "@material-ui/core": "^4.0.0",
1726 "@types/react": "^16.8.6 || ^17.0.0",
1727 "react": "^16.8.0 || ^17.0.0",
1728 "react-dom": "^16.8.0 || ^17.0.0"
1729 },
1730 "peerDependenciesMeta": {
1731 "@types/react": {
1732 "optional": true
1733 }
1734 }
1735 },
1736 "node_modules/@material-ui/styles": {
1737 "version": "4.11.4",
1738 "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.4.tgz",
1739 "integrity": "sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew==",
1740 "dependencies": {
1741 "@babel/runtime": "^7.4.4",
1742 "@emotion/hash": "^0.8.0",
1743 "@material-ui/types": "5.1.0",
1744 "@material-ui/utils": "^4.11.2",
1745 "clsx": "^1.0.4",
1746 "csstype": "^2.5.2",
1747 "hoist-non-react-statics": "^3.3.2",
1748 "jss": "^10.5.1",
1749 "jss-plugin-camel-case": "^10.5.1",
1750 "jss-plugin-default-unit": "^10.5.1",
1751 "jss-plugin-global": "^10.5.1",
1752 "jss-plugin-nested": "^10.5.1",
1753 "jss-plugin-props-sort": "^10.5.1",
1754 "jss-plugin-rule-value-function": "^10.5.1",
1755 "jss-plugin-vendor-prefixer": "^10.5.1",
1756 "prop-types": "^15.7.2"
1757 },
1758 "engines": {
1759 "node": ">=8.0.0"
1760 },
1761 "funding": {
1762 "type": "opencollective",
1763 "url": "https://opencollective.com/material-ui"
1764 },
1765 "peerDependencies": {
1766 "@types/react": "^16.8.6 || ^17.0.0",
1767 "react": "^16.8.0 || ^17.0.0",
1768 "react-dom": "^16.8.0 || ^17.0.0"
1769 },
1770 "peerDependenciesMeta": {
1771 "@types/react": {
1772 "optional": true
1773 }
1774 }
1775 },
1776 "node_modules/@material-ui/system": {
1777 "version": "4.11.3",
1778 "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.11.3.tgz",
1779 "integrity": "sha512-SY7otguNGol41Mu2Sg6KbBP1ZRFIbFLHGK81y4KYbsV2yIcaEPOmsCK6zwWlp+2yTV3J/VwT6oSBARtGIVdXPw==",
1780 "dependencies": {
1781 "@babel/runtime": "^7.4.4",
1782 "@material-ui/utils": "^4.11.2",
1783 "csstype": "^2.5.2",
1784 "prop-types": "^15.7.2"
1785 },
1786 "engines": {
1787 "node": ">=8.0.0"
1788 },
1789 "funding": {
1790 "type": "opencollective",
1791 "url": "https://opencollective.com/material-ui"
1792 },
1793 "peerDependencies": {
1794 "@types/react": "^16.8.6 || ^17.0.0",
1795 "react": "^16.8.0 || ^17.0.0",
1796 "react-dom": "^16.8.0 || ^17.0.0"
1797 },
1798 "peerDependenciesMeta": {
1799 "@types/react": {
1800 "optional": true
1801 }
1802 }
1803 },
1804 "node_modules/@material-ui/types": {
1805 "version": "5.1.0",
1806 "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz",
1807 "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==",
1808 "peerDependencies": {
1809 "@types/react": "*"
1810 },
1811 "peerDependenciesMeta": {
1812 "@types/react": {
1813 "optional": true
1814 }
1815 }
1816 },
1817 "node_modules/@material-ui/utils": {
1818 "version": "4.11.2",
1819 "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.2.tgz",
1820 "integrity": "sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==",
1821 "dependencies": {
1822 "@babel/runtime": "^7.4.4",
1823 "prop-types": "^15.7.2",
1824 "react-is": "^16.8.0 || ^17.0.0"
1825 },
1826 "engines": {
1827 "node": ">=8.0.0"
1828 },
1829 "peerDependencies": {
1830 "react": "^16.8.0 || ^17.0.0",
1831 "react-dom": "^16.8.0 || ^17.0.0"
1832 }
1833 },
1669 "node_modules/@nodelib/fs.scandir": { 1834 "node_modules/@nodelib/fs.scandir": {
1670 "version": "2.1.5", 1835 "version": "2.1.5",
1671 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1836 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -1771,6 +1936,11 @@
1771 "integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==", 1936 "integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==",
1772 "dev": true 1937 "dev": true
1773 }, 1938 },
1939 "node_modules/@types/prop-types": {
1940 "version": "15.7.3",
1941 "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
1942 "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw=="
1943 },
1774 "node_modules/@types/q": { 1944 "node_modules/@types/q": {
1775 "version": "1.5.4", 1945 "version": "1.5.4",
1776 "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", 1946 "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
@@ -1778,6 +1948,34 @@
1778 "dev": true, 1948 "dev": true,
1779 "optional": true 1949 "optional": true
1780 }, 1950 },
1951 "node_modules/@types/react": {
1952 "version": "17.0.11",
1953 "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz",
1954 "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==",
1955 "dependencies": {
1956 "@types/prop-types": "*",
1957 "@types/scheduler": "*",
1958 "csstype": "^3.0.2"
1959 }
1960 },
1961 "node_modules/@types/react-transition-group": {
1962 "version": "4.4.1",
1963 "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.1.tgz",
1964 "integrity": "sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ==",
1965 "dependencies": {
1966 "@types/react": "*"
1967 }
1968 },
1969 "node_modules/@types/react/node_modules/csstype": {
1970 "version": "3.0.8",
1971 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
1972 "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
1973 },
1974 "node_modules/@types/scheduler": {
1975 "version": "0.16.1",
1976 "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz",
1977 "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA=="
1978 },
1781 "node_modules/@webassemblyjs/ast": { 1979 "node_modules/@webassemblyjs/ast": {
1782 "version": "1.11.0", 1980 "version": "1.11.0",
1783 "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", 1981 "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
@@ -3580,6 +3778,14 @@
3580 "mimic-response": "^1.0.0" 3778 "mimic-response": "^1.0.0"
3581 } 3779 }
3582 }, 3780 },
3781 "node_modules/clsx": {
3782 "version": "1.1.1",
3783 "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
3784 "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==",
3785 "engines": {
3786 "node": ">=6"
3787 }
3788 },
3583 "node_modules/coa": { 3789 "node_modules/coa": {
3584 "version": "2.0.2", 3790 "version": "2.0.2",
3585 "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", 3791 "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
@@ -3949,6 +4155,15 @@
3949 "node": ">=0.10.0" 4155 "node": ">=0.10.0"
3950 } 4156 }
3951 }, 4157 },
4158 "node_modules/css-vendor": {
4159 "version": "2.0.8",
4160 "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz",
4161 "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==",
4162 "dependencies": {
4163 "@babel/runtime": "^7.8.3",
4164 "is-in-browser": "^1.0.2"
4165 }
4166 },
3952 "node_modules/css-what": { 4167 "node_modules/css-what": {
3953 "version": "5.0.1", 4168 "version": "5.0.1",
3954 "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", 4169 "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz",
@@ -4017,6 +4232,11 @@
4017 "node": ">=0.10.0" 4232 "node": ">=0.10.0"
4018 } 4233 }
4019 }, 4234 },
4235 "node_modules/csstype": {
4236 "version": "2.6.17",
4237 "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz",
4238 "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A=="
4239 },
4020 "node_modules/currently-unhandled": { 4240 "node_modules/currently-unhandled": {
4021 "version": "0.4.1", 4241 "version": "0.4.1",
4022 "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 4242 "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@@ -4629,6 +4849,20 @@
4629 "utila": "~0.4" 4849 "utila": "~0.4"
4630 } 4850 }
4631 }, 4851 },
4852 "node_modules/dom-helpers": {
4853 "version": "5.2.1",
4854 "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
4855 "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
4856 "dependencies": {
4857 "@babel/runtime": "^7.8.7",
4858 "csstype": "^3.0.2"
4859 }
4860 },
4861 "node_modules/dom-helpers/node_modules/csstype": {
4862 "version": "3.0.8",
4863 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
4864 "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
4865 },
4632 "node_modules/dom-serializer": { 4866 "node_modules/dom-serializer": {
4633 "version": "1.3.2", 4867 "version": "1.3.2",
4634 "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", 4868 "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
@@ -6236,6 +6470,14 @@
6236 "he": "bin/he" 6470 "he": "bin/he"
6237 } 6471 }
6238 }, 6472 },
6473 "node_modules/hoist-non-react-statics": {
6474 "version": "3.3.2",
6475 "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
6476 "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
6477 "dependencies": {
6478 "react-is": "^16.7.0"
6479 }
6480 },
6239 "node_modules/hosted-git-info": { 6481 "node_modules/hosted-git-info": {
6240 "version": "2.8.9", 6482 "version": "2.8.9",
6241 "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 6483 "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -6565,6 +6807,11 @@
6565 "node": ">=10.17.0" 6807 "node": ">=10.17.0"
6566 } 6808 }
6567 }, 6809 },
6810 "node_modules/hyphenate-style-name": {
6811 "version": "1.0.4",
6812 "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
6813 "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
6814 },
6568 "node_modules/iconv-lite": { 6815 "node_modules/iconv-lite": {
6569 "version": "0.4.24", 6816 "version": "0.4.24",
6570 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 6817 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -7396,6 +7643,11 @@
7396 "node": ">=0.10.0" 7643 "node": ">=0.10.0"
7397 } 7644 }
7398 }, 7645 },
7646 "node_modules/is-in-browser": {
7647 "version": "1.1.3",
7648 "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz",
7649 "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU="
7650 },
7399 "node_modules/is-jpg": { 7651 "node_modules/is-jpg": {
7400 "version": "2.0.0", 7652 "version": "2.0.0",
7401 "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", 7653 "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz",
@@ -7777,6 +8029,93 @@
7777 "node": ">=6" 8029 "node": ">=6"
7778 } 8030 }
7779 }, 8031 },
8032 "node_modules/jss": {
8033 "version": "10.7.1",
8034 "resolved": "https://registry.npmjs.org/jss/-/jss-10.7.1.tgz",
8035 "integrity": "sha512-5QN8JSVZR6cxpZNeGfzIjqPEP+ZJwJJfZbXmeABNdxiExyO+eJJDy6WDtqTf8SDKnbL5kZllEpAP71E/Lt7PXg==",
8036 "dependencies": {
8037 "@babel/runtime": "^7.3.1",
8038 "csstype": "^3.0.2",
8039 "is-in-browser": "^1.1.3",
8040 "tiny-warning": "^1.0.2"
8041 },
8042 "funding": {
8043 "type": "opencollective",
8044 "url": "https://opencollective.com/jss"
8045 }
8046 },
8047 "node_modules/jss-plugin-camel-case": {
8048 "version": "10.7.1",
8049 "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.7.1.tgz",
8050 "integrity": "sha512-+ioIyWvmAfgDCWXsQcW1NMnLBvRinOVFkSYJUgewQ6TynOcSj5F1bSU23B7z0p1iqK0PPHIU62xY1iNJD33WGA==",
8051 "dependencies": {
8052 "@babel/runtime": "^7.3.1",
8053 "hyphenate-style-name": "^1.0.3",
8054 "jss": "10.7.1"
8055 }
8056 },
8057 "node_modules/jss-plugin-default-unit": {
8058 "version": "10.7.1",
8059 "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.7.1.tgz",
8060 "integrity": "sha512-tW+dfYVNARBQb/ONzBwd8uyImigyzMiAEDai+AbH5rcHg5h3TtqhAkxx06iuZiT/dZUiFdSKlbe3q9jZGAPIwA==",
8061 "dependencies": {
8062 "@babel/runtime": "^7.3.1",
8063 "jss": "10.7.1"
8064 }
8065 },
8066 "node_modules/jss-plugin-global": {
8067 "version": "10.7.1",
8068 "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.7.1.tgz",
8069 "integrity": "sha512-FbxCnu44IkK/bw8X3CwZKmcAnJqjAb9LujlAc/aP0bMSdVa3/MugKQRyeQSu00uGL44feJJDoeXXiHOakBr/Zw==",
8070 "dependencies": {
8071 "@babel/runtime": "^7.3.1",
8072 "jss": "10.7.1"
8073 }
8074 },
8075 "node_modules/jss-plugin-nested": {
8076 "version": "10.7.1",
8077 "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.7.1.tgz",
8078 "integrity": "sha512-RNbICk7FlYKaJyv9tkMl7s6FFfeLA3ubNIFKvPqaWtADK0KUaPsPXVYBkAu4x1ItgsWx67xvReMrkcKA0jSXfA==",
8079 "dependencies": {
8080 "@babel/runtime": "^7.3.1",
8081 "jss": "10.7.1",
8082 "tiny-warning": "^1.0.2"
8083 }
8084 },
8085 "node_modules/jss-plugin-props-sort": {
8086 "version": "10.7.1",
8087 "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.7.1.tgz",
8088 "integrity": "sha512-eyd5FhA+J0QrpqXxO7YNF/HMSXXl4pB0EmUdY4vSJI4QG22F59vQ6AHtP6fSwhmBdQ98Qd9gjfO+RMxcE39P1A==",
8089 "dependencies": {
8090 "@babel/runtime": "^7.3.1",
8091 "jss": "10.7.1"
8092 }
8093 },
8094 "node_modules/jss-plugin-rule-value-function": {
8095 "version": "10.7.1",
8096 "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.7.1.tgz",
8097 "integrity": "sha512-fGAAImlbaHD3fXAHI3ooX6aRESOl5iBt3LjpVjxs9II5u9tzam7pqFUmgTcrip9VpRqYHn8J3gA7kCtm8xKwHg==",
8098 "dependencies": {
8099 "@babel/runtime": "^7.3.1",
8100 "jss": "10.7.1",
8101 "tiny-warning": "^1.0.2"
8102 }
8103 },
8104 "node_modules/jss-plugin-vendor-prefixer": {
8105 "version": "10.7.1",
8106 "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.7.1.tgz",
8107 "integrity": "sha512-1UHFmBn7hZNsHXTkLLOL8abRl8vi+D1EVzWD4WmLFj55vawHZfnH1oEz6TUf5Y61XHv0smdHabdXds6BgOXe3A==",
8108 "dependencies": {
8109 "@babel/runtime": "^7.3.1",
8110 "css-vendor": "^2.0.8",
8111 "jss": "10.7.1"
8112 }
8113 },
8114 "node_modules/jss/node_modules/csstype": {
8115 "version": "3.0.8",
8116 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
8117 "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
8118 },
7780 "node_modules/junk": { 8119 "node_modules/junk": {
7781 "version": "3.1.0", 8120 "version": "3.1.0",
7782 "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", 8121 "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
@@ -8330,6 +8669,36 @@
8330 "mkdirp": "bin/cmd.js" 8669 "mkdirp": "bin/cmd.js"
8331 } 8670 }
8332 }, 8671 },
8672 "node_modules/mobx": {
8673 "version": "6.3.2",
8674 "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.3.2.tgz",
8675 "integrity": "sha512-xGPM9dIE1qkK9Nrhevp0gzpsmELKU4MFUJRORW/jqxVFIHHWIoQrjDjL8vkwoJYY3C2CeVJqgvl38hgKTalTWg==",
8676 "funding": {
8677 "type": "opencollective",
8678 "url": "https://opencollective.com/mobx"
8679 }
8680 },
8681 "node_modules/mobx-react-lite": {
8682 "version": "3.2.0",
8683 "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.2.0.tgz",
8684 "integrity": "sha512-q5+UHIqYCOpBoFm/PElDuOhbcatvTllgRp3M1s+Hp5j0Z6XNgDbgqxawJ0ZAUEyKM8X1zs70PCuhAIzX1f4Q/g==",
8685 "funding": {
8686 "type": "opencollective",
8687 "url": "https://opencollective.com/mobx"
8688 },
8689 "peerDependencies": {
8690 "mobx": "^6.1.0",
8691 "react": "^16.8.0 || ^17"
8692 },
8693 "peerDependenciesMeta": {
8694 "react-dom": {
8695 "optional": true
8696 },
8697 "react-native": {
8698 "optional": true
8699 }
8700 }
8701 },
8333 "node_modules/mozjpeg": { 8702 "node_modules/mozjpeg": {
8334 "version": "7.1.0", 8703 "version": "7.1.0",
8335 "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.1.0.tgz", 8704 "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.1.0.tgz",
@@ -9241,6 +9610,11 @@
9241 "node": ">=8.12.0" 9610 "node": ">=8.12.0"
9242 } 9611 }
9243 }, 9612 },
9613 "node_modules/popper.js": {
9614 "version": "1.16.1-lts",
9615 "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz",
9616 "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA=="
9617 },
9244 "node_modules/portfinder": { 9618 "node_modules/portfinder": {
9245 "version": "1.0.28", 9619 "version": "1.0.28",
9246 "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", 9620 "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
@@ -9611,6 +9985,21 @@
9611 "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 9985 "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
9612 "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" 9986 "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
9613 }, 9987 },
9988 "node_modules/react-transition-group": {
9989 "version": "4.4.2",
9990 "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
9991 "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
9992 "dependencies": {
9993 "@babel/runtime": "^7.5.5",
9994 "dom-helpers": "^5.0.1",
9995 "loose-envify": "^1.4.0",
9996 "prop-types": "^15.6.2"
9997 },
9998 "peerDependencies": {
9999 "react": ">=16.6.0",
10000 "react-dom": ">=16.6.0"
10001 }
10002 },
9614 "node_modules/read-pkg": { 10003 "node_modules/read-pkg": {
9615 "version": "1.1.0", 10004 "version": "1.1.0",
9616 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 10005 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
@@ -9756,8 +10145,7 @@
9756 "node_modules/regenerator-runtime": { 10145 "node_modules/regenerator-runtime": {
9757 "version": "0.13.7", 10146 "version": "0.13.7",
9758 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", 10147 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
9759 "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", 10148 "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
9760 "dev": true
9761 }, 10149 },
9762 "node_modules/regenerator-transform": { 10150 "node_modules/regenerator-transform": {
9763 "version": "0.14.5", 10151 "version": "0.14.5",
@@ -11360,6 +11748,11 @@
11360 "node": ">=0.10.0" 11748 "node": ">=0.10.0"
11361 } 11749 }
11362 }, 11750 },
11751 "node_modules/tiny-warning": {
11752 "version": "1.0.3",
11753 "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
11754 "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
11755 },
11363 "node_modules/to-buffer": { 11756 "node_modules/to-buffer": {
11364 "version": "1.1.1", 11757 "version": "1.1.1",
11365 "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", 11758 "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
@@ -11692,6 +12085,65 @@
11692 "querystring": "0.2.0" 12085 "querystring": "0.2.0"
11693 } 12086 }
11694 }, 12087 },
12088 "node_modules/url-loader": {
12089 "version": "4.1.1",
12090 "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
12091 "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==",
12092 "dev": true,
12093 "dependencies": {
12094 "loader-utils": "^2.0.0",
12095 "mime-types": "^2.1.27",
12096 "schema-utils": "^3.0.0"
12097 },
12098 "engines": {
12099 "node": ">= 10.13.0"
12100 },
12101 "funding": {
12102 "type": "opencollective",
12103 "url": "https://opencollective.com/webpack"
12104 },
12105 "peerDependencies": {
12106 "file-loader": "*",
12107 "webpack": "^4.0.0 || ^5.0.0"
12108 },
12109 "peerDependenciesMeta": {
12110 "file-loader": {
12111 "optional": true
12112 }
12113 }
12114 },
12115 "node_modules/url-loader/node_modules/loader-utils": {
12116 "version": "2.0.0",
12117 "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
12118 "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
12119 "dev": true,
12120 "dependencies": {
12121 "big.js": "^5.2.2",
12122 "emojis-list": "^3.0.0",
12123 "json5": "^2.1.2"
12124 },
12125 "engines": {
12126 "node": ">=8.9.0"
12127 }
12128 },
12129 "node_modules/url-loader/node_modules/schema-utils": {
12130 "version": "3.0.0",
12131 "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
12132 "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
12133 "dev": true,
12134 "dependencies": {
12135 "@types/json-schema": "^7.0.6",
12136 "ajv": "^6.12.5",
12137 "ajv-keywords": "^3.5.2"
12138 },
12139 "engines": {
12140 "node": ">= 10.13.0"
12141 },
12142 "funding": {
12143 "type": "opencollective",
12144 "url": "https://opencollective.com/webpack"
12145 }
12146 },
11695 "node_modules/url-parse": { 12147 "node_modules/url-parse": {
11696 "version": "1.5.1", 12148 "version": "1.5.1",
11697 "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", 12149 "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz",
@@ -13795,7 +14247,6 @@
13795 "version": "7.14.6", 14247 "version": "7.14.6",
13796 "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", 14248 "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz",
13797 "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", 14249 "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==",
13798 "dev": true,
13799 "requires": { 14250 "requires": {
13800 "regenerator-runtime": "^0.13.4" 14251 "regenerator-runtime": "^0.13.4"
13801 } 14252 }
@@ -13844,6 +14295,88 @@
13844 "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", 14295 "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==",
13845 "dev": true 14296 "dev": true
13846 }, 14297 },
14298 "@emotion/hash": {
14299 "version": "0.8.0",
14300 "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
14301 "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
14302 },
14303 "@material-ui/core": {
14304 "version": "4.11.4",
14305 "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.11.4.tgz",
14306 "integrity": "sha512-oqb+lJ2Dl9HXI9orc6/aN8ZIAMkeThufA5iZELf2LQeBn2NtjVilF5D2w7e9RpntAzDb4jK5DsVhkfOvFY/8fg==",
14307 "requires": {
14308 "@babel/runtime": "^7.4.4",
14309 "@material-ui/styles": "^4.11.4",
14310 "@material-ui/system": "^4.11.3",
14311 "@material-ui/types": "5.1.0",
14312 "@material-ui/utils": "^4.11.2",
14313 "@types/react-transition-group": "^4.2.0",
14314 "clsx": "^1.0.4",
14315 "hoist-non-react-statics": "^3.3.2",
14316 "popper.js": "1.16.1-lts",
14317 "prop-types": "^15.7.2",
14318 "react-is": "^16.8.0 || ^17.0.0",
14319 "react-transition-group": "^4.4.0"
14320 }
14321 },
14322 "@material-ui/icons": {
14323 "version": "4.11.2",
14324 "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.2.tgz",
14325 "integrity": "sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ==",
14326 "requires": {
14327 "@babel/runtime": "^7.4.4"
14328 }
14329 },
14330 "@material-ui/styles": {
14331 "version": "4.11.4",
14332 "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.4.tgz",
14333 "integrity": "sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew==",
14334 "requires": {
14335 "@babel/runtime": "^7.4.4",
14336 "@emotion/hash": "^0.8.0",
14337 "@material-ui/types": "5.1.0",
14338 "@material-ui/utils": "^4.11.2",
14339 "clsx": "^1.0.4",
14340 "csstype": "^2.5.2",
14341 "hoist-non-react-statics": "^3.3.2",
14342 "jss": "^10.5.1",
14343 "jss-plugin-camel-case": "^10.5.1",
14344 "jss-plugin-default-unit": "^10.5.1",
14345 "jss-plugin-global": "^10.5.1",
14346 "jss-plugin-nested": "^10.5.1",
14347 "jss-plugin-props-sort": "^10.5.1",
14348 "jss-plugin-rule-value-function": "^10.5.1",
14349 "jss-plugin-vendor-prefixer": "^10.5.1",
14350 "prop-types": "^15.7.2"
14351 }
14352 },
14353 "@material-ui/system": {
14354 "version": "4.11.3",
14355 "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.11.3.tgz",
14356 "integrity": "sha512-SY7otguNGol41Mu2Sg6KbBP1ZRFIbFLHGK81y4KYbsV2yIcaEPOmsCK6zwWlp+2yTV3J/VwT6oSBARtGIVdXPw==",
14357 "requires": {
14358 "@babel/runtime": "^7.4.4",
14359 "@material-ui/utils": "^4.11.2",
14360 "csstype": "^2.5.2",
14361 "prop-types": "^15.7.2"
14362 }
14363 },
14364 "@material-ui/types": {
14365 "version": "5.1.0",
14366 "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz",
14367 "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==",
14368 "requires": {}
14369 },
14370 "@material-ui/utils": {
14371 "version": "4.11.2",
14372 "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.2.tgz",
14373 "integrity": "sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==",
14374 "requires": {
14375 "@babel/runtime": "^7.4.4",
14376 "prop-types": "^15.7.2",
14377 "react-is": "^16.8.0 || ^17.0.0"
14378 }
14379 },
13847 "@nodelib/fs.scandir": { 14380 "@nodelib/fs.scandir": {
13848 "version": "2.1.5", 14381 "version": "2.1.5",
13849 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 14382 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -13937,6 +14470,11 @@
13937 "integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==", 14470 "integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==",
13938 "dev": true 14471 "dev": true
13939 }, 14472 },
14473 "@types/prop-types": {
14474 "version": "15.7.3",
14475 "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
14476 "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw=="
14477 },
13940 "@types/q": { 14478 "@types/q": {
13941 "version": "1.5.4", 14479 "version": "1.5.4",
13942 "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", 14480 "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
@@ -13944,6 +14482,36 @@
13944 "dev": true, 14482 "dev": true,
13945 "optional": true 14483 "optional": true
13946 }, 14484 },
14485 "@types/react": {
14486 "version": "17.0.11",
14487 "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz",
14488 "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==",
14489 "requires": {
14490 "@types/prop-types": "*",
14491 "@types/scheduler": "*",
14492 "csstype": "^3.0.2"
14493 },
14494 "dependencies": {
14495 "csstype": {
14496 "version": "3.0.8",
14497 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
14498 "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
14499 }
14500 }
14501 },
14502 "@types/react-transition-group": {
14503 "version": "4.4.1",
14504 "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.1.tgz",
14505 "integrity": "sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ==",
14506 "requires": {
14507 "@types/react": "*"
14508 }
14509 },
14510 "@types/scheduler": {
14511 "version": "0.16.1",
14512 "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz",
14513 "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA=="
14514 },
13947 "@webassemblyjs/ast": { 14515 "@webassemblyjs/ast": {
13948 "version": "1.11.0", 14516 "version": "1.11.0",
13949 "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", 14517 "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
@@ -15393,6 +15961,11 @@
15393 "mimic-response": "^1.0.0" 15961 "mimic-response": "^1.0.0"
15394 } 15962 }
15395 }, 15963 },
15964 "clsx": {
15965 "version": "1.1.1",
15966 "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
15967 "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA=="
15968 },
15396 "coa": { 15969 "coa": {
15397 "version": "2.0.2", 15970 "version": "2.0.2",
15398 "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", 15971 "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
@@ -15698,6 +16271,15 @@
15698 } 16271 }
15699 } 16272 }
15700 }, 16273 },
16274 "css-vendor": {
16275 "version": "2.0.8",
16276 "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz",
16277 "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==",
16278 "requires": {
16279 "@babel/runtime": "^7.8.3",
16280 "is-in-browser": "^1.0.2"
16281 }
16282 },
15701 "css-what": { 16283 "css-what": {
15702 "version": "5.0.1", 16284 "version": "5.0.1",
15703 "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", 16285 "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz",
@@ -15747,6 +16329,11 @@
15747 } 16329 }
15748 } 16330 }
15749 }, 16331 },
16332 "csstype": {
16333 "version": "2.6.17",
16334 "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz",
16335 "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A=="
16336 },
15750 "currently-unhandled": { 16337 "currently-unhandled": {
15751 "version": "0.4.1", 16338 "version": "0.4.1",
15752 "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 16339 "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@@ -16235,6 +16822,22 @@
16235 "utila": "~0.4" 16822 "utila": "~0.4"
16236 } 16823 }
16237 }, 16824 },
16825 "dom-helpers": {
16826 "version": "5.2.1",
16827 "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
16828 "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
16829 "requires": {
16830 "@babel/runtime": "^7.8.7",
16831 "csstype": "^3.0.2"
16832 },
16833 "dependencies": {
16834 "csstype": {
16835 "version": "3.0.8",
16836 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
16837 "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
16838 }
16839 }
16840 },
16238 "dom-serializer": { 16841 "dom-serializer": {
16239 "version": "1.3.2", 16842 "version": "1.3.2",
16240 "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", 16843 "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
@@ -17486,6 +18089,14 @@
17486 "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 18089 "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
17487 "dev": true 18090 "dev": true
17488 }, 18091 },
18092 "hoist-non-react-statics": {
18093 "version": "3.3.2",
18094 "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
18095 "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
18096 "requires": {
18097 "react-is": "^16.7.0"
18098 }
18099 },
17489 "hosted-git-info": { 18100 "hosted-git-info": {
17490 "version": "2.8.9", 18101 "version": "2.8.9",
17491 "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 18102 "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -17758,6 +18369,11 @@
17758 "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 18369 "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
17759 "dev": true 18370 "dev": true
17760 }, 18371 },
18372 "hyphenate-style-name": {
18373 "version": "1.0.4",
18374 "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
18375 "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
18376 },
17761 "iconv-lite": { 18377 "iconv-lite": {
17762 "version": "0.4.24", 18378 "version": "0.4.24",
17763 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 18379 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -18382,6 +18998,11 @@
18382 "is-extglob": "^2.1.1" 18998 "is-extglob": "^2.1.1"
18383 } 18999 }
18384 }, 19000 },
19001 "is-in-browser": {
19002 "version": "1.1.3",
19003 "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz",
19004 "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU="
19005 },
18385 "is-jpg": { 19006 "is-jpg": {
18386 "version": "2.0.0", 19007 "version": "2.0.0",
18387 "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", 19008 "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz",
@@ -18657,6 +19278,91 @@
18657 "minimist": "^1.2.5" 19278 "minimist": "^1.2.5"
18658 } 19279 }
18659 }, 19280 },
19281 "jss": {
19282 "version": "10.7.1",
19283 "resolved": "https://registry.npmjs.org/jss/-/jss-10.7.1.tgz",
19284 "integrity": "sha512-5QN8JSVZR6cxpZNeGfzIjqPEP+ZJwJJfZbXmeABNdxiExyO+eJJDy6WDtqTf8SDKnbL5kZllEpAP71E/Lt7PXg==",
19285 "requires": {
19286 "@babel/runtime": "^7.3.1",
19287 "csstype": "^3.0.2",
19288 "is-in-browser": "^1.1.3",
19289 "tiny-warning": "^1.0.2"
19290 },
19291 "dependencies": {
19292 "csstype": {
19293 "version": "3.0.8",
19294 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
19295 "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
19296 }
19297 }
19298 },
19299 "jss-plugin-camel-case": {
19300 "version": "10.7.1",
19301 "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.7.1.tgz",
19302 "integrity": "sha512-+ioIyWvmAfgDCWXsQcW1NMnLBvRinOVFkSYJUgewQ6TynOcSj5F1bSU23B7z0p1iqK0PPHIU62xY1iNJD33WGA==",
19303 "requires": {
19304 "@babel/runtime": "^7.3.1",
19305 "hyphenate-style-name": "^1.0.3",
19306 "jss": "10.7.1"
19307 }
19308 },
19309 "jss-plugin-default-unit": {
19310 "version": "10.7.1",
19311 "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.7.1.tgz",
19312 "integrity": "sha512-tW+dfYVNARBQb/ONzBwd8uyImigyzMiAEDai+AbH5rcHg5h3TtqhAkxx06iuZiT/dZUiFdSKlbe3q9jZGAPIwA==",
19313 "requires": {
19314 "@babel/runtime": "^7.3.1",
19315 "jss": "10.7.1"
19316 }
19317 },
19318 "jss-plugin-global": {
19319 "version": "10.7.1",
19320 "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.7.1.tgz",
19321 "integrity": "sha512-FbxCnu44IkK/bw8X3CwZKmcAnJqjAb9LujlAc/aP0bMSdVa3/MugKQRyeQSu00uGL44feJJDoeXXiHOakBr/Zw==",
19322 "requires": {
19323 "@babel/runtime": "^7.3.1",
19324 "jss": "10.7.1"
19325 }
19326 },
19327 "jss-plugin-nested": {
19328 "version": "10.7.1",
19329 "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.7.1.tgz",
19330 "integrity": "sha512-RNbICk7FlYKaJyv9tkMl7s6FFfeLA3ubNIFKvPqaWtADK0KUaPsPXVYBkAu4x1ItgsWx67xvReMrkcKA0jSXfA==",
19331 "requires": {
19332 "@babel/runtime": "^7.3.1",
19333 "jss": "10.7.1",
19334 "tiny-warning": "^1.0.2"
19335 }
19336 },
19337 "jss-plugin-props-sort": {
19338 "version": "10.7.1",
19339 "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.7.1.tgz",
19340 "integrity": "sha512-eyd5FhA+J0QrpqXxO7YNF/HMSXXl4pB0EmUdY4vSJI4QG22F59vQ6AHtP6fSwhmBdQ98Qd9gjfO+RMxcE39P1A==",
19341 "requires": {
19342 "@babel/runtime": "^7.3.1",
19343 "jss": "10.7.1"
19344 }
19345 },
19346 "jss-plugin-rule-value-function": {
19347 "version": "10.7.1",
19348 "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.7.1.tgz",
19349 "integrity": "sha512-fGAAImlbaHD3fXAHI3ooX6aRESOl5iBt3LjpVjxs9II5u9tzam7pqFUmgTcrip9VpRqYHn8J3gA7kCtm8xKwHg==",
19350 "requires": {
19351 "@babel/runtime": "^7.3.1",
19352 "jss": "10.7.1",
19353 "tiny-warning": "^1.0.2"
19354 }
19355 },
19356 "jss-plugin-vendor-prefixer": {
19357 "version": "10.7.1",
19358 "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.7.1.tgz",
19359 "integrity": "sha512-1UHFmBn7hZNsHXTkLLOL8abRl8vi+D1EVzWD4WmLFj55vawHZfnH1oEz6TUf5Y61XHv0smdHabdXds6BgOXe3A==",
19360 "requires": {
19361 "@babel/runtime": "^7.3.1",
19362 "css-vendor": "^2.0.8",
19363 "jss": "10.7.1"
19364 }
19365 },
18660 "junk": { 19366 "junk": {
18661 "version": "3.1.0", 19367 "version": "3.1.0",
18662 "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", 19368 "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
@@ -19078,6 +19784,17 @@
19078 "minimist": "^1.2.5" 19784 "minimist": "^1.2.5"
19079 } 19785 }
19080 }, 19786 },
19787 "mobx": {
19788 "version": "6.3.2",
19789 "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.3.2.tgz",
19790 "integrity": "sha512-xGPM9dIE1qkK9Nrhevp0gzpsmELKU4MFUJRORW/jqxVFIHHWIoQrjDjL8vkwoJYY3C2CeVJqgvl38hgKTalTWg=="
19791 },
19792 "mobx-react-lite": {
19793 "version": "3.2.0",
19794 "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.2.0.tgz",
19795 "integrity": "sha512-q5+UHIqYCOpBoFm/PElDuOhbcatvTllgRp3M1s+Hp5j0Z6XNgDbgqxawJ0ZAUEyKM8X1zs70PCuhAIzX1f4Q/g==",
19796 "requires": {}
19797 },
19081 "mozjpeg": { 19798 "mozjpeg": {
19082 "version": "7.1.0", 19799 "version": "7.1.0",
19083 "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.1.0.tgz", 19800 "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.1.0.tgz",
@@ -19762,6 +20479,11 @@
19762 } 20479 }
19763 } 20480 }
19764 }, 20481 },
20482 "popper.js": {
20483 "version": "1.16.1-lts",
20484 "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz",
20485 "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA=="
20486 },
19765 "portfinder": { 20487 "portfinder": {
19766 "version": "1.0.28", 20488 "version": "1.0.28",
19767 "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", 20489 "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
@@ -20042,6 +20764,17 @@
20042 "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 20764 "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
20043 "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" 20765 "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
20044 }, 20766 },
20767 "react-transition-group": {
20768 "version": "4.4.2",
20769 "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
20770 "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
20771 "requires": {
20772 "@babel/runtime": "^7.5.5",
20773 "dom-helpers": "^5.0.1",
20774 "loose-envify": "^1.4.0",
20775 "prop-types": "^15.6.2"
20776 }
20777 },
20045 "read-pkg": { 20778 "read-pkg": {
20046 "version": "1.1.0", 20779 "version": "1.1.0",
20047 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 20780 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
@@ -20164,8 +20897,7 @@
20164 "regenerator-runtime": { 20897 "regenerator-runtime": {
20165 "version": "0.13.7", 20898 "version": "0.13.7",
20166 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", 20899 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
20167 "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", 20900 "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
20168 "dev": true
20169 }, 20901 },
20170 "regenerator-transform": { 20902 "regenerator-transform": {
20171 "version": "0.14.5", 20903 "version": "0.14.5",
@@ -21456,6 +22188,11 @@
21456 "dev": true, 22188 "dev": true,
21457 "optional": true 22189 "optional": true
21458 }, 22190 },
22191 "tiny-warning": {
22192 "version": "1.0.3",
22193 "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
22194 "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
22195 },
21459 "to-buffer": { 22196 "to-buffer": {
21460 "version": "1.1.1", 22197 "version": "1.1.1",
21461 "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", 22198 "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
@@ -21728,6 +22465,41 @@
21728 } 22465 }
21729 } 22466 }
21730 }, 22467 },
22468 "url-loader": {
22469 "version": "4.1.1",
22470 "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
22471 "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==",
22472 "dev": true,
22473 "requires": {
22474 "loader-utils": "^2.0.0",
22475 "mime-types": "^2.1.27",
22476 "schema-utils": "^3.0.0"
22477 },
22478 "dependencies": {
22479 "loader-utils": {
22480 "version": "2.0.0",
22481 "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
22482 "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
22483 "dev": true,
22484 "requires": {
22485 "big.js": "^5.2.2",
22486 "emojis-list": "^3.0.0",
22487 "json5": "^2.1.2"
22488 }
22489 },
22490 "schema-utils": {
22491 "version": "3.0.0",
22492 "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
22493 "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
22494 "dev": true,
22495 "requires": {
22496 "@types/json-schema": "^7.0.6",
22497 "ajv": "^6.12.5",
22498 "ajv-keywords": "^3.5.2"
22499 }
22500 }
22501 }
22502 },
21731 "url-parse": { 22503 "url-parse": {
21732 "version": "1.5.1", 22504 "version": "1.5.1",
21733 "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", 22505 "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz",
diff --git a/language-web/package.json b/language-web/package.json
index fa5998c6..e8d0a32f 100644
--- a/language-web/package.json
+++ b/language-web/package.json
@@ -32,14 +32,19 @@
32 "sass": "^1.35.1", 32 "sass": "^1.35.1",
33 "sass-loader": "^12.1.0", 33 "sass-loader": "^12.1.0",
34 "style-loader": "^3.0.0", 34 "style-loader": "^3.0.0",
35 "url-loader": "^4.1.1",
35 "webpack": "^5.41.0", 36 "webpack": "^5.41.0",
36 "webpack-cli": "^4.7.2", 37 "webpack-cli": "^4.7.2",
37 "webpack-dev-server": "^3.11.2", 38 "webpack-dev-server": "^3.11.2",
38 "webpack-subresource-integrity": "^5.0.0-alpha.5" 39 "webpack-subresource-integrity": "^5.0.0-alpha.5"
39 }, 40 },
40 "dependencies": { 41 "dependencies": {
42 "@material-ui/core": "^4.11.4",
43 "@material-ui/icons": "^4.11.2",
41 "codemirror": "^5.62.0", 44 "codemirror": "^5.62.0",
42 "jquery": "^3.6.0", 45 "jquery": "^3.6.0",
46 "mobx": "^6.3.2",
47 "mobx-react-lite": "^3.2.0",
43 "react": "^16.14.0", 48 "react": "^16.14.0",
44 "react-codemirror2": "^7.2.1", 49 "react-codemirror2": "^7.2.1",
45 "react-dom": "^16.14.0" 50 "react-dom": "^16.14.0"
diff --git a/language-web/src/main/css/index.scss b/language-web/src/main/css/index.scss
index e788bbd1..62109a2f 100644
--- a/language-web/src/main/css/index.scss
+++ b/language-web/src/main/css/index.scss
@@ -3,70 +3,6 @@
3 3
4@import 'xtext/xtext-codemirror'; 4@import 'xtext/xtext-codemirror';
5 5
6body {
7 width: 100%;
8 height: 100%;
9 overflow: hidden;
10 font: 16px Helvetica,sans-serif;
11}
12
13a {
14 color: #22a;
15 text-decoration: none;
16}
17
18a:hover {
19 text-decoration: underline;
20}
21
22.container {
23 display: block;
24 position: absolute;
25 top: 0;
26 bottom: 0;
27 left: 0;
28 right: 0;
29 margin: 24px 24px 36px 24px;
30}
31
32.header {
33 display: block;
34 position: absolute;
35 top: 0;
36 left: 0;
37 right: 0;
38 padding: 16px;
39 background: #dbdbdb;
40 border-radius: 16px;
41 color: #383838;
42}
43
44.header h1 {
45 font-size: 36px;
46 margin: 0;
47}
48
49.content {
50 display: block;
51 position: absolute;
52 top: 108px;
53 bottom: 0;
54 left: 0;
55 width: 100%;
56 box-shadow: 0 0 8px rgba(80, 10, 98, .25), 0 10px 24px rgba(80, 10, 98, .35);
57 border-radius: 16px;
58}
59
60.xtext-editor {
61 display: block;
62 position: absolute;
63 top: 16px;
64 bottom: 16px;
65 left: 16px;
66 right: 16px;
67 border: 1px solid #999;
68}
69
70.problem-class { 6.problem-class {
71 color: #005032; 7 color: #005032;
72} 8}
diff --git a/language-web/src/main/js/App.jsx b/language-web/src/main/js/App.jsx
new file mode 100644
index 00000000..61ded943
--- /dev/null
+++ b/language-web/src/main/js/App.jsx
@@ -0,0 +1,73 @@
1import React from 'react';
2import { makeStyles } from '@material-ui/core/styles';
3import AppBar from '@material-ui/core/AppBar';
4import Box from '@material-ui/core/Box';
5import Fab from '@material-ui/core/Fab';
6import IconButton from '@material-ui/core/IconButton';
7import Toolbar from '@material-ui/core/Toolbar';
8import Typography from '@material-ui/core/Typography';
9import MenuIcon from '@material-ui/icons/Menu';
10import PlayArrowIcon from '@material-ui/icons/PlayArrow';
11
12import Editor from './editor/Editor';
13import EditorButtons from './editor/EditorButtons';
14
15const useStyles = makeStyles(theme => ({
16 menuButton: {
17 marginRight: theme.spacing(2),
18 },
19 title: {
20 flexGrow: 1,
21 },
22 fab: {
23 position: 'fixed',
24 right: theme.spacing(3),
25 bottom: theme.spacing(3),
26 zIndex: 1000,
27 },
28 extendedIcon: {
29 marginRight: theme.spacing(1),
30 }
31}));
32
33export default () => {
34 const classes = useStyles();
35
36 return (
37 <>
38 <AppBar
39 position='static'
40 >
41 <Toolbar>
42 <IconButton
43 edge='start'
44 className={classes.menuButton}
45 color='inherit'
46 aria-label='menu'
47 >
48 <MenuIcon />
49 </IconButton>
50 <Typography
51 variant='h6'
52 component='h1'
53 className={classes.title}
54 >
55 GraphSolver
56 </Typography>
57 </Toolbar>
58 </AppBar>
59 <Box>
60 <EditorButtons/>
61 </Box>
62 <Editor/>
63 <Fab
64 variant='extended'
65 color='secondary'
66 className={classes.fab}
67 >
68 <PlayArrowIcon className={classes.extendedIcon}/>
69 Generate
70 </Fab>
71 </>
72 );
73};
diff --git a/language-web/src/main/js/Navbar.jsx b/language-web/src/main/js/Navbar.jsx
new file mode 100644
index 00000000..cf1bc54f
--- /dev/null
+++ b/language-web/src/main/js/Navbar.jsx
@@ -0,0 +1,37 @@
1import React from 'react';
2import { Button, Navbar, Nav } from 'react-bootstrap';
3import { FaGithub, FaPlayCircle } from 'react-icons/fa';
4
5export default () => (
6 <Navbar
7 variant='secondary'
8 className='px-2'
9 >
10 <Navbar.Brand>GraphSolver</Navbar.Brand>
11 <Navbar.Toggle aria-controls='basic-navbar-nav'/>
12 <Navbar.Collapse id='basic-navbar-nav'>
13 <Nav className="me-auto">
14 <Nav.Link
15 href="https://github.com/viatra/VIATRA-Generator#readme"
16 >
17 About
18 </Nav.Link>
19 <Nav.Link
20 href="https://github.com/viatra/VIATRA-Generator/wiki"
21 >
22 Getting started
23 </Nav.Link>
24 <Nav.Link
25 href="https://github.com/viatra/VIATRA-Generator"
26 >
27 <FaGithub/> Github
28 </Nav.Link>
29 </Nav>
30 <Button
31 variant='success'
32 >
33 <FaPlayCircle/> Generate
34 </Button>
35 </Navbar.Collapse>
36 </Navbar>
37);
diff --git a/language-web/src/main/js/RootStore.jsx b/language-web/src/main/js/RootStore.jsx
new file mode 100644
index 00000000..1ee2823d
--- /dev/null
+++ b/language-web/src/main/js/RootStore.jsx
@@ -0,0 +1,30 @@
1import { makeAutoObservable } from 'mobx';
2import React, { createContext, useContext } from 'react';
3
4import EditorStore from './editor/EditorStore';
5
6export default class RootStore {
7 editorStore;
8
9 constructor() {
10 this.editorStore = new EditorStore();
11 makeAutoObservable(this);
12 }
13}
14
15const StoreContext = createContext(undefined);
16
17export const RootStoreProvider = ({ children, rootStore }) => (
18 <StoreContext.Provider value={rootStore}>
19 {children}
20 </StoreContext.Provider>
21);
22
23/** @returns {RootStore} */
24export const useRootStore = () => {
25 const rootStore = useContext(StoreContext);
26 if (!rootStore) {
27 throw new Error('useRootStore must be used within RootStoreProvider');
28 }
29 return rootStore;
30};
diff --git a/language-web/src/main/js/components/XtextCodeMirror.jsx b/language-web/src/main/js/components/XtextCodeMirror.jsx
deleted file mode 100644
index 75a20daa..00000000
--- a/language-web/src/main/js/components/XtextCodeMirror.jsx
+++ /dev/null
@@ -1,32 +0,0 @@
1import React, { useCallback, useState } from 'react';
2import { Controlled as CodeMirror } from 'react-codemirror2';
3import 'mode-problem';
4import { createServices, removeServices } from 'xtext/xtext-codemirror';
5
6export default function XtextCodeMirror({ initialValue }) {
7 const [value, setValue] = useState(initialValue);
8
9 const codeMirrorOptions = {
10 mode: 'xtext/problem',
11 indentUnit: 2,
12 };
13
14 const xtextOptions = {
15 xtextLang: 'problem',
16 enableFormattingAction: true,
17 };
18
19 const onBeforeChange = useCallback((_editor, _data, newValue) => {
20 setValue(newValue);
21 }, [setValue]);
22
23 return (
24 <CodeMirror
25 value={value}
26 options={codeMirrorOptions}
27 editorDidMount={editor => createServices(editor, xtextOptions)}
28 editorWillUnmount={removeServices}
29 onBeforeChange={onBeforeChange}
30 />
31 );
32};
diff --git a/language-web/src/main/js/editor/Editor.jsx b/language-web/src/main/js/editor/Editor.jsx
new file mode 100644
index 00000000..c4b2e183
--- /dev/null
+++ b/language-web/src/main/js/editor/Editor.jsx
@@ -0,0 +1,50 @@
1import { observer } from 'mobx-react-lite';
2import 'mode-problem';
3import React, { useCallback } from 'react';
4import { Controlled as CodeMirror } from 'react-codemirror2';
5import { createServices, removeServices } from 'xtext/xtext-codemirror';
6
7import { useRootStore } from '../RootStore';
8
9export default observer(() => {
10 const editorStore = useRootStore().editorStore;
11
12 const codeMirrorOptions = {
13 mode: 'xtext/problem',
14 indentUnit: 2,
15 };
16
17 const xtextOptions = {
18 xtextLang: 'problem',
19 enableFormattingAction: true,
20 }
21
22 const editorDidMount = useCallback((editor) => {
23 createServices(editor, xtextOptions);
24 editorStore.updateEditor(editor);
25 }, [editorStore]);
26
27 const editorWillUnmount = useCallback((editor) => {
28 editorStore.editor = null;
29 removeServices(editor);
30 }, [editorStore]);
31
32 const onBeforeChange = useCallback((_editor, _data, value) => {
33 editorStore.updateValue(value);
34 }, [editorStore]);
35
36 const onChange = useCallback((_editor, _data, _value) => {
37 editorStore.reportChanged();
38 }, [editorStore]);
39
40 return (
41 <CodeMirror
42 value={editorStore.value}
43 options={codeMirrorOptions}
44 editorDidMount={editorDidMount}
45 editorWillUnmount={editorWillUnmount}
46 onBeforeChange={onBeforeChange}
47 onChange={onChange}
48 />
49 );
50});
diff --git a/language-web/src/main/js/editor/EditorButtons.jsx b/language-web/src/main/js/editor/EditorButtons.jsx
new file mode 100644
index 00000000..b9f0d076
--- /dev/null
+++ b/language-web/src/main/js/editor/EditorButtons.jsx
@@ -0,0 +1,27 @@
1import { observer } from 'mobx-react-lite';
2import React from 'react';
3import IconButton from '@material-ui/core/IconButton';
4import RedoIcon from '@material-ui/icons/Redo';
5import UndoIcon from '@material-ui/icons/Undo';
6
7import { useRootStore } from '../RootStore';
8
9export default observer(() => {
10 const editorStore = useRootStore().editorStore;
11 return (
12 <>
13 <IconButton
14 disabled={!editorStore.canUndo}
15 onClick={() => editorStore.undo()}
16 >
17 <UndoIcon fontSize='small'/>
18 </IconButton>
19 <IconButton
20 disabled={!editorStore.canRedo}
21 onClick={() => editorStore.redo()}
22 >
23 <RedoIcon fontSize='small'/>
24 </IconButton>
25 </>
26 );
27});
diff --git a/language-web/src/main/js/editor/EditorStore.jsx b/language-web/src/main/js/editor/EditorStore.jsx
new file mode 100644
index 00000000..9c286c28
--- /dev/null
+++ b/language-web/src/main/js/editor/EditorStore.jsx
@@ -0,0 +1,75 @@
1import CodeMirror from 'codemirror';
2import { createAtom, makeAutoObservable, observable } from 'mobx';
3
4export default class EditorStore {
5 atom;
6 /** @type {CodeMirror} */
7 editor = null;
8 /** @type {string} */
9 value = '';
10
11 constructor() {
12 this.atom = createAtom('EditorStore');
13 makeAutoObservable(this, {
14 atom: false,
15 editor: observable.ref,
16 });
17 }
18
19 /**
20 * Attaches a new CodeMirror instance.
21 *
22 * The store will node subscribe to any CodeMirror events. Instead,
23 * the editor component should subscribe to them and relay them to the store.
24 *
25 * @param {CodeMirror} newEditor The new CodeMirror instance
26 */
27 updateEditor(newEditor) {
28 this.editor = newEditor;
29 }
30
31 /**
32 * Updates the contents of the editor.
33 *
34 * @param {string} newValue The new contents of the editor
35 */
36 updateValue(newValue) {
37 this.value = newValue;
38 }
39
40 reportChanged() {
41 this.atom.reportChanged();
42 }
43
44 /**
45 * @returns {boolean} `true` if there is history to undo
46 */
47 get canUndo() {
48 this.atom.reportObserved();
49 if (!this.editor) {
50 return false;
51 }
52 const { undo: undoSize } = this.editor.historySize();
53 return undoSize > 0;
54 }
55
56 undo() {
57 this.editor.undo();
58 }
59
60 /**
61 * @returns {boolean} `true` if there is history to redo
62 */
63 get canRedo() {
64 this.atom.reportObserved();
65 if (!this.editor) {
66 return false;
67 }
68 const { redo: redoSize } = this.editor.historySize();
69 return redoSize > 0;
70 }
71
72 redo() {
73 this.editor.redo();
74 }
75}
diff --git a/language-web/src/main/js/index.jsx b/language-web/src/main/js/index.jsx
index 48c0baeb..17e6aef2 100644
--- a/language-web/src/main/js/index.jsx
+++ b/language-web/src/main/js/index.jsx
@@ -1,7 +1,11 @@
1import React from 'react'; 1import React from 'react';
2import { render } from 'react-dom'; 2import { render } from 'react-dom';
3import { createMuiTheme } from '@material-ui/core/styles';
4import { ThemeProvider } from '@material-ui/styles';
3 5
4import XtextCodeMirror from "./components/XtextCodeMirror"; 6import App from './App';
7import CssBaseline from '@material-ui/core/CssBaseline';
8import RootStore, { RootStoreProvider } from './RootStore';
5 9
6import '../css/index.scss'; 10import '../css/index.scss';
7 11
@@ -38,6 +42,19 @@ age(bob, bobAge).
38 42
39scope Family = 1, Person += 5..10. 43scope Family = 1, Person += 5..10.
40`; 44`;
41const app = <XtextCodeMirror initialValue={initialValue}/>; 45
46const rootStore = new RootStore();
47rootStore.editorStore.updateValue(initialValue);
48
49const theme = createMuiTheme();
50
51const app = (
52 <ThemeProvider theme={theme}>
53 <CssBaseline/>
54 <RootStoreProvider rootStore={rootStore}>
55 <App/>
56 </RootStoreProvider>
57 </ThemeProvider>
58)
42 59
43render(app, document.getElementById('app')); 60render(app, document.getElementById('app'));
diff --git a/language-web/webpack.config.js b/language-web/webpack.config.js
index a40b647f..5d3db7dd 100644
--- a/language-web/webpack.config.js
+++ b/language-web/webpack.config.js
@@ -40,9 +40,25 @@ module.exports = {
40 loader: 'babel-loader', 40 loader: 'babel-loader',
41 options: { 41 options: {
42 presets: [ 42 presets: [
43 ['@babel/preset-env', { targets: 'defaults' }], 43 [
44 '@babel/preset-env',
45 {
46 targets: 'defaults',
47 },
48 ],
44 '@babel/preset-react', 49 '@babel/preset-react',
45 ], 50 ],
51 plugins: [
52 [
53 '@babel/plugin-proposal-class-properties',
54 {
55 loose: false,
56 },
57 ],
58 ],
59 assumptions: {
60 'setPublicClassFields': false,
61 },
46 }, 62 },
47 }, 63 },
48 { 64 {
@@ -59,15 +75,20 @@ module.exports = {
59 ] 75 ]
60 }, 76 },
61 { 77 {
62 test: /\.(gif|png|jpe?g|svg)$/i, 78 test: /\.(gif|png|jpe?g|svg?)$/i,
63 use: [ 79 use: [
64 'file-loader',
65 { 80 {
66 loader: 'image-webpack-loader', 81 loader: 'image-webpack-loader',
67 options: { 82 options: {
68 disable: true, 83 disable: true,
69 } 84 }
70 }, 85 },
86 {
87 loader: 'url-loader',
88 options: {
89 limit: 256,
90 },
91 },
71 ], 92 ],
72 }, 93 },
73 ], 94 ],