diff options
author | Sonja Galovic <galovicsonja@gmail.com> | 2022-05-03 22:41:50 +0200 |
---|---|---|
committer | Sonja Galovic <galovicsonja@gmail.com> | 2022-05-03 22:41:50 +0200 |
commit | 52109040514ba5f9f20ef3e93e97571e67277eee (patch) | |
tree | 384b9d01357d241a15b1b49da44a9087a50f938e | |
parent | 3e0243ee1512d4e9bf390ecf4b39eba832caf4da (diff) | |
parent | 2d10f9892404aa82020965cf91178c34b93bdfce (diff) |
Merge branch 'redesign' of http://gitlab.pmf.kg.ac.rs/igrannonica/neuronstellar into redesign
# Conflicts:
# frontend/package-lock.json
# frontend/src/app/_elements/folder/folder.component.ts
# frontend/src/app/_elements/form-model/form-model.component.html
-rw-r--r-- | backend/microservice/api/controller.py | 6 | ||||
-rw-r--r-- | backend/microservice/api/newmlservice.py | 176 | ||||
-rw-r--r-- | frontend/package-lock.json | 344 | ||||
-rw-r--r-- | frontend/src/app/_elements/column-table/column-table.component.css | 5 | ||||
-rw-r--r-- | frontend/src/app/_elements/folder/folder.component.html | 2 | ||||
-rw-r--r-- | frontend/src/app/_elements/folder/folder.component.ts | 31 | ||||
-rw-r--r-- | frontend/src/app/_elements/form-model/form-model.component.css | 13 | ||||
-rw-r--r-- | frontend/src/app/_elements/form-model/form-model.component.html | 362 | ||||
-rw-r--r-- | frontend/src/app/_elements/form-model/form-model.component.ts | 14 | ||||
-rw-r--r-- | frontend/src/app/_elements/graph/graph.component.ts | 3 | ||||
-rw-r--r-- | frontend/src/app/_pages/experiment/experiment.component.html | 2 | ||||
-rw-r--r-- | frontend/src/styles/layout.css | 13 |
12 files changed, 689 insertions, 282 deletions
diff --git a/backend/microservice/api/controller.py b/backend/microservice/api/controller.py index fad6e181..41035cc7 100644 --- a/backend/microservice/api/controller.py +++ b/backend/microservice/api/controller.py @@ -120,9 +120,9 @@ def returnColumnsInfo(): #samo 10 jedinstvenih posto ih ima previse, bilo bi dobro da promenimo ovo da to budu 10 najzastupljenijih vrednosti for col in preprocess["columnInfo"]: - col["uniqueValues"] = col["uniqueValues"][0:5] - col["uniqueValuesCount"] = col["uniqueValuesCount"][0:5] - col['uniqueValuesPercent']=col['uniqueValuesPercent'][0:5] + col["uniqueValues"] = col["uniqueValues"][0:6] + col["uniqueValuesCount"] = col["uniqueValuesCount"][0:6] + col['uniqueValuesPercent']=col['uniqueValuesPercent'][0:6] dataset["columnInfo"] = preprocess["columnInfo"] dataset["nullCols"] = preprocess["allNullColl"] dataset["nullRows"] = preprocess["allNullRows"] diff --git a/backend/microservice/api/newmlservice.py b/backend/microservice/api/newmlservice.py index f74f8386..3244e82f 100644 --- a/backend/microservice/api/newmlservice.py +++ b/backend/microservice/api/newmlservice.py @@ -148,17 +148,28 @@ class TrainingResult: ''' def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): + ###UCITAVANJE SETA problem_type = paramsModel["type"] #print(problem_type) data = pd.DataFrame() #print(data) for col in paramsExperiment["inputColumns"]: #print(col) - data[col]=dataset[col] + if(col!=paramsExperiment["outputColumn"]): + data[col]=dataset[col] output_column = paramsExperiment["outputColumn"] data[output_column] = dataset[output_column] #print(data) + ###KATEGORIJSKE KOLONE + kategorijskekolone=[] + ###PRETVARANJE NUMERICKIH U KATREGORIJSKE AKO JE KORISNIK TAKO OZNACIO + columnInfo=paramsDataset['columnInfo'] + for col in columnInfo: + if(col['columnType']=="Kategorijski"): + data[col['columnName']]=data[col['columnName']].apply(str) + kategorijskekolone.append(col['coumnName']) + ###NULL null_value_options = paramsExperiment["nullValues"] null_values_replacers = paramsExperiment["nullValuesReplacers"] @@ -182,16 +193,18 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): # # Brisanje kolona koje ne uticu na rezultat # + ''' num_rows=data.shape[0] for col in data.columns: if((data[col].nunique()==(num_rows)) and (data[col].dtype==np.object_)): data.pop(col) # + ''' ### Enkodiranje encodings=paramsExperiment["encodings"] - datafront=dataset.copy() - svekolone=datafront.columns - kategorijskekolone=datafront.select_dtypes(include=['object']).columns + #datafront=dataset.copy() + #svekolone=datafront.columns + #kategorijskekolone=datafront.select_dtypes(include=['object']).columns for kolonaEncoding in encodings: kolona = kolonaEncoding["columnName"] @@ -268,73 +281,73 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): # # ###OPTIMIZATORI - """ - if(params['optimizer']=='adam'): - opt=tf.keras.optimizers.Adam(learning_rate=params['learningRate']) + + if(paramsModel['optimizer']=='Adam'): + opt=tf.keras.optimizers.Adam(learning_rate=float(paramsModel['learningRate'])) - elif(params['optimizer']=='adadelta'): - opt=tf.keras.optimizers.Adadelta(learning_rate=params['learningRate']) + elif(paramsModel['optimizer']=='Adadelta'): + opt=tf.keras.optimizers.Adadelta(learning_rate=float(paramsModel['learningRate'])) - elif(params['optimizer']=='adagrad'): - opt=tf.keras.optimizers.Adagrad(learning_rate=params['learningRate']) + elif(paramsModel['optimizer']=='Adagrad'): + opt=tf.keras.optimizers.Adagrad(learning_rate=float(paramsModel['learningRate'])) - elif(params['optimizer']=='adamax'): - opt=tf.keras.optimizers.Adamax(learning_rate=params['learningRate']) + elif(paramsModel['optimizer']=='Adamax'): + opt=tf.keras.optimizers.Adamax(learning_rate=float(paramsModel['learningRate'])) - elif(params['optimizer']=='nadam'): - opt=tf.keras.optimizers.Nadam(learning_rate=params['learningRate']) + elif(paramsModel['optimizer']=='Nadam'): + opt=tf.keras.optimizers.Nadam(learning_rate=float(paramsModel['learningRate'])) - elif(params['optimizer']=='sgd'): - opt=tf.keras.optimizers.SGD(learning_rate=params['learningRate']) + elif(paramsModel['optimizer']=='Sgd'): + opt=tf.keras.optimizers.SGD(learning_rate=float(paramsModel['learningRate'])) - elif(params['optimizer']=='ftrl'): - opt=tf.keras.optimizers.Ftrl(learning_rate=params['learningRate']) + elif(paramsModel['optimizer']=='Ftrl'): + opt=tf.keras.optimizers.Ftrl(learning_rate=float(paramsModel['learningRate'])) - elif(params['optimizer']=='rmsprop'): - opt=tf.keras.optimizers.RMSprop(learning_rate=params['learningRate']) + elif(paramsModel['optimizer']=='Rmsprop'): + opt=tf.keras.optimizers.RMSprop(learning_rate=float(paramsModel['learningRate'])) ###REGULARIZACIJA #regularisation={'kernelType':'l1 ili l2 ili l1_l2','kernelRate':default=0.01 ili jedna od vrednosti(0.0001,0.001,0.1,1,2,3) ili neka koju je korisnik zadao,'biasType':'','biasRate':'','activityType','activityRate'} - reg=params['regularisation'] - - ###Kernel - if(reg['kernelType']=='l1'): - kernelreg=tf.keras.regularizers.l1(reg['kernelRate']) - elif(reg['kernelType']=='l2'): - kernelreg=tf.keras.regularizers.l2(reg['kernelRate']) - elif(reg['kernelType']=='l1l2'): - kernelreg=tf.keras.regularizers.l1_l2(l1=reg['kernelRate'][0],l2=reg['kernelRate'][1]) - - ###Bias - if(reg['biasType']=='l1'): - biasreg=tf.keras.regularizers.l1(reg['biasRate']) - elif(reg['biasType']=='l2'): - biasreg=tf.keras.regularizers.l2(reg['biasRate']) - elif(reg['biasType']=='l1l2'): - biasreg=tf.keras.regularizers.l1_l2(l1=reg['biasRate'][0],l2=reg['biasRate'][1]) - - ###Activity - if(reg['kernelType']=='l1'): - activityreg=tf.keras.regularizers.l1(reg['activityRate']) - elif(reg['kernelType']=='l2'): - activityreg=tf.keras.regularizers.l2(reg['activityRate']) - elif(reg['kernelType']=='l1l2'): - activityreg=tf.keras.regularizers.l1_l2(l1=reg['activityRate'][0],l2=reg['activityRate'][1]) - """ + + filepath=os.path.join("temp/",paramsExperiment['_id']+"_"+paramsModel['_id']+".h5") if(problem_type=='multi-klasifikacioni'): #print('multi') + + reg=paramsModel['regularisation'][0] + regRate=float(paramsModel['regularisationRate'][0]) + if(reg=='l1'): + kernelreg=tf.keras.regularizers.l1(regRate) + biasreg=tf.keras.regularizers.l1(regRate) + activityreg=tf.keras.regularizers.l1(regRate) + elif(reg=='l2'): + kernelreg=tf.keras.regularizers.l2(regRate) + biasreg=tf.keras.regularizers.l2(regRate) + activityreg=tf.keras.regularizers.l2(regRate) + classifier=tf.keras.Sequential() - - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][0],input_dim=x_train.shape[1]))#prvi skriveni + definisanje prethodnog-ulaznog + classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][0],input_dim=x_train.shape[1], kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#prvi skriveni + definisanje prethodnog-ulaznog + for i in range(paramsModel['hiddenLayers']-1):#ako postoji vise od jednog skrivenog sloja - #print(i) - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][i+1]))#i-ti skriveni sloj + ###Kernel + reg=paramsModel['regularisation'][i+1] + regRate=float(paramsModel['regularisationRate'][i+1]) + if(reg=='l1'): + kernelreg=tf.keras.regularizers.l1(regRate) + biasreg=tf.keras.regularizers.l1(regRate) + activityreg=tf.keras.regularizers.l1(regRate) + elif(reg=='l2'): + kernelreg=tf.keras.regularizers.l2(regRate) + biasreg=tf.keras.regularizers.l2(regRate) + activityreg=tf.keras.regularizers.l2(regRate) + + classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][i+1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#i-ti skriveni sloj + classifier.add(tf.keras.layers.Dense(units=5, activation=paramsModel['outputLayerActivationFunction']))#izlazni sloj - classifier.compile(loss =paramsModel["lossFunction"] , optimizer = paramsModel['optimizer'] , metrics =paramsModel['metrics']) + classifier.compile(loss =paramsModel["lossFunction"] , optimizer = opt, metrics =paramsModel['metrics']) history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=paramsModel['batchSize'],callbacks=callback(x_test, y_test,paramsModel['_id'])) @@ -358,15 +371,37 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): elif(problem_type=='binarni-klasifikacioni'): #print('*************************************************************************binarni') + reg=paramsModel['regularisation'][0] + regRate=float(paramsModel['regularisationRate'][0]) + if(reg=='l1'): + kernelreg=tf.keras.regularizers.l1(regRate) + biasreg=tf.keras.regularizers.l1(regRate) + activityreg=tf.keras.regularizers.l1(regRate) + elif(reg=='l2'): + kernelreg=tf.keras.regularizers.l2(regRate) + biasreg=tf.keras.regularizers.l2(regRate) + activityreg=tf.keras.regularizers.l2(regRate) classifier=tf.keras.Sequential() - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][0],input_dim=x_train.shape[1]))#prvi skriveni + definisanje prethodnog-ulaznog + classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][0],input_dim=x_train.shape[1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#prvi skriveni + definisanje prethodnog-ulaznog + for i in range(paramsModel['hiddenLayers']-1):#ako postoji vise od jednog skrivenog sloja #print(i) - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][i+1]))#i-ti skriveni sloj + reg=paramsModel['regularisation'][i+1] + regRate=float(paramsModel['regularisationRate'][i+1]) + if(reg=='l1'): + kernelreg=tf.keras.regularizers.l1(regRate) + biasreg=tf.keras.regularizers.l1(regRate) + activityreg=tf.keras.regularizers.l1(regRate) + elif(reg=='l2'): + kernelreg=tf.keras.regularizers.l2(regRate) + biasreg=tf.keras.regularizers.l2(regRate) + activityreg=tf.keras.regularizers.l2(regRate) + classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][i+1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#i-ti skriveni sloj + classifier.add(tf.keras.layers.Dense(units=1, activation=paramsModel['outputLayerActivationFunction']))#izlazni sloj - classifier.compile(loss =paramsModel["lossFunction"] , optimizer = paramsModel['optimizer'] , metrics =paramsModel['metrics']) + classifier.compile(loss =paramsModel["lossFunction"] , optimizer = opt , metrics =paramsModel['metrics']) history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=paramsModel['batchSize'],callbacks=callback(x_test, y_test,paramsModel['_id'])) hist=history.history @@ -384,15 +419,38 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): return filepath,hist elif(problem_type=='regresioni'): + reg=paramsModel['regularisation'][0] + regRate=float(paramsModel['regularisationRate'][0]) + if(reg=='l1'): + kernelreg=tf.keras.regularizers.l1(regRate) + biasreg=tf.keras.regularizers.l1(regRate) + activityreg=tf.keras.regularizers.l1(regRate) + elif(reg=='l2'): + kernelreg=tf.keras.regularizers.l2(regRate) + biasreg=tf.keras.regularizers.l2(regRate) + activityreg=tf.keras.regularizers.l2(regRate) classifier=tf.keras.Sequential() - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][0],input_dim=x_train.shape[1]))#prvi skriveni + definisanje prethodnog-ulaznog + classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][0],input_dim=x_train.shape[1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#prvi skriveni + definisanje prethodnog-ulaznog + for i in range(paramsModel['hiddenLayers']-1):#ako postoji vise od jednog skrivenog sloja #print(i) - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][i+1]))#i-ti skriveni sloj - classifier.add(tf.keras.layers.Dense(units=1)) + reg=paramsModel['regularisation'][i+1] + regRate=float(paramsModel['regularisationRate'][i+1]) + if(reg=='l1'): + kernelreg=tf.keras.regularizers.l1(regRate) + biasreg=tf.keras.regularizers.l1(regRate) + activityreg=tf.keras.regularizers.l1(regRate) + elif(reg=='l2'): + kernelreg=tf.keras.regularizers.l2(regRate) + biasreg=tf.keras.regularizers.l2(regRate) + activityreg=tf.keras.regularizers.l2(regRate) + + classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][i+1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#i-ti skriveni sloj + + classifier.add(tf.keras.layers.Dense(units=1),activation=paramsModel['outputLayerActivationFunction']) - classifier.compile(loss =paramsModel["lossFunction"] , optimizer = paramsModel['optimizer'] , metrics =paramsModel['metrics']) + classifier.compile(loss =paramsModel["lossFunction"] , optimizer = opt , metrics =paramsModel['metrics']) history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=paramsModel['batchSize'],callbacks=callback(x_test, y_test,paramsModel['_id'])) hist=history.history 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 |