aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'frontend')
-rw-r--r--frontend/package-lock.json344
-rw-r--r--frontend/src/app/_elements/column-table/column-table.component.css5
-rw-r--r--frontend/src/app/_elements/folder/folder.component.html2
-rw-r--r--frontend/src/app/_elements/folder/folder.component.ts31
-rw-r--r--frontend/src/app/_elements/form-model/form-model.component.css13
-rw-r--r--frontend/src/app/_elements/form-model/form-model.component.html362
-rw-r--r--frontend/src/app/_elements/form-model/form-model.component.ts14
-rw-r--r--frontend/src/app/_elements/graph/graph.component.ts3
-rw-r--r--frontend/src/app/_pages/experiment/experiment.component.html2
-rw-r--r--frontend/src/styles/layout.css13
10 files changed, 569 insertions, 220 deletions
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index f38fb979..bf1f8dfd 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -459,7 +459,10 @@
"version": "13.2.5",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.2.5.tgz",
"integrity": "sha512-Xd8xj2Z0ilA4TJAM/JkTtA1CAa6SuebFsEEvabHCRO5MDvtdsIUP91ADUZIqDHy7qe6Qift/rAVN2PXxT2aaNA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"@babel/core": "^7.17.2",
"chokidar": "^3.0.0",
@@ -489,7 +492,10 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
"integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.0"
},
@@ -501,7 +507,10 @@
"version": "7.17.5",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz",
"integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.16.7",
@@ -531,7 +540,10 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"bin": {
"semver": "bin/semver.js"
}
@@ -540,7 +552,10 @@
"version": "7.17.3",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz",
"integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"@babel/types": "^7.17.0",
"jsesc": "^2.5.1",
@@ -554,7 +569,10 @@
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"engines": {
"node": ">=0.10.0"
}
@@ -794,7 +812,10 @@
"version": "7.16.12",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz",
"integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"@babel/code-frame": "^7.16.7",
"@babel/generator": "^7.16.8",
@@ -824,7 +845,10 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"bin": {
"semver": "bin/semver.js"
}
@@ -833,7 +857,10 @@
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"engines": {
"node": ">=0.10.0"
}
@@ -842,7 +869,10 @@
"version": "7.16.8",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz",
"integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"@babel/types": "^7.16.8",
"jsesc": "^2.5.1",
@@ -856,7 +886,10 @@
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"engines": {
"node": ">=0.10.0"
}
@@ -3522,7 +3555,10 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -3796,7 +3832,10 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"engines": {
"node": ">=8"
}
@@ -3893,7 +3932,10 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -4088,7 +4130,10 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"funding": [
{
"type": "individual",
@@ -5125,7 +5170,10 @@
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
"integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"engines": {
"node": ">= 0.6.0"
}
@@ -5290,7 +5338,10 @@
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"optional": true,
"dependencies": {
"iconv-lite": "^0.6.2"
@@ -5300,7 +5351,10 @@
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"optional": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
@@ -6109,7 +6163,10 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -6286,7 +6343,10 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"hasInstallScript": true,
"optional": true,
"os": [
@@ -6396,7 +6456,10 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -6989,7 +7052,10 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -7043,7 +7109,10 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"engines": {
"node": ">=0.10.0"
}
@@ -7060,7 +7129,10 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -7087,7 +7159,10 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"engines": {
"node": ">=0.12.0"
}
@@ -7953,7 +8028,10 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"yallist": "^4.0.0"
},
@@ -7965,7 +8043,10 @@
"version": "0.25.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
"integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"sourcemap-codec": "^1.4.4"
}
@@ -8595,7 +8676,10 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"engines": {
"node": ">=0.10.0"
}
@@ -9291,7 +9375,10 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"engines": {
"node": ">=8.6"
},
@@ -10106,7 +10193,10 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -10412,7 +10502,11 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+<<<<<<< HEAD
"dev": true
+=======
+ "devOptional": true
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"node_modules/sass": {
"version": "1.49.0",
@@ -10542,7 +10636,10 @@
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -10927,8 +11024,12 @@
"node_modules/sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+<<<<<<< HEAD
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"dev": true
+=======
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"node_modules/spdy": {
"version": "4.0.2",
@@ -11340,7 +11441,10 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"dependencies": {
"is-number": "^7.0.0"
},
@@ -11432,7 +11536,10 @@
"version": "4.5.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
"integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -12108,8 +12215,12 @@
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+<<<<<<< HEAD
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
+=======
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"node_modules/yaml": {
"version": "1.10.2",
@@ -12444,7 +12555,10 @@
"version": "13.2.5",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.2.5.tgz",
"integrity": "sha512-Xd8xj2Z0ilA4TJAM/JkTtA1CAa6SuebFsEEvabHCRO5MDvtdsIUP91ADUZIqDHy7qe6Qift/rAVN2PXxT2aaNA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"@babel/core": "^7.17.2",
"chokidar": "^3.0.0",
@@ -12462,7 +12576,10 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
"integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"@jridgewell/trace-mapping": "^0.3.0"
}
@@ -12471,7 +12588,10 @@
"version": "7.17.5",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz",
"integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.16.7",
@@ -12493,8 +12613,12 @@
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+<<<<<<< HEAD
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
+=======
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
}
}
},
@@ -12502,7 +12626,10 @@
"version": "7.17.3",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz",
"integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"@babel/types": "^7.17.0",
"jsesc": "^2.5.1",
@@ -12512,8 +12639,12 @@
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+<<<<<<< HEAD
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
+=======
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
}
}
},
@@ -12658,7 +12789,10 @@
"version": "7.16.12",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz",
"integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"@babel/code-frame": "^7.16.7",
"@babel/generator": "^7.16.8",
@@ -12680,14 +12814,22 @@
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+<<<<<<< HEAD
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
+=======
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+<<<<<<< HEAD
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
+=======
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
}
}
},
@@ -12695,7 +12837,10 @@
"version": "7.16.8",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz",
"integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"@babel/types": "^7.16.8",
"jsesc": "^2.5.1",
@@ -12705,8 +12850,12 @@
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+<<<<<<< HEAD
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
+=======
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
}
}
},
@@ -13867,7 +14016,12 @@
"ws": {
"version": "7.5.7",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
+<<<<<<< HEAD
"integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A=="
+=======
+ "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
}
}
},
@@ -13883,7 +14037,12 @@
"version": "13.2.5",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.5.tgz",
"integrity": "sha512-obiPvwPe+UJUO8cfNbBxukLKG30F+gLF5/erexwklRknJzS4KP8ciH2on6XlTuXUahpDjbO0pffugFE2I/IszQ==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"@nodelib/fs.scandir": {
"version": "2.1.5",
@@ -14609,7 +14768,12 @@
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
"integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"adjust-sourcemap-loader": {
"version": "4.0.0",
@@ -14737,7 +14901,10 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -14935,8 +15102,12 @@
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+<<<<<<< HEAD
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
+=======
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"bl": {
"version": "4.1.0",
@@ -15007,7 +15178,12 @@
"bootstrap": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz",
+<<<<<<< HEAD
"integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q=="
+=======
+ "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==",
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"brace-expansion": {
"version": "1.1.11",
@@ -15022,7 +15198,10 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"fill-range": "^7.0.1"
}
@@ -15165,7 +15344,10 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -15193,7 +15375,12 @@
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz",
"integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"clean-stack": {
"version": "2.2.0",
@@ -15680,7 +15867,12 @@
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz",
"integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"css-select": {
"version": "4.2.1",
@@ -15946,8 +16138,12 @@
"dependency-graph": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
+<<<<<<< HEAD
"integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
"dev": true
+=======
+ "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"destroy": {
"version": "1.0.4",
@@ -16082,7 +16278,10 @@
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"optional": true,
"requires": {
"iconv-lite": "^0.6.2"
@@ -16092,7 +16291,10 @@
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"optional": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
@@ -16621,7 +16823,10 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"to-regex-range": "^5.0.1"
}
@@ -16749,7 +16954,10 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"optional": true
},
"function-bind": {
@@ -16825,7 +17033,10 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"is-glob": "^4.0.1"
}
@@ -17082,7 +17293,12 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"ieee754": {
"version": "1.2.1",
@@ -17279,7 +17495,10 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"binary-extensions": "^2.0.0"
}
@@ -17311,8 +17530,12 @@
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+<<<<<<< HEAD
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
+=======
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"is-fullwidth-code-point": {
"version": "3.0.0",
@@ -17323,7 +17546,10 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"is-extglob": "^2.1.1"
}
@@ -17343,8 +17569,12 @@
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+<<<<<<< HEAD
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
+=======
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"is-path-cwd": {
"version": "2.2.0",
@@ -17768,7 +17998,12 @@
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz",
"integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"karma-source-map-support": {
"version": "1.4.0",
@@ -17990,7 +18225,10 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"yallist": "^4.0.0"
}
@@ -17999,7 +18237,10 @@
"version": "0.25.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
"integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"sourcemap-codec": "^1.4.4"
}
@@ -18465,8 +18706,12 @@
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+<<<<<<< HEAD
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
+=======
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"normalize-range": {
"version": "0.1.2",
@@ -18999,8 +19244,12 @@
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+<<<<<<< HEAD
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
+=======
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"pify": {
"version": "2.3.0",
@@ -19116,7 +19365,12 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz",
"integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"postcss-custom-properties": {
"version": "12.1.4",
@@ -19186,13 +19440,23 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz",
"integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"postcss-gap-properties": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz",
"integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"postcss-image-set-function": {
"version": "4.0.6",
@@ -19218,7 +19482,12 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz",
"integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"postcss-lab-function": {
"version": "4.1.1",
@@ -19245,19 +19514,34 @@
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz",
"integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"postcss-media-minmax": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz",
"integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"postcss-modules-extract-imports": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
"integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"postcss-modules-local-by-default": {
"version": "4.0.0",
@@ -19301,13 +19585,23 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz",
"integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"postcss-page-break": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz",
"integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"postcss-place": {
"version": "7.0.4",
@@ -19372,7 +19666,12 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz",
"integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"postcss-selector-not": {
"version": "5.0.0",
@@ -19546,7 +19845,10 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"picomatch": "^2.2.1"
}
@@ -19778,7 +20080,11 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+<<<<<<< HEAD
"dev": true
+=======
+ "devOptional": true
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"sass": {
"version": "1.49.0",
@@ -19834,7 +20140,12 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -19863,7 +20174,10 @@
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"lru-cache": "^6.0.0"
}
@@ -20179,8 +20493,12 @@
"sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+<<<<<<< HEAD
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"dev": true
+=======
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"spdy": {
"version": "4.0.2",
@@ -20396,7 +20714,12 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -20470,7 +20793,10 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+<<<<<<< HEAD
"dev": true,
+=======
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
"requires": {
"is-number": "^7.0.0"
}
@@ -20539,8 +20865,12 @@
"typescript": {
"version": "4.5.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
+<<<<<<< HEAD
"integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
"dev": true
+=======
+ "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"ua-parser-js": {
"version": "0.7.31",
@@ -20749,7 +21079,12 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -20995,7 +21330,12 @@
"version": "8.2.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
+<<<<<<< HEAD
"dev": true
+=======
+ "dev": true,
+ "requires": {}
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"xlsx": {
"version": "0.18.5",
@@ -21019,8 +21359,12 @@
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+<<<<<<< HEAD
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
+=======
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+>>>>>>> 2d10f9892404aa82020965cf91178c34b93bdfce
},
"yaml": {
"version": "1.10.2",
diff --git a/frontend/src/app/_elements/column-table/column-table.component.css b/frontend/src/app/_elements/column-table/column-table.component.css
index aee2314e..0477b7be 100644
--- a/frontend/src/app/_elements/column-table/column-table.component.css
+++ b/frontend/src/app/_elements/column-table/column-table.component.css
@@ -189,8 +189,9 @@ table ::ng-deep .mat-form-field-wrapper {
}
.hidden {
- visibility: hidden;
- height: 1px;
+ /*visibility: hidden;
+ height: 1px;*/
+ display: none;
}
.bottom-button {
diff --git a/frontend/src/app/_elements/folder/folder.component.html b/frontend/src/app/_elements/folder/folder.component.html
index e77f837e..113db616 100644
--- a/frontend/src/app/_elements/folder/folder.component.html
+++ b/frontend/src/app/_elements/folder/folder.component.html
@@ -66,7 +66,7 @@
<mat-icon>zoom_out_map</mat-icon>
</button>
</div>
- <app-form-model [forExperiment]="forExperiment" [model]="fileToDisplay" [ngClass]="{'form-hidden': type != FolderType.Model}"></app-form-model>
+ <app-form-model [ngClass]="{'form-hidden': type != FolderType.Model}"></app-form-model>
<app-form-dataset [ngClass]="{'form-hidden': type != FolderType.Dataset}"></app-form-dataset>
</div>
<div [ngClass]="{'form-hidden' : !listView}" class="list-view">
diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts
index 39412826..d8a3f037 100644
--- a/frontend/src/app/_elements/folder/folder.component.ts
+++ b/frontend/src/app/_elements/folder/folder.component.ts
@@ -10,6 +10,7 @@ import Experiment from 'src/app/_data/Experiment';
import { ExperimentsService } from 'src/app/_services/experiments.service';
import { PredictorsService } from 'src/app/_services/predictors.service';
import { SignalRService } from 'src/app/_services/signal-r.service';
+import { FormModelComponent } from '../form-model/form-model.component';
@Component({
selector: 'app-folder',
@@ -18,15 +19,16 @@ import { SignalRService } from 'src/app/_services/signal-r.service';
})
export class FolderComponent implements AfterViewInit {
- @ViewChild(FormDatasetComponent) formDataset?: FormDatasetComponent;
+ @ViewChild(FormDatasetComponent) formDataset!: FormDatasetComponent;
+ @ViewChild(FormModelComponent) formModel!: FormModelComponent;
@Input() folderName: string = 'Moji podaci';
@Input() files!: FolderFile[]
- newFile!: Dataset | Model;
+ newFile?: Dataset | Model;
@Input() type: FolderType = FolderType.Dataset;
- @Input() forExperiment?: Experiment;
+ @Input() forExperiment!: Experiment;
@Input() startingTab: TabType = TabType.MyDatasets;
newFileSelected: boolean = true;
@@ -43,12 +45,11 @@ export class FolderComponent implements AfterViewInit {
searchTerm: string = '';
constructor(private datasetsService: DatasetsService, private experimentsService: ExperimentsService, private modelsService: ModelsService, private predictorsService: PredictorsService, private signalRService: SignalRService) {
- //PLACEHOLDER
- this.forExperiment = new Experiment();
- this.forExperiment.inputColumns = ['kolona1', 'kol2', '???', 'test'];
+ this.tabsToShow.forEach(tab => this.folders[tab] = []);
- this.folders[TabType.File] = [];
- this.folders[TabType.NewFile] = [];
+ this.files = [];
+ this.filteredFiles = []
+ this.selectTab(this.startingTab);
}
ngAfterViewInit(): void {
@@ -64,11 +65,11 @@ export class FolderComponent implements AfterViewInit {
}
}
- _initialized = false;
-
displayFile() {
if (this.type == FolderType.Dataset)
- this.formDataset!.dataset = <Dataset>this.fileToDisplay;
+ this.formDataset.dataset = <Dataset>this.fileToDisplay;
+ else if (this.type == FolderType.Model)
+ this.formModel.newModel = <Model>this.fileToDisplay;
}
hoverOverFile(i: number) {
@@ -150,12 +151,7 @@ export class FolderComponent implements AfterViewInit {
this.folders[TabType.MyExperiments] = experiments;
});
- if (!this._initialized) {
- this.selectTab(this.startingTab);
- this._initialized = true;
- }
- else
- this.searchTermsChanged();
+ this.searchTermsChanged();
}
saveNewFile() {
@@ -240,7 +236,6 @@ export class FolderComponent implements AfterViewInit {
selectTab(tab: TabType) {
if (tab == TabType.NewFile) {
-
this.selectNewFile();
}
diff --git a/frontend/src/app/_elements/form-model/form-model.component.css b/frontend/src/app/_elements/form-model/form-model.component.css
index 9b55a814..11b6ef5e 100644
--- a/frontend/src/app/_elements/form-model/form-model.component.css
+++ b/frontend/src/app/_elements/form-model/form-model.component.css
@@ -87,9 +87,18 @@ hr {
}
mat-slider {
- width: 40%;
+ width: 50%;
}
.slider {
- background-color: var(--ns-bg-dark-100);
+ background-color: transparent;
}
+
+.center-center {
+ text-align: center;
+ margin-right: 10px;
+ padding-right: 10px;
+ padding-bottom: 15px;
+ font-size: 20px !important;
+ font-weight: 600;
+} \ No newline at end of file
diff --git a/frontend/src/app/_elements/form-model/form-model.component.html b/frontend/src/app/_elements/form-model/form-model.component.html
index dd23bb09..c0318012 100644
--- a/frontend/src/app/_elements/form-model/form-model.component.html
+++ b/frontend/src/app/_elements/form-model/form-model.component.html
@@ -1,218 +1,226 @@
-<div id="container">
- <div class="ns-row">
+<div *ngIf="newModel">
+ <div id="container">
+ <div class="ns-row">
+
+ <div class="ns-col">
+ <mat-form-field class="example-full-width" appearance="fill" class="mat-fix">
+ <mat-label>Naziv</mat-label>
+ <input type="text" matInput [(ngModel)]="newModel.name">
+ </mat-form-field>
+ </div>
+ <div class="ns-col">
+ <mat-form-field appearance="fill" class="mat-fix">
+ <mat-label>Tip problema</mat-label>
+ <mat-select [(ngModel)]="newModel.type">
+ <mat-option *ngFor="let option of Object.keys(ProblemType); let optionName of Object.values(ProblemType)" [value]="option">
+ {{ optionName }}
+ </mat-option>
+ </mat-select>
+ </mat-form-field>
+ </div>
+
+ <div class="break-1"></div>
+
+ <div class="ns-col">
+ <mat-form-field appearance="fill" class="mat-fix">
+ <mat-label>Optimizacija</mat-label>
+ <mat-select [(ngModel)]="newModel.optimizer">
+ <mat-option *ngFor="let option of Object.keys(Optimizer); let optionName of Object.values(Optimizer)" [value]="option">
+ {{ optionName }}
+ </mat-option>
+ </mat-select>
+
+ </mat-form-field>
+ </div>
+ <div class="ns-col">
+ <mat-form-field appearance="fill" class="mat-fix">
+ <mat-label>Funkcija troška</mat-label>
+ <mat-select [(ngModel)]="newModel.lossFunction">
+ <mat-option *ngFor="let option of Object.keys(LossFunction); let optionName of Object.values(LossFunction)" [value]="option">
+ {{ optionName }}
+ </mat-option>
+ </mat-select>
+ </mat-form-field>
+ </div>
+
+ <div class="break-2"></div>
+
+ <div class="ns-col">
+ <mat-form-field appearance="fill" class="mat-fix">
+ <mat-label>Funkcija aktivacije izlaznog sloja</mat-label>
+ <mat-select name="outputLayerActivationFunction" [(ngModel)]="newModel.outputLayerActivationFunction">
+ <mat-option *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)" [value]="option">
+ {{ optionName }}
+ </mat-option>
+ </mat-select>
+ </mat-form-field>
+ </div>
+ <div class="ns-col">
+ <mat-form-field appearance="fill" class="mat-fix">
+ <mat-label>Stopa učenja</mat-label>
+ <mat-select [(ngModel)]="newModel.learningRate">
+ <mat-option *ngFor="let option of Object.keys(LearningRate); let optionName of Object.values(LearningRate)" [value]="option">
+ {{ optionName }}
+ </mat-option>
+ </mat-select>
+ </mat-form-field>
+ </div>
+
+ <div class="break-1"></div>
+
+ <div class="ns-col">
+ <mat-form-field appearance="fill" class="mat-fix">
+ <mat-label>Broj epoha</mat-label>
+ <input type="number" matInput [(ngModel)]="newModel.epochs" min="1" max="1000">
+ </mat-form-field>
+ </div>
+ <div class="ns-col">
+ <mat-form-field appearance="fill" class="mat-fix">
+ <mat-label>Broj uzoraka po iteraciji</mat-label>
+
+ <mat-select matNativeControl [(value)]="newModel.batchSize">
+ <mat-option *ngFor="let option of Object.keys(BatchSize); let optionName of Object.values(BatchSize)" [value]="option">{{option}}</mat-option>
+ </mat-select>
+ </mat-form-field>
+ </div>
- <div class="ns-col">
- <mat-form-field class="example-full-width" appearance="fill" class="mat-fix">
- <mat-label>Naziv</mat-label>
- <input type="text" matInput [(ngModel)]="newModel.name">
- </mat-form-field>
</div>
- <div class="ns-col">
- <mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Tip problema</mat-label>
- <mat-select [(ngModel)]="newModel.type">
- <mat-option *ngFor="let option of Object.keys(ProblemType); let optionName of Object.values(ProblemType)" [value]="option">
- {{ optionName }}
- </mat-option>
- </mat-select>
- </mat-form-field>
+ </div>
+
+ <!-- GRAF -->
+
+ <div class="m-2">
+ <div class="row">
+ <div class="col-sm-3 rounded" style="border:1px solid var(--ns-primary);margin-top: 10px;">
+ <div class="row slider rounded mb-3" style="margin-left: 10px;">
+
+ <div class="text-center pt-3 pb-0 mb-0"><b>{{testSetDistribution}}%</b> : <b>{{100-testSetDistribution}}%</b></div>
+ <div class="text-center pt-0 mt-0">Trening
+ <mat-slider min="10" max="90" step="10" [(ngModel)]="testSetDistribution" (input)="updateTestSet($event)"></mat-slider>
+ Test</div>
+
+ </div>
+ <div class="row slider rounded text-offwhite justify-content-center align-items-center" style="margin-left: 10px;">
+ <mat-checkbox class="pt-4 mb-3" color="accent">Nasumični redosled podataka</mat-checkbox>
+ </div>
+
+
+ </div>
+
+ <div class="col-sm-9">
+ <app-graph [model]="newModel"></app-graph>
+ </div>
</div>
+ </div>
- <div class="break-1"></div>
+ <!-- SVI LAYERI -->
- <div class="ns-col">
- <mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Optimizacija</mat-label>
- <mat-select [(ngModel)]="newModel.optimizer">
- <mat-option *ngFor="let option of Object.keys(Optimizer); let optionName of Object.values(Optimizer)" [value]="option">
- {{ optionName }}
- </mat-option>
- </mat-select>
+ <div class="ns-row">
+
+ <div class="ns-col" id="layers-control">
+ <div>Broj Skrivenih Slojeva</div>
+ <button class="btn-clear btn-icon bubble" (click)="addLayer()">
+ <mat-icon>add</mat-icon>
+ </button>
+ <div>{{newModel.hiddenLayers}}</div>
+ <button class="btn-clear btn-icon bubble" (click)="removeLayer()">
+ <mat-icon>remove</mat-icon>
+ </button>
- </mat-form-field>
</div>
+ <div class="break-1"></div>
<div class="ns-col">
<mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Funkcija troška</mat-label>
- <mat-select [(ngModel)]="newModel.lossFunction">
- <mat-option *ngFor="let option of Object.keys(LossFunction); let optionName of Object.values(LossFunction)" [value]="option">
+ <mat-label>Aktivaciona funkcija svih slojeva</mat-label>
+
+ <mat-select [(ngModel)]="selectedActivation" (selectionChange)="changeAllActivation()">
+ <mat-option *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)" [value]="option">
{{ optionName }}
</mat-option>
</mat-select>
</mat-form-field>
</div>
- <div class="break-2"></div>
-
<div class="ns-col">
<mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Funkcija aktivacije izlaznog sloja</mat-label>
- <mat-select name="outputLayerActivationFunction" [(ngModel)]="newModel.outputLayerActivationFunction">
- <mat-option *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)" [value]="option">
- {{ optionName }}
- </mat-option>
- </mat-select>
+ <mat-label>Broj neurona svih slojeva</mat-label>
+ <input matInput type="number" min="1" max="18" [(ngModel)]="selectedNumberOfNeurons" (change)="changeAllNumberOfNeurons()">
</mat-form-field>
</div>
+ <div class="break-2"></div>
<div class="ns-col">
<mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Stopa učenja</mat-label>
- <mat-select [(ngModel)]="newModel.learningRate">
- <mat-option *ngFor="let option of Object.keys(LearningRate); let optionName of Object.values(LearningRate)" [value]="option">
+ <mat-label>Regularizacija svih slojeva</mat-label>
+ <mat-select [(ngModel)]="selectedRegularisation" (selectionChange)="changeAllRegularisation()">
+ <mat-option *ngFor="let option of Object.keys(Regularisation); let optionName of Object.values(Regularisation)" [value]="option">
{{ optionName }}
</mat-option>
</mat-select>
</mat-form-field>
</div>
- <div class="break-1"></div>
+
<div class="ns-col">
<mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Broj epoha</mat-label>
- <input type="number" matInput [(ngModel)]="newModel.epochs" min="1" max="1000">
- </mat-form-field>
- </div>
- <div class="ns-col">
- <mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Broj uzoraka po iteraciji</mat-label>
-
- <mat-select matNativeControl [(value)]="newModel.batchSize">
- <mat-option *ngFor="let option of Object.keys(BatchSize); let optionName of Object.values(BatchSize)" [value]="option">{{option}}</mat-option>
+ <mat-label>Stopa regularizacije svih slojeva</mat-label>
+ <mat-select [(ngModel)]="selectedRegularisationRate" (selectionChange)="changeAllRegularisationRate()">
+ <mat-option *ngFor="let option of Object.keys(RegularisationRate); let optionName of Object.values(RegularisationRate)" [value]="option">
+ {{ optionName }}
+ </mat-option>
</mat-select>
</mat-form-field>
</div>
- </div>
-</div>
-<div>
- <div class="ns-row" style="margin-top: 10px;">
- <div class="ns-col slider rounded" style="border:1px solid var(--ns-primary);margin-left: 10px;">
-
- <div class="text-center pt-3 pb-0 mb-0"><b>{{testSetDistribution}}%</b> : <b>{{100-testSetDistribution}}%</b></div>
- <div class="text-center pt-0 mt-0">Trening
- <mat-slider min="10" max="90" step="10" [(ngModel)]="testSetDistribution" (input)="updateTestSet($event)"></mat-slider>
- Test</div>
-
- </div>
- <div class="ns-col slider rounded text-offwhite justify-content-center align-items-center" style="border:1px solid var(--ns-primary);margin-left: 10px;">
- <mat-checkbox class="pt-4" color="accent">Nasumični redosled podataka</mat-checkbox>
- </div>
-
-
- </div>
-</div>
-
-<!--kraj unosa parametara-->
-<hr>
-<div class="m-2">
- <app-graph [model]="newModel" [inputColumns]="forExperiment?.inputColumns"></app-graph>
-</div>
-<div class="ns-row">
-
- <div class="ns-col" id="layers-control">
- <div>Broj Skrivenih Slojeva</div>
- <button class="btn-clear btn-icon bubble" (click)="addLayer()">
- <mat-icon>add</mat-icon>
- </button>
- <div>{{newModel.hiddenLayers}}</div>
- <button class="btn-clear btn-icon bubble" (click)="removeLayer()">
- <mat-icon>remove</mat-icon>
- </button>
-
- </div>
- <div class="break-1"></div>
- <div class="ns-col">
- <mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Aktivaciona funkcija svih slojeva</mat-label>
-
- <mat-select [(ngModel)]="selectedActivation" (selectionChange)="changeAllActivation()">
- <mat-option *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)" [value]="option">
- {{ optionName }}
- </mat-option>
- </mat-select>
- </mat-form-field>
- </div>
-
- <div class="ns-col">
- <mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Broj neurona svih slojeva</mat-label>
- <input matInput type="number" min="1" max="18" [(ngModel)]="selectedNumberOfNeurons" (change)="changeAllNumberOfNeurons()">
- </mat-form-field>
- </div>
- <div class="break-2"></div>
- <div class="ns-col">
- <mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Regularizacija svih slojeva</mat-label>
- <mat-select [(ngModel)]="selectedRegularisation" (selectionChange)="changeAllRegularisation()">
- <mat-option *ngFor="let option of Object.keys(Regularisation); let optionName of Object.values(Regularisation)" [value]="option">
- {{ optionName }}
- </mat-option>
- </mat-select>
- </mat-form-field>
- </div>
-
- <div class="ns-col">
- <mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Stopa regularizacije svih slojeva</mat-label>
- <mat-select [(ngModel)]="selectedRegularisationRate" (selectionChange)="changeAllRegularisationRate()">
- <mat-option *ngFor="let option of Object.keys(RegularisationRate); let optionName of Object.values(RegularisationRate)" [value]="option">
- {{ optionName }}
- </mat-option>
- </mat-select>
- </mat-form-field>
- </div>
-
-
-</div>
-
-<!--kraj selectall**********************************************************************************-->
-<div id="layers">
-
- <div class="layer" *ngFor="let item of newModel.layers; let i=index">
-
-
- <mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Aktivacija</mat-label>
- <button matPrefix class="btn-clear center-center text-offwhite">
- <div>
- #{{i+1}}
- </div>
- </button>
- <mat-select [(ngModel)]="newModel.layers[i].activationFunction">
- <mat-option *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)" [value]="option">
- {{ optionName }}
- </mat-option>
- </mat-select>
- </mat-form-field>
-
- <div class="d-flex flex-row align-items-center justify-content-center tm">
- <div class="col-6" style="font-size: 13px;">Broj čvorova</div>
- <button class="btn-clear btn-icon bubble" (click)="addNeuron(i)">
+ <!-- LAYERI -->
+
+ <div id="layers">
+ <div class="layer" *ngFor="let item of newModel.layers; let i=index">
+
+
+ <mat-form-field appearance="fill" class="mat-fix">
+ <mat-label>Aktivacija</mat-label>
+ <button matPrefix class="btn-clear center-center text-offwhite">
+ <div>
+ #{{i+1}}
+ </div>
+ </button>
+ <mat-select [(ngModel)]="newModel.layers[i].activationFunction">
+ <mat-option *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)" [value]="option">
+ {{ optionName }}
+ </mat-option>
+ </mat-select>
+ </mat-form-field>
+
+ <div class="d-flex flex-row align-items-center justify-content-center tm">
+ <div class="col-6" style="font-size: 13px;">Broj čvorova</div>
+ <button class="btn-clear btn-icon bubble" (click)="addNeuron(i)">
<mat-icon>add</mat-icon>
</button>
- <div class="col-2 text-center">{{newModel.layers[i].neurons}}</div>
- <button class="btn-clear btn-icon bubble" (click)="removeNeuron(i)">
+ <div class="col-2 text-center">{{newModel.layers[i].neurons}}</div>
+ <button class="btn-clear btn-icon bubble" (click)="removeNeuron(i)">
<mat-icon>remove</mat-icon>
</button>
- </div>
+ </div>
- <mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Regularizacija</mat-label>
- <mat-select [(ngModel)]="newModel.layers[i].regularisation">
- <mat-option *ngFor="let option of Object.keys(Regularisation); let optionName of Object.values(Regularisation)" [value]="option">
- {{ optionName }}
- </mat-option>
- </mat-select>
- </mat-form-field>
-
- <mat-form-field appearance="fill" class="mat-fix">
- <mat-label>Stopa regularizacije</mat-label>
- <mat-select [(ngModel)]="newModel.layers[i].regularisationRate">
- <mat-option *ngFor="let option of Object.keys(RegularisationRate); let optionName of Object.values(RegularisationRate)" [value]="option">
- {{ optionName }}
- </mat-option>
- </mat-select>
- </mat-form-field>
+ <mat-form-field appearance="fill" class="mat-fix">
+ <mat-label>Regularizacija</mat-label>
+ <mat-select [(ngModel)]="newModel.layers[i].regularisation">
+ <mat-option *ngFor="let option of Object.keys(Regularisation); let optionName of Object.values(Regularisation)" [value]="option">
+ {{ optionName }}
+ </mat-option>
+ </mat-select>
+ </mat-form-field>
+
+ <mat-form-field appearance="fill" class="mat-fix">
+ <mat-label>Stopa regularizacije</mat-label>
+ <mat-select [(ngModel)]="newModel.layers[i].regularisationRate">
+ <mat-option *ngFor="let option of Object.keys(RegularisationRate); let optionName of Object.values(RegularisationRate)" [value]="option">
+ {{ optionName }}
+ </mat-option>
+ </mat-select>
+ </mat-form-field>
+ </div>
+ </div>
</div>
</div> \ No newline at end of file
diff --git a/frontend/src/app/_elements/form-model/form-model.component.ts b/frontend/src/app/_elements/form-model/form-model.component.ts
index d5c497aa..ef456547 100644
--- a/frontend/src/app/_elements/form-model/form-model.component.ts
+++ b/frontend/src/app/_elements/form-model/form-model.component.ts
@@ -13,13 +13,12 @@ import { MatSliderChange } from '@angular/material/slider';
})
export class FormModelComponent implements AfterViewInit {
@ViewChild(GraphComponent) graph!: GraphComponent;
- @Input() forExperiment?: Experiment;
+ @Input() forExperiment!: Experiment;
@Output() selectedModelChangeEvent = new EventEmitter<Model>();
testSetDistribution: number = 70;
constructor() { }
- ngAfterViewInit(): void {
- }
+ ngAfterViewInit(): void { }
selectFormControl = new FormControl('', Validators.required);
nameFormControl = new FormControl('', [Validators.required, Validators.email]);
@@ -34,8 +33,7 @@ export class FormModelComponent implements AfterViewInit {
selectRegularisationFormControl = new FormControl('', Validators.required);
selectRRateFormControl = new FormControl('', Validators.required);
- newModel: Model = new Model();
- myModels?: Model[];
+ newModel!: Model;
selectedModel?: Model;
@@ -57,7 +55,9 @@ export class FormModelComponent implements AfterViewInit {
selectedMetrics = [];
lossFunction: any = LossFunction;
- showMyModels: boolean = true;
+ loadModel(model: Model) {
+ this.newModel = model;
+ }
updateGraph() {
//console.log(this.newModel.layers);
@@ -121,7 +121,6 @@ export class FormModelComponent implements AfterViewInit {
}
}
changeAllRegularisationRate() {
-
for (let i = 0; i < this.newModel.layers.length; i++) {
this.newModel.layers[i].regularisationRate = this.selectedRegularisationRate;
}
@@ -132,6 +131,7 @@ export class FormModelComponent implements AfterViewInit {
this.updateGraph();
}
}
+
updateTestSet(event: MatSliderChange) {
this.testSetDistribution = event.value!;
}
diff --git a/frontend/src/app/_elements/graph/graph.component.ts b/frontend/src/app/_elements/graph/graph.component.ts
index 31814c2c..c7f8d964 100644
--- a/frontend/src/app/_elements/graph/graph.component.ts
+++ b/frontend/src/app/_elements/graph/graph.component.ts
@@ -28,7 +28,7 @@ export class GraphComponent implements AfterViewInit {
@Input() outputNodeColor: string = '#dfd7d7';
private ctx!: CanvasRenderingContext2D;
- @Input() inputColumns?: string[] = [];
+ @Input() inputColumns?: string[] = ['Nije odabran eksperiment'];
constructor() { }
@@ -43,6 +43,7 @@ export class GraphComponent implements AfterViewInit {
window.addEventListener('resize', () => { this.resize() });
this.update();
this.resize();
+ console.log(this.layers);
}
layers: Node[][] = [];
diff --git a/frontend/src/app/_pages/experiment/experiment.component.html b/frontend/src/app/_pages/experiment/experiment.component.html
index 39304469..baae864e 100644
--- a/frontend/src/app/_pages/experiment/experiment.component.html
+++ b/frontend/src/app/_pages/experiment/experiment.component.html
@@ -37,7 +37,7 @@
</div>
<div #steps id="step_3" class="step-content">
<div class="step-content-inside">
- <app-folder #folderModel [type]="FolderType.Model" [forExperiment]="experiment" [startingTab]="TabType.NewFile" [tabsToShow]="[TabType.MyModels, TabType.PublicModels]" (okPressed)="goToPage(3)"></app-folder>
+ <app-folder #folderModel [type]="FolderType.Model" [forExperiment]="experiment" [startingTab]="TabType.NewFile" [tabsToShow]="[TabType.MyModels]" (okPressed)="goToPage(3)"></app-folder>
</div>
</div>
<div #steps id="step_4" class="step-content">
diff --git a/frontend/src/styles/layout.css b/frontend/src/styles/layout.css
index c0af31c3..07c0bf34 100644
--- a/frontend/src/styles/layout.css
+++ b/frontend/src/styles/layout.css
@@ -49,7 +49,7 @@ body {
}
}
-*/
+
/*.break-1,
.break-2 {
height: 1px;
@@ -66,13 +66,4 @@ body {
.break-2 {
display: none;
}
-}*/
-
-.center-center {
- text-align: center;
- margin-right: 10px;
- padding-right: 10px;
- padding-bottom: 15px;
- font-size: 20px;
- font-weight: 600;
-} \ No newline at end of file
+}*/ \ No newline at end of file