codecharta-visualization 1.87.1 → 1.88.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/app/app.module.ts +18 -8
  2. package/app/codeCharta/codeCharta.component.ts +2 -0
  3. package/app/codeCharta/codeCharta.model.ts +2 -0
  4. package/app/codeCharta/codeCharta.service.spec.ts +41 -50
  5. package/app/codeCharta/codeCharta.service.ts +33 -32
  6. package/app/codeCharta/e2e/url.e2e.ts +1 -1
  7. package/app/codeCharta/state/store/appStatus/appStatus.reducer.ts +3 -1
  8. package/app/codeCharta/state/store/appStatus/appStatus.selector.ts +3 -0
  9. package/app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions.ts +23 -0
  10. package/app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.reducer.ts +15 -0
  11. package/app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.selector.ts +4 -0
  12. package/app/codeCharta/state/store/state.actions.ts +3 -1
  13. package/app/codeCharta/ui/codeMap/codeMap.mouseEvent.service.ts +6 -8
  14. package/app/codeCharta/ui/customConfigs/customConfigs.component.html +9 -9
  15. package/app/codeCharta/ui/dialog/dialog.addCustomConfigSettings.component.html +2 -2
  16. package/app/codeCharta/ui/dialog/dialog.changelog.component.scss +15 -0
  17. package/app/codeCharta/ui/dialog/dialog.changelog.component.spec.ts +15 -15
  18. package/app/codeCharta/ui/dialog/dialog.changelog.component.ts +2 -1
  19. package/app/codeCharta/ui/dialog/dialog.service.spec.ts +68 -0
  20. package/app/codeCharta/ui/dialog/dialog.service.ts +38 -17
  21. package/app/codeCharta/ui/edgeChooser/edgeChooser.e2e.ts +3 -2
  22. package/app/codeCharta/ui/fileChooser/fileChooser.e2e.ts +5 -6
  23. package/app/codeCharta/ui/filePanel/filePanel.component.html +24 -106
  24. package/app/codeCharta/ui/filePanel/filePanel.component.scss +12 -57
  25. package/app/codeCharta/ui/filePanel/filePanel.component.spec.ts +40 -72
  26. package/app/codeCharta/ui/filePanel/filePanel.component.ts +29 -81
  27. package/app/codeCharta/ui/filePanel/filePanel.module.ts +13 -1
  28. package/app/codeCharta/ui/filePanel/filePanel.po.ts +6 -24
  29. package/app/codeCharta/ui/filePanel/filePanelDeltaSelector/filePanelDeltaSelector.component.html +23 -0
  30. package/app/codeCharta/ui/filePanel/filePanelDeltaSelector/filePanelDeltaSelector.component.ts +18 -0
  31. package/app/codeCharta/ui/filePanel/filePanelFileSelector/filePanelFileSelector.component.html +18 -0
  32. package/app/codeCharta/ui/filePanel/filePanelFileSelector/filePanelFileSelector.component.ts +16 -0
  33. package/app/codeCharta/ui/filePanel/filePanelStateButtons/filePanelStateButtons.component.html +18 -0
  34. package/app/codeCharta/ui/filePanel/filePanelStateButtons/filePanelStateButtons.component.ts +11 -0
  35. package/app/codeCharta/ui/mapTreeView/mapTreeView.level.e2e.ts +7 -5
  36. package/app/codeCharta/ui/mapTreeView/mapTreeViewLevel/mapTreeViewLevel.component.html +1 -1
  37. package/app/codeCharta/ui/mapTreeView/mapTreeViewLevel/mapTreeViewLevel.component.spec.ts +6 -16
  38. package/app/codeCharta/ui/mapTreeView/mapTreeViewLevel/mapTreeViewLevel.component.ts +15 -11
  39. package/app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.html +22 -0
  40. package/app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.scss +31 -0
  41. package/app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.spec.ts +35 -0
  42. package/app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.ts +30 -0
  43. package/app/codeCharta/ui/nodeContextMenu/{markFolderColorPicker/markFolderColorPicker.module.ts → markFolderRow/markFolderRow.module.ts} +4 -5
  44. package/app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/markFolderItems.selector.spec.ts +17 -0
  45. package/app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/markFolderItems.selector.ts +29 -0
  46. package/app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/rightClickedNode.selector.spec.ts +15 -0
  47. package/app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/rightClickedNode.selector.ts +9 -0
  48. package/app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.html +2 -15
  49. package/app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.scss +0 -15
  50. package/app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.spec.ts +10 -119
  51. package/app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.ts +40 -134
  52. package/app/codeCharta/ui/nodeContextMenu/nodeContextMenu.module.ts +2 -2
  53. package/app/codeCharta/ui/ribbonBar/ribbonBar.component.html +1 -1
  54. package/app/codeCharta/ui/toolBar/toolBar.component.html +1 -1
  55. package/app/codeCharta/ui/toolBar/toolBar.component.scss +1 -1
  56. package/app/codeCharta/ui/ui.ts +2 -2
  57. package/app/codeCharta/util/customConfigHelper.spec.ts +155 -60
  58. package/app/codeCharta/util/customConfigHelper.ts +33 -3
  59. package/app/codeCharta/util/dataMocks.ts +4 -2
  60. package/app/codeCharta/util/fileValidator.spec.ts +69 -182
  61. package/app/codeCharta/util/fileValidator.ts +61 -37
  62. package/dist/webpack/bundle.js +852 -485
  63. package/dist/webpack/bundle.js.map +1 -1
  64. package/package.json +1 -1
  65. package/app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.html +0 -9
  66. package/app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.scss +0 -13
  67. package/app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts +0 -10
@@ -204448,43 +204448,43 @@ class CodeChartaService {
204448
204448
  loadFiles(nameDataPairs) {
204449
204449
  return __awaiter(this, void 0, void 0, function* () {
204450
204450
  this.fileStates = this.storeService.getState().files;
204451
+ const fileValidationResults = [];
204452
+ this.getValidationResults(nameDataPairs, fileValidationResults);
204453
+ this.storeService.dispatch((0,_state_store_appSettings_isLoadingFile_isLoadingFile_actions__WEBPACK_IMPORTED_MODULE_5__.setIsLoadingFile)(false));
204454
+ if (fileValidationResults.length > 0) yield this.dialogService.showValidationDialog(fileValidationResults);
204451
204455
 
204452
- for (const nameDataPair of nameDataPairs) {
204453
- try {
204454
- (0,_util_fileValidator__WEBPACK_IMPORTED_MODULE_0__.validate)(nameDataPair);
204455
- this.addFile(nameDataPair);
204456
- } catch (error) {
204457
- if (error.error.length > 0) {
204458
- this.fileStates = [];
204459
- this.recentFiles = [];
204460
- this.storeService.dispatch((0,_state_store_appSettings_isLoadingFile_isLoadingFile_actions__WEBPACK_IMPORTED_MODULE_5__.setIsLoadingFile)(false));
204461
- yield this.dialogService.showValidationErrorDialog(error);
204462
- break;
204463
- }
204464
-
204465
- if (error.warning.length > 0) {
204466
- this.addFile(nameDataPair);
204467
- this.addRecentFile(nameDataPair.fileName);
204468
- this.storeService.dispatch((0,_state_store_appSettings_isLoadingFile_isLoadingFile_actions__WEBPACK_IMPORTED_MODULE_5__.setIsLoadingFile)(false));
204469
- yield this.dialogService.showValidationWarningDialog(error);
204470
- }
204471
- }
204472
- }
204473
-
204474
- if (this.fileStates.length > 0) {
204456
+ if (this.recentFiles.length > 0) {
204475
204457
  this.storeService.dispatch((0,_state_store_dynamicSettings_recentFiles_recentFiles_actions__WEBPACK_IMPORTED_MODULE_8__.setRecentFiles)(this.recentFiles));
204476
204458
  this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_2__.setFiles)(this.fileStates));
204477
- this.fileStates = [];
204478
- this.recentFiles = [];
204479
204459
  const recentFile = this.storeService.getState().dynamicSettings.recentFiles[0];
204480
204460
  const rootName = this.storeService.getState().files.find(f => f.file.fileMeta.fileName === recentFile).file.map.name;
204481
- this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_2__.setSingleByName)(recentFile));
204461
+ this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_2__.setMultipleByNames)(this.recentFiles));
204482
204462
  CodeChartaService.updateRootData(rootName);
204483
204463
  this.setDefaultScenario();
204464
+ this.fileStates = [];
204465
+ this.recentFiles = [];
204484
204466
  }
204485
204467
  });
204486
204468
  }
204487
204469
 
204470
+ getValidationResults(nameDataPairs, fileValidationResults) {
204471
+ for (const nameDataPair of nameDataPairs) {
204472
+ const fileValidationResult = {
204473
+ fileName: nameDataPair === null || nameDataPair === void 0 ? void 0 : nameDataPair.fileName,
204474
+ errors: [],
204475
+ warnings: []
204476
+ };
204477
+ fileValidationResult.errors.push(...(0,_util_fileValidator__WEBPACK_IMPORTED_MODULE_0__.checkErrors)(nameDataPair === null || nameDataPair === void 0 ? void 0 : nameDataPair.content));
204478
+
204479
+ if (fileValidationResult.errors.length === 0) {
204480
+ fileValidationResult.warnings.push(...(0,_util_fileValidator__WEBPACK_IMPORTED_MODULE_0__.checkWarnings)(nameDataPair === null || nameDataPair === void 0 ? void 0 : nameDataPair.content));
204481
+ this.addFile(nameDataPair);
204482
+ }
204483
+
204484
+ if (fileValidationResult.errors.length > 0 || fileValidationResult.warnings.length > 0) fileValidationResults.push(fileValidationResult);
204485
+ }
204486
+ }
204487
+
204488
204488
  addFile(file) {
204489
204489
  const ccFile = (0,_util_fileHelper__WEBPACK_IMPORTED_MODULE_7__.getCCFile)(file);
204490
204490
  _util_nodeDecorator__WEBPACK_IMPORTED_MODULE_1__.NodeDecorator.decorateMapWithPathAttribute(ccFile);
@@ -204555,10 +204555,6 @@ class CodeChartaService {
204555
204555
  CodeChartaService.ROOT_PATH = `/${CodeChartaService.ROOT_NAME}`;
204556
204556
  }
204557
204557
 
204558
- addRecentFile(fileName) {
204559
- this.recentFiles.push(fileName);
204560
- }
204561
-
204562
204558
  }
204563
204559
  CodeChartaService.$inject = ["storeService", "dialogService"];
204564
204560
  CodeChartaService.ROOT_NAME = "root";
@@ -209764,20 +209760,38 @@ __webpack_require__.r(__webpack_exports__);
209764
209760
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
209765
209761
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
209766
209762
  /* harmony export */ });
209767
- /* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js");
209763
+ /* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js");
209768
209764
  /* harmony import */ var _hoveredBuildingPath_hoveredBuildingPath_reducer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hoveredBuildingPath/hoveredBuildingPath.reducer */ "./app/codeCharta/state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.reducer.ts");
209769
- /* harmony import */ var _selectedBuildingId_selectedBuildingId_reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./selectedBuildingId/selectedBuildingId.reducer */ "./app/codeCharta/state/store/appStatus/selectedBuildingId/selectedBuildingId.reducer.ts");
209765
+ /* harmony import */ var _rightClickedNodeData_rightClickedNodeData_reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rightClickedNodeData/rightClickedNodeData.reducer */ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.reducer.ts");
209766
+ /* harmony import */ var _selectedBuildingId_selectedBuildingId_reducer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectedBuildingId/selectedBuildingId.reducer */ "./app/codeCharta/state/store/appStatus/selectedBuildingId/selectedBuildingId.reducer.ts");
209770
209767
 
209771
209768
 
209772
209769
 
209773
- const appStatus = (0,redux__WEBPACK_IMPORTED_MODULE_2__.combineReducers)({
209770
+
209771
+ const appStatus = (0,redux__WEBPACK_IMPORTED_MODULE_3__.combineReducers)({
209774
209772
  hoveredBuildingPath: _hoveredBuildingPath_hoveredBuildingPath_reducer__WEBPACK_IMPORTED_MODULE_0__.hoveredBuildingPath,
209775
- selectedBuildingId: _selectedBuildingId_selectedBuildingId_reducer__WEBPACK_IMPORTED_MODULE_1__.selectedBuildingId
209773
+ selectedBuildingId: _selectedBuildingId_selectedBuildingId_reducer__WEBPACK_IMPORTED_MODULE_2__.selectedBuildingId,
209774
+ rightClickedNodeData: _rightClickedNodeData_rightClickedNodeData_reducer__WEBPACK_IMPORTED_MODULE_1__.rightClickedNodeData
209776
209775
  });
209777
209776
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (appStatus);
209778
209777
 
209779
209778
  /***/ }),
209780
209779
 
209780
+ /***/ "./app/codeCharta/state/store/appStatus/appStatus.selector.ts":
209781
+ /*!********************************************************************!*\
209782
+ !*** ./app/codeCharta/state/store/appStatus/appStatus.selector.ts ***!
209783
+ \********************************************************************/
209784
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
209785
+
209786
+ "use strict";
209787
+ __webpack_require__.r(__webpack_exports__);
209788
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
209789
+ /* harmony export */ "appStatusSelector": () => (/* binding */ appStatusSelector)
209790
+ /* harmony export */ });
209791
+ const appStatusSelector = state => state.appStatus;
209792
+
209793
+ /***/ }),
209794
+
209781
209795
  /***/ "./app/codeCharta/state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.actions.ts":
209782
209796
  /*!*************************************************************************************************!*\
209783
209797
  !*** ./app/codeCharta/state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.actions.ts ***!
@@ -209845,6 +209859,77 @@ const hoveredBuildingPathSelector = ccState => ccState.appStatus.hoveredBuilding
209845
209859
 
209846
209860
  /***/ }),
209847
209861
 
209862
+ /***/ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions.ts":
209863
+ /*!***************************************************************************************************!*\
209864
+ !*** ./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions.ts ***!
209865
+ \***************************************************************************************************/
209866
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
209867
+
209868
+ "use strict";
209869
+ __webpack_require__.r(__webpack_exports__);
209870
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
209871
+ /* harmony export */ "RightClickedNodeDataActions": () => (/* binding */ RightClickedNodeDataActions),
209872
+ /* harmony export */ "defaultRightClickedNodeData": () => (/* binding */ defaultRightClickedNodeData),
209873
+ /* harmony export */ "setRightClickedNodeData": () => (/* binding */ setRightClickedNodeData)
209874
+ /* harmony export */ });
209875
+ var RightClickedNodeDataActions;
209876
+
209877
+ (function (RightClickedNodeDataActions) {
209878
+ RightClickedNodeDataActions["SET_RIGHT_CLICKED_NODE_DATA"] = "SET_RIGHT_CLICKED_NODE_DATA";
209879
+ })(RightClickedNodeDataActions || (RightClickedNodeDataActions = {}));
209880
+
209881
+ const defaultRightClickedNodeData = null;
209882
+ const setRightClickedNodeData = payload => ({
209883
+ type: RightClickedNodeDataActions.SET_RIGHT_CLICKED_NODE_DATA,
209884
+ payload
209885
+ });
209886
+
209887
+ /***/ }),
209888
+
209889
+ /***/ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.reducer.ts":
209890
+ /*!***************************************************************************************************!*\
209891
+ !*** ./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.reducer.ts ***!
209892
+ \***************************************************************************************************/
209893
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
209894
+
209895
+ "use strict";
209896
+ __webpack_require__.r(__webpack_exports__);
209897
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
209898
+ /* harmony export */ "rightClickedNodeData": () => (/* binding */ rightClickedNodeData)
209899
+ /* harmony export */ });
209900
+ /* harmony import */ var _rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rightClickedNodeData.actions */ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions.ts");
209901
+
209902
+ const rightClickedNodeData = (state = _rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_0__.defaultRightClickedNodeData, action) => {
209903
+ switch (action.type) {
209904
+ case _rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_0__.RightClickedNodeDataActions.SET_RIGHT_CLICKED_NODE_DATA:
209905
+ return action.payload;
209906
+
209907
+ default:
209908
+ return state;
209909
+ }
209910
+ };
209911
+
209912
+ /***/ }),
209913
+
209914
+ /***/ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.selector.ts":
209915
+ /*!****************************************************************************************************!*\
209916
+ !*** ./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.selector.ts ***!
209917
+ \****************************************************************************************************/
209918
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
209919
+
209920
+ "use strict";
209921
+ __webpack_require__.r(__webpack_exports__);
209922
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
209923
+ /* harmony export */ "rightClickedNodeDataSelector": () => (/* binding */ rightClickedNodeDataSelector)
209924
+ /* harmony export */ });
209925
+ /* harmony import */ var _angular_redux_createSelector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../angular-redux/createSelector */ "./app/codeCharta/state/angular-redux/createSelector.ts");
209926
+ /* harmony import */ var _appStatus_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../appStatus.selector */ "./app/codeCharta/state/store/appStatus/appStatus.selector.ts");
209927
+
209928
+
209929
+ const rightClickedNodeDataSelector = (0,_angular_redux_createSelector__WEBPACK_IMPORTED_MODULE_0__.createSelector)([_appStatus_selector__WEBPACK_IMPORTED_MODULE_1__.appStatusSelector], appStatus => appStatus.rightClickedNodeData);
209930
+
209931
+ /***/ }),
209932
+
209848
209933
  /***/ "./app/codeCharta/state/store/appStatus/selectedBuildingId/selectedBuildingId.actions.ts":
209849
209934
  /*!***********************************************************************************************!*\
209850
209935
  !*** ./app/codeCharta/state/store/appStatus/selectedBuildingId/selectedBuildingId.actions.ts ***!
@@ -214164,6 +214249,8 @@ __webpack_require__.r(__webpack_exports__);
214164
214249
  /* harmony import */ var _files_files_actions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./files/files.actions */ "./app/codeCharta/state/store/files/files.actions.ts");
214165
214250
  /* harmony import */ var _appStatus_hoveredBuildingPath_hoveredBuildingPath_actions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./appStatus/hoveredBuildingPath/hoveredBuildingPath.actions */ "./app/codeCharta/state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.actions.ts");
214166
214251
  /* harmony import */ var _appStatus_selectedBuildingId_selectedBuildingId_actions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./appStatus/selectedBuildingId/selectedBuildingId.actions */ "./app/codeCharta/state/store/appStatus/selectedBuildingId/selectedBuildingId.actions.ts");
214252
+ /* harmony import */ var _appStatus_rightClickedNodeData_rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./appStatus/rightClickedNodeData/rightClickedNodeData.actions */ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions.ts");
214253
+
214167
214254
 
214168
214255
 
214169
214256
 
@@ -214193,7 +214280,8 @@ const defaultState = {
214193
214280
  files: _files_files_actions__WEBPACK_IMPORTED_MODULE_5__.defaultFiles,
214194
214281
  appStatus: {
214195
214282
  hoveredBuildingPath: _appStatus_hoveredBuildingPath_hoveredBuildingPath_actions__WEBPACK_IMPORTED_MODULE_6__.defaultHoveredBuildingPath,
214196
- selectedBuildingId: _appStatus_selectedBuildingId_selectedBuildingId_actions__WEBPACK_IMPORTED_MODULE_7__.defaultSelectedBuildingId
214283
+ selectedBuildingId: _appStatus_selectedBuildingId_selectedBuildingId_actions__WEBPACK_IMPORTED_MODULE_7__.defaultSelectedBuildingId,
214284
+ rightClickedNodeData: _appStatus_rightClickedNodeData_rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_8__.defaultRightClickedNodeData
214197
214285
  }
214198
214286
  };
214199
214287
 
@@ -216897,11 +216985,13 @@ __webpack_require__.r(__webpack_exports__);
216897
216985
  /* harmony import */ var _util_codeMapHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/codeMapHelper */ "./app/codeCharta/util/codeMapHelper.ts");
216898
216986
  /* harmony import */ var _state_store_fileSettings_blacklist_blacklist_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../state/store/fileSettings/blacklist/blacklist.service */ "./app/codeCharta/state/store/fileSettings/blacklist/blacklist.service.ts");
216899
216987
  /* harmony import */ var _state_store_files_files_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../state/store/files/files.service */ "./app/codeCharta/state/store/files/files.service.ts");
216900
- /* harmony import */ var d3_hierarchy__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-hierarchy */ "./node_modules/d3-hierarchy/src/hierarchy/index.js");
216901
- /* harmony import */ var three__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! three */ "./node_modules/three/build/three.module.js");
216988
+ /* harmony import */ var d3_hierarchy__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-hierarchy */ "./node_modules/d3-hierarchy/src/hierarchy/index.js");
216989
+ /* harmony import */ var three__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! three */ "./node_modules/three/build/three.module.js");
216902
216990
  /* harmony import */ var _util_lazyLoader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/lazyLoader */ "./app/codeCharta/util/lazyLoader.ts");
216903
216991
  /* harmony import */ var _state_store_appStatus_hoveredBuildingPath_hoveredBuildingPath_actions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.actions */ "./app/codeCharta/state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.actions.ts");
216904
216992
  /* harmony import */ var _state_store_appStatus_hoveredBuildingPath_hoveredBuildingPath_selector__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.selector */ "./app/codeCharta/state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.selector.ts");
216993
+ /* harmony import */ var _state_store_appStatus_rightClickedNodeData_rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions */ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions.ts");
216994
+
216905
216995
 
216906
216996
 
216907
216997
 
@@ -216957,7 +217047,7 @@ class CodeMapMouseEventService {
216957
217047
  };
216958
217048
  this.isGrabbing = false;
216959
217049
  this.isMoving = false;
216960
- this.raycaster = new three__WEBPACK_IMPORTED_MODULE_7__.Raycaster();
217050
+ this.raycaster = new three__WEBPACK_IMPORTED_MODULE_8__.Raycaster();
216961
217051
  this.temporaryLabelForBuilding = null;
216962
217052
  this.hoveredBuildingPath = null;
216963
217053
  this.threeUpdateCycleService.register(() => this.threeRendererService.render());
@@ -217253,12 +217343,10 @@ class CodeMapMouseEventService {
217253
217343
  const building = this.intersectedBuilding;
217254
217344
 
217255
217345
  if (building && !this.hasMouseMovedMoreThanThreePixels(this.mouseOnLastClick)) {
217256
- document.dispatchEvent(new CustomEvent("building-right-clicked", {
217257
- detail: {
217258
- building,
217259
- x: this.mouse.x,
217260
- y: this.mouse.y
217261
- }
217346
+ this.storeService.dispatch((0,_state_store_appStatus_rightClickedNodeData_rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_7__.setRightClickedNodeData)({
217347
+ nodeId: building.node.id,
217348
+ xPositionOfRightClickEvent: this.mouse.x,
217349
+ yPositionOfRightClickEvent: this.mouse.y
217262
217350
  }));
217263
217351
  }
217264
217352
 
@@ -217307,7 +217395,7 @@ class CodeMapMouseEventService {
217307
217395
 
217308
217396
  for (const {
217309
217397
  data
217310
- } of (0,d3_hierarchy__WEBPACK_IMPORTED_MODULE_8__["default"])(codeMapNode)) {
217398
+ } of (0,d3_hierarchy__WEBPACK_IMPORTED_MODULE_9__["default"])(codeMapNode)) {
217311
217399
  const building = lookUp.idToBuilding.get(data.id);
217312
217400
 
217313
217401
  if (building) {
@@ -221061,6 +221149,8 @@ __webpack_require__.r(__webpack_exports__);
221061
221149
  /* harmony import */ var _CHANGELOG_md__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../CHANGELOG.md */ "../CHANGELOG.md");
221062
221150
  /* harmony import */ var _CHANGELOG_md__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_CHANGELOG_md__WEBPACK_IMPORTED_MODULE_0__);
221063
221151
  /* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../package.json */ "./package.json");
221152
+ /* harmony import */ var _dialog_changelog_component_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dialog.changelog.component.scss */ "./app/codeCharta/ui/dialog/dialog.changelog.component.scss");
221153
+
221064
221154
 
221065
221155
 
221066
221156
  class DialogChangelogController {
@@ -221093,7 +221183,7 @@ class DialogChangelogController {
221093
221183
  const end = this.findEndChangesLine(changelogLines, lineIndex);
221094
221184
 
221095
221185
  for (const changeLine of changelogLines.slice(start, end)) {
221096
- changelogTypes.push(changeLine);
221186
+ changelogTypes.push(`${changeLine}<br>`);
221097
221187
  }
221098
221188
  }
221099
221189
 
@@ -221609,28 +221699,47 @@ class DialogService {
221609
221699
  });
221610
221700
  }
221611
221701
 
221612
- showErrorDialogAndOpenFileChooser(message = "An error occurred.", title = "Error", button = "Ok") {
221702
+ showValidationDialog(fileValidationResults) {
221613
221703
  return __awaiter(this, void 0, void 0, function* () {
221614
- const prompt = this.$mdDialog.alert().clickOutsideToClose(true).title(title).htmlContent(message).ok(button);
221615
- yield this.$mdDialog.show(prompt);
221616
- document.getElementById("input-file-id").click();
221704
+ const htmlMessages = [];
221705
+ const filesWithErrors = fileValidationResults.filter(validationResult => {
221706
+ return validationResult.errors.length > 0;
221707
+ });
221708
+
221709
+ if (filesWithErrors.length > 0) {
221710
+ htmlMessages.push("<h2>Errors</h2>");
221711
+
221712
+ for (const fileWithErrors of filesWithErrors) {
221713
+ const fileErrorMessage = this.buildFileErrorMessage(fileWithErrors);
221714
+ htmlMessages.push(fileErrorMessage);
221715
+ }
221716
+ }
221717
+
221718
+ const filesWithWarnings = fileValidationResults.filter(validationResult => {
221719
+ return validationResult.warnings.length > 0;
221720
+ });
221721
+
221722
+ if (filesWithWarnings.length > 0) {
221723
+ htmlMessages.push("<h2>Warnings</h2>");
221724
+
221725
+ for (const fileWithWarnings of filesWithWarnings) {
221726
+ const fileWarningMessage = this.buildFileWarningMessage(fileWithWarnings);
221727
+ htmlMessages.push(fileWarningMessage);
221728
+ }
221729
+ }
221730
+
221731
+ yield this.showErrorDialog(htmlMessages.join(""), "Something is wrong with the uploaded file(s)");
221617
221732
  });
221618
221733
  }
221619
221734
 
221620
- showValidationWarningDialog(validationResult) {
221621
- return __awaiter(this, void 0, void 0, function* () {
221622
- const warningSymbol = '<i class="fa fa-exclamation-triangle"></i> ';
221623
- const htmlMessage = this.buildHtmlMessage(warningSymbol, validationResult.warning);
221624
- yield this.showErrorDialog(htmlMessage, "Validation Warning");
221625
- });
221735
+ buildFileErrorMessage(fileValidationResult) {
221736
+ const errorSymbol = '<i class="fa fa-exclamation-circle"></i> ';
221737
+ return `<p><strong>${fileValidationResult.fileName}:</strong> ${this.buildHtmlMessage(errorSymbol, fileValidationResult.errors)}</p>`;
221626
221738
  }
221627
221739
 
221628
- showValidationErrorDialog(validationResult) {
221629
- return __awaiter(this, void 0, void 0, function* () {
221630
- const errorSymbol = '<i class="fa fa-exclamation-circle"></i> ';
221631
- const htmlMessage = this.buildHtmlMessage(errorSymbol, validationResult.error);
221632
- yield this.showErrorDialogAndOpenFileChooser(htmlMessage, "Validation Error");
221633
- });
221740
+ buildFileWarningMessage(fileValidationResult) {
221741
+ const warningSymbol = '<i class="fa fa-exclamation-triangle"></i> ';
221742
+ return `<p><strong>${fileValidationResult.fileName}:</strong> ${this.buildHtmlMessage(warningSymbol, fileValidationResult.warnings)}</p>`;
221634
221743
  }
221635
221744
 
221636
221745
  buildHtmlMessage(symbol, validationResult) {
@@ -222365,6 +222474,8 @@ __webpack_require__.r(__webpack_exports__);
222365
222474
  /* harmony import */ var _model_files_files__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../model/files/files */ "./app/codeCharta/model/files/files.ts");
222366
222475
  /* harmony import */ var _codeCharta_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../codeCharta.service */ "./app/codeCharta/codeCharta.service.ts");
222367
222476
  /* harmony import */ var _state_store_dynamicSettings_recentFiles_recentFiles_actions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../state/store/dynamicSettings/recentFiles/recentFiles.actions */ "./app/codeCharta/state/store/dynamicSettings/recentFiles/recentFiles.actions.ts");
222477
+ /* harmony import */ var _state_store_appSettings_mapColors_mapColors_service__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../state/store/appSettings/mapColors/mapColors.service */ "./app/codeCharta/state/store/appSettings/mapColors/mapColors.service.ts");
222478
+
222368
222479
 
222369
222480
 
222370
222481
 
@@ -222379,57 +222490,114 @@ class FilePanelController {
222379
222490
  this.$rootScope = $rootScope;
222380
222491
  this.storeService = storeService;
222381
222492
  this._viewModel = {
222382
- isSingleState: null,
222383
222493
  isPartialState: null,
222384
222494
  isDeltaState: null,
222385
222495
  files: null,
222386
222496
  renderState: null,
222387
222497
  selectedFileNames: {
222388
- single: null,
222389
222498
  delta: {
222390
222499
  reference: null,
222391
222500
  comparison: null
222392
222501
  },
222393
222502
  partial: []
222394
222503
  },
222395
- pictogramFirstFileColor: null,
222396
222504
  pictogramUpperColor: null,
222397
222505
  pictogramLowerColor: null
222398
222506
  };
222399
- _state_store_files_files_service__WEBPACK_IMPORTED_MODULE_2__.FilesService.subscribe(this.$rootScope, this);
222400
- }
222401
222507
 
222402
- onRemoveFile(filename, state, $event) {
222403
- this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_1__.removeFile)(filename));
222404
- this.storeService.dispatch((0,_state_store_dynamicSettings_recentFiles_recentFiles_actions__WEBPACK_IMPORTED_MODULE_6__.removeRecentFile)(filename));
222405
- const files = this.storeService.getState().files;
222508
+ this.onPartialSelectionClosed = () => {
222509
+ this.updateSelectedFileNamesInViewModel();
222510
+ };
222406
222511
 
222407
- if (state === _model_files_files__WEBPACK_IMPORTED_MODULE_4__.FileSelectionState.Single) {
222408
- this.singleStateFileRemove(files);
222409
- } else {
222410
- this.partialStateFileRemove(files);
222411
- }
222512
+ this.onDeltaReferenceFileChange = referenceFileName => {
222513
+ const rootFile = this._viewModel.files.find(x => x.file.fileMeta.fileName === referenceFileName);
222412
222514
 
222413
- $event.stopPropagation();
222414
- $event.preventDefault();
222415
- }
222515
+ if (!rootFile) {
222516
+ return;
222517
+ }
222416
222518
 
222417
- singleStateFileRemove(files) {
222418
- if (!(0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_3__.isSingleState)(files)) {
222419
- this.selectRemainingFile(files);
222420
- } else {
222421
- this.keepSelection();
222422
- }
222519
+ const rootName = rootFile.file.map.name;
222520
+ _codeCharta_service__WEBPACK_IMPORTED_MODULE_5__.CodeChartaService.updateRootData(rootName);
222521
+ this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_1__.setDeltaByNames)(referenceFileName, this._viewModel.selectedFileNames.delta.comparison));
222522
+ };
222523
+
222524
+ this.onDeltaComparisonFileChange = comparisonFileName => {
222525
+ const referenceFileName = this._viewModel.selectedFileNames.delta.reference;
222526
+
222527
+ const rootName = this._viewModel.files.find(x => x.file.fileMeta.fileName === referenceFileName).file.map.name;
222528
+
222529
+ _codeCharta_service__WEBPACK_IMPORTED_MODULE_5__.CodeChartaService.updateRootData(rootName);
222530
+ this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_1__.setDeltaByNames)(referenceFileName, comparisonFileName));
222531
+ };
222532
+
222533
+ this.onPartialFilesChange = partialFileNames => {
222534
+ if (partialFileNames.length > 0) {
222535
+ this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_1__.setMultipleByNames)(partialFileNames));
222536
+ } else {
222537
+ this._viewModel.selectedFileNames.partial = [];
222538
+ }
222539
+ };
222540
+
222541
+ this.onDeltaStateSelected = () => {
222542
+ this._viewModel.selectedFileNames.delta.reference = this.getLastVisibleFileName();
222543
+ this.onDeltaComparisonFileChange(null);
222544
+ };
222545
+
222546
+ this.selectAllPartialFiles = () => {
222547
+ const allFileNames = this._viewModel.files.map(x => x.file.fileMeta.fileName);
222548
+
222549
+ this.onPartialFilesChange(allFileNames);
222550
+ };
222551
+
222552
+ this.selectRecentPartialFiles = () => {
222553
+ const recentFileNames = this.storeService.getState().dynamicSettings.recentFiles;
222554
+
222555
+ if (recentFileNames.length > 0) {
222556
+ this.onPartialFilesChange(recentFileNames);
222557
+ } else {
222558
+ this.selectAllPartialFiles();
222559
+ }
222560
+ };
222561
+
222562
+ this.selectZeroPartialFiles = () => {
222563
+ this.onPartialFilesChange([]);
222564
+ };
222565
+
222566
+ this.invertPartialFileSelection = () => {
222567
+ const invertedFileNames = [];
222568
+ const partialFileNames = new Set(this._viewModel.selectedFileNames.partial);
222569
+
222570
+ for (const {
222571
+ file: {
222572
+ fileMeta: {
222573
+ fileName
222574
+ }
222575
+ }
222576
+ } of this._viewModel.files) {
222577
+ if (!partialFileNames.has(fileName)) {
222578
+ invertedFileNames.push(fileName);
222579
+ }
222580
+ }
222581
+
222582
+ this.onPartialFilesChange(invertedFileNames);
222583
+ };
222584
+
222585
+ _state_store_files_files_service__WEBPACK_IMPORTED_MODULE_2__.FilesService.subscribe(this.$rootScope, this);
222586
+ _state_store_appSettings_mapColors_mapColors_service__WEBPACK_IMPORTED_MODULE_7__.MapColorsService.subscribe(this.$rootScope, this);
222423
222587
  }
222424
222588
 
222425
- keepSelection() {
222426
- const selectedFile = this.storeService.getState().files.find(fileState => fileState.selectedAs === _model_files_files__WEBPACK_IMPORTED_MODULE_4__.FileSelectionState.Single);
222427
- this.onSingleFileChange((0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_3__.getFileNameOf)(selectedFile));
222589
+ onMapColorsChanged(mapColors) {
222590
+ this._viewModel.pictogramUpperColor = mapColors.positiveDelta;
222591
+ this._viewModel.pictogramLowerColor = mapColors.negativeDelta;
222428
222592
  }
222429
222593
 
222430
- selectRemainingFile(files) {
222431
- const remainingFile = files[files.length - 1];
222432
- this.onSingleFileChange((0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_3__.getFileNameOf)(remainingFile));
222594
+ onRemoveFile(filename, $event) {
222595
+ this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_1__.removeFile)(filename));
222596
+ this.storeService.dispatch((0,_state_store_dynamicSettings_recentFiles_recentFiles_actions__WEBPACK_IMPORTED_MODULE_6__.removeRecentFile)(filename));
222597
+ const files = this.storeService.getState().files;
222598
+ this.partialStateFileRemove(files);
222599
+ $event.stopPropagation();
222600
+ $event.preventDefault();
222433
222601
  }
222434
222602
 
222435
222603
  partialStateFileRemove(files) {
@@ -222444,31 +222612,16 @@ class FilePanelController {
222444
222612
 
222445
222613
  onFilesSelectionChanged(files) {
222446
222614
  this._viewModel.files = files;
222447
- this._viewModel.isSingleState = (0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_3__.isSingleState)(files);
222448
222615
  this._viewModel.isPartialState = (0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_3__.isPartialState)(files);
222449
222616
  this._viewModel.isDeltaState = (0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_3__.isDeltaState)(files);
222450
- this.setPictogramColor();
222451
222617
  this.updateSelectedFileNamesInViewModel();
222452
222618
  this.lastRenderState = this._viewModel.renderState;
222453
222619
  }
222454
222620
 
222455
- onPartialSelectionClosed() {
222456
- this.updateSelectedFileNamesInViewModel();
222457
- }
222458
-
222459
- setPictogramColor() {
222460
- this._viewModel.pictogramFirstFileColor = "#808080";
222461
- this._viewModel.pictogramUpperColor = this.storeService.getState().appSettings.mapColors.positiveDelta;
222462
- this._viewModel.pictogramLowerColor = this.storeService.getState().appSettings.mapColors.negativeDelta;
222463
- }
222464
-
222465
222621
  updateSelectedFileNamesInViewModel() {
222466
222622
  const visibleFileStates = (0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_3__.getVisibleFileStates)(this._viewModel.files);
222467
222623
 
222468
- if (this._viewModel.isSingleState) {
222469
- this._viewModel.renderState = _model_files_files__WEBPACK_IMPORTED_MODULE_4__.FileSelectionState.Single;
222470
- this._viewModel.selectedFileNames.single = visibleFileStates[0].file.fileMeta.fileName;
222471
- } else if (this._viewModel.isDeltaState) {
222624
+ if (this._viewModel.isDeltaState) {
222472
222625
  this._viewModel.renderState = _model_files_files__WEBPACK_IMPORTED_MODULE_4__.FileSelectionState.Comparison;
222473
222626
  let reference = visibleFileStates[0].file.fileMeta.fileName;
222474
222627
  let comparison = visibleFileStates[visibleFileStates.length - 1].file.fileMeta.fileName;
@@ -222487,96 +222640,7 @@ class FilePanelController {
222487
222640
  }
222488
222641
  }
222489
222642
 
222490
- onSingleFileChange(singleFileName) {
222491
- this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_1__.setSingleByName)(singleFileName));
222492
-
222493
- const rootName = this._viewModel.files.find(x => x.selectedAs === _model_files_files__WEBPACK_IMPORTED_MODULE_4__.FileSelectionState.Single).file.map.name;
222494
-
222495
- _codeCharta_service__WEBPACK_IMPORTED_MODULE_5__.CodeChartaService.updateRootData(rootName);
222496
- }
222497
-
222498
- onDeltaReferenceFileChange(referenceFileName) {
222499
- const rootName = this._viewModel.files.find(x => x.file.fileMeta.fileName === referenceFileName).file.map.name;
222500
-
222501
- _codeCharta_service__WEBPACK_IMPORTED_MODULE_5__.CodeChartaService.updateRootData(rootName);
222502
- this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_1__.setDeltaByNames)(referenceFileName, this._viewModel.selectedFileNames.delta.comparison));
222503
- }
222504
-
222505
- onDeltaComparisonFileChange(comparisonFileName) {
222506
- const referenceFileName = this._viewModel.selectedFileNames.delta.reference;
222507
-
222508
- const rootName = this._viewModel.files.find(x => x.file.fileMeta.fileName === referenceFileName).file.map.name;
222509
-
222510
- _codeCharta_service__WEBPACK_IMPORTED_MODULE_5__.CodeChartaService.updateRootData(rootName);
222511
- this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_1__.setDeltaByNames)(referenceFileName, comparisonFileName));
222512
- }
222513
-
222514
- onPartialFilesChange(partialFileNames) {
222515
- if (partialFileNames.length > 0) {
222516
- this.storeService.dispatch((0,_state_store_files_files_actions__WEBPACK_IMPORTED_MODULE_1__.setMultipleByNames)(partialFileNames));
222517
- } else {
222518
- this._viewModel.selectedFileNames.partial = [];
222519
- }
222520
- }
222521
-
222522
- onSingleStateSelected() {
222523
- this._viewModel.selectedFileNames.single = this.getLastVisibleFileName();
222524
- this.onSingleFileChange(this._viewModel.selectedFileNames.single);
222525
- }
222526
-
222527
- onPartialStateSelected() {
222528
- this.selectRecentPartialFiles();
222529
- }
222530
-
222531
- onDeltaStateSelected() {
222532
- this._viewModel.selectedFileNames.delta.reference = this.getLastVisibleFileName();
222533
- this.onDeltaComparisonFileChange(null);
222534
- }
222535
-
222536
- selectAllPartialFiles() {
222537
- const allFileNames = this._viewModel.files.map(x => x.file.fileMeta.fileName);
222538
-
222539
- this.onPartialFilesChange(allFileNames);
222540
- }
222541
-
222542
- selectRecentPartialFiles() {
222543
- const recentFileNames = this.storeService.getState().dynamicSettings.recentFiles;
222544
-
222545
- if (recentFileNames.length > 0) {
222546
- this.onPartialFilesChange(recentFileNames);
222547
- } else {
222548
- this.selectAllPartialFiles();
222549
- }
222550
- }
222551
-
222552
- selectZeroPartialFiles() {
222553
- this.onPartialFilesChange([]);
222554
- }
222555
-
222556
- invertPartialFileSelection() {
222557
- const invertedFileNames = [];
222558
- const partialFileNames = new Set(this._viewModel.selectedFileNames.partial);
222559
-
222560
- for (const {
222561
- file: {
222562
- fileMeta: {
222563
- fileName
222564
- }
222565
- }
222566
- } of this._viewModel.files) {
222567
- if (!partialFileNames.has(fileName)) {
222568
- invertedFileNames.push(fileName);
222569
- }
222570
- }
222571
-
222572
- this.onPartialFilesChange(invertedFileNames);
222573
- }
222574
-
222575
222643
  getLastVisibleFileName() {
222576
- if (this.lastRenderState === _model_files_files__WEBPACK_IMPORTED_MODULE_4__.FileSelectionState.Single) {
222577
- return this._viewModel.selectedFileNames.single;
222578
- }
222579
-
222580
222644
  if (this.lastRenderState === _model_files_files__WEBPACK_IMPORTED_MODULE_4__.FileSelectionState.Partial) {
222581
222645
  const visibleFileStates = (0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_3__.getVisibleFileStates)(this._viewModel.files);
222582
222646
 
@@ -222595,7 +222659,7 @@ class FilePanelController {
222595
222659
  }
222596
222660
  FilePanelController.$inject = ["$rootScope", "storeService"];
222597
222661
  const filePanelComponent = {
222598
- selector: "filePanelComponent",
222662
+ selector: "ccFilePanel",
222599
222663
  template: __webpack_require__(/*! ./filePanel.component.html */ "./app/codeCharta/ui/filePanel/filePanel.component.html"),
222600
222664
  controller: FilePanelController
222601
222665
  };
@@ -222615,11 +222679,162 @@ __webpack_require__.r(__webpack_exports__);
222615
222679
  /* harmony import */ var _state_state_module__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../state/state.module */ "./app/codeCharta/state/state.module.ts");
222616
222680
  /* harmony import */ var _dialog_dialog_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dialog/dialog.module */ "./app/codeCharta/ui/dialog/dialog.module.ts");
222617
222681
  /* harmony import */ var _filePanel_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./filePanel.component */ "./app/codeCharta/ui/filePanel/filePanel.component.ts");
222682
+ /* harmony import */ var _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/upgrade/static */ "./node_modules/@angular/upgrade/fesm2015/static.js");
222683
+ /* harmony import */ var _filePanelFileSelector_filePanelFileSelector_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./filePanelFileSelector/filePanelFileSelector.component */ "./app/codeCharta/ui/filePanel/filePanelFileSelector/filePanelFileSelector.component.ts");
222684
+ /* harmony import */ var _filePanelStateButtons_filePanelStateButtons_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./filePanelStateButtons/filePanelStateButtons.component */ "./app/codeCharta/ui/filePanel/filePanelStateButtons/filePanelStateButtons.component.ts");
222685
+ /* harmony import */ var _filePanelDeltaSelector_filePanelDeltaSelector_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./filePanelDeltaSelector/filePanelDeltaSelector.component */ "./app/codeCharta/ui/filePanel/filePanelDeltaSelector/filePanelDeltaSelector.component.ts");
222686
+
222687
+
222688
+
222689
+
222690
+
222691
+
222692
+
222693
+
222694
+ angular__WEBPACK_IMPORTED_MODULE_0___default().module("app.codeCharta.ui.filePanel", ["app.codeCharta.state"]).component(_filePanel_component__WEBPACK_IMPORTED_MODULE_3__.filePanelComponent.selector, _filePanel_component__WEBPACK_IMPORTED_MODULE_3__.filePanelComponent).directive("ccFilePanelFileSelector", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_7__.downgradeComponent)({
222695
+ component: _filePanelFileSelector_filePanelFileSelector_component__WEBPACK_IMPORTED_MODULE_4__.FilePanelFileSelectorComponent
222696
+ })).directive("ccFilePanelStateButtons", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_7__.downgradeComponent)({
222697
+ component: _filePanelStateButtons_filePanelStateButtons_component__WEBPACK_IMPORTED_MODULE_5__.FilePanelStateButtonsComponent
222698
+ })).directive("ccFilePanelDeltaSelector", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_7__.downgradeComponent)({
222699
+ component: _filePanelDeltaSelector_filePanelDeltaSelector_component__WEBPACK_IMPORTED_MODULE_6__.FilePanelDeltaSelectorComponent
222700
+ }));
222701
+
222702
+ /***/ }),
222703
+
222704
+ /***/ "./app/codeCharta/ui/filePanel/filePanelDeltaSelector/filePanelDeltaSelector.component.ts":
222705
+ /*!************************************************************************************************!*\
222706
+ !*** ./app/codeCharta/ui/filePanel/filePanelDeltaSelector/filePanelDeltaSelector.component.ts ***!
222707
+ \************************************************************************************************/
222708
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
222709
+
222710
+ "use strict";
222711
+ __webpack_require__.r(__webpack_exports__);
222712
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
222713
+ /* harmony export */ "FilePanelDeltaSelectorComponent": () => (/* binding */ FilePanelDeltaSelectorComponent)
222714
+ /* harmony export */ });
222715
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
222716
+ var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
222717
+ var c = arguments.length,
222718
+ r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
222719
+ d;
222720
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
222721
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
222722
+ };
222723
+
222724
+ var __metadata = undefined && undefined.__metadata || function (k, v) {
222725
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
222726
+ };
222727
+
222728
+
222729
+ let FilePanelDeltaSelectorComponent = class FilePanelDeltaSelectorComponent {};
222730
+
222731
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Array)], FilePanelDeltaSelectorComponent.prototype, "files", void 0);
222732
+
222733
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", String)], FilePanelDeltaSelectorComponent.prototype, "pictogramFirstColor", void 0);
222734
+
222735
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", String)], FilePanelDeltaSelectorComponent.prototype, "pictogramUpperColor", void 0);
222736
+
222737
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", String)], FilePanelDeltaSelectorComponent.prototype, "pictogramLowerColor", void 0);
222738
+
222739
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Function)], FilePanelDeltaSelectorComponent.prototype, "handleDeltaReferenceFileChange", void 0);
222740
+
222741
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Function)], FilePanelDeltaSelectorComponent.prototype, "handleDeltaComparisonFileChange", void 0);
222742
+
222743
+ FilePanelDeltaSelectorComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Component)({
222744
+ selector: "cc-file-panel-delta-selector",
222745
+ template: __webpack_require__(/*! ./filePanelDeltaSelector.component.html */ "./app/codeCharta/ui/filePanel/filePanelDeltaSelector/filePanelDeltaSelector.component.html")
222746
+ })], FilePanelDeltaSelectorComponent);
222747
+
222748
+
222749
+ /***/ }),
222750
+
222751
+ /***/ "./app/codeCharta/ui/filePanel/filePanelFileSelector/filePanelFileSelector.component.ts":
222752
+ /*!**********************************************************************************************!*\
222753
+ !*** ./app/codeCharta/ui/filePanel/filePanelFileSelector/filePanelFileSelector.component.ts ***!
222754
+ \**********************************************************************************************/
222755
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
222756
+
222757
+ "use strict";
222758
+ __webpack_require__.r(__webpack_exports__);
222759
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
222760
+ /* harmony export */ "FilePanelFileSelectorComponent": () => (/* binding */ FilePanelFileSelectorComponent)
222761
+ /* harmony export */ });
222762
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
222763
+ var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
222764
+ var c = arguments.length,
222765
+ r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
222766
+ d;
222767
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
222768
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
222769
+ };
222770
+
222771
+ var __metadata = undefined && undefined.__metadata || function (k, v) {
222772
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
222773
+ };
222774
+
222775
+
222776
+ let FilePanelFileSelectorComponent = class FilePanelFileSelectorComponent {};
222777
+
222778
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Array)], FilePanelFileSelectorComponent.prototype, "files", void 0);
222779
+
222780
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Array)], FilePanelFileSelectorComponent.prototype, "selectedFileNames", void 0);
222781
+
222782
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Function)], FilePanelFileSelectorComponent.prototype, "handleSelectedFilesChanged", void 0);
222783
+
222784
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Function)], FilePanelFileSelectorComponent.prototype, "handleSelectAllPartialFiles", void 0);
222785
+
222786
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Function)], FilePanelFileSelectorComponent.prototype, "handleSelectZeroPartialFiles", void 0);
222787
+
222788
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Function)], FilePanelFileSelectorComponent.prototype, "handleInvertSelectedPartialFiles", void 0);
222789
+
222790
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Function)], FilePanelFileSelectorComponent.prototype, "handleOnSelectionClosed", void 0);
222791
+
222792
+ FilePanelFileSelectorComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Component)({
222793
+ selector: "cc-file-panel-file-selector",
222794
+ template: __webpack_require__(/*! ./filePanelFileSelector.component.html */ "./app/codeCharta/ui/filePanel/filePanelFileSelector/filePanelFileSelector.component.html")
222795
+ })], FilePanelFileSelectorComponent);
222796
+
222797
+
222798
+ /***/ }),
222799
+
222800
+ /***/ "./app/codeCharta/ui/filePanel/filePanelStateButtons/filePanelStateButtons.component.ts":
222801
+ /*!**********************************************************************************************!*\
222802
+ !*** ./app/codeCharta/ui/filePanel/filePanelStateButtons/filePanelStateButtons.component.ts ***!
222803
+ \**********************************************************************************************/
222804
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
222805
+
222806
+ "use strict";
222807
+ __webpack_require__.r(__webpack_exports__);
222808
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
222809
+ /* harmony export */ "FilePanelStateButtonsComponent": () => (/* binding */ FilePanelStateButtonsComponent)
222810
+ /* harmony export */ });
222811
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
222812
+ var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
222813
+ var c = arguments.length,
222814
+ r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
222815
+ d;
222816
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
222817
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
222818
+ };
222819
+
222820
+ var __metadata = undefined && undefined.__metadata || function (k, v) {
222821
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
222822
+ };
222823
+
222824
+
222825
+ let FilePanelStateButtonsComponent = class FilePanelStateButtonsComponent {};
222826
+
222827
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Boolean)], FilePanelStateButtonsComponent.prototype, "isDeltaState", void 0);
222618
222828
 
222829
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Function)], FilePanelStateButtonsComponent.prototype, "handleStandardButtonClicked", void 0);
222619
222830
 
222831
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", Function)], FilePanelStateButtonsComponent.prototype, "handleDeltaButtonClicked", void 0);
222620
222832
 
222833
+ FilePanelStateButtonsComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Component)({
222834
+ selector: "cc-file-panel-state-buttons",
222835
+ template: __webpack_require__(/*! ./filePanelStateButtons.component.html */ "./app/codeCharta/ui/filePanel/filePanelStateButtons/filePanelStateButtons.component.html")
222836
+ })], FilePanelStateButtonsComponent);
222621
222837
 
222622
- angular__WEBPACK_IMPORTED_MODULE_0___default().module("app.codeCharta.ui.filePanel", ["app.codeCharta.state"]).component(_filePanel_component__WEBPACK_IMPORTED_MODULE_3__.filePanelComponent.selector, _filePanel_component__WEBPACK_IMPORTED_MODULE_3__.filePanelComponent);
222623
222838
 
222624
222839
  /***/ }),
222625
222840
 
@@ -223874,11 +224089,12 @@ __webpack_require__.r(__webpack_exports__);
223874
224089
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
223875
224090
  /* harmony export */ "MapTreeViewLevelComponent": () => (/* binding */ MapTreeViewLevelComponent)
223876
224091
  /* harmony export */ });
223877
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
224092
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
223878
224093
  /* harmony import */ var _state_angular_redux_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../state/angular-redux/store */ "./app/codeCharta/state/angular-redux/store.ts");
223879
224094
  /* harmony import */ var _state_store_appStatus_hoveredBuildingPath_hoveredBuildingPath_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.selector */ "./app/codeCharta/state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.selector.ts");
223880
224095
  /* harmony import */ var _state_store_appStatus_hoveredBuildingPath_hoveredBuildingPath_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.actions */ "./app/codeCharta/state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.actions.ts");
223881
- /* harmony import */ var _nodeContextMenu_nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../nodeContextMenu/nodeContextMenu.component */ "./app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.ts");
224096
+ /* harmony import */ var _state_store_appStatus_rightClickedNodeData_rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions */ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions.ts");
224097
+ /* harmony import */ var _state_store_appStatus_rightClickedNodeData_rightClickedNodeData_selector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../state/store/appStatus/rightClickedNodeData/rightClickedNodeData.selector */ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.selector.ts");
223882
224098
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
223883
224099
  var c = arguments.length,
223884
224100
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -223902,27 +224118,30 @@ var __param = undefined && undefined.__param || function (paramIndex, decorator)
223902
224118
 
223903
224119
 
223904
224120
 
224121
+
223905
224122
  let MapTreeViewLevelComponent = class MapTreeViewLevelComponent {
223906
224123
  constructor(store) {
223907
224124
  this.store = store;
223908
224125
  this.isOpen = false;
223909
- this.isContextMenuOpenForNode = false;
223910
224126
 
223911
224127
  this.openNodeContextMenu = $event => {
223912
224128
  $event.stopPropagation();
223913
224129
  $event.preventDefault();
223914
- this.isContextMenuOpenForNode = true;
223915
- _nodeContextMenu_nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_3__.NodeContextMenuController.broadcastShowEvent(undefined, this.node.path, this.node.type, $event.clientX, $event.clientY);
224130
+ this.store.dispatch((0,_state_store_appStatus_rightClickedNodeData_rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_3__.setRightClickedNodeData)({
224131
+ nodeId: this.node.id,
224132
+ xPositionOfRightClickEvent: $event.clientX,
224133
+ yPositionOfRightClickEvent: $event.clientY
224134
+ }));
223916
224135
  document.querySelector(".tree-element-0").addEventListener("scroll", this.scrollFunction);
223917
224136
  };
223918
224137
 
223919
224138
  this.scrollFunction = () => {
223920
- _nodeContextMenu_nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_3__.NodeContextMenuController.broadcastHideEvent();
224139
+ this.store.dispatch((0,_state_store_appStatus_rightClickedNodeData_rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_3__.setRightClickedNodeData)(null));
223921
224140
  document.querySelector(".tree-element-0").removeEventListener("scroll", this.scrollFunction);
223922
224141
  };
223923
224142
 
223924
224143
  this.hoveredBuildingPath$ = this.store.select(_state_store_appStatus_hoveredBuildingPath_hoveredBuildingPath_selector__WEBPACK_IMPORTED_MODULE_1__.hoveredBuildingPathSelector);
223925
- _nodeContextMenu_nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_3__.NodeContextMenuController.subscribeToHideNodeContextMenu(undefined, this);
224144
+ this.rightClickedNodeData$ = this.store.select(_state_store_appStatus_rightClickedNodeData_rightClickedNodeData_selector__WEBPACK_IMPORTED_MODULE_4__.rightClickedNodeDataSelector);
223926
224145
  }
223927
224146
 
223928
224147
  ngOnInit() {
@@ -223931,10 +224150,6 @@ let MapTreeViewLevelComponent = class MapTreeViewLevelComponent {
223931
224150
  }
223932
224151
  }
223933
224152
 
223934
- onHideNodeContextMenu() {
223935
- this.isContextMenuOpenForNode = false;
223936
- }
223937
-
223938
224153
  onMouseEnter() {
223939
224154
  this.store.dispatch((0,_state_store_appStatus_hoveredBuildingPath_hoveredBuildingPath_actions__WEBPACK_IMPORTED_MODULE_2__.setHoveredBuildingPath)(this.node.path));
223940
224155
  }
@@ -223949,14 +224164,14 @@ let MapTreeViewLevelComponent = class MapTreeViewLevelComponent {
223949
224164
 
223950
224165
  };
223951
224166
 
223952
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_4__.Input)(), __metadata("design:type", Object)], MapTreeViewLevelComponent.prototype, "node", void 0);
224167
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_5__.Input)(), __metadata("design:type", Object)], MapTreeViewLevelComponent.prototype, "node", void 0);
223953
224168
 
223954
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_4__.Input)(), __metadata("design:type", Number)], MapTreeViewLevelComponent.prototype, "depth", void 0);
224169
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_5__.Input)(), __metadata("design:type", Number)], MapTreeViewLevelComponent.prototype, "depth", void 0);
223955
224170
 
223956
- MapTreeViewLevelComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_4__.Component)({
224171
+ MapTreeViewLevelComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_5__.Component)({
223957
224172
  selector: "cc-map-tree-view-level",
223958
224173
  template: __webpack_require__(/*! ./mapTreeViewLevel.component.html */ "./app/codeCharta/ui/mapTreeView/mapTreeViewLevel/mapTreeViewLevel.component.html")
223959
- }), __param(0, (0,_angular_core__WEBPACK_IMPORTED_MODULE_4__.Inject)(_state_angular_redux_store__WEBPACK_IMPORTED_MODULE_0__.Store)), __metadata("design:paramtypes", [_state_angular_redux_store__WEBPACK_IMPORTED_MODULE_0__.Store])], MapTreeViewLevelComponent);
224174
+ }), __param(0, (0,_angular_core__WEBPACK_IMPORTED_MODULE_5__.Inject)(_state_angular_redux_store__WEBPACK_IMPORTED_MODULE_0__.Store)), __metadata("design:paramtypes", [_state_angular_redux_store__WEBPACK_IMPORTED_MODULE_0__.Store])], MapTreeViewLevelComponent);
223960
224175
 
223961
224176
 
223962
224177
  /***/ }),
@@ -224813,19 +225028,23 @@ IsNodeFocusedPipe = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Pi
224813
225028
 
224814
225029
  /***/ }),
224815
225030
 
224816
- /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts":
224817
- /*!****************************************************************************************************!*\
224818
- !*** ./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts ***!
224819
- \****************************************************************************************************/
225031
+ /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.ts":
225032
+ /*!************************************************************************************!*\
225033
+ !*** ./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.ts ***!
225034
+ \************************************************************************************/
224820
225035
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
224821
225036
 
224822
225037
  "use strict";
224823
225038
  __webpack_require__.r(__webpack_exports__);
224824
225039
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
224825
- /* harmony export */ "MarkFolderColorPickerComponent": () => (/* binding */ MarkFolderColorPickerComponent)
225040
+ /* harmony export */ "MarkFolderRowComponent": () => (/* binding */ MarkFolderRowComponent)
224826
225041
  /* harmony export */ });
224827
- /* harmony import */ var _markFolderColorPicker_component_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./markFolderColorPicker.component.scss */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.scss");
224828
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
225042
+ /* harmony import */ var _markFolderRow_component_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./markFolderRow.component.scss */ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.scss");
225043
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
225044
+ /* harmony import */ var _state_angular_redux_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../state/angular-redux/store */ "./app/codeCharta/state/angular-redux/store.ts");
225045
+ /* harmony import */ var _state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../state/store/fileSettings/markedPackages/markedPackages.actions */ "./app/codeCharta/state/store/fileSettings/markedPackages/markedPackages.actions.ts");
225046
+ /* harmony import */ var _selectors_markFolderItems_selector__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./selectors/markFolderItems.selector */ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/markFolderItems.selector.ts");
225047
+ /* harmony import */ var _selectors_rightClickedNode_selector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./selectors/rightClickedNode.selector */ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/rightClickedNode.selector.ts");
224829
225048
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
224830
225049
  var c = arguments.length,
224831
225050
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -224838,35 +225057,62 @@ var __metadata = undefined && undefined.__metadata || function (k, v) {
224838
225057
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
224839
225058
  };
224840
225059
 
225060
+ var __param = undefined && undefined.__param || function (paramIndex, decorator) {
225061
+ return function (target, key) {
225062
+ decorator(target, key, paramIndex);
225063
+ };
225064
+ };
225065
+
225066
+
225067
+
224841
225068
 
224842
225069
 
224843
- let MarkFolderColorPickerComponent = class MarkFolderColorPickerComponent {};
224844
225070
 
224845
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.Input)(), __metadata("design:type", Function)], MarkFolderColorPickerComponent.prototype, "markFolder", void 0);
224846
225071
 
224847
- MarkFolderColorPickerComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.Component)({
224848
- selector: "cc-mark-folder-color-picker",
224849
- template: __webpack_require__(/*! ./markFolderColorPicker.component.html */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.html")
224850
- })], MarkFolderColorPickerComponent);
225072
+ let MarkFolderRowComponent = class MarkFolderRowComponent {
225073
+ constructor(store) {
225074
+ this.store = store;
225075
+ this.markFolderItems$ = store.select(_selectors_markFolderItems_selector__WEBPACK_IMPORTED_MODULE_3__.markFolderItemsSelector);
225076
+ this.node$ = store.select(_selectors_rightClickedNode_selector__WEBPACK_IMPORTED_MODULE_4__.rightClickedNodeSelector);
225077
+ }
225078
+
225079
+ markFolder(path, color) {
225080
+ this.store.dispatch((0,_state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_2__.markPackages)([{
225081
+ path,
225082
+ color
225083
+ }]));
225084
+ }
225085
+
225086
+ unmarkFolder(path) {
225087
+ this.store.dispatch((0,_state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_2__.unmarkPackage)({
225088
+ path
225089
+ }));
225090
+ }
225091
+
225092
+ };
225093
+ MarkFolderRowComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_5__.Component)({
225094
+ selector: "cc-mark-folder-row",
225095
+ template: __webpack_require__(/*! ./markFolderRow.component.html */ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.html")
225096
+ }), __param(0, (0,_angular_core__WEBPACK_IMPORTED_MODULE_5__.Inject)(_state_angular_redux_store__WEBPACK_IMPORTED_MODULE_1__.Store)), __metadata("design:paramtypes", [_state_angular_redux_store__WEBPACK_IMPORTED_MODULE_1__.Store])], MarkFolderRowComponent);
224851
225097
 
224852
225098
 
224853
225099
  /***/ }),
224854
225100
 
224855
- /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.module.ts":
224856
- /*!*************************************************************************************************!*\
224857
- !*** ./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.module.ts ***!
224858
- \*************************************************************************************************/
225101
+ /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.module.ts":
225102
+ /*!*********************************************************************************!*\
225103
+ !*** ./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.module.ts ***!
225104
+ \*********************************************************************************/
224859
225105
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
224860
225106
 
224861
225107
  "use strict";
224862
225108
  __webpack_require__.r(__webpack_exports__);
224863
225109
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
224864
- /* harmony export */ "MarkFolderColorPickerModule": () => (/* binding */ MarkFolderColorPickerModule)
225110
+ /* harmony export */ "MarkFolderRowModule": () => (/* binding */ MarkFolderRowModule)
224865
225111
  /* harmony export */ });
224866
225112
  /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm2015/common.js");
224867
225113
  /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
224868
225114
  /* harmony import */ var _colorPicker_colorPicker_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../colorPicker/colorPicker.module */ "./app/codeCharta/ui/colorPicker/colorPicker.module.ts");
224869
- /* harmony import */ var _markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./markFolderColorPicker.component */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts");
225115
+ /* harmony import */ var _markFolderRow_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./markFolderRow.component */ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.ts");
224870
225116
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
224871
225117
  var c = arguments.length,
224872
225118
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -224879,14 +225125,75 @@ var __decorate = undefined && undefined.__decorate || function (decorators, targ
224879
225125
 
224880
225126
 
224881
225127
 
224882
- let MarkFolderColorPickerModule = class MarkFolderColorPickerModule {};
224883
- MarkFolderColorPickerModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_2__.NgModule)({
225128
+ let MarkFolderRowModule = class MarkFolderRowModule {};
225129
+ MarkFolderRowModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_2__.NgModule)({
224884
225130
  imports: [_angular_common__WEBPACK_IMPORTED_MODULE_3__.CommonModule, _colorPicker_colorPicker_module__WEBPACK_IMPORTED_MODULE_0__.ColorPickerModule],
224885
- declarations: [_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_1__.MarkFolderColorPickerComponent],
224886
- exports: [_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_1__.MarkFolderColorPickerComponent]
224887
- })], MarkFolderColorPickerModule);
225131
+ declarations: [_markFolderRow_component__WEBPACK_IMPORTED_MODULE_1__.MarkFolderRowComponent],
225132
+ exports: [_markFolderRow_component__WEBPACK_IMPORTED_MODULE_1__.MarkFolderRowComponent]
225133
+ })], MarkFolderRowModule);
224888
225134
 
224889
225135
 
225136
+ /***/ }),
225137
+
225138
+ /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/markFolderItems.selector.ts":
225139
+ /*!***********************************************************************************************!*\
225140
+ !*** ./app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/markFolderItems.selector.ts ***!
225141
+ \***********************************************************************************************/
225142
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
225143
+
225144
+ "use strict";
225145
+ __webpack_require__.r(__webpack_exports__);
225146
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
225147
+ /* harmony export */ "_getMarkFolderItems": () => (/* binding */ _getMarkFolderItems),
225148
+ /* harmony export */ "markFolderItemsSelector": () => (/* binding */ markFolderItemsSelector)
225149
+ /* harmony export */ });
225150
+ /* harmony import */ var _state_angular_redux_createSelector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../state/angular-redux/createSelector */ "./app/codeCharta/state/angular-redux/createSelector.ts");
225151
+ /* harmony import */ var _state_store_appSettings_mapColors_mapColors_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../state/store/appSettings/mapColors/mapColors.selector */ "./app/codeCharta/state/store/appSettings/mapColors/mapColors.selector.ts");
225152
+ /* harmony import */ var _state_store_fileSettings_markedPackages_markedPackages_selector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../state/store/fileSettings/markedPackages/markedPackages.selector */ "./app/codeCharta/state/store/fileSettings/markedPackages/markedPackages.selector.ts");
225153
+ /* harmony import */ var _state_store_fileSettings_markedPackages_util_findIndexOfMarkedPackageOrParent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../state/store/fileSettings/markedPackages/util/findIndexOfMarkedPackageOrParent */ "./app/codeCharta/state/store/fileSettings/markedPackages/util/findIndexOfMarkedPackageOrParent.ts");
225154
+ /* harmony import */ var _rightClickedNode_selector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./rightClickedNode.selector */ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/rightClickedNode.selector.ts");
225155
+
225156
+
225157
+
225158
+
225159
+
225160
+ const markingColorsSelector = (0,_state_angular_redux_createSelector__WEBPACK_IMPORTED_MODULE_0__.createSelector)([_state_store_appSettings_mapColors_mapColors_selector__WEBPACK_IMPORTED_MODULE_1__.mapColorsSelector], mapColors => mapColors.markingColors);
225161
+ const _getMarkFolderItems = (node, markingColors, markedPackages) => {
225162
+ if (node === null) return markingColors.map(color => ({
225163
+ color,
225164
+ isMarked: false
225165
+ }));
225166
+ const nodeIndexWithinMarkedPackages = (0,_state_store_fileSettings_markedPackages_util_findIndexOfMarkedPackageOrParent__WEBPACK_IMPORTED_MODULE_3__.findIndexOfMarkedPackageOrParent)(markedPackages, node.path);
225167
+ return markingColors.map(color => ({
225168
+ color,
225169
+ isMarked: nodeIndexWithinMarkedPackages !== -1 && color === markedPackages[nodeIndexWithinMarkedPackages].color
225170
+ }));
225171
+ };
225172
+ const markFolderItemsSelector = (0,_state_angular_redux_createSelector__WEBPACK_IMPORTED_MODULE_0__.createSelector)([_rightClickedNode_selector__WEBPACK_IMPORTED_MODULE_4__.rightClickedNodeSelector, markingColorsSelector, _state_store_fileSettings_markedPackages_markedPackages_selector__WEBPACK_IMPORTED_MODULE_2__.markedPackagesSelector], _getMarkFolderItems);
225173
+
225174
+ /***/ }),
225175
+
225176
+ /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/rightClickedNode.selector.ts":
225177
+ /*!************************************************************************************************!*\
225178
+ !*** ./app/codeCharta/ui/nodeContextMenu/markFolderRow/selectors/rightClickedNode.selector.ts ***!
225179
+ \************************************************************************************************/
225180
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
225181
+
225182
+ "use strict";
225183
+ __webpack_require__.r(__webpack_exports__);
225184
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
225185
+ /* harmony export */ "_getNode": () => (/* binding */ _getNode),
225186
+ /* harmony export */ "rightClickedNodeSelector": () => (/* binding */ rightClickedNodeSelector)
225187
+ /* harmony export */ });
225188
+ /* harmony import */ var _state_angular_redux_createSelector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../state/angular-redux/createSelector */ "./app/codeCharta/state/angular-redux/createSelector.ts");
225189
+ /* harmony import */ var _state_store_appStatus_rightClickedNodeData_rightClickedNodeData_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../state/store/appStatus/rightClickedNodeData/rightClickedNodeData.selector */ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.selector.ts");
225190
+ /* harmony import */ var _state_store_lookUp_idToBuilding_idToBuilding_selector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../state/store/lookUp/idToBuilding/idToBuilding.selector */ "./app/codeCharta/state/store/lookUp/idToBuilding/idToBuilding.selector.ts");
225191
+
225192
+
225193
+
225194
+ const _getNode = (idToBuilding, rightClickedNodeData) => rightClickedNodeData !== null ? idToBuilding.get(rightClickedNodeData.nodeId).node : null;
225195
+ const rightClickedNodeSelector = (0,_state_angular_redux_createSelector__WEBPACK_IMPORTED_MODULE_0__.createSelector)([_state_store_lookUp_idToBuilding_idToBuilding_selector__WEBPACK_IMPORTED_MODULE_2__.idToBuildingSelector, _state_store_appStatus_rightClickedNodeData_rightClickedNodeData_selector__WEBPACK_IMPORTED_MODULE_1__.rightClickedNodeDataSelector], _getNode);
225196
+
224890
225197
  /***/ }),
224891
225198
 
224892
225199
  /***/ "./app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.ts":
@@ -224907,11 +225214,11 @@ __webpack_require__.r(__webpack_exports__);
224907
225214
  /* harmony import */ var angular__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(angular__WEBPACK_IMPORTED_MODULE_1__);
224908
225215
  /* harmony import */ var _codeCharta_model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../codeCharta.model */ "./app/codeCharta/codeCharta.model.ts");
224909
225216
  /* harmony import */ var _state_store_fileSettings_blacklist_blacklist_actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../state/store/fileSettings/blacklist/blacklist.actions */ "./app/codeCharta/state/store/fileSettings/blacklist/blacklist.actions.ts");
224910
- /* harmony import */ var _state_store_appSettings_mapColors_mapColors_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../state/store/appSettings/mapColors/mapColors.service */ "./app/codeCharta/state/store/appSettings/mapColors/mapColors.service.ts");
224911
- /* harmony import */ var _util_codeMapHelper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/codeMapHelper */ "./app/codeCharta/util/codeMapHelper.ts");
224912
- /* harmony import */ var _util_fileValidator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/fileValidator */ "./app/codeCharta/util/fileValidator.ts");
224913
- /* harmony import */ var _state_store_fileSettings_markedPackages_util_findIndexOfMarkedPackageOrParent__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../state/store/fileSettings/markedPackages/util/findIndexOfMarkedPackageOrParent */ "./app/codeCharta/state/store/fileSettings/markedPackages/util/findIndexOfMarkedPackageOrParent.ts");
224914
- /* harmony import */ var _state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../state/store/fileSettings/markedPackages/markedPackages.actions */ "./app/codeCharta/state/store/fileSettings/markedPackages/markedPackages.actions.ts");
225217
+ /* harmony import */ var _util_codeMapHelper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/codeMapHelper */ "./app/codeCharta/util/codeMapHelper.ts");
225218
+ /* harmony import */ var _util_fileValidator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/fileValidator */ "./app/codeCharta/util/fileValidator.ts");
225219
+ /* harmony import */ var _state_store_store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../state/store/store */ "./app/codeCharta/state/store/store.ts");
225220
+ /* harmony import */ var _state_store_appStatus_rightClickedNodeData_rightClickedNodeData_selector__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../state/store/appStatus/rightClickedNodeData/rightClickedNodeData.selector */ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.selector.ts");
225221
+ /* harmony import */ var _state_store_appStatus_rightClickedNodeData_rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions */ "./app/codeCharta/state/store/appStatus/rightClickedNodeData/rightClickedNodeData.actions.ts");
224915
225222
 
224916
225223
 
224917
225224
 
@@ -224941,82 +225248,62 @@ class NodeContextMenuController {
224941
225248
  this.blacklistService = blacklistService;
224942
225249
  this._viewModel = {
224943
225250
  codeMapNode: null,
224944
- showNodeContextMenu: false,
224945
- markingColors: null,
224946
225251
  nodePath: "",
224947
225252
  lastPartOfNodePath: ""
224948
225253
  };
224949
225254
 
224950
- this.onBuildingRightClicked = ({
224951
- detail: {
224952
- building,
224953
- x,
224954
- y
224955
- }
224956
- }) => {
224957
- const nodeType = building.node.isLeaf ? _codeCharta_model__WEBPACK_IMPORTED_MODULE_2__.NodeType.FILE : _codeCharta_model__WEBPACK_IMPORTED_MODULE_2__.NodeType.FOLDER;
224958
- this.onShowNodeContextMenu(building.node.path, nodeType, x, y);
224959
- };
224960
-
224961
225255
  this.onBodyLeftClickHideNodeContextMenu = mouseEvent => {
224962
225256
  if (this.isEventFromColorPicker(mouseEvent)) return;
224963
- this.hideContextMenu();
225257
+ this.hideNodeContextMenu();
224964
225258
  };
224965
225259
 
224966
225260
  this.onBodyRightClickHideNodeContextMenu = event => {
224967
225261
  if (event.button === ClickType.RightClick) {
224968
- this.hideContextMenu();
225262
+ this.hideNodeContextMenu();
224969
225263
  }
224970
225264
  };
224971
225265
 
224972
225266
  this.onMapWheelHideNodeContextMenu = () => {
224973
- this.hideContextMenu();
224974
- };
224975
-
224976
- this.hideContextMenu = () => {
224977
- NodeContextMenuController.broadcastHideEvent(this.$rootScope);
225267
+ this.hideNodeContextMenu();
224978
225268
  };
224979
225269
 
224980
- this.markFolder = color => {
224981
- this.storeService.dispatch((0,_state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_8__.markPackages)([{
224982
- path: this._viewModel.codeMapNode.path,
224983
- color
224984
- }]));
225270
+ this.hideNodeContextMenu = () => {
225271
+ this.storeService.dispatch((0,_state_store_appStatus_rightClickedNodeData_rightClickedNodeData_actions__WEBPACK_IMPORTED_MODULE_8__.setRightClickedNodeData)(null));
225272
+ document.body.removeEventListener("click", this.onBodyLeftClickHideNodeContextMenu, true);
225273
+ document.body.removeEventListener("mousedown", this.onBodyRightClickHideNodeContextMenu, true);
225274
+ document.getElementById("codeMap").removeEventListener("wheel", this.onMapWheelHideNodeContextMenu, true);
224985
225275
  };
224986
225276
 
224987
- NodeContextMenuController.instance = this;
224988
- _state_store_appSettings_mapColors_mapColors_service__WEBPACK_IMPORTED_MODULE_4__.MapColorsService.subscribe(this.$rootScope, this);
224989
- document.addEventListener("building-right-clicked", this.onBuildingRightClicked);
224990
- NodeContextMenuController.subscribeToShowNodeContextMenu(this.$rootScope, this);
224991
- NodeContextMenuController.subscribeToHideNodeContextMenu(this.$rootScope, this);
224992
- }
225277
+ _state_store_store__WEBPACK_IMPORTED_MODULE_6__.Store.store.subscribe(() => {
225278
+ const state = _state_store_store__WEBPACK_IMPORTED_MODULE_6__.Store.store.getState();
225279
+ const rightClickedNodeData = (0,_state_store_appStatus_rightClickedNodeData_rightClickedNodeData_selector__WEBPACK_IMPORTED_MODULE_7__.rightClickedNodeDataSelector)(state);
225280
+ if (this.rightClickedNodeData === rightClickedNodeData) return;
225281
+ this.rightClickedNodeData = rightClickedNodeData;
224993
225282
 
224994
- onMapColorsChanged(mapColors) {
224995
- this._viewModel.markingColors = mapColors.markingColors;
225283
+ if (rightClickedNodeData === null) {
225284
+ this.hideNodeContextMenu();
225285
+ } else {
225286
+ const rightClickedNode = state.lookUp.idToNode.get(rightClickedNodeData.nodeId);
225287
+ const nodeType = (0,_util_codeMapHelper__WEBPACK_IMPORTED_MODULE_4__.isLeaf)(rightClickedNode) ? _codeCharta_model__WEBPACK_IMPORTED_MODULE_2__.NodeType.FILE : _codeCharta_model__WEBPACK_IMPORTED_MODULE_2__.NodeType.FOLDER;
225288
+ this.showNodeContextMenu(rightClickedNode.path, nodeType, rightClickedNodeData.xPositionOfRightClickEvent, rightClickedNodeData.yPositionOfRightClickEvent);
225289
+ }
225290
+ });
224996
225291
  }
224997
225292
 
224998
- onShowNodeContextMenu(path, nodeType, mouseX, mouseY) {
224999
- this._viewModel.codeMapNode = (0,_util_codeMapHelper__WEBPACK_IMPORTED_MODULE_5__.getCodeMapNodeFromPath)(path, nodeType, this.codeMapPreRenderService.getRenderMap());
225293
+ showNodeContextMenu(path, nodeType, mouseX, mouseY) {
225294
+ this._viewModel.codeMapNode = (0,_util_codeMapHelper__WEBPACK_IMPORTED_MODULE_4__.getCodeMapNodeFromPath)(path, nodeType, this.codeMapPreRenderService.getRenderMap());
225000
225295
  this._viewModel.nodePath = path;
225001
225296
  this._viewModel.lastPartOfNodePath = `${path.lastIndexOf("/") === 0 ? "" : "..."}${path.slice(path.lastIndexOf("/"))}`;
225002
- this._viewModel.showNodeContextMenu = true;
225003
225297
  const {
225004
225298
  x,
225005
225299
  y
225006
225300
  } = this.calculatePosition(mouseX, mouseY);
225007
225301
  this.setPosition(x, y);
225008
- document.body.addEventListener("click", this.onBodyLeftClickHideNodeContextMenu, true);
225302
+ document.body.addEventListener("click", this.onBodyLeftClickHideNodeContextMenu, false);
225009
225303
  document.body.addEventListener("mousedown", this.onBodyRightClickHideNodeContextMenu, true);
225010
225304
  document.getElementById("codeMap").addEventListener("wheel", this.onMapWheelHideNodeContextMenu, true);
225011
225305
  }
225012
225306
 
225013
- onHideNodeContextMenu() {
225014
- this._viewModel.showNodeContextMenu = false;
225015
- document.body.removeEventListener("click", this.onBodyLeftClickHideNodeContextMenu, true);
225016
- document.body.removeEventListener("mousedown", this.onBodyRightClickHideNodeContextMenu, true);
225017
- document.getElementById("codeMap").removeEventListener("wheel", this.onMapWheelHideNodeContextMenu, true);
225018
- }
225019
-
225020
225307
  flattenNode() {
225021
225308
  const codeMapNode = this._viewModel.codeMapNode;
225022
225309
  const blacklistItem = {
@@ -225046,7 +225333,7 @@ class NodeContextMenuController {
225046
225333
  };
225047
225334
 
225048
225335
  if (this.blacklistService.resultsInEmptyMap([blacklistItem])) {
225049
- this.dialogService.showErrorDialog(_util_fileValidator__WEBPACK_IMPORTED_MODULE_6__.ERROR_MESSAGES.blacklistError, "Blacklist Error");
225336
+ this.dialogService.showErrorDialog(_util_fileValidator__WEBPACK_IMPORTED_MODULE_5__.ERROR_MESSAGES.blacklistError, "Blacklist Error");
225050
225337
  } else {
225051
225338
  this.storeService.dispatch((0,_state_store_fileSettings_blacklist_blacklist_actions__WEBPACK_IMPORTED_MODULE_3__.addBlacklistItem)(blacklistItem));
225052
225339
  }
@@ -225054,24 +225341,12 @@ class NodeContextMenuController {
225054
225341
 
225055
225342
  addNodeToConstantHighlight() {
225056
225343
  this.threeSceneService.addNodeAndChildrenToConstantHighlight(this._viewModel.codeMapNode);
225057
- this.onHideNodeContextMenu();
225344
+ this.hideNodeContextMenu();
225058
225345
  }
225059
225346
 
225060
225347
  removeNodeFromConstantHighlight() {
225061
225348
  this.threeSceneService.removeNodeAndChildrenFromConstantHighlight(this._viewModel.codeMapNode);
225062
- this.onHideNodeContextMenu();
225063
- }
225064
-
225065
- clickColor(color) {
225066
- if (this.isNodeOrParentMarked(color)) {
225067
- this.unmarkFolder();
225068
- } else {
225069
- this.markFolder(color);
225070
- }
225071
- }
225072
-
225073
- unmarkFolder() {
225074
- this.storeService.dispatch((0,_state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_8__.unmarkPackage)(this._viewModel.codeMapNode));
225349
+ this.hideNodeContextMenu();
225075
225350
  }
225076
225351
 
225077
225352
  calculatePosition(mouseX, mouseY) {
@@ -225088,42 +225363,9 @@ class NodeContextMenuController {
225088
225363
  angular__WEBPACK_IMPORTED_MODULE_1___default().element(this.$element[0].children[0]).css("left", `${x}px`);
225089
225364
  }
225090
225365
 
225091
- isNodeOrParentMarked(color) {
225092
- if (!color || !this._viewModel.codeMapNode) {
225093
- return false;
225094
- }
225095
-
225096
- if (this.isNodeMarked()) {
225097
- return this.packageMatchesColor(color);
225098
- }
225099
-
225100
- return this.packageMatchesColorOfParentMP(color);
225101
- }
225102
-
225103
225366
  isEventFromColorPicker(mouseEvent) {
225104
225367
  const elements = mouseEvent.composedPath();
225105
- return elements.some(element => (element === null || element === void 0 ? void 0 : element.nodeName) === "CC-MARK-FOLDER-COLOR-PICKER" || (element === null || element === void 0 ? void 0 : element.nodeName) === "COLOR-CHROME");
225106
- }
225107
-
225108
- isNodeMarked() {
225109
- return this.storeService.getState().fileSettings.markedPackages.some(mp => mp.path === this._viewModel.codeMapNode.path);
225110
- }
225111
-
225112
- packageMatchesColor(color) {
225113
- return this.storeService.getState().fileSettings.markedPackages.some(mp => mp.path === this._viewModel.codeMapNode.path && mp.color === color);
225114
- }
225115
-
225116
- packageMatchesColorOfParentMP(color) {
225117
- const {
225118
- markedPackages
225119
- } = this.storeService.getState().fileSettings;
225120
- const index = (0,_state_store_fileSettings_markedPackages_util_findIndexOfMarkedPackageOrParent__WEBPACK_IMPORTED_MODULE_7__.findIndexOfMarkedPackageOrParent)(markedPackages, this._viewModel.codeMapNode.path);
225121
-
225122
- if (index === -1) {
225123
- return false;
225124
- }
225125
-
225126
- return this.storeService.getState().fileSettings.markedPackages[index].color === color;
225368
+ return elements.some(element => (element === null || element === void 0 ? void 0 : element.nodeName) === "CC-COLOR-PICKER" || (element === null || element === void 0 ? void 0 : element.nodeName) === "COLOR-CHROME");
225127
225369
  }
225128
225370
 
225129
225371
  isNodeConstantlyHighlighted() {
@@ -225147,38 +225389,8 @@ class NodeContextMenuController {
225147
225389
  return ((_b = (_a = this._viewModel.codeMapNode) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.length) > 0;
225148
225390
  }
225149
225391
 
225150
- static broadcastShowEvent($rootScope, path, type, x, y) {
225151
- const rootScope = $rootScope || NodeContextMenuController.instance.$rootScope;
225152
- rootScope.$broadcast(NodeContextMenuController.SHOW_NODE_CONTEXT_MENU_EVENT, {
225153
- path,
225154
- type,
225155
- x,
225156
- y
225157
- });
225158
- }
225159
-
225160
- static broadcastHideEvent($rootScope) {
225161
- const rootScope = $rootScope || NodeContextMenuController.instance.$rootScope;
225162
- rootScope.$broadcast(NodeContextMenuController.HIDE_NODE_CONTEXT_MENU_EVENT);
225163
- }
225164
-
225165
- static subscribeToShowNodeContextMenu($rootScope, subscriber) {
225166
- $rootScope.$on(NodeContextMenuController.SHOW_NODE_CONTEXT_MENU_EVENT, (_event, data) => {
225167
- subscriber.onShowNodeContextMenu(data.path, data.type, data.x, data.y);
225168
- });
225169
- }
225170
-
225171
- static subscribeToHideNodeContextMenu($rootScope, subscriber) {
225172
- const rootScope = $rootScope || NodeContextMenuController.instance.$rootScope;
225173
- rootScope.$on(NodeContextMenuController.HIDE_NODE_CONTEXT_MENU_EVENT, () => {
225174
- subscriber.onHideNodeContextMenu();
225175
- });
225176
- }
225177
-
225178
225392
  }
225179
225393
  NodeContextMenuController.$inject = ["$element", "$window", "$rootScope", "storeService", "codeMapPreRenderService", "threeSceneService", "dialogService", "blacklistService"];
225180
- NodeContextMenuController.SHOW_NODE_CONTEXT_MENU_EVENT = "show-node-context-menu";
225181
- NodeContextMenuController.HIDE_NODE_CONTEXT_MENU_EVENT = "hide-node-context-menu";
225182
225394
  const nodeContextMenuComponent = {
225183
225395
  selector: "nodeContextMenuComponent",
225184
225396
  template: __webpack_require__(/*! ./nodeContextMenu.component.html */ "./app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.html"),
@@ -225201,8 +225413,8 @@ __webpack_require__.r(__webpack_exports__);
225201
225413
  /* harmony import */ var angular__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(angular__WEBPACK_IMPORTED_MODULE_2__);
225202
225414
  /* harmony import */ var _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/upgrade/static */ "./node_modules/@angular/upgrade/fesm2015/static.js");
225203
225415
  /* harmony import */ var _nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nodeContextMenu.component */ "./app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.ts");
225204
- /* harmony import */ var _markFolderColorPicker_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./markFolderColorPicker/markFolderColorPicker.component */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts");
225205
- /* harmony import */ var _focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./focusButtons/focusButtons.component */ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.ts");
225416
+ /* harmony import */ var _focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./focusButtons/focusButtons.component */ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.ts");
225417
+ /* harmony import */ var _markFolderRow_markFolderRow_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./markFolderRow/markFolderRow.component */ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.ts");
225206
225418
 
225207
225419
 
225208
225420
 
@@ -225210,10 +225422,10 @@ __webpack_require__.r(__webpack_exports__);
225210
225422
 
225211
225423
 
225212
225424
 
225213
- angular__WEBPACK_IMPORTED_MODULE_2___default().module("app.codeCharta.ui.nodeContextMenu", ["app.codeCharta.state", "app.codeCharta.ui"]).component(_nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_3__.nodeContextMenuComponent.selector, _nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_3__.nodeContextMenuComponent).directive("ccMarkFolderColorPicker", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_6__.downgradeComponent)({
225214
- component: _markFolderColorPicker_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_4__.MarkFolderColorPickerComponent
225425
+ angular__WEBPACK_IMPORTED_MODULE_2___default().module("app.codeCharta.ui.nodeContextMenu", ["app.codeCharta.state", "app.codeCharta.ui"]).component(_nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_3__.nodeContextMenuComponent.selector, _nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_3__.nodeContextMenuComponent).directive("ccMarkFolderRow", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_6__.downgradeComponent)({
225426
+ component: _markFolderRow_markFolderRow_component__WEBPACK_IMPORTED_MODULE_5__.MarkFolderRowComponent
225215
225427
  })).directive("ccFocusButtons", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_6__.downgradeComponent)({
225216
- component: _focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_5__.FocusButtonsComponent
225428
+ component: _focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_4__.FocusButtonsComponent
225217
225429
  }));
225218
225430
 
225219
225431
  /***/ }),
@@ -226828,7 +227040,7 @@ __webpack_require__.r(__webpack_exports__);
226828
227040
 
226829
227041
 
226830
227042
 
226831
- angular__WEBPACK_IMPORTED_MODULE_0___default().module("app.codeCharta.ui", ["app.codeCharta.ui.artificialIntelligence", "app.codeCharta.ui.customConfigs", "app.codeCharta.ui.metricValueHovered", "app.codeCharta.ui.downloadButton", "app.codeCharta.ui.screenshotButton", "app.codeCharta.ui.globalSettingsButton", "app.codeCharta.ui.nodePathPanel", "app.codeCharta.ui.edgeSettingsPanel", "app.codeCharta.ui.edgeChooser", "app.codeCharta.ui.presentationModeButton", "app.codeCharta.ui.centerMapButton", "app.codeCharta.ui.searchPanel", "app.codeCharta.ui.searchPanelModeSelector", "app.codeCharta.ui.searchBar", "app.codeCharta.ui.metricType", "app.codeCharta.ui.areaSettingsPanel", "app.codeCharta.ui.blacklistPanel", "app.codeCharta.ui.codeMap", "app.codeCharta.ui.colorSettingsPanel", "app.codeCharta.ui.dialog", "app.codeCharta.ui.fileChooser", "app.codeCharta.ui.fileExtensionBar", "app.codeCharta.ui.filePanel", "app.codeCharta.ui.heightSettingsPanel", "app.codeCharta.ui.loadingGif", "app.codeCharta.ui.metricChooser", "app.codeCharta.ui.metricType", "app.codeCharta.ui.nodeContextMenu", "app.codeCharta.ui.rangeSlider", "app.codeCharta.ui.resetSettingsButton", "app.codeCharta.ui.ribbonBar", "app.codeCharta.ui.scenarioDropDown", "app.codeCharta.ui.toolBar", "app.codeCharta.ui.viewCube", "app.codeCharta.ui.layoutSelection", "app.codeCharta.ui.sharpnessModeSelector", "app.codeCharta.ui.maxTreeMapFiles"]).directive("ccSortingButton", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__.downgradeComponent)({
227043
+ angular__WEBPACK_IMPORTED_MODULE_0___default().module("app.codeCharta.ui", ["app.codeCharta.ui.artificialIntelligence", "app.codeCharta.ui.customConfigs", "app.codeCharta.ui.metricValueHovered", "app.codeCharta.ui.downloadButton", "app.codeCharta.ui.screenshotButton", "app.codeCharta.ui.globalSettingsButton", "app.codeCharta.ui.nodePathPanel", "app.codeCharta.ui.edgeSettingsPanel", "app.codeCharta.ui.edgeChooser", "app.codeCharta.ui.presentationModeButton", "app.codeCharta.ui.centerMapButton", "app.codeCharta.ui.searchPanel", "app.codeCharta.ui.searchPanelModeSelector", "app.codeCharta.ui.searchBar", "app.codeCharta.ui.metricType", "app.codeCharta.ui.areaSettingsPanel", "app.codeCharta.ui.blacklistPanel", "app.codeCharta.ui.codeMap", "app.codeCharta.ui.colorSettingsPanel", "app.codeCharta.ui.dialog", "app.codeCharta.ui.fileChooser", "app.codeCharta.ui.fileExtensionBar", "app.codeCharta.ui.heightSettingsPanel", "app.codeCharta.ui.loadingGif", "app.codeCharta.ui.metricChooser", "app.codeCharta.ui.metricType", "app.codeCharta.ui.nodeContextMenu", "app.codeCharta.ui.rangeSlider", "app.codeCharta.ui.resetSettingsButton", "app.codeCharta.ui.ribbonBar", "app.codeCharta.ui.scenarioDropDown", "app.codeCharta.ui.toolBar", "app.codeCharta.ui.viewCube", "app.codeCharta.ui.layoutSelection", "app.codeCharta.ui.sharpnessModeSelector", "app.codeCharta.ui.maxTreeMapFiles", "app.codeCharta.ui.filePanel"]).directive("ccSortingButton", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__.downgradeComponent)({
226832
227044
  component: _sortingButton_sortingButton_component__WEBPACK_IMPORTED_MODULE_41__.SortingButtonComponent
226833
227045
  })).directive("ccSortingOption", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__.downgradeComponent)({
226834
227046
  component: _sortingOption_sortingOption_component__WEBPACK_IMPORTED_MODULE_39__.SortingOptionComponent
@@ -230045,14 +230257,16 @@ __webpack_require__.r(__webpack_exports__);
230045
230257
  /* harmony export */ "CustomConfigHelper": () => (/* binding */ CustomConfigHelper)
230046
230258
  /* harmony export */ });
230047
230259
  /* harmony import */ var _codeCharta_model__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../codeCharta.model */ "./app/codeCharta/codeCharta.model.ts");
230048
- /* harmony import */ var _fileNameHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fileNameHelper */ "./app/codeCharta/util/fileNameHelper.ts");
230049
- /* harmony import */ var _fileDownloader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fileDownloader */ "./app/codeCharta/util/fileDownloader.ts");
230050
- /* harmony import */ var _state_store_state_actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../state/store/state.actions */ "./app/codeCharta/state/store/state.actions.ts");
230051
- /* harmony import */ var _state_store_dynamicSettings_colorRange_colorRange_actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../state/store/dynamicSettings/colorRange/colorRange.actions */ "./app/codeCharta/state/store/dynamicSettings/colorRange/colorRange.actions.ts");
230052
- /* harmony import */ var _state_store_dynamicSettings_margin_margin_actions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../state/store/dynamicSettings/margin/margin.actions */ "./app/codeCharta/state/store/dynamicSettings/margin/margin.actions.ts");
230053
- /* harmony import */ var _state_store_appSettings_camera_camera_actions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../state/store/appSettings/camera/camera.actions */ "./app/codeCharta/state/store/appSettings/camera/camera.actions.ts");
230054
- /* harmony import */ var _state_store_appSettings_cameraTarget_cameraTarget_actions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../state/store/appSettings/cameraTarget/cameraTarget.actions */ "./app/codeCharta/state/store/appSettings/cameraTarget/cameraTarget.actions.ts");
230055
- /* harmony import */ var _codeChartaStorage__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./codeChartaStorage */ "./app/codeCharta/util/codeChartaStorage.ts");
230260
+ /* harmony import */ var _model_customConfig_customConfig_api_model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../model/customConfig/customConfig.api.model */ "./app/codeCharta/model/customConfig/customConfig.api.model.ts");
230261
+ /* harmony import */ var _fileNameHelper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fileNameHelper */ "./app/codeCharta/util/fileNameHelper.ts");
230262
+ /* harmony import */ var _fileDownloader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fileDownloader */ "./app/codeCharta/util/fileDownloader.ts");
230263
+ /* harmony import */ var _state_store_state_actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../state/store/state.actions */ "./app/codeCharta/state/store/state.actions.ts");
230264
+ /* harmony import */ var _state_store_dynamicSettings_colorRange_colorRange_actions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../state/store/dynamicSettings/colorRange/colorRange.actions */ "./app/codeCharta/state/store/dynamicSettings/colorRange/colorRange.actions.ts");
230265
+ /* harmony import */ var _state_store_dynamicSettings_margin_margin_actions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../state/store/dynamicSettings/margin/margin.actions */ "./app/codeCharta/state/store/dynamicSettings/margin/margin.actions.ts");
230266
+ /* harmony import */ var _state_store_appSettings_camera_camera_actions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../state/store/appSettings/camera/camera.actions */ "./app/codeCharta/state/store/appSettings/camera/camera.actions.ts");
230267
+ /* harmony import */ var _state_store_appSettings_cameraTarget_cameraTarget_actions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../state/store/appSettings/cameraTarget/cameraTarget.actions */ "./app/codeCharta/state/store/appSettings/cameraTarget/cameraTarget.actions.ts");
230268
+ /* harmony import */ var _codeChartaStorage__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./codeChartaStorage */ "./app/codeCharta/util/codeChartaStorage.ts");
230269
+
230056
230270
 
230057
230271
 
230058
230272
 
@@ -230065,13 +230279,13 @@ __webpack_require__.r(__webpack_exports__);
230065
230279
 
230066
230280
 
230067
230281
  const CUSTOM_CONFIG_FILE_EXTENSION = ".cc.config.json";
230068
- const CUSTOM_CONFIGS_LOCAL_STORAGE_VERSION = "1.0.0";
230069
- const CUSTOM_CONFIGS_DOWNLOAD_FILE_VERSION = "1.0.0";
230282
+ const CUSTOM_CONFIGS_LOCAL_STORAGE_VERSION = "1.0.1";
230283
+ const CUSTOM_CONFIGS_DOWNLOAD_FILE_VERSION = "1.0.1";
230070
230284
  const CUSTOM_CONFIGS_LOCAL_STORAGE_ELEMENT = "CodeCharta::customConfigs";
230071
230285
  class CustomConfigHelper {
230072
230286
  static getStorage() {
230073
230287
  if (CustomConfigHelper.storage === undefined) {
230074
- CustomConfigHelper.storage = new _codeChartaStorage__WEBPACK_IMPORTED_MODULE_8__.CodeChartaStorage();
230288
+ CustomConfigHelper.storage = new _codeChartaStorage__WEBPACK_IMPORTED_MODULE_9__.CodeChartaStorage();
230075
230289
  }
230076
230290
 
230077
230291
  return CustomConfigHelper.storage;
@@ -230122,10 +230336,35 @@ class CustomConfigHelper {
230122
230336
  }
230123
230337
 
230124
230338
  static loadCustomConfigs() {
230125
- const ccLocalStorage = JSON.parse(CustomConfigHelper.getStorage().getItem(CUSTOM_CONFIGS_LOCAL_STORAGE_ELEMENT), _codeCharta_model__WEBPACK_IMPORTED_MODULE_0__.stateObjectReviver);
230339
+ const ccLocalStorage = this.getCcLocalStorage();
230126
230340
  return new Map(ccLocalStorage === null || ccLocalStorage === void 0 ? void 0 : ccLocalStorage.customConfigs);
230127
230341
  }
230128
230342
 
230343
+ static getCcLocalStorage() {
230344
+ const ccLocalStorage = JSON.parse(CustomConfigHelper.getStorage().getItem(CUSTOM_CONFIGS_LOCAL_STORAGE_ELEMENT), _codeCharta_model__WEBPACK_IMPORTED_MODULE_0__.stateObjectReviver);
230345
+
230346
+ if ((ccLocalStorage === null || ccLocalStorage === void 0 ? void 0 : ccLocalStorage.version) === "1.0.0") {
230347
+ return this.replaceSingleModeInLocalStorage(ccLocalStorage);
230348
+ }
230349
+
230350
+ return ccLocalStorage;
230351
+ }
230352
+
230353
+ static replaceSingleModeInLocalStorage(ccLocalStorage) {
230354
+ var _a;
230355
+
230356
+ for (const [, customConfig] of (_a = ccLocalStorage === null || ccLocalStorage === void 0 ? void 0 : ccLocalStorage.customConfigs.values()) !== null && _a !== void 0 ? _a : []) {
230357
+ if (customConfig.mapSelectionMode === "SINGLE") {
230358
+ customConfig.mapSelectionMode = _model_customConfig_customConfig_api_model__WEBPACK_IMPORTED_MODULE_1__.CustomConfigMapSelectionMode.MULTIPLE;
230359
+ }
230360
+ }
230361
+
230362
+ ccLocalStorage.version = CUSTOM_CONFIGS_LOCAL_STORAGE_VERSION;
230363
+ CustomConfigHelper.getStorage().removeItem(CUSTOM_CONFIGS_LOCAL_STORAGE_ELEMENT);
230364
+ CustomConfigHelper.getStorage().setItem(CUSTOM_CONFIGS_LOCAL_STORAGE_ELEMENT, JSON.stringify(ccLocalStorage, _codeCharta_model__WEBPACK_IMPORTED_MODULE_0__.stateObjectReviver));
230365
+ return ccLocalStorage;
230366
+ }
230367
+
230129
230368
  static addCustomConfigs(newCustomConfigs) {
230130
230369
  for (const newCustomConfig of newCustomConfigs) {
230131
230370
  CustomConfigHelper.customConfigs.set(newCustomConfig.id, newCustomConfig);
@@ -230171,6 +230410,10 @@ class CustomConfigHelper {
230171
230410
  const importedCustomConfigsFile = JSON.parse(content, _codeCharta_model__WEBPACK_IMPORTED_MODULE_0__.stateObjectReviver);
230172
230411
 
230173
230412
  for (const exportedConfig of importedCustomConfigsFile.customConfigs.values()) {
230413
+ if (exportedConfig.mapSelectionMode === "SINGLE") {
230414
+ exportedConfig.mapSelectionMode = _model_customConfig_customConfig_api_model__WEBPACK_IMPORTED_MODULE_1__.CustomConfigMapSelectionMode.MULTIPLE;
230415
+ }
230416
+
230174
230417
  const alreadyExistingConfig = CustomConfigHelper.getCustomConfigSettings(exportedConfig.id);
230175
230418
 
230176
230419
  if (alreadyExistingConfig) {
@@ -230178,7 +230421,7 @@ class CustomConfigHelper {
230178
230421
  }
230179
230422
 
230180
230423
  if (CustomConfigHelper.hasCustomConfigByName(exportedConfig.mapSelectionMode, exportedConfig.assignedMaps, exportedConfig.name)) {
230181
- exportedConfig.name += ` (${_fileNameHelper__WEBPACK_IMPORTED_MODULE_1__.FileNameHelper.getFormattedTimestamp(new Date(exportedConfig.creationTime))})`;
230424
+ exportedConfig.name += ` (${_fileNameHelper__WEBPACK_IMPORTED_MODULE_2__.FileNameHelper.getFormattedTimestamp(new Date(exportedConfig.creationTime))})`;
230182
230425
  }
230183
230426
 
230184
230427
  const importedCustomConfig = {
@@ -230201,13 +230444,13 @@ class CustomConfigHelper {
230201
230444
  timestamp: Date.now(),
230202
230445
  customConfigs
230203
230446
  };
230204
- let fileName = _fileNameHelper__WEBPACK_IMPORTED_MODULE_1__.FileNameHelper.getNewTimestamp() + CUSTOM_CONFIG_FILE_EXTENSION;
230447
+ let fileName = _fileNameHelper__WEBPACK_IMPORTED_MODULE_2__.FileNameHelper.getNewTimestamp() + CUSTOM_CONFIG_FILE_EXTENSION;
230205
230448
 
230206
230449
  if (!customConfigFileStateConnector.isDeltaMode() && customConfigFileStateConnector.getAmountOfUploadedFiles() === 1 && customConfigFileStateConnector.isEachFileSelected()) {
230207
- fileName = `${_fileNameHelper__WEBPACK_IMPORTED_MODULE_1__.FileNameHelper.withoutCCJsonExtension(customConfigFileStateConnector.getJointMapName())}_${fileName}`;
230450
+ fileName = `${_fileNameHelper__WEBPACK_IMPORTED_MODULE_2__.FileNameHelper.withoutCCJsonExtension(customConfigFileStateConnector.getJointMapName())}_${fileName}`;
230208
230451
  }
230209
230452
 
230210
- _fileDownloader__WEBPACK_IMPORTED_MODULE_2__.FileDownloader.downloadData(JSON.stringify(customConfigsDownloadFile, _codeCharta_model__WEBPACK_IMPORTED_MODULE_0__.stateObjectReplacer), fileName);
230453
+ _fileDownloader__WEBPACK_IMPORTED_MODULE_3__.FileDownloader.downloadData(JSON.stringify(customConfigsDownloadFile, _codeCharta_model__WEBPACK_IMPORTED_MODULE_0__.stateObjectReplacer), fileName);
230211
230454
  }
230212
230455
 
230213
230456
  static createExportCustomConfigFromConfig(customConfig) {
@@ -230266,14 +230509,14 @@ class CustomConfigHelper {
230266
230509
 
230267
230510
  static applyCustomConfig(configId, storeService, threeCameraService, threeOrbitControlsService) {
230268
230511
  const customConfig = this.getCustomConfigSettings(configId);
230269
- storeService.dispatch((0,_state_store_state_actions__WEBPACK_IMPORTED_MODULE_3__.setState)(customConfig.stateSettings));
230270
- storeService.dispatch((0,_state_store_dynamicSettings_colorRange_colorRange_actions__WEBPACK_IMPORTED_MODULE_4__.setColorRange)(customConfig.stateSettings.dynamicSettings.colorRange));
230271
- storeService.dispatch((0,_state_store_dynamicSettings_margin_margin_actions__WEBPACK_IMPORTED_MODULE_5__.setMargin)(customConfig.stateSettings.dynamicSettings.margin));
230512
+ storeService.dispatch((0,_state_store_state_actions__WEBPACK_IMPORTED_MODULE_4__.setState)(customConfig.stateSettings));
230513
+ storeService.dispatch((0,_state_store_dynamicSettings_colorRange_colorRange_actions__WEBPACK_IMPORTED_MODULE_5__.setColorRange)(customConfig.stateSettings.dynamicSettings.colorRange));
230514
+ storeService.dispatch((0,_state_store_dynamicSettings_margin_margin_actions__WEBPACK_IMPORTED_MODULE_6__.setMargin)(customConfig.stateSettings.dynamicSettings.margin));
230272
230515
  setTimeout(() => {
230273
230516
  threeCameraService.setPosition();
230274
230517
  threeOrbitControlsService.setControlTarget();
230275
- storeService.dispatch((0,_state_store_appSettings_camera_camera_actions__WEBPACK_IMPORTED_MODULE_6__.setCamera)(customConfig.stateSettings.appSettings.camera));
230276
- storeService.dispatch((0,_state_store_appSettings_cameraTarget_cameraTarget_actions__WEBPACK_IMPORTED_MODULE_7__.setCameraTarget)(customConfig.stateSettings.appSettings.cameraTarget));
230518
+ storeService.dispatch((0,_state_store_appSettings_camera_camera_actions__WEBPACK_IMPORTED_MODULE_7__.setCamera)(customConfig.stateSettings.appSettings.camera));
230519
+ storeService.dispatch((0,_state_store_appSettings_cameraTarget_cameraTarget_actions__WEBPACK_IMPORTED_MODULE_8__.setCameraTarget)(customConfig.stateSettings.appSettings.cameraTarget));
230277
230520
  }, 100);
230278
230521
  }
230279
230522
 
@@ -230877,7 +231120,8 @@ FileNameHelper.JSON_EXTENSION = ".json";
230877
231120
  __webpack_require__.r(__webpack_exports__);
230878
231121
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
230879
231122
  /* harmony export */ "ERROR_MESSAGES": () => (/* binding */ ERROR_MESSAGES),
230880
- /* harmony export */ "validate": () => (/* binding */ validate),
231123
+ /* harmony export */ "checkWarnings": () => (/* binding */ checkWarnings),
231124
+ /* harmony export */ "checkErrors": () => (/* binding */ checkErrors),
230881
231125
  /* harmony export */ "getAsApiVersion": () => (/* binding */ getAsApiVersion)
230882
231126
  /* harmony export */ });
230883
231127
  /* harmony import */ var ajv__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ajv */ "./node_modules/ajv/lib/ajv.js");
@@ -230904,32 +231148,44 @@ const ERROR_MESSAGES = {
230904
231148
  fileAlreadyExists: "File already exists.",
230905
231149
  blacklistError: "Excluding all buildings is not possible."
230906
231150
  };
230907
- function validate(nameDataPair) {
230908
- const file = nameDataPair === null || nameDataPair === void 0 ? void 0 : nameDataPair.content;
230909
- const result = {
230910
- error: [],
230911
- warning: []
230912
- };
231151
+ function checkWarnings(file) {
231152
+ const warnings = [];
231153
+
231154
+ if (!file) {
231155
+ return warnings;
231156
+ }
231157
+
231158
+ if (fileHasHigherMinorVersion(file)) {
231159
+ warnings.push(`${ERROR_MESSAGES.minorApiVersionOutdated} Found: ${file.apiVersion}`);
231160
+ }
231161
+
231162
+ return warnings;
231163
+ }
231164
+ function checkErrors(file) {
231165
+ const errors = [];
230913
231166
 
230914
231167
  switch (true) {
230915
231168
  case !file:
230916
- result.error.push(ERROR_MESSAGES.fileIsInvalid);
231169
+ errors.push(ERROR_MESSAGES.fileIsInvalid);
230917
231170
  break;
230918
231171
 
230919
231172
  case !isValidApiVersion(file):
230920
- result.error.push(ERROR_MESSAGES.apiVersionIsInvalid);
231173
+ errors.push(ERROR_MESSAGES.apiVersionIsInvalid);
230921
231174
  break;
230922
231175
 
230923
231176
  case fileHasHigherMajorVersion(file):
230924
- result.error.push(ERROR_MESSAGES.majorApiVersionIsOutdated);
230925
- break;
230926
-
230927
- case fileHasHigherMinorVersion(file):
230928
- result.warning.push(`${ERROR_MESSAGES.minorApiVersionOutdated} Found: ${file.apiVersion}`);
231177
+ errors.push(ERROR_MESSAGES.majorApiVersionIsOutdated);
230929
231178
  break;
230930
231179
  }
230931
231180
 
230932
- if (result.error.length === 0) {
231181
+ if (errors.length === 0) errors.push(...checkJsonSchema(file));
231182
+ return errors;
231183
+ }
231184
+
231185
+ function checkJsonSchema(file) {
231186
+ const errors = [];
231187
+
231188
+ if (errors.length === 0) {
230933
231189
  const ajv = new (ajv__WEBPACK_IMPORTED_MODULE_0___default())({
230934
231190
  allErrors: true
230935
231191
  });
@@ -230937,18 +231193,15 @@ function validate(nameDataPair) {
230937
231193
  const valid = validate(file);
230938
231194
 
230939
231195
  if (!valid) {
230940
- result.error = validate.errors.map(error => getValidationMessage(error));
231196
+ errors.push(...validate.errors.map(error => getValidationMessage(error)));
230941
231197
  } else if (file.nodes.length === 0) {
230942
- result.error.push(ERROR_MESSAGES.nodesEmpty);
231198
+ errors.push(ERROR_MESSAGES.nodesEmpty);
230943
231199
  } else {
230944
- validateAllNodesAreUnique(file.nodes[0], result);
230945
- validateFixedFolders(file, result);
231200
+ errors.push(...validateAllNodesAreUnique(file.nodes[0]), ...validateFixedFolders(file));
230946
231201
  }
230947
231202
  }
230948
231203
 
230949
- if (result.error.length > 0 || result.warning.length > 0) {
230950
- throw result;
230951
- }
231204
+ return errors;
230952
231205
  }
230953
231206
 
230954
231207
  function isValidApiVersion(file) {
@@ -230984,13 +231237,15 @@ function getValidationMessage(error) {
230984
231237
  return `${errorType} error: ${errorParameter} ${error.message}`;
230985
231238
  }
230986
231239
 
230987
- function validateAllNodesAreUnique(node, result) {
231240
+ function validateAllNodesAreUnique(node) {
231241
+ const errors = [];
230988
231242
  const names = new Set();
230989
231243
  names.add(`${node.name}|${node.type}`);
230990
- validateChildrenAreUniqueRecursive(node, result, names, `/${node.name}`);
231244
+ validateChildrenAreUniqueRecursive(node, errors, names, `/${node.name}`);
231245
+ return errors;
230991
231246
  }
230992
231247
 
230993
- function validateChildrenAreUniqueRecursive(node, result, names, subPath) {
231248
+ function validateChildrenAreUniqueRecursive(node, errors, names, subPath) {
230994
231249
  if ((0,_codeMapHelper__WEBPACK_IMPORTED_MODULE_3__.isLeaf)(node)) {
230995
231250
  return;
230996
231251
  }
@@ -230999,19 +231254,15 @@ function validateChildrenAreUniqueRecursive(node, result, names, subPath) {
230999
231254
  const path = `${subPath}/${child.name}`;
231000
231255
 
231001
231256
  if (names.has(`${path}|${child.type}`)) {
231002
- result.error.push(`${ERROR_MESSAGES.nodesNotUnique} Found duplicate of ${child.type} with path: ${path}`);
231257
+ errors.push(`${ERROR_MESSAGES.nodesNotUnique} Found duplicate of ${child.type} with path: ${path}`);
231003
231258
  } else {
231004
231259
  names.add(`${path}|${child.type}`);
231005
- validateChildrenAreUniqueRecursive(child, result, names, path);
231260
+ validateChildrenAreUniqueRecursive(child, errors, names, path);
231006
231261
  }
231007
231262
  }
231008
231263
  }
231009
231264
 
231010
- function validateFixedFolders(file, result, childNodes = file.nodes[0].children) {
231011
- const notFixed = [];
231012
- const outOfBounds = [];
231013
- const intersections = new Set();
231014
-
231265
+ function checkChildNodes(childNodes, notFixed, file, errors, outOfBounds, intersections) {
231015
231266
  for (const node of childNodes) {
231016
231267
  if (node.fixedPosition === undefined) {
231017
231268
  notFixed.push(`${node.name}`);
@@ -231019,7 +231270,7 @@ function validateFixedFolders(file, result, childNodes = file.nodes[0].children)
231019
231270
  const apiVersion = getAsApiVersion(file.apiVersion);
231020
231271
 
231021
231272
  if (apiVersion.major < 1 || apiVersion.major === 1 && apiVersion.minor < 2) {
231022
- result.error.push(`${ERROR_MESSAGES.fixedFoldersNotAllowed} Found: ${file.apiVersion}`);
231273
+ errors.push(`${ERROR_MESSAGES.fixedFoldersNotAllowed} Found: ${file.apiVersion}`);
231023
231274
  return;
231024
231275
  }
231025
231276
 
@@ -231034,24 +231285,34 @@ function validateFixedFolders(file, result, childNodes = file.nodes[0].children)
231034
231285
  }
231035
231286
  }
231036
231287
  }
231288
+ }
231289
+
231290
+ function validateFixedFolders(file, childNodes = file.nodes[0].children) {
231291
+ const errors = [];
231292
+ const notFixed = [];
231293
+ const outOfBounds = [];
231294
+ const intersections = new Set();
231295
+ checkChildNodes(childNodes, notFixed, file, errors, outOfBounds, intersections);
231037
231296
 
231038
231297
  if (notFixed.length > 0 && notFixed.length !== childNodes.length) {
231039
- result.error.push(`${ERROR_MESSAGES.notAllFoldersAreFixed} Found: ${notFixed.join(", ")}`);
231298
+ errors.push(`${ERROR_MESSAGES.notAllFoldersAreFixed} Found: ${notFixed.join(", ")}`);
231040
231299
  }
231041
231300
 
231042
231301
  if (outOfBounds.length > 0) {
231043
- result.error.push(`${ERROR_MESSAGES.fixedFoldersOutOfBounds} Found: ${outOfBounds.join(", ")}`);
231302
+ errors.push(`${ERROR_MESSAGES.fixedFoldersOutOfBounds} Found: ${outOfBounds.join(", ")}`);
231044
231303
  }
231045
231304
 
231046
231305
  if (intersections.size > 0) {
231047
- result.error.push(`${ERROR_MESSAGES.fixedFoldersOverlapped} Found: ${[...intersections].join(", ")}`);
231306
+ errors.push(`${ERROR_MESSAGES.fixedFoldersOverlapped} Found: ${[...intersections].join(", ")}`);
231048
231307
  }
231049
231308
 
231050
231309
  for (const node of childNodes) {
231051
231310
  if (node.children) {
231052
- validateFixedFolders(file, result, node.children);
231311
+ errors.push(...validateFixedFolders(file, node.children));
231053
231312
  }
231054
231313
  }
231314
+
231315
+ return errors;
231055
231316
  }
231056
231317
 
231057
231318
  function getFoundFolderMessage(node) {
@@ -237946,6 +238207,33 @@ ___CSS_LOADER_EXPORT___.push([module.id, ".custom-configs {\n margin-left: 15%;
237946
238207
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
237947
238208
 
237948
238209
 
238210
+ /***/ }),
238211
+
238212
+ /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/dialog/dialog.changelog.component.scss":
238213
+ /*!***********************************************************************************************************************************************!*\
238214
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/dialog/dialog.changelog.component.scss ***!
238215
+ \***********************************************************************************************************************************************/
238216
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
238217
+
238218
+ "use strict";
238219
+ __webpack_require__.r(__webpack_exports__);
238220
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
238221
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
238222
+ /* harmony export */ });
238223
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
238224
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
238225
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
238226
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
238227
+ // Imports
238228
+
238229
+
238230
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
238231
+ // Module
238232
+ ___CSS_LOADER_EXPORT___.push([module.id, "img[alt$=\"xs\"] {\n height: 32px; }\n\nimg[alt$=\"s\"] {\n height: 64px; }\n\nimg[alt$=\"m\"] {\n height: 256px; }\n\nimg[alt$=\"l\"] {\n height: 350px; }\n\nimg[alt$=\"xl\"] {\n height: 512px; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/dialog/dialog.changelog.component.scss"],"names":[],"mappings":"AAAA;EACC,YAAY,EAAA;;AAEb;EACC,YAAY,EAAA;;AAEb;EACC,aAAa,EAAA;;AAEd;EACC,aAAa,EAAA;;AAEd;EACC,aAAa,EAAA","sourcesContent":["img[alt$=\"xs\"] {\n\theight: 32px;\n}\nimg[alt$=\"s\"] {\n\theight: 64px;\n}\nimg[alt$=\"m\"] {\n\theight: 256px;\n}\nimg[alt$=\"l\"] {\n\theight: 350px;\n}\nimg[alt$=\"xl\"] {\n\theight: 512px;\n}\n"],"sourceRoot":""}]);
238233
+ // Exports
238234
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
238235
+
238236
+
237949
238237
  /***/ }),
237950
238238
 
237951
238239
  /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/dialog/dialog.component.scss":
@@ -238130,7 +238418,7 @@ __webpack_require__.r(__webpack_exports__);
238130
238418
 
238131
238419
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
238132
238420
  // Module
238133
- ___CSS_LOADER_EXPORT___.push([module.id, "file-panel-component {\n width: calc(100% - 150px);\n min-width: 400px;\n display: inline-block; }\n file-panel-component .delta-chooser {\n position: absolute;\n display: inline-flex;\n min-width: 70%; }\n file-panel-component .mode-chooser {\n display: inline-flex;\n vertical-align: middle;\n margin-left: 10px; }\n file-panel-component .small-action-button.transparent .md-fab.md-button.md-ink-ripple:hover {\n background-color: transparent !important; }\n file-panel-component .state-selector-button.mode-selector {\n height: 24px;\n width: 55px;\n background-color: #ffffff; }\n file-panel-component .state-selector-button.mode-selector.middle {\n border-left: 1px solid rgba(230, 230, 230, 0.96);\n border-right: 1px solid rgba(230, 230, 230, 0.96); }\n file-panel-component .state-selector-button.mode-selector.current {\n background-color: #009688;\n color: #ffffff; }\n file-panel-component .state-selector-button.mode-selector.current:hover {\n background-color: #009688; }\n file-panel-component .state-selector-button.mode-selector .text {\n display: block;\n margin-top: -5px;\n margin-right: 0px; }\n file-panel-component .state-selector-button.mode-selector .text:active {\n padding: -5px;\n margin: -5px; }\n file-panel-component .pictogram {\n display: inline-flex;\n width: 10px;\n margin-right: 5px;\n margin-left: 5px;\n height: 22px;\n border-radius: 2px;\n align-self: center; }\n file-panel-component md-input-container {\n display: inline-block;\n text-align: left;\n font-size: 11pt;\n width: calc(100% - 250px);\n max-width: 300px;\n min-width: 150px; }\n file-panel-component md-input-container.delta-select {\n width: calc((100% - 300px) / 2); }\n file-panel-component md-input-container md-select {\n display: block; }\n file-panel-component md-input-container md-select .md-select-value {\n background: white;\n margin-right: 5px;\n border-radius: 5px;\n padding-left: 5px;\n min-height: 22px; }\n file-panel-component md-input-container md-select .md-select-value span {\n margin-top: -3px; }\n file-panel-component md-input-container > * {\n display: inline-block; }\n file-panel-component md-input-container i.fa {\n color: #009688;\n margin-top: 4px;\n margin-left: 5px;\n margin-right: 3px;\n min-width: 16px; }\n file-panel-component md-input-container i.fa:hover {\n color: black;\n cursor: pointer; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/filePanel/filePanel.component.scss"],"names":[],"mappings":"AAAA;EACC,yBAAyB;EACzB,gBAAgB;EAChB,qBAAqB,EAAA;EAHtB;IAME,kBAAkB;IAClB,oBAAoB;IACpB,cAAc,EAAA;EARhB;IAYE,oBAAoB;IACpB,sBAAsB;IACtB,iBAAiB,EAAA;EAdnB;IAoBI,wCAAwC,EAAA;EApB5C;IA2BG,YAAY;IACZ,WAAW;IACX,yBAAyB,EAAA;IA7B5B;MAgCI,gDAAgD;MAChD,iDAAiD,EAAA;IAjCrD;MAqCI,yBAAkC;MAClC,cAAc,EAAA;IAtClB;MAyCI,yBAAkC,EAAA;IAzCtC;MA4CI,cAAc;MACd,gBAAgB;MAChB,iBAAiB,EAAA;MA9CrB;QAiDK,aAAa;QACb,YAAY,EAAA;EAlDjB;IAyDE,oBAAoB;IACpB,WAAW;IACX,iBAAiB;IACjB,gBAAgB;IAChB,YAAY;IACZ,kBAAkB;IAClB,kBAAkB,EAAA;EA/DpB;IAmEE,qBAAqB;IACrB,gBAAgB;IAChB,eAAe;IACf,yBAAyB;IACzB,gBAAgB;IAChB,gBAAgB,EAAA;IAxElB;MA2EG,+BAA+B,EAAA;IA3ElC;MA+EG,cAAc,EAAA;MA/EjB;QAkFI,iBAAiB;QACjB,iBAAiB;QACjB,kBAAkB;QAClB,iBAAiB;QACjB,gBAAgB,EAAA;QAtFpB;UAyFK,gBAAgB,EAAA;IAzFrB;MA+FG,qBAAqB,EAAA;IA/FxB;MAmGG,cAAuB;MACvB,eAAe;MACf,gBAAgB;MAChB,iBAAiB;MACjB,eAAe,EAAA;MAvGlB;QA0GI,YAAY;QACZ,eAAe,EAAA","sourcesContent":["file-panel-component {\n\twidth: calc(100% - 150px);\n\tmin-width: 400px;\n\tdisplay: inline-block;\n\n\t.delta-chooser {\n\t\tposition: absolute;\n\t\tdisplay: inline-flex;\n\t\tmin-width: 70%;\n\t}\n\n\t.mode-chooser {\n\t\tdisplay: inline-flex;\n\t\tvertical-align: middle;\n\t\tmargin-left: 10px;\n\t}\n\n\t.small-action-button.transparent {\n\t\t.md-fab.md-button.md-ink-ripple {\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t.state-selector-button {\n\t\t&.mode-selector {\n\t\t\theight: 24px;\n\t\t\twidth: 55px;\n\t\t\tbackground-color: #ffffff;\n\n\t\t\t&.middle {\n\t\t\t\tborder-left: 1px solid rgba(230, 230, 230, 0.96);\n\t\t\t\tborder-right: 1px solid rgba(230, 230, 230, 0.96);\n\t\t\t}\n\n\t\t\t&.current {\n\t\t\t\tbackground-color: rgb(0, 150, 136);\n\t\t\t\tcolor: #ffffff;\n\t\t\t}\n\t\t\t&.current:hover {\n\t\t\t\tbackground-color: rgb(0, 150, 136);\n\t\t\t}\n\t\t\t.text {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin-top: -5px;\n\t\t\t\tmargin-right: 0px;\n\n\t\t\t\t&:active {\n\t\t\t\t\tpadding: -5px;\n\t\t\t\t\tmargin: -5px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t.pictogram {\n\t\tdisplay: inline-flex;\n\t\twidth: 10px;\n\t\tmargin-right: 5px;\n\t\tmargin-left: 5px;\n\t\theight: 22px;\n\t\tborder-radius: 2px;\n\t\talign-self: center;\n\t}\n\n\tmd-input-container {\n\t\tdisplay: inline-block;\n\t\ttext-align: left;\n\t\tfont-size: 11pt;\n\t\twidth: calc(100% - 250px);\n\t\tmax-width: 300px;\n\t\tmin-width: 150px;\n\n\t\t&.delta-select {\n\t\t\twidth: calc((100% - 300px) / 2);\n\t\t}\n\n\t\tmd-select {\n\t\t\tdisplay: block;\n\n\t\t\t.md-select-value {\n\t\t\t\tbackground: white;\n\t\t\t\tmargin-right: 5px;\n\t\t\t\tborder-radius: 5px;\n\t\t\t\tpadding-left: 5px;\n\t\t\t\tmin-height: 22px;\n\n\t\t\t\tspan {\n\t\t\t\t\tmargin-top: -3px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t> * {\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t\ti.fa {\n\t\t\tcolor: rgb(0, 150, 136);\n\t\t\tmargin-top: 4px;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 3px;\n\t\t\tmin-width: 16px;\n\n\t\t\t&:hover {\n\t\t\t\tcolor: black;\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\t}\n}\n"],"sourceRoot":""}]);
238421
+ ___CSS_LOADER_EXPORT___.push([module.id, "cc-file-panel {\n width: calc(100% - 150px);\n min-width: 400px;\n display: inline-block; }\n cc-file-panel.hidden {\n display: none; }\n cc-file-panel .mode-chooser {\n display: inline-flex;\n vertical-align: middle;\n margin-left: 10px; }\n cc-file-panel .state-selector-button.mode-selector {\n height: 24px;\n width: 66px;\n background-color: #ffffff; }\n cc-file-panel .state-selector-button.mode-selector.middle {\n border-left: 1px solid rgba(230, 230, 230, 0.96);\n border-right: 1px solid rgba(230, 230, 230, 0.96); }\n cc-file-panel .state-selector-button.mode-selector.current {\n background-color: #009688;\n color: #ffffff; }\n cc-file-panel .state-selector-button.mode-selector.current:hover {\n background-color: #009688; }\n cc-file-panel .state-selector-button.mode-selector .text {\n display: block;\n margin-top: -5px;\n margin-right: 0px; }\n cc-file-panel .state-selector-button.mode-selector .text:active {\n padding: -5px;\n margin: -5px; }\n cc-file-panel .pictogram {\n display: inline-flex;\n width: 10px;\n margin-right: 5px;\n margin-left: 5px;\n height: 22px;\n border-radius: 2px;\n align-self: center;\n vertical-align: bottom; }\n cc-file-panel .delta-select {\n width: 200px;\n margin: 0 10px 0 10px;\n vertical-align: bottom; }\n cc-file-panel .standard-select {\n margin: 0 10px 0 10px; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/filePanel/filePanel.component.scss"],"names":[],"mappings":"AAAA;EACC,yBAAyB;EACzB,gBAAgB;EAChB,qBAAqB,EAAA;EAHtB;IAME,aAAa,EAAA;EANf;IAUE,oBAAoB;IACpB,sBAAsB;IACtB,iBAAiB,EAAA;EAZnB;IAiBG,YAAY;IACZ,WAAW;IACX,yBAAyB,EAAA;IAnB5B;MAsBI,gDAAgD;MAChD,iDAAiD,EAAA;IAvBrD;MA2BI,yBAAkC;MAClC,cAAc,EAAA;IA5BlB;MA+BI,yBAAkC,EAAA;IA/BtC;MAkCI,cAAc;MACd,gBAAgB;MAChB,iBAAiB,EAAA;MApCrB;QAuCK,aAAa;QACb,YAAY,EAAA;EAxCjB;IA+CE,oBAAoB;IACpB,WAAW;IACX,iBAAiB;IACjB,gBAAgB;IAChB,YAAY;IACZ,kBAAkB;IAClB,kBAAkB;IAClB,sBAAsB,EAAA;EAtDxB;IA0DE,YAAY;IACZ,qBAAqB;IACrB,sBAAsB,EAAA;EA5DxB;IAgEE,qBAAqB,EAAA","sourcesContent":["cc-file-panel {\n\twidth: calc(100% - 150px);\n\tmin-width: 400px;\n\tdisplay: inline-block;\n\n\t&.hidden {\n\t\tdisplay: none;\n\t}\n\n\t.mode-chooser {\n\t\tdisplay: inline-flex;\n\t\tvertical-align: middle;\n\t\tmargin-left: 10px;\n\t}\n\n\t.state-selector-button {\n\t\t&.mode-selector {\n\t\t\theight: 24px;\n\t\t\twidth: 66px;\n\t\t\tbackground-color: #ffffff;\n\n\t\t\t&.middle {\n\t\t\t\tborder-left: 1px solid rgba(230, 230, 230, 0.96);\n\t\t\t\tborder-right: 1px solid rgba(230, 230, 230, 0.96);\n\t\t\t}\n\n\t\t\t&.current {\n\t\t\t\tbackground-color: rgb(0, 150, 136);\n\t\t\t\tcolor: #ffffff;\n\t\t\t}\n\t\t\t&.current:hover {\n\t\t\t\tbackground-color: rgb(0, 150, 136);\n\t\t\t}\n\t\t\t.text {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin-top: -5px;\n\t\t\t\tmargin-right: 0px;\n\n\t\t\t\t&:active {\n\t\t\t\t\tpadding: -5px;\n\t\t\t\t\tmargin: -5px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t.pictogram {\n\t\tdisplay: inline-flex;\n\t\twidth: 10px;\n\t\tmargin-right: 5px;\n\t\tmargin-left: 5px;\n\t\theight: 22px;\n\t\tborder-radius: 2px;\n\t\talign-self: center;\n\t\tvertical-align: bottom;\n\t}\n\n\t.delta-select {\n\t\twidth: 200px;\n\t\tmargin: 0 10px 0 10px;\n\t\tvertical-align: bottom;\n\t}\n\n\t.standard-select {\n\t\tmargin: 0 10px 0 10px;\n\t}\n}\n"],"sourceRoot":""}]);
238134
238422
  // Exports
238135
238423
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
238136
238424
 
@@ -238488,10 +238776,10 @@ ___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names
238488
238776
 
238489
238777
  /***/ }),
238490
238778
 
238491
- /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.scss":
238492
- /*!***********************************************************************************************************************************************************************************!*\
238493
- !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.scss ***!
238494
- \***********************************************************************************************************************************************************************************/
238779
+ /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.scss":
238780
+ /*!*******************************************************************************************************************************************************************!*\
238781
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.scss ***!
238782
+ \*******************************************************************************************************************************************************************/
238495
238783
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
238496
238784
 
238497
238785
  "use strict";
@@ -238508,7 +238796,7 @@ __webpack_require__.r(__webpack_exports__);
238508
238796
 
238509
238797
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
238510
238798
  // Module
238511
- ___CSS_LOADER_EXPORT___.push([module.id, "cc-mark-folder-color-picker {\n display: inline-block; }\n cc-mark-folder-color-picker :hover {\n cursor: pointer; }\n cc-mark-folder-color-picker .cc-color-picker-trigger {\n width: 32px;\n height: 32px;\n font-size: 25px; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.scss"],"names":[],"mappings":"AAAA;EACC,qBAAqB,EAAA;EADtB;IAIE,eAAe,EAAA;EAJjB;IAQE,WAAW;IACX,YAAY;IACZ,eAAe,EAAA","sourcesContent":["cc-mark-folder-color-picker {\n\tdisplay: inline-block;\n\n\t:hover {\n\t\tcursor: pointer;\n\t}\n\n\t.cc-color-picker-trigger {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tfont-size: 25px;\n\t}\n}\n"],"sourceRoot":""}]);
238799
+ ___CSS_LOADER_EXPORT___.push([module.id, "cc-mark-folder-row .row {\n display: flex; }\n\ncc-mark-folder-row :hover {\n cursor: pointer; }\n\ncc-mark-folder-row .colorButton {\n width: 32px;\n height: 32px; }\n cc-mark-folder-row .colorButton i {\n font-size: 25px;\n display: block;\n color: red;\n text-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white; }\n\ncc-mark-folder-row cc-color-picker {\n width: 32px;\n height: 32px; }\n cc-mark-folder-row cc-color-picker .cc-color-picker-trigger {\n font-size: 25px;\n margin-top: 8px; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.scss"],"names":[],"mappings":"AAAA;EAEE,aAAa,EAAA;;AAFf;EAME,eAAe,EAAA;;AANjB;EAUE,WAAW;EACX,YAAY,EAAA;EAXd;IAcG,eAAe;IACf,cAAc;IACd,UAAU;IACV,iEAAiE,EAAA;;AAjBpE;EAsBE,WAAW;EACX,YAAY,EAAA;EAvBd;IA0BG,eAAe;IACf,eAAe,EAAA","sourcesContent":["cc-mark-folder-row {\n\t.row {\n\t\tdisplay: flex;\n\t}\n\n\t:hover {\n\t\tcursor: pointer;\n\t}\n\n\t.colorButton {\n\t\twidth: 32px;\n\t\theight: 32px;\n\n\t\ti {\n\t\t\tfont-size: 25px;\n\t\t\tdisplay: block;\n\t\t\tcolor: red;\n\t\t\ttext-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white;\n\t\t}\n\t}\n\n\tcc-color-picker {\n\t\twidth: 32px;\n\t\theight: 32px;\n\n\t\t.cc-color-picker-trigger {\n\t\t\tfont-size: 25px;\n\t\t\tmargin-top: 8px;\n\t\t}\n\t}\n}\n"],"sourceRoot":""}]);
238512
238800
  // Exports
238513
238801
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
238514
238802
 
@@ -238535,7 +238823,7 @@ __webpack_require__.r(__webpack_exports__);
238535
238823
 
238536
238824
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
238537
238825
  // Module
238538
- ___CSS_LOADER_EXPORT___.push([module.id, ".cdk-overlay-container {\n /* overwrite z-index of below #codemap-context-menu */\n z-index: 2000 !important; }\n\nnode-context-menu-component #codemap-context-menu {\n position: absolute;\n z-index: 2000; }\n\nnode-context-menu-component .button-group {\n display: inline-grid; }\n\nnode-context-menu-component .png-icon {\n margin: 5px auto auto;\n padding: 0;\n display: inline-block;\n background-repeat: no-repeat no-repeat;\n pointer-events: none; }\n\nnode-context-menu-component .md-button:not(.colorButton),\nnode-context-menu-component [mat-button] {\n width: 100%;\n text-align: left;\n margin-top: 0;\n line-height: 30px;\n min-height: 30px; }\n node-context-menu-component .md-button:not(.colorButton) i,\n node-context-menu-component [mat-button] i {\n min-width: 15px; }\n node-context-menu-component .md-button:not(.colorButton):not(:last-child),\n node-context-menu-component [mat-button]:not(:last-child) {\n margin-bottom: 0; }\n\nnode-context-menu-component .colorButton {\n width: 32px !important;\n height: 32px !important;\n min-width: 32px !important;\n min-height: 32px !important; }\n node-context-menu-component .colorButton i {\n font-size: 25px;\n margin-left: 0;\n margin-top: 3px;\n color: red;\n text-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.scss"],"names":[],"mappings":"AAAA;EACC,qDAAA;EACA,wBAAwB,EAAA;;AAGzB;EAEE,kBAAkB;EAClB,aAAa,EAAA;;AAHf;EAOE,oBAAoB,EAAA;;AAPtB;EAWE,qBAAqB;EACrB,UAAU;EACV,qBAAqB;EACrB,sCAAsC;EACtC,oBAAoB,EAAA;;AAftB;;EAmBE,WAAW;EACX,gBAAgB;EAChB,aAAa;EACb,iBAAiB;EACjB,gBAAgB,EAAA;EAvBlB;;IA0BG,eAAe,EAAA;EA1BlB;;IA8BG,gBAAgB,EAAA;;AA9BnB;EAmCE,sBAAsB;EACtB,uBAAuB;EACvB,0BAA0B;EAC1B,2BAA2B,EAAA;EAtC7B;IAyCG,eAAe;IACf,cAAc;IACd,eAAe;IACf,UAAU;IACV,iEAAiE,EAAA","sourcesContent":[".cdk-overlay-container {\n\t/* overwrite z-index of below #codemap-context-menu */\n\tz-index: 2000 !important;\n}\n\nnode-context-menu-component {\n\t#codemap-context-menu {\n\t\tposition: absolute;\n\t\tz-index: 2000;\n\t}\n\n\t.button-group {\n\t\tdisplay: inline-grid;\n\t}\n\n\t.png-icon {\n\t\tmargin: 5px auto auto;\n\t\tpadding: 0;\n\t\tdisplay: inline-block;\n\t\tbackground-repeat: no-repeat no-repeat;\n\t\tpointer-events: none;\n\t}\n\t.md-button:not(.colorButton),\n\t[mat-button] {\n\t\twidth: 100%;\n\t\ttext-align: left;\n\t\tmargin-top: 0;\n\t\tline-height: 30px;\n\t\tmin-height: 30px;\n\n\t\ti {\n\t\t\tmin-width: 15px;\n\t\t}\n\n\t\t&:not(:last-child) {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n\t.colorButton {\n\t\twidth: 32px !important;\n\t\theight: 32px !important;\n\t\tmin-width: 32px !important;\n\t\tmin-height: 32px !important;\n\n\t\ti {\n\t\t\tfont-size: 25px;\n\t\t\tmargin-left: 0;\n\t\t\tmargin-top: 3px;\n\t\t\tcolor: red;\n\t\t\ttext-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white;\n\t\t}\n\t}\n}\n"],"sourceRoot":""}]);
238826
+ ___CSS_LOADER_EXPORT___.push([module.id, ".cdk-overlay-container {\n /* overwrite z-index of below #codemap-context-menu */\n z-index: 2000 !important; }\n\nnode-context-menu-component #codemap-context-menu {\n position: absolute;\n z-index: 2000; }\n\nnode-context-menu-component .button-group {\n display: inline-grid; }\n\nnode-context-menu-component .png-icon {\n margin: 5px auto auto;\n padding: 0;\n display: inline-block;\n background-repeat: no-repeat no-repeat;\n pointer-events: none; }\n\nnode-context-menu-component .md-button:not(.colorButton),\nnode-context-menu-component [mat-button] {\n width: 100%;\n text-align: left;\n margin-top: 0;\n line-height: 30px;\n min-height: 30px; }\n node-context-menu-component .md-button:not(.colorButton) i,\n node-context-menu-component [mat-button] i {\n min-width: 15px; }\n node-context-menu-component .md-button:not(.colorButton):not(:last-child),\n node-context-menu-component [mat-button]:not(:last-child) {\n margin-bottom: 0; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.scss"],"names":[],"mappings":"AAAA;EACC,qDAAA;EACA,wBAAwB,EAAA;;AAGzB;EAEE,kBAAkB;EAClB,aAAa,EAAA;;AAHf;EAOE,oBAAoB,EAAA;;AAPtB;EAWE,qBAAqB;EACrB,UAAU;EACV,qBAAqB;EACrB,sCAAsC;EACtC,oBAAoB,EAAA;;AAftB;;EAmBE,WAAW;EACX,gBAAgB;EAChB,aAAa;EACb,iBAAiB;EACjB,gBAAgB,EAAA;EAvBlB;;IA0BG,eAAe,EAAA;EA1BlB;;IA8BG,gBAAgB,EAAA","sourcesContent":[".cdk-overlay-container {\n\t/* overwrite z-index of below #codemap-context-menu */\n\tz-index: 2000 !important;\n}\n\nnode-context-menu-component {\n\t#codemap-context-menu {\n\t\tposition: absolute;\n\t\tz-index: 2000;\n\t}\n\n\t.button-group {\n\t\tdisplay: inline-grid;\n\t}\n\n\t.png-icon {\n\t\tmargin: 5px auto auto;\n\t\tpadding: 0;\n\t\tdisplay: inline-block;\n\t\tbackground-repeat: no-repeat no-repeat;\n\t\tpointer-events: none;\n\t}\n\t.md-button:not(.colorButton),\n\t[mat-button] {\n\t\twidth: 100%;\n\t\ttext-align: left;\n\t\tmargin-top: 0;\n\t\tline-height: 30px;\n\t\tmin-height: 30px;\n\n\t\ti {\n\t\t\tmin-width: 15px;\n\t\t}\n\n\t\t&:not(:last-child) {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n}\n"],"sourceRoot":""}]);
238539
238827
  // Exports
238540
238828
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
238541
238829
 
@@ -238862,7 +239150,7 @@ __webpack_require__.r(__webpack_exports__);
238862
239150
 
238863
239151
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
238864
239152
  // Module
238865
- ___CSS_LOADER_EXPORT___.push([module.id, "tool-bar-component .tool-bar {\n display: flex;\n align-items: center;\n background-color: #f0f0f0;\n height: 35px;\n border-bottom: 1px solid #cdcdcd; }\n\ntool-bar-component .toolbar-button {\n min-width: 24px;\n min-height: 24px;\n border-radius: 100%;\n padding: 5px;\n line-height: 0%;\n margin-right: 0;\n background-color: #009688;\n color: white; }\n tool-bar-component .toolbar-button:hover {\n background-color: #007c70 !important; }\n tool-bar-component .toolbar-button .folder-icon {\n margin-right: -2px; }\n\ntool-bar-component .md-focused {\n background-color: #009688 !important; }\n\ntool-bar-component .right-aligned {\n position: absolute;\n right: 10px;\n display: inline-flex;\n align-items: center;\n width: 400px; }\n\ntool-bar-component span {\n font-size: 10pt;\n margin-right: 8px; }\n\ntool-bar-component loading-gif-map-component {\n margin-right: 15px;\n width: 15px; }\n\nfile-panel-component.hidden,\nnode-path-panel-component.hidden {\n display: none; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/toolBar/toolBar.component.scss"],"names":[],"mappings":"AAAA;EAEE,aAAa;EACb,mBAAmB;EACnB,yBAAyB;EACzB,YAAY;EACZ,gCAAgC,EAAA;;AANlC;EAUE,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,YAAY;EACZ,eAAe;EACf,eAAe;EACf,yBAAkC;EAClC,YAAY,EAAA;EAjBd;IAmBG,oCAA6C,EAAA;EAnBhD;IAuBG,kBAAkB,EAAA;;AAvBrB;EA4BE,oCAA6C,EAAA;;AA5B/C;EAgCE,kBAAkB;EAClB,WAAW;EACX,oBAAoB;EACpB,mBAAmB;EACnB,YAAY,EAAA;;AApCd;EAwCE,eAAe;EACf,iBAAiB,EAAA;;AAzCnB;EA6CE,kBAAkB;EAClB,WAAW,EAAA;;AAIb;;EAGE,aAAa,EAAA","sourcesContent":["tool-bar-component {\n\t.tool-bar {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tbackground-color: #f0f0f0;\n\t\theight: 35px;\n\t\tborder-bottom: 1px solid #cdcdcd;\n\t}\n\n\t.toolbar-button {\n\t\tmin-width: 24px;\n\t\tmin-height: 24px;\n\t\tborder-radius: 100%;\n\t\tpadding: 5px;\n\t\tline-height: 0%;\n\t\tmargin-right: 0;\n\t\tbackground-color: rgb(0, 150, 136);\n\t\tcolor: white;\n\t\t&:hover {\n\t\t\tbackground-color: rgb(0, 124, 112) !important;\n\t\t}\n\n\t\t.folder-icon {\n\t\t\tmargin-right: -2px;\n\t\t}\n\t}\n\n\t.md-focused {\n\t\tbackground-color: rgb(0, 150, 136) !important;\n\t}\n\n\t.right-aligned {\n\t\tposition: absolute;\n\t\tright: 10px;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\twidth: 400px;\n\t}\n\n\tspan {\n\t\tfont-size: 10pt;\n\t\tmargin-right: 8px;\n\t}\n\n\tloading-gif-map-component {\n\t\tmargin-right: 15px;\n\t\twidth: 15px;\n\t}\n}\n\nfile-panel-component,\nnode-path-panel-component {\n\t&.hidden {\n\t\tdisplay: none;\n\t}\n}\n"],"sourceRoot":""}]);
239153
+ ___CSS_LOADER_EXPORT___.push([module.id, "tool-bar-component .tool-bar {\n display: flex;\n align-items: center;\n background-color: #f0f0f0;\n height: 35px;\n border-bottom: 1px solid #cdcdcd; }\n\ntool-bar-component .toolbar-button {\n min-width: 24px;\n min-height: 24px;\n border-radius: 100%;\n padding: 5px;\n line-height: 0%;\n margin-right: 0;\n background-color: #009688;\n color: white; }\n tool-bar-component .toolbar-button:hover {\n background-color: #007c70 !important; }\n tool-bar-component .toolbar-button .folder-icon {\n margin-right: -2px; }\n\ntool-bar-component .md-focused {\n background-color: #009688 !important; }\n\ntool-bar-component .right-aligned {\n position: absolute;\n right: 10px;\n display: inline-flex;\n align-items: center;\n width: 400px;\n justify-content: space-between; }\n\ntool-bar-component span {\n font-size: 10pt; }\n\ntool-bar-component loading-gif-map-component {\n margin-right: 15px;\n width: 15px; }\n\nfile-panel-component.hidden,\nnode-path-panel-component.hidden {\n display: none; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/toolBar/toolBar.component.scss"],"names":[],"mappings":"AAAA;EAEE,aAAa;EACb,mBAAmB;EACnB,yBAAyB;EACzB,YAAY;EACZ,gCAAgC,EAAA;;AANlC;EAUE,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,YAAY;EACZ,eAAe;EACf,eAAe;EACf,yBAAkC;EAClC,YAAY,EAAA;EAjBd;IAmBG,oCAA6C,EAAA;EAnBhD;IAuBG,kBAAkB,EAAA;;AAvBrB;EA4BE,oCAA6C,EAAA;;AA5B/C;EAgCE,kBAAkB;EAClB,WAAW;EACX,oBAAoB;EACpB,mBAAmB;EACnB,YAAY;EACZ,8BAA8B,EAAA;;AArChC;EAyCE,eAAe,EAAA;;AAzCjB;EA6CE,kBAAkB;EAClB,WAAW,EAAA;;AAIb;;EAGE,aAAa,EAAA","sourcesContent":["tool-bar-component {\n\t.tool-bar {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tbackground-color: #f0f0f0;\n\t\theight: 35px;\n\t\tborder-bottom: 1px solid #cdcdcd;\n\t}\n\n\t.toolbar-button {\n\t\tmin-width: 24px;\n\t\tmin-height: 24px;\n\t\tborder-radius: 100%;\n\t\tpadding: 5px;\n\t\tline-height: 0%;\n\t\tmargin-right: 0;\n\t\tbackground-color: rgb(0, 150, 136);\n\t\tcolor: white;\n\t\t&:hover {\n\t\t\tbackground-color: rgb(0, 124, 112) !important;\n\t\t}\n\n\t\t.folder-icon {\n\t\t\tmargin-right: -2px;\n\t\t}\n\t}\n\n\t.md-focused {\n\t\tbackground-color: rgb(0, 150, 136) !important;\n\t}\n\n\t.right-aligned {\n\t\tposition: absolute;\n\t\tright: 10px;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\twidth: 400px;\n\t\tjustify-content: space-between;\n\t}\n\n\tspan {\n\t\tfont-size: 10pt;\n\t}\n\n\tloading-gif-map-component {\n\t\tmargin-right: 15px;\n\t\twidth: 15px;\n\t}\n}\n\nfile-panel-component,\nnode-path-panel-component {\n\t&.hidden {\n\t\tdisplay: none;\n\t}\n}\n"],"sourceRoot":""}]);
238866
239154
  // Exports
238867
239155
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
238868
239156
 
@@ -242015,7 +242303,7 @@ module.exports = code;
242015
242303
  /***/ ((module) => {
242016
242304
 
242017
242305
  // Module
242018
- var code = "<div class=\"custom-configs\">\n\t<md-menu class=\"custom-configs-component\">\n\t\t<md-button class=\"custom-configs-button\" ng-click=\"$ctrl.initView(); $mdMenu.open($event);\" title=\"Open your saved Custom Configs\">\n\t\t\t<i class=\"fa fa-cogs\"></i>\n\t\t</md-button>\n\n\t\t<md-menu-content class=\"custom-configs-drop-down\" width=\"7\">\n\t\t\t<md-menu-item class=\"custom-configs-item\">\n\t\t\t\t<md-button class=\"custom-configs-dialog-name\" ng-disabled=\"true\">Custom Configs</md-button>\n\n\t\t\t\t<md-button\n\t\t\t\t\tclass=\"action-button\"\n\t\t\t\t\tonclick=\"document.getElementById('input-file-id').click()\"\n\t\t\t\t\ttitle=\"Upload Custom Configs (.cc.config.json file).\"\n\t\t\t\t>\n\t\t\t\t\t<i class=\"fa fa-folder-open\" aria-hidden=\"true\"></i>\n\t\t\t\t</md-button>\n\t\t\t\t<md-button\n\t\t\t\t\tng-click=\"$ctrl.downloadPreloadedCustomConfigs()\"\n\t\t\t\t\tng-disabled=\"!$ctrl._viewModel.hasDownloadableConfigs\"\n\t\t\t\t\tclass=\"action-button\"\n\t\t\t\t\ttitle=\"Download Custom Configs related to currently uploaded maps, if any.\"\n\t\t\t\t>\n\t\t\t\t\t<i class=\"fa fa-download\" aria-hidden=\"true\"></i>\n\t\t\t\t</md-button>\n\t\t\t\t<md-button ng-click=\"$ctrl.showAddCustomConfigSettings()\" class=\"action-button\" title=\"Create new Custom Config\">\n\t\t\t\t\t<i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n\t\t\t\t</md-button>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-divider></md-divider>\n\n\t\t\t<md-menu-item ng-if=\"!$ctrl._viewModel.dropDownCustomConfigItemGroups.length\" class=\"custom-configs-item\">\n\t\t\t\t<md-button disabled>It is time to add your first CustomConfig.</md-button>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-menu-item\n\t\t\t\tclass=\"custom-configs-item\"\n\t\t\t\tng-repeat=\"customConfigItemGroup in $ctrl._viewModel.dropDownCustomConfigItemGroups |\n limitTo: $ctrl._viewModel.visibleEntries\"\n\t\t\t>\n\t\t\t\t<md-button\n\t\t\t\t\tclass=\"button-hovering\"\n\t\t\t\t\tng-click=\"collapsed=!collapsed\"\n\t\t\t\t\tng-style=\"!customConfigItemGroup.hasApplicableItems && { color: 'rgba(0,0,0,0.3)' }\"\n\t\t\t\t\tmd-prevent-menu-close=\"md-prevent-menu-close\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"collapse-trigger\">\n\t\t\t\t\t\tCustom Configs in <strong>{{ customConfigItemGroup.mapSelectionMode | lowercase }}</strong> mode for\n\t\t\t\t\t\t<strong>{{ customConfigItemGroup.mapNames }}</strong>\n\t\t\t\t\t</span>\n\t\t\t\t\t<i ng-show=\"!collapsed\" class=\"collapse-icon fa fa-arrow-down\"></i>\n\t\t\t\t\t<i ng-show=\"collapsed\" class=\"collapse-icon fa fa-arrow-up\"></i>\n\t\t\t\t</md-button>\n\n\t\t\t\t<div class=\"collapsable\" ng-show=\"collapsed\">\n\t\t\t\t\t<div class=\"custom-configs-item\" ng-repeat=\"customConfig in customConfigItemGroup.customConfigItems\">\n\t\t\t\t\t\t<md-button\n\t\t\t\t\t\t\tclass=\"button-hovering\"\n\t\t\t\t\t\t\tng-click=\"$ctrl.applyCustomConfig(customConfig.id)\"\n\t\t\t\t\t\t\tng-disabled=\"!customConfig.isApplicable\"\n\t\t\t\t\t\t\ttitle=\"{{\n\t\t\t\t\t\t\t\tcustomConfig.isApplicable\n\t\t\t\t\t\t\t\t\t? 'Apply Custom Config'\n\t\t\t\t\t\t\t\t\t: 'This one is applicable for map(s) ' +\n\t\t\t\t\t\t\t\t\t customConfig.mapNames +\n\t\t\t\t\t\t\t\t\t ' in ' +\n\t\t\t\t\t\t\t\t\t customConfig.mapSelectionMode +\n\t\t\t\t\t\t\t\t\t ' mode only.'\n\t\t\t\t\t\t\t}}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ customConfig.name }}\n\t\t\t\t\t\t</md-button>\n\n\t\t\t\t\t\t<md-button\n\t\t\t\t\t\t\tng-click=\"$ctrl.removeCustomConfig(customConfig.id, $index, $parent.$index)\"\n\t\t\t\t\t\t\tmd-prevent-menu-close=\"md-prevent-menu-close\"\n\t\t\t\t\t\t\tclass=\"action-button remove button-hovering\"\n\t\t\t\t\t\t\ttitle=\"Remove Custom Config\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<i class=\"fa fa-minus-square\"></i>\n\t\t\t\t\t\t</md-button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</md-menu-item>\n\t\t\t<button\n\t\t\t\tng-show=\"$ctrl._viewModel.showNonApplicableButton\"\n\t\t\t\tng-click=\"$ctrl.toggleNonApplicableItems();\"\n\t\t\t\tmd-prevent-menu-close=\"md-prevent-menu-close\"\n\t\t\t>\n\t\t\t\t{{ $ctrl.isExpanded() ? \"Hide non-applicable CustomConfigs\" : \"Show non-applicable CustomConfigs\" }}\n\t\t\t\t<i ng-class=\"$ctrl.isExpanded() ? 'fa fa-angle-up' : 'fa fa-angle-down'\"></i>\n\t\t\t</button>\n\t\t</md-menu-content>\n\t</md-menu>\n\n\t<md-menu class=\"custom-configs-component\">\n\t\t<md-button\n\t\t\tclass=\"custom-configs-button plus\"\n\t\t\tng-click=\"$ctrl.showAddCustomConfigSettings();\"\n\t\t\ttitle=\"Quick save current view as a Custom Config\"\n\t\t>\n\t\t\t<i class=\"fa fa-plus\"></i>\n\t\t</md-button>\n\t\t<md-menu-content></md-menu-content>\n\t</md-menu>\n</div>\n";
242306
+ var code = "<div class=\"custom-configs\">\n\t<md-menu class=\"custom-configs-component\">\n\t\t<md-button class=\"custom-configs-button\" ng-click=\"$ctrl.initView(); $mdMenu.open($event);\" title=\"Open your saved Custom Views\">\n\t\t\t<i class=\"fa fa-cogs\"></i>\n\t\t</md-button>\n\n\t\t<md-menu-content class=\"custom-configs-drop-down\" width=\"7\">\n\t\t\t<md-menu-item class=\"custom-configs-item\">\n\t\t\t\t<md-button class=\"custom-configs-dialog-name\" ng-disabled=\"true\">Custom Views</md-button>\n\n\t\t\t\t<md-button\n\t\t\t\t\tclass=\"action-button\"\n\t\t\t\t\tonclick=\"document.getElementById('input-file-id').click()\"\n\t\t\t\t\ttitle=\"Upload Custom View (.cc.config.json file).\"\n\t\t\t\t>\n\t\t\t\t\t<i class=\"fa fa-folder-open\" aria-hidden=\"true\"></i>\n\t\t\t\t</md-button>\n\t\t\t\t<md-button\n\t\t\t\t\tng-click=\"$ctrl.downloadPreloadedCustomConfigs()\"\n\t\t\t\t\tng-disabled=\"!$ctrl._viewModel.hasDownloadableConfigs\"\n\t\t\t\t\tclass=\"action-button\"\n\t\t\t\t\ttitle=\"Download Custom View related to currently uploaded maps, if any.\"\n\t\t\t\t>\n\t\t\t\t\t<i class=\"fa fa-download\" aria-hidden=\"true\"></i>\n\t\t\t\t</md-button>\n\t\t\t\t<md-button ng-click=\"$ctrl.showAddCustomConfigSettings()\" class=\"action-button\" title=\"Create new Custom View\">\n\t\t\t\t\t<i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n\t\t\t\t</md-button>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-divider></md-divider>\n\n\t\t\t<md-menu-item ng-if=\"!$ctrl._viewModel.dropDownCustomConfigItemGroups.length\" class=\"custom-configs-item\">\n\t\t\t\t<md-button disabled>It is time to add your first Custom View.</md-button>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-menu-item\n\t\t\t\tclass=\"custom-configs-item\"\n\t\t\t\tng-repeat=\"customConfigItemGroup in $ctrl._viewModel.dropDownCustomConfigItemGroups |\n limitTo: $ctrl._viewModel.visibleEntries\"\n\t\t\t>\n\t\t\t\t<md-button\n\t\t\t\t\tclass=\"button-hovering\"\n\t\t\t\t\tng-click=\"collapsed=!collapsed\"\n\t\t\t\t\tng-style=\"!customConfigItemGroup.hasApplicableItems && { color: 'rgba(0,0,0,0.3)' }\"\n\t\t\t\t\tmd-prevent-menu-close=\"md-prevent-menu-close\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"collapse-trigger\">\n\t\t\t\t\t\tCustom View(s) in <strong>{{ customConfigItemGroup.mapSelectionMode | lowercase }}</strong> mode for\n\t\t\t\t\t\t<strong>{{ customConfigItemGroup.mapNames }}</strong>\n\t\t\t\t\t</span>\n\t\t\t\t\t<i ng-show=\"!collapsed\" class=\"collapse-icon fa fa-arrow-down\"></i>\n\t\t\t\t\t<i ng-show=\"collapsed\" class=\"collapse-icon fa fa-arrow-up\"></i>\n\t\t\t\t</md-button>\n\n\t\t\t\t<div class=\"collapsable\" ng-show=\"collapsed\">\n\t\t\t\t\t<div class=\"custom-configs-item\" ng-repeat=\"customConfig in customConfigItemGroup.customConfigItems\">\n\t\t\t\t\t\t<md-button\n\t\t\t\t\t\t\tclass=\"button-hovering\"\n\t\t\t\t\t\t\tng-click=\"$ctrl.applyCustomConfig(customConfig.id)\"\n\t\t\t\t\t\t\tng-disabled=\"!customConfig.isApplicable\"\n\t\t\t\t\t\t\ttitle=\"{{\n\t\t\t\t\t\t\t\tcustomConfig.isApplicable\n\t\t\t\t\t\t\t\t\t? 'Apply Custom Config'\n\t\t\t\t\t\t\t\t\t: 'This one is applicable for map(s) ' +\n\t\t\t\t\t\t\t\t\t customConfig.mapNames +\n\t\t\t\t\t\t\t\t\t ' in ' +\n\t\t\t\t\t\t\t\t\t customConfig.mapSelectionMode +\n\t\t\t\t\t\t\t\t\t ' mode only.'\n\t\t\t\t\t\t\t}}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ customConfig.name }}\n\t\t\t\t\t\t</md-button>\n\n\t\t\t\t\t\t<md-button\n\t\t\t\t\t\t\tng-click=\"$ctrl.removeCustomConfig(customConfig.id, $index, $parent.$index)\"\n\t\t\t\t\t\t\tmd-prevent-menu-close=\"md-prevent-menu-close\"\n\t\t\t\t\t\t\tclass=\"action-button remove button-hovering\"\n\t\t\t\t\t\t\ttitle=\"Remove Custom Config\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<i class=\"fa fa-minus-square\"></i>\n\t\t\t\t\t\t</md-button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</md-menu-item>\n\t\t\t<button\n\t\t\t\tng-show=\"$ctrl._viewModel.showNonApplicableButton\"\n\t\t\t\tng-click=\"$ctrl.toggleNonApplicableItems();\"\n\t\t\t\tmd-prevent-menu-close=\"md-prevent-menu-close\"\n\t\t\t>\n\t\t\t\t{{ $ctrl.isExpanded() ? \"Hide non-applicable Custom Views\" : \"Show non-applicable Custom Views\" }}\n\t\t\t\t<i ng-class=\"$ctrl.isExpanded() ? 'fa fa-angle-up' : 'fa fa-angle-down'\"></i>\n\t\t\t</button>\n\t\t</md-menu-content>\n\t</md-menu>\n\n\t<md-menu class=\"custom-configs-component\">\n\t\t<md-button\n\t\t\tclass=\"custom-configs-button plus\"\n\t\t\tng-click=\"$ctrl.showAddCustomConfigSettings();\"\n\t\t\ttitle=\"Quick save current view as a Custom View\"\n\t\t>\n\t\t\t<i class=\"fa fa-plus\"></i>\n\t\t</md-button>\n\t\t<md-menu-content></md-menu-content>\n\t</md-menu>\n</div>\n";
242019
242307
  // Exports
242020
242308
  module.exports = code;
242021
242309
 
@@ -242028,7 +242316,7 @@ module.exports = code;
242028
242316
  /***/ ((module) => {
242029
242317
 
242030
242318
  // Module
242031
- var code = "<md-dialog class=\"custom-config-dialog\">\n\t<md-toolbar>\n\t\t<div class=\"md-toolbar-tools\">\n\t\t\t<h2>Add Custom Config</h2>\n\t\t</div>\n\t</md-toolbar>\n\n\t<md-dialog-content>\n\t\t<div class=\"md-dialog-content\">\n\t\t\t<md-input-container class=\"md-block\">\n\t\t\t\t<label>View Name</label>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"custom-config-input\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tng-model=\"$ctrl._viewModel.customConfigName\"\n\t\t\t\t\tng-on-show=\"$ctrl.validateCustomConfigName()\"\n\t\t\t\t\tng-on-keyup=\"$ctrl.validateCustomConfigName()\"\n\t\t\t\t/>\n\t\t\t</md-input-container>\n\t\t\t<div class=\"md-block\" ng-show=\"$ctrl._viewModel.addErrorMessage.length > 0\">\n\t\t\t\t<div class=\"error\">\n\t\t\t\t\t<i class=\"fa fa-warning\"></i>\n\t\t\t\t\t<span>{{ $ctrl._viewModel.addErrorMessage }}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</md-dialog-content>\n\n\t<md-dialog-actions>\n\t\t<span class=\"warning\" ng-show=\"$ctrl._viewModel.localStorageSizeWarningMessage.length > 0\">\n\t\t\t<span>{{ $ctrl._viewModel.localStorageSizeWarningMessage }}</span>\n\t\t</span>\n\t\t<span ng-show=\"$ctrl._viewModel.localStorageSizeWarningMessage.length > 0\">\n\t\t\t<md-button\n\t\t\t\tng-click=\"$ctrl.showPurgeConfirmDialog()\"\n\t\t\t\tclass=\"md-warn\"\n\t\t\t\ttitle=\"Download old unused Configs as a backup file and then delete them in the browser.\"\n\t\t\t\t>Download & Purge ...</md-button\n\t\t\t>\n\t\t</span>\n\n\t\t<md-button ng-click=\"$ctrl.addCustomConfig()\" ng-disabled=\"!$ctrl.isNewCustomConfigValid()\" class=\"md-primary\">Add</md-button>\n\t</md-dialog-actions>\n</md-dialog>\n";
242319
+ var code = "<md-dialog class=\"custom-config-dialog\">\n\t<md-toolbar>\n\t\t<div class=\"md-toolbar-tools\">\n\t\t\t<h2>Add Custom View</h2>\n\t\t</div>\n\t</md-toolbar>\n\n\t<md-dialog-content>\n\t\t<div class=\"md-dialog-content\">\n\t\t\t<md-input-container class=\"md-block\">\n\t\t\t\t<label>View Name</label>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"custom-config-input\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tng-model=\"$ctrl._viewModel.customConfigName\"\n\t\t\t\t\tng-on-show=\"$ctrl.validateCustomConfigName()\"\n\t\t\t\t\tng-on-keyup=\"$ctrl.validateCustomConfigName()\"\n\t\t\t\t/>\n\t\t\t</md-input-container>\n\t\t\t<div class=\"md-block\" ng-show=\"$ctrl._viewModel.addErrorMessage.length > 0\">\n\t\t\t\t<div class=\"error\">\n\t\t\t\t\t<i class=\"fa fa-warning\"></i>\n\t\t\t\t\t<span>{{ $ctrl._viewModel.addErrorMessage }}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</md-dialog-content>\n\n\t<md-dialog-actions>\n\t\t<span class=\"warning\" ng-show=\"$ctrl._viewModel.localStorageSizeWarningMessage.length > 0\">\n\t\t\t<span>{{ $ctrl._viewModel.localStorageSizeWarningMessage }}</span>\n\t\t</span>\n\t\t<span ng-show=\"$ctrl._viewModel.localStorageSizeWarningMessage.length > 0\">\n\t\t\t<md-button\n\t\t\t\tng-click=\"$ctrl.showPurgeConfirmDialog()\"\n\t\t\t\tclass=\"md-warn\"\n\t\t\t\ttitle=\"Download old unused Custom Views as a backup file and then delete them in the browser.\"\n\t\t\t\t>Download & Purge ...</md-button\n\t\t\t>\n\t\t</span>\n\n\t\t<md-button ng-click=\"$ctrl.addCustomConfig()\" ng-disabled=\"!$ctrl.isNewCustomConfigValid()\" class=\"md-primary\">Add</md-button>\n\t</md-dialog-actions>\n</md-dialog>\n";
242032
242320
  // Exports
242033
242321
  module.exports = code;
242034
242322
 
@@ -242171,7 +242459,46 @@ module.exports = code;
242171
242459
  /***/ ((module) => {
242172
242460
 
242173
242461
  // Module
242174
- var code = "<section layout=\"row\" layout-align=\"center center\" class=\"mode-chooser\">\n\t<md-button\n\t\tclass=\"state-selector-button mode-selector left\"\n\t\tng-class=\"{ current: $ctrl._viewModel.isSingleState }\"\n\t\tng-click=\"$ctrl.onSingleStateSelected()\"\n\t\t><span class=\"text\">Single</span></md-button\n\t>\n\t<md-button\n\t\tclass=\"state-selector-button mode-selector middle\"\n\t\tng-class=\"{ current: $ctrl._viewModel.isPartialState }\"\n\t\tng-click=\"$ctrl.onPartialStateSelected()\"\n\t\t><span class=\"text\">Multiple</span></md-button\n\t>\n\t<md-button\n\t\tclass=\"state-selector-button mode-selector right\"\n\t\tng-class=\"{ current: $ctrl._viewModel.isDeltaState }\"\n\t\tng-click=\"$ctrl.onDeltaStateSelected()\"\n\t\t><span class=\"text\">Delta</span></md-button\n\t>\n</section>\n\n<md-input-container class=\"input-container\" ng-show=\"$ctrl._viewModel.isSingleState\" title=\"Select a file\">\n\t<md-select\n\t\tclass=\"md-select-menu\"\n\t\tng-model=\"$ctrl._viewModel.selectedFileNames.single\"\n\t\tng-change=\"$ctrl.onSingleFileChange($ctrl._viewModel.selectedFileNames.single)\"\n\t>\n\t\t<md-option\n\t\t\tng-repeat=\"fileState in $ctrl._viewModel.files track by fileState.file.fileMeta.fileName\"\n\t\t\tvalue=\"{{::fileState.file.fileMeta.fileName}}\"\n\t\t>\n\t\t\t<md-truncate>{{::fileState.file.fileMeta.fileName}}</md-truncate>\n\t\t\t<remove-file-button-component\n\t\t\t\ton-remove-file=\"$ctrl.onRemoveFile(filename, state, event)\"\n\t\t\t\tng-if=\"$ctrl._viewModel.files.length > 1\"\n\t\t\t\tfilename=\"{{::fileState.file.fileMeta.fileName}}\"\n\t\t\t\tstate=\"Single\"\n\t\t\t>\n\t\t\t</remove-file-button-component>\n\t\t</md-option>\n\t</md-select>\n</md-input-container>\n\n<md-input-container class=\"input-container\" ng-show=\"$ctrl._viewModel.isPartialState\" title=\"Select files\">\n\t<md-select\n\t\tclass=\"md-select-menu\"\n\t\tng-model=\"$ctrl._viewModel.selectedFileNames.partial\"\n\t\tmultiple=\"{{ true }}\"\n\t\tng-change=\"$ctrl.onPartialFilesChange($ctrl._viewModel.selectedFileNames.partial)\"\n\t\tmd-on-close=\"$ctrl.onPartialSelectionClosed()\"\n\t>\n\t\t<md-button ng-click=\"$ctrl.selectAllPartialFiles()\">All</md-button>\n\t\t<md-button ng-click=\"$ctrl.selectZeroPartialFiles()\">None</md-button>\n\t\t<md-button ng-click=\"$ctrl.invertPartialFileSelection()\">Invert</md-button>\n\n\t\t<md-option\n\t\t\tng-repeat=\"fileState in $ctrl._viewModel.files track by fileState.file.fileMeta.fileName\"\n\t\t\tvalue=\"{{::fileState.file.fileMeta.fileName}}\"\n\t\t>\n\t\t\t<md-truncate>{{::fileState.file.fileMeta.fileName}}</md-truncate>\n\t\t\t<remove-file-button-component\n\t\t\t\ton-remove-file=\"$ctrl.onRemoveFile(filename, state, event)\"\n\t\t\t\tng-if=\"$ctrl._viewModel.files.length > 1\"\n\t\t\t\tfilename=\"{{::fileState.file.fileMeta.fileName}}\"\n\t\t\t\tstate=\"Partial\"\n\t\t\t>\n\t\t\t</remove-file-button-component>\n\t\t</md-option>\n\t</md-select>\n</md-input-container>\n\n<div class=\"input-container delta-chooser\" ng-show=\"$ctrl._viewModel.isDeltaState\">\n\t<div class=\"pictogram\" ng-style=\"{ background: $ctrl._viewModel.pictogramFirstFileColor }\"></div>\n\t<md-input-container class=\"delta-select input-container\" title=\"Select reference file\">\n\t\t<md-select\n\t\t\tng-model=\"$ctrl._viewModel.selectedFileNames.delta.reference\"\n\t\t\tng-change=\"$ctrl.onDeltaReferenceFileChange($ctrl._viewModel.selectedFileNames.delta.reference)\"\n\t\t>\n\t\t\t<md-option\n\t\t\t\tng-repeat=\"fileState in $ctrl._viewModel.files track by fileState.file.fileMeta.fileName\"\n\t\t\t\tvalue=\"{{::fileState.file.fileMeta.fileName}}\"\n\t\t\t>\n\t\t\t\t<md-truncate>{{::fileState.file.fileMeta.fileName}}</md-truncate>\n\t\t\t</md-option>\n\t\t</md-select>\n\t</md-input-container>\n\n\t<div\n\t\tclass=\"pictogram\"\n\t\tng-style=\"{\n\t\t\tbackground:\n\t\t\t\t'linear-gradient(' + $ctrl._viewModel.pictogramUpperColor + ' 50%, ' + $ctrl._viewModel.pictogramLowerColor + ' 50%)'\n\t\t}\"\n\t></div>\n\t<md-input-container class=\"input-container delta-select\" title=\"Select comparison file\">\n\t\t<md-select\n\t\t\tng-model=\"$ctrl._viewModel.selectedFileNames.delta.comparison\"\n\t\t\tng-change=\"$ctrl.onDeltaComparisonFileChange($ctrl._viewModel.selectedFileNames.delta.comparison)\"\n\t\t>\n\t\t\t<md-option\n\t\t\t\tng-repeat=\"fileState in $ctrl._viewModel.files track by fileState.file.fileMeta.fileName\"\n\t\t\t\tvalue=\"{{::fileState.file.fileMeta.fileName}}\"\n\t\t\t>\n\t\t\t\t<md-truncate>{{::fileState.file.fileMeta.fileName}}</md-truncate>\n\t\t\t</md-option>\n\t\t</md-select>\n\t</md-input-container>\n</div>\n";
242462
+ var code = "<cc-file-panel-state-buttons\n\t[is-delta-state]=\"$ctrl._viewModel.isDeltaState\"\n\t[handle-standard-button-clicked]=\"$ctrl.selectRecentPartialFiles\"\n\t[handle-delta-button-clicked]=\"$ctrl.onDeltaStateSelected\"\n></cc-file-panel-state-buttons>\n\n<cc-file-panel-file-selector\n\tstyle=\"display: inline-block; width: 200px\"\n\tng-show=\"!$ctrl._viewModel.isDeltaState\"\n\t[selected-file-names]=\"$ctrl._viewModel.selectedFileNames.partial\"\n\t[handle-selected-files-changed]=\"$ctrl.onPartialFilesChange\"\n\t[handle-select-all-partial-files]=\"$ctrl.selectAllPartialFiles\"\n\t[handle-select-zero-partial-files]=\"$ctrl.selectZeroPartialFiles\"\n\t[handle-invert-selected-partial-files]=\"$ctrl.invertPartialFileSelection\"\n\t[handle-on-selection-closed]=\"$ctrl.onPartialSelectionClosed\"\n\t[files]=\"$ctrl._viewModel.files\"\n></cc-file-panel-file-selector>\n\n<cc-file-panel-delta-selector\n\tng-show=\"$ctrl._viewModel.isDeltaState\"\n\t[pictogram-upper-color]=\"$ctrl._viewModel.pictogramUpperColor\"\n\t[pictogram-lower-color]=\"$ctrl._viewModel.pictogramLowerColor\"\n\t[handle-delta-reference-file-change]=\"$ctrl.onDeltaReferenceFileChange\"\n\t[handle-delta-comparison-file-change]=\"$ctrl.onDeltaComparisonFileChange\"\n\t[files]=\"$ctrl._viewModel.files\"\n></cc-file-panel-delta-selector>\n";
242463
+ // Exports
242464
+ module.exports = code;
242465
+
242466
+ /***/ }),
242467
+
242468
+ /***/ "./app/codeCharta/ui/filePanel/filePanelDeltaSelector/filePanelDeltaSelector.component.html":
242469
+ /*!**************************************************************************************************!*\
242470
+ !*** ./app/codeCharta/ui/filePanel/filePanelDeltaSelector/filePanelDeltaSelector.component.html ***!
242471
+ \**************************************************************************************************/
242472
+ /***/ ((module) => {
242473
+
242474
+ // Module
242475
+ var code = "<mat-select\n\tclass=\"delta-select\"\n\tplaceholder=\"select reference file\"\n\t[(ngModel)]=\"selectedDeltaReferenceFile\"\n\t(selectionChange)=\"handleDeltaReferenceFileChange(selectedDeltaReferenceFile)\"\n>\n\t<mat-option *ngFor=\"let file of files\" [value]=\"file.file.fileMeta.fileName\">\n\t\t{{ file.file.fileMeta.fileName }}\n\t</mat-option>\n</mat-select>\n\n<div class=\"pictogram\" [style.background]=\"'linear-gradient(' + pictogramUpperColor + ' 50%, ' + pictogramLowerColor + ' 50%)'\"></div>\n\n<mat-select\n\tclass=\"delta-select\"\n\tplaceholder=\"select comparison file\"\n\t[(ngModel)]=\"selectedDeltaComparisonFile\"\n\t(selectionChange)=\"handleDeltaComparisonFileChange(selectedDeltaComparisonFile)\"\n>\n\t<mat-option *ngFor=\"let file of files\" [value]=\"file.file.fileMeta.fileName\">\n\t\t{{ file.file.fileMeta.fileName }}\n\t</mat-option>\n</mat-select>\n";
242476
+ // Exports
242477
+ module.exports = code;
242478
+
242479
+ /***/ }),
242480
+
242481
+ /***/ "./app/codeCharta/ui/filePanel/filePanelFileSelector/filePanelFileSelector.component.html":
242482
+ /*!************************************************************************************************!*\
242483
+ !*** ./app/codeCharta/ui/filePanel/filePanelFileSelector/filePanelFileSelector.component.html ***!
242484
+ \************************************************************************************************/
242485
+ /***/ ((module) => {
242486
+
242487
+ // Module
242488
+ var code = "<mat-select\n\tclass=\"standard-select\"\n\t[(ngModel)]=\"selectedFileNames\"\n\t(selectionChange)=\"handleSelectedFilesChanged(selectedFileNames)\"\n\tname=\"recentFiles\"\n\t[placeholder]=\"selectedFileNames\"\n\tmultiple\n\t(closed)=\"handleOnSelectionClosed()\"\n>\n\t<div class=\"actions\">\n\t\t<button mat-button (click)=\"handleSelectAllPartialFiles()\">All</button>\n\t\t<button mat-button (click)=\"handleSelectZeroPartialFiles()\">None</button>\n\t\t<button mat-button (click)=\"handleInvertSelectedPartialFiles()\">Invert</button>\n\t</div>\n\t<mat-option *ngFor=\"let file of files\" [value]=\"file.file.fileMeta.fileName\">\n\t\t{{ file.file.fileMeta.fileName }}\n\t</mat-option>\n</mat-select>\n";
242489
+ // Exports
242490
+ module.exports = code;
242491
+
242492
+ /***/ }),
242493
+
242494
+ /***/ "./app/codeCharta/ui/filePanel/filePanelStateButtons/filePanelStateButtons.component.html":
242495
+ /*!************************************************************************************************!*\
242496
+ !*** ./app/codeCharta/ui/filePanel/filePanelStateButtons/filePanelStateButtons.component.html ***!
242497
+ \************************************************************************************************/
242498
+ /***/ ((module) => {
242499
+
242500
+ // Module
242501
+ var code = "<div class=\"mode-chooser\">\n\t<button\n\t\tmat-button\n\t\tclass=\"state-selector-button mode-selector left\"\n\t\t(click)=\"handleStandardButtonClicked()\"\n\t\t[class.current]=\"!isDeltaState\"\n\t>\n\t\t<span class=\"text\">Standard</span>\n\t</button>\n\t<button\n\t\tmat-button\n\t\tclass=\"state-selector-button mode-selector right\"\n\t\t(click)=\"handleDeltaButtonClicked()\"\n\t\t[class.current]=\"isDeltaState\"\n\t>\n\t\t<span class=\"text\">Delta</span>\n\t</button>\n</div>\n";
242175
242502
  // Exports
242176
242503
  module.exports = code;
242177
242504
 
@@ -242353,7 +242680,7 @@ module.exports = code;
242353
242680
  /***/ ((module) => {
242354
242681
 
242355
242682
  // Module
242356
- var code = "<div *ngIf=\"!node.isExcluded\" class=\"tree-element-{{ depth }} {{ (node | isNodeLeaf) ? 'tree-leaf' : 'tree-parent' }}\">\n\t<div\n\t\tid=\"{{ node.path }}\"\n\t\tclass=\"tree-element-label-{{ depth }} tree-element-label\"\n\t\t[class.hovered]=\"(hoveredBuildingPath$ | async) === node.path\"\n\t\t[class.marked]=\"isContextMenuOpenForNode\"\n\t\t(mouseenter)=\"onMouseEnter()\"\n\t\t(mouseleave)=\"onMouseLeave()\"\n\t\t(click)=\"toggleOpen()\"\n\t\t(contextmenu)=\"openNodeContextMenu($event)\"\n\t>\n\t\t<cc-map-tree-view-item-icon [node]=\"node\" [isOpen]=\"isOpen\"></cc-map-tree-view-item-icon>\n\t\t<cc-map-tree-view-item-name\n\t\t\t[node]=\"node\"\n\t\t\t[isHovered]=\"(hoveredBuildingPath$ | async) === node.path\"\n\t\t\t[unaryValue]=\"node.attributes.unary\"\n\t\t>\n\t\t</cc-map-tree-view-item-name>\n\n\t\t<cc-map-tree-view-item-option-buttons\n\t\t\t*ngIf=\"(hoveredBuildingPath$ | async) === node.path\"\n\t\t\t[isFlattened]=\"node.isFlattened\"\n\t\t\t[openNodeContextMenu]=\"openNodeContextMenu\"\n\t\t></cc-map-tree-view-item-option-buttons>\n\t</div>\n\n\t<div class=\"tree-element-children tree-element-children-{{ depth }}\">\n\t\t<ng-container *ngIf=\"isOpen\">\n\t\t\t<div *ngFor=\"let childNode of node.children\">\n\t\t\t\t<cc-map-tree-view-level [node]=\"childNode\" [depth]=\"depth + 1\"></cc-map-tree-view-level>\n\t\t\t</div>\n\t\t</ng-container>\n\t</div>\n</div>\n";
242683
+ var code = "<div *ngIf=\"!node.isExcluded\" class=\"tree-element-{{ depth }} {{ (node | isNodeLeaf) ? 'tree-leaf' : 'tree-parent' }}\">\n\t<div\n\t\tid=\"{{ node.path }}\"\n\t\tclass=\"tree-element-label-{{ depth }} tree-element-label\"\n\t\t[class.hovered]=\"(hoveredBuildingPath$ | async) === node.path\"\n\t\t[class.marked]=\"(rightClickedNodeData$ | async)?.nodeId === node.id\"\n\t\t(mouseenter)=\"onMouseEnter()\"\n\t\t(mouseleave)=\"onMouseLeave()\"\n\t\t(click)=\"toggleOpen()\"\n\t\t(contextmenu)=\"openNodeContextMenu($event)\"\n\t>\n\t\t<cc-map-tree-view-item-icon [node]=\"node\" [isOpen]=\"isOpen\"></cc-map-tree-view-item-icon>\n\t\t<cc-map-tree-view-item-name\n\t\t\t[node]=\"node\"\n\t\t\t[isHovered]=\"(hoveredBuildingPath$ | async) === node.path\"\n\t\t\t[unaryValue]=\"node.attributes.unary\"\n\t\t>\n\t\t</cc-map-tree-view-item-name>\n\n\t\t<cc-map-tree-view-item-option-buttons\n\t\t\t*ngIf=\"(hoveredBuildingPath$ | async) === node.path\"\n\t\t\t[isFlattened]=\"node.isFlattened\"\n\t\t\t[openNodeContextMenu]=\"openNodeContextMenu\"\n\t\t></cc-map-tree-view-item-option-buttons>\n\t</div>\n\n\t<div class=\"tree-element-children tree-element-children-{{ depth }}\">\n\t\t<ng-container *ngIf=\"isOpen\">\n\t\t\t<div *ngFor=\"let childNode of node.children\">\n\t\t\t\t<cc-map-tree-view-level [node]=\"childNode\" [depth]=\"depth + 1\"></cc-map-tree-view-level>\n\t\t\t</div>\n\t\t</ng-container>\n\t</div>\n</div>\n";
242357
242684
  // Exports
242358
242685
  module.exports = code;
242359
242686
 
@@ -242506,14 +242833,14 @@ module.exports = code;
242506
242833
 
242507
242834
  /***/ }),
242508
242835
 
242509
- /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.html":
242510
- /*!******************************************************************************************************!*\
242511
- !*** ./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.html ***!
242512
- \******************************************************************************************************/
242836
+ /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.html":
242837
+ /*!**************************************************************************************!*\
242838
+ !*** ./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.html ***!
242839
+ \**************************************************************************************/
242513
242840
  /***/ ((module) => {
242514
242841
 
242515
242842
  // Module
242516
- var code = "<cc-color-picker\n\t[hexColor]=\"'#ff0000'\"\n\t(onColorChange)=\"markFolder($event)\"\n\t[triggerTemplate]=\"colorPickerTriggerTemplate\"\n></cc-color-picker>\n\n<ng-template #colorPickerTriggerTemplate>\n\t<div class=\"cc-color-picker-trigger fa fa-paint-brush\"></div>\n</ng-template>\n";
242843
+ var code = "<div class=\"row\" *ngIf=\"node$ | async as node\">\n\t<ng-container *ngFor=\"let markFolderItem of markFolderItems$ | async\">\n\t\t<button\n\t\t\t[style.background-color]=\"markFolderItem.color\"\n\t\t\t(click)=\"markFolderItem.isMarked ? unmarkFolder(node.path) : markFolder(node.path, markFolderItem.color)\"\n\t\t\tclass=\"colorButton\"\n\t\t\ttitle=\"Colorize folder\"\n\t\t>\n\t\t\t<i class=\"fa fa-times\" *ngIf=\"markFolderItem.isMarked\"></i>\n\t\t</button>\n\t</ng-container>\n\n\t<cc-color-picker\n\t\t[hexColor]=\"'#ff0000'\"\n\t\t(onColorChange)=\"markFolder(node.path, $event)\"\n\t\t[triggerTemplate]=\"colorPickerTriggerTemplate\"\n\t></cc-color-picker>\n</div>\n\n<ng-template #colorPickerTriggerTemplate>\n\t<div class=\"cc-color-picker-trigger fa fa-paint-brush\"></div>\n</ng-template>\n";
242517
242844
  // Exports
242518
242845
  module.exports = code;
242519
242846
 
@@ -242530,7 +242857,7 @@ var ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___ = __webpack_require__(/*! ../../../
242530
242857
  var ___HTML_LOADER_IMPORT_0___ = __webpack_require__(/*! ../../../assets/flatten.png */ "./app/assets/flatten.png");
242531
242858
  // Module
242532
242859
  var ___HTML_LOADER_REPLACEMENT_0___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_0___);
242533
- var code = "<md-card id=\"codemap-context-menu\" ng-show=\"$ctrl._viewModel.showNodeContextMenu\">\n\t<div ng-if=\"$ctrl.nodeIsFolder()\">\n\t\t<div layout=\"row\" layout-align=\"center center\">\n\t\t\t<md-button\n\t\t\t\tng-repeat=\"color in $ctrl._viewModel.markingColors track by $index\"\n\t\t\t\tng-style=\"{ 'background-color': '{{ color }}' }\"\n\t\t\t\tng-disabled=\"primary === color && !isPrimary\"\n\t\t\t\tng-click=\"$ctrl.clickColor(color)\"\n\t\t\t\tclass=\"colorButton\"\n\t\t\t\ttitle=\"Colorize folder\"\n\t\t\t>\n\t\t\t\t<i class=\"fa fa-times\" ng-if=\"$ctrl.isNodeOrParentMarked(color)\"></i>\n\t\t\t</md-button>\n\n\t\t\t<cc-mark-folder-color-picker [mark-folder]=\"$ctrl.markFolder\"></cc-mark-folder-color-picker>\n\t\t</div>\n\t\t<md-divider></md-divider>\n\t</div>\n\n\t<div class=\"button-group\">\n\t\t<md-button ng-disabled=\"true\" title=\"{{ $ctrl._viewModel.nodePath }}\">\n\t\t\t{{ $ctrl._viewModel.lastPartOfNodePath }}\n\t\t</md-button>\n\n\t\t<cc-focus-buttons [code-map-node]=\"$ctrl._viewModel.codeMapNode\"></cc-focus-buttons>\n\t\t<md-button\n\t\t\tng-if=\"!$ctrl._viewModel.codeMapNode.isFlattened\"\n\t\t\tng-click=\"$ctrl.flattenNode()\"\n\t\t\tid=\"flatten-button\"\n\t\t\ttitle=\"Flatten node and children-nodes, but keep an empty space\"\n\t\t>\n\t\t\t<img alt=\"flattenIcon\" class=\"png-icon\" src=\"" + ___HTML_LOADER_REPLACEMENT_0___ + "\" style=\"width: 17px; height: 17px\" />\n\t\t\tFlatten\n\t\t</md-button>\n\t\t<md-button\n\t\t\tng-if=\"$ctrl._viewModel.codeMapNode.isFlattened\"\n\t\t\tng-click=\"$ctrl.showFlattenedNode()\"\n\t\t\ttitle=\"Show node and children-nodes\"\n\t\t\t><img alt=\"flattenIcon\" class=\"png-icon\" src=\"" + ___HTML_LOADER_REPLACEMENT_0___ + "\" style=\"width: 17px; height: 17px\" /> Show</md-button\n\t\t>\n\t\t<md-button\n\t\t\tng-if=\"!$ctrl.isNodeConstantlyHighlighted()\"\n\t\t\ttitle=\"Highlight node constantly\"\n\t\t\tng-click=\"$ctrl.addNodeToConstantHighlight()\"\n\t\t\t><i class=\"fa fa-cubes\"></i> Keep Highlight</md-button\n\t\t>\n\t\t<md-button\n\t\t\tng-if=\"$ctrl.isNodeConstantlyHighlighted()\"\n\t\t\ttitle=\"Remove constant highlight\"\n\t\t\tng-click=\"$ctrl.removeNodeFromConstantHighlight()\"\n\t\t\t><i class=\"fa fa-cubes\"></i> Remove Highlight</md-button\n\t\t>\n\n\t\t<md-button ng-click=\"$ctrl.excludeNode()\" id=\"exclude-button\" title=\"Exclude node and children-nodes and reorder the CodeMap\"\n\t\t\t><i class=\"fa fa-ban\"></i> Exclude</md-button\n\t\t>\n\t</div>\n</md-card>\n";
242860
+ var code = "<md-card id=\"codemap-context-menu\" ng-show=\"$ctrl.rightClickedNodeData !== null\">\n\t<div ng-if=\"$ctrl.nodeIsFolder()\">\n\t\t<cc-mark-folder-row></cc-mark-folder-row>\n\t\t<md-divider></md-divider>\n\t</div>\n\n\t<div class=\"button-group\">\n\t\t<md-button ng-disabled=\"true\" title=\"{{ $ctrl._viewModel.nodePath }}\">\n\t\t\t{{ $ctrl._viewModel.lastPartOfNodePath }}\n\t\t</md-button>\n\n\t\t<cc-focus-buttons [code-map-node]=\"$ctrl._viewModel.codeMapNode\"></cc-focus-buttons>\n\t\t<md-button\n\t\t\tng-if=\"!$ctrl._viewModel.codeMapNode.isFlattened\"\n\t\t\tng-click=\"$ctrl.flattenNode()\"\n\t\t\tid=\"flatten-button\"\n\t\t\ttitle=\"Flatten node and children-nodes, but keep an empty space\"\n\t\t>\n\t\t\t<img alt=\"flattenIcon\" class=\"png-icon\" src=\"" + ___HTML_LOADER_REPLACEMENT_0___ + "\" style=\"width: 17px; height: 17px\" />\n\t\t\tFlatten\n\t\t</md-button>\n\t\t<md-button\n\t\t\tng-if=\"$ctrl._viewModel.codeMapNode.isFlattened\"\n\t\t\tng-click=\"$ctrl.showFlattenedNode()\"\n\t\t\ttitle=\"Show node and children-nodes\"\n\t\t\t><img alt=\"flattenIcon\" class=\"png-icon\" src=\"" + ___HTML_LOADER_REPLACEMENT_0___ + "\" style=\"width: 17px; height: 17px\" /> Show</md-button\n\t\t>\n\t\t<md-button\n\t\t\tng-if=\"!$ctrl.isNodeConstantlyHighlighted()\"\n\t\t\ttitle=\"Highlight node constantly\"\n\t\t\tng-click=\"$ctrl.addNodeToConstantHighlight()\"\n\t\t\t><i class=\"fa fa-cubes\"></i> Keep Highlight</md-button\n\t\t>\n\t\t<md-button\n\t\t\tng-if=\"$ctrl.isNodeConstantlyHighlighted()\"\n\t\t\ttitle=\"Remove constant highlight\"\n\t\t\tng-click=\"$ctrl.removeNodeFromConstantHighlight()\"\n\t\t\t><i class=\"fa fa-cubes\"></i> Remove Highlight</md-button\n\t\t>\n\n\t\t<md-button ng-click=\"$ctrl.excludeNode()\" id=\"exclude-button\" title=\"Exclude node and children-nodes and reorder the CodeMap\"\n\t\t\t><i class=\"fa fa-ban\"></i> Exclude</md-button\n\t\t>\n\t</div>\n</md-card>\n";
242534
242861
  // Exports
242535
242862
  module.exports = code;
242536
242863
 
@@ -242595,7 +242922,7 @@ module.exports = code;
242595
242922
  /***/ ((module) => {
242596
242923
 
242597
242924
  // Module
242598
- var code = "<search-panel-component></search-panel-component>\n\n<md-card class=\"scenario-card\" ng-attr-id=\"scenario-card\" ng-mouseup=\"$ctrl.onClick()\">\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<scenario-drop-down-component></scenario-drop-down-component>\n\t\t</div>\n\t\t<span class=\"section-title no-hover\">Metric Templates</span>\n\t</div>\n</md-card>\n\n<md-card class=\"custom-configs-card\" ng-show=\"$ctrl._viewModel.experimentalFeaturesEnabled\" ng-attr-id=\"custom-configs-card\">\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<custom-configs-component></custom-configs-component>\n\t\t</div>\n\t\t<span class=\"section-title no-hover\">Map Configurations</span>\n\t</div>\n</md-card>\n\n<md-card class=\"ai-card\" ng-show=\"$ctrl._viewModel.experimentalFeaturesEnabled\" ng-attr-id=\"ai-card\">\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<artificial-intelligence-component></artificial-intelligence-component>\n\t\t</div>\n\t\t<span class=\"section-title no-hover\">Suspicious Metrics</span>\n\t</div>\n</md-card>\n\n<md-card\n\tng-attr-id=\"area-metric-card\"\n\tclass=\"area-metric-card metric-card\"\n\tng-class=\"{\n\t\texpanded: $ctrl._viewModel.panelSelection === $ctrl._viewModel.panelSelectionValues.AREA_PANEL_OPEN\n\t}\"\n>\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<area-metric-chooser-component></area-metric-chooser-component>\n\t\t</div>\n\t\t<span\n\t\t\tclass=\"section-title\"\n\t\t\tng-click=\"$ctrl.toggle($ctrl._viewModel.panelSelectionValues.AREA_PANEL_OPEN)\"\n\t\t\ttitle=\"Show area metric settings\"\n\t\t\t>Area Metric Options <i class=\"fa fa-angle-down\"></i\n\t\t></span>\n\t</div>\n\t<area-settings-panel-component\n\t\tng-class=\"{\n\t\t\thidden: $ctrl._viewModel.panelSelection !== $ctrl._viewModel.panelSelectionValues.AREA_PANEL_OPEN\n\t\t}\"\n\t></area-settings-panel-component>\n</md-card>\n\n<md-card\n\tng-attr-id=\"height-metric-card\"\n\tclass=\"height-metric-card metric-card\"\n\tng-class=\"{\n\t\texpanded: $ctrl._viewModel.panelSelection === $ctrl._viewModel.panelSelectionValues.HEIGHT_PANEL_OPEN\n\t}\"\n>\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<height-metric-chooser-component></height-metric-chooser-component>\n\t\t</div>\n\t\t<span\n\t\t\tclass=\"section-title\"\n\t\t\tng-click=\"$ctrl.toggle($ctrl._viewModel.panelSelectionValues.HEIGHT_PANEL_OPEN)\"\n\t\t\ttitle=\"Show height metric settings\"\n\t\t\t>Height Metric Options <i class=\"fa fa-angle-down\"></i\n\t\t></span>\n\t</div>\n\t<height-settings-panel-component\n\t\tng-class=\"{\n\t\t\thidden: $ctrl._viewModel.panelSelection !== $ctrl._viewModel.panelSelectionValues.HEIGHT_PANEL_OPEN\n\t\t}\"\n\t></height-settings-panel-component>\n</md-card>\n\n<md-card\n\tng-attr-id=\"color-metric-card\"\n\tclass=\"color-metric-card metric-card\"\n\tng-class=\"{\n\t\texpanded: $ctrl._viewModel.panelSelection === $ctrl._viewModel.panelSelectionValues.COLOR_PANEL_OPEN\n\t}\"\n\tng-show=\"!$ctrl._viewModel.isDeltaState\"\n>\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<color-metric-chooser-component></color-metric-chooser-component>\n\t\t</div>\n\t\t<span\n\t\t\tclass=\"section-title\"\n\t\t\tng-click=\"$ctrl.toggle($ctrl._viewModel.panelSelectionValues.COLOR_PANEL_OPEN)\"\n\t\t\ttitle=\"Show color metric settings\"\n\t\t\t>Color Metric Options <i class=\"fa fa-angle-down\"></i\n\t\t></span>\n\t</div>\n\t<color-settings-panel-component\n\t\tng-class=\"{\n\t\t\thidden: $ctrl._viewModel.panelSelection !== $ctrl._viewModel.panelSelectionValues.COLOR_PANEL_OPEN\n\t\t}\"\n\t></color-settings-panel-component>\n</md-card>\n\n<md-card\n\tng-attr-id=\"edge-metric-card\"\n\tclass=\"edge-metric-card metric-card\"\n\tng-class=\"{\n\t\texpanded: $ctrl._viewModel.panelSelection === $ctrl._viewModel.panelSelectionValues.EDGE_PANEL_OPEN\n\t}\"\n\tng-show=\"!$ctrl._viewModel.isDeltaState\"\n>\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<edge-chooser-component></edge-chooser-component>\n\t\t</div>\n\t\t<span\n\t\t\tclass=\"section-title\"\n\t\t\tng-click=\"$ctrl.toggle($ctrl._viewModel.panelSelectionValues.EDGE_PANEL_OPEN)\"\n\t\t\ttitle=\"Show edge metric settings\"\n\t\t>\n\t\t\tEdge Metric Options <i class=\"fa fa-angle-down\"></i>\n\t\t</span>\n\t\t<edge-settings-panel-component\n\t\t\tng-class=\"{\n\t\t\t\thidden: $ctrl._viewModel.panelSelection !== $ctrl._viewModel.panelSelectionValues.EDGE_PANEL_OPEN\n\t\t\t}\"\n\t\t></edge-settings-panel-component>\n\t</div>\n</md-card>\n\n<md-card ng-attr-id=\"color-settings-card\" class=\"color-settings-card\" ng-show=\"$ctrl._viewModel.isDeltaState\">\n\t<div\n\t\tclass=\"color-section\"\n\t\tlayout=\"row\"\n\t\tlayout-align=\"space-between center\"\n\t\tng-click=\"$ctrl.toggle($ctrl._viewModel.panelSelectionValues.COLOR_PANEL_OPEN)\"\n\t\ttitle=\"Show color settings\"\n\t>\n\t\t<span>\n\t\t\t<i class=\"fa fa-paint-brush color-icon\"></i>\n\t\t\tColor Settings\n\t\t</span>\n\t\t<i class=\"fa fa-sort-down color-dropdown-icon\"></i>\n\t</div>\n\t<color-settings-panel-component\n\t\tng-class=\"{\n\t\t\thidden: $ctrl._viewModel.panelSelection !== $ctrl._viewModel.panelSelectionValues.COLOR_PANEL_OPEN\n\t\t}\"\n\t></color-settings-panel-component>\n</md-card>\n";
242925
+ var code = "<search-panel-component></search-panel-component>\n\n<md-card class=\"scenario-card\" ng-attr-id=\"scenario-card\" ng-mouseup=\"$ctrl.onClick()\">\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<scenario-drop-down-component></scenario-drop-down-component>\n\t\t</div>\n\t\t<span class=\"section-title no-hover\">Metric Templates</span>\n\t</div>\n</md-card>\n\n<md-card class=\"custom-configs-card\" ng-show=\"$ctrl._viewModel.experimentalFeaturesEnabled\" ng-attr-id=\"custom-configs-card\">\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<custom-configs-component></custom-configs-component>\n\t\t</div>\n\t\t<span class=\"section-title no-hover\">Custom Views</span>\n\t</div>\n</md-card>\n\n<md-card class=\"ai-card\" ng-show=\"$ctrl._viewModel.experimentalFeaturesEnabled\" ng-attr-id=\"ai-card\">\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<artificial-intelligence-component></artificial-intelligence-component>\n\t\t</div>\n\t\t<span class=\"section-title no-hover\">Suspicious Metrics</span>\n\t</div>\n</md-card>\n\n<md-card\n\tng-attr-id=\"area-metric-card\"\n\tclass=\"area-metric-card metric-card\"\n\tng-class=\"{\n\t\texpanded: $ctrl._viewModel.panelSelection === $ctrl._viewModel.panelSelectionValues.AREA_PANEL_OPEN\n\t}\"\n>\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<area-metric-chooser-component></area-metric-chooser-component>\n\t\t</div>\n\t\t<span\n\t\t\tclass=\"section-title\"\n\t\t\tng-click=\"$ctrl.toggle($ctrl._viewModel.panelSelectionValues.AREA_PANEL_OPEN)\"\n\t\t\ttitle=\"Show area metric settings\"\n\t\t\t>Area Metric Options <i class=\"fa fa-angle-down\"></i\n\t\t></span>\n\t</div>\n\t<area-settings-panel-component\n\t\tng-class=\"{\n\t\t\thidden: $ctrl._viewModel.panelSelection !== $ctrl._viewModel.panelSelectionValues.AREA_PANEL_OPEN\n\t\t}\"\n\t></area-settings-panel-component>\n</md-card>\n\n<md-card\n\tng-attr-id=\"height-metric-card\"\n\tclass=\"height-metric-card metric-card\"\n\tng-class=\"{\n\t\texpanded: $ctrl._viewModel.panelSelection === $ctrl._viewModel.panelSelectionValues.HEIGHT_PANEL_OPEN\n\t}\"\n>\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<height-metric-chooser-component></height-metric-chooser-component>\n\t\t</div>\n\t\t<span\n\t\t\tclass=\"section-title\"\n\t\t\tng-click=\"$ctrl.toggle($ctrl._viewModel.panelSelectionValues.HEIGHT_PANEL_OPEN)\"\n\t\t\ttitle=\"Show height metric settings\"\n\t\t\t>Height Metric Options <i class=\"fa fa-angle-down\"></i\n\t\t></span>\n\t</div>\n\t<height-settings-panel-component\n\t\tng-class=\"{\n\t\t\thidden: $ctrl._viewModel.panelSelection !== $ctrl._viewModel.panelSelectionValues.HEIGHT_PANEL_OPEN\n\t\t}\"\n\t></height-settings-panel-component>\n</md-card>\n\n<md-card\n\tng-attr-id=\"color-metric-card\"\n\tclass=\"color-metric-card metric-card\"\n\tng-class=\"{\n\t\texpanded: $ctrl._viewModel.panelSelection === $ctrl._viewModel.panelSelectionValues.COLOR_PANEL_OPEN\n\t}\"\n\tng-show=\"!$ctrl._viewModel.isDeltaState\"\n>\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<color-metric-chooser-component></color-metric-chooser-component>\n\t\t</div>\n\t\t<span\n\t\t\tclass=\"section-title\"\n\t\t\tng-click=\"$ctrl.toggle($ctrl._viewModel.panelSelectionValues.COLOR_PANEL_OPEN)\"\n\t\t\ttitle=\"Show color metric settings\"\n\t\t\t>Color Metric Options <i class=\"fa fa-angle-down\"></i\n\t\t></span>\n\t</div>\n\t<color-settings-panel-component\n\t\tng-class=\"{\n\t\t\thidden: $ctrl._viewModel.panelSelection !== $ctrl._viewModel.panelSelectionValues.COLOR_PANEL_OPEN\n\t\t}\"\n\t></color-settings-panel-component>\n</md-card>\n\n<md-card\n\tng-attr-id=\"edge-metric-card\"\n\tclass=\"edge-metric-card metric-card\"\n\tng-class=\"{\n\t\texpanded: $ctrl._viewModel.panelSelection === $ctrl._viewModel.panelSelectionValues.EDGE_PANEL_OPEN\n\t}\"\n\tng-show=\"!$ctrl._viewModel.isDeltaState\"\n>\n\t<div class=\"section\">\n\t\t<div class=\"section-header\">\n\t\t\t<edge-chooser-component></edge-chooser-component>\n\t\t</div>\n\t\t<span\n\t\t\tclass=\"section-title\"\n\t\t\tng-click=\"$ctrl.toggle($ctrl._viewModel.panelSelectionValues.EDGE_PANEL_OPEN)\"\n\t\t\ttitle=\"Show edge metric settings\"\n\t\t>\n\t\t\tEdge Metric Options <i class=\"fa fa-angle-down\"></i>\n\t\t</span>\n\t\t<edge-settings-panel-component\n\t\t\tng-class=\"{\n\t\t\t\thidden: $ctrl._viewModel.panelSelection !== $ctrl._viewModel.panelSelectionValues.EDGE_PANEL_OPEN\n\t\t\t}\"\n\t\t></edge-settings-panel-component>\n\t</div>\n</md-card>\n\n<md-card ng-attr-id=\"color-settings-card\" class=\"color-settings-card\" ng-show=\"$ctrl._viewModel.isDeltaState\">\n\t<div\n\t\tclass=\"color-section\"\n\t\tlayout=\"row\"\n\t\tlayout-align=\"space-between center\"\n\t\tng-click=\"$ctrl.toggle($ctrl._viewModel.panelSelectionValues.COLOR_PANEL_OPEN)\"\n\t\ttitle=\"Show color settings\"\n\t>\n\t\t<span>\n\t\t\t<i class=\"fa fa-paint-brush color-icon\"></i>\n\t\t\tColor Settings\n\t\t</span>\n\t\t<i class=\"fa fa-sort-down color-dropdown-icon\"></i>\n\t</div>\n\t<color-settings-panel-component\n\t\tng-class=\"{\n\t\t\thidden: $ctrl._viewModel.panelSelection !== $ctrl._viewModel.panelSelectionValues.COLOR_PANEL_OPEN\n\t\t}\"\n\t></color-settings-panel-component>\n</md-card>\n";
242599
242926
  // Exports
242600
242927
  module.exports = code;
242601
242928
 
@@ -242712,7 +243039,7 @@ module.exports = code;
242712
243039
  /***/ ((module) => {
242713
243040
 
242714
243041
  // Module
242715
- var code = "<div class=\"tool-bar\" ng-mouseup=\"$ctrl.onClick()\">\n\t<file-chooser-directive></file-chooser-directive>\n\t<download-button-component ng-show=\"!$ctrl._viewModel.experimentalFeaturesEnabled\"></download-button-component>\n\t<screenshot-button-component></screenshot-button-component>\n\t<cc-export-threed-map-button></cc-export-threed-map-button>\n\n\t<file-panel-component ng-class=\"{ hidden: $ctrl._viewModel.isNodeHovered }\"></file-panel-component>\n\t<node-path-panel-component ng-class=\"{ hidden: !$ctrl._viewModel.isNodeHovered }\"></node-path-panel-component>\n\n\t<div class=\"right-aligned\">\n\t\t<loading-gif-map-component></loading-gif-map-component>\n\t\t<span>Presentation mode</span>\n\t\t<presentation-mode-button-component></presentation-mode-button-component>\n\t\t<span>Global Configuration</span>\n\t\t<global-settings-button-component></global-settings-button-component>\n\t</div>\n</div>\n";
243042
+ var code = "<div class=\"tool-bar\" ng-mouseup=\"$ctrl.onClick()\">\n\t<file-chooser-directive></file-chooser-directive>\n\t<download-button-component ng-show=\"!$ctrl._viewModel.experimentalFeaturesEnabled\"></download-button-component>\n\t<screenshot-button-component></screenshot-button-component>\n\t<cc-export-threed-map-button></cc-export-threed-map-button>\n\n\t<cc-file-panel ng-class=\"{ hidden: $ctrl._viewModel.isNodeHovered }\"></cc-file-panel>\n\t<node-path-panel-component ng-class=\"{ hidden: !$ctrl._viewModel.isNodeHovered }\"></node-path-panel-component>\n\n\t<div class=\"right-aligned\">\n\t\t<loading-gif-map-component></loading-gif-map-component>\n\t\t<span>Presentation mode</span>\n\t\t<presentation-mode-button-component></presentation-mode-button-component>\n\t\t<span>Global Configuration</span>\n\t\t<global-settings-button-component></global-settings-button-component>\n\t</div>\n</div>\n";
242716
243043
  // Exports
242717
243044
  module.exports = code;
242718
243045
 
@@ -242738,7 +243065,7 @@ module.exports = code;
242738
243065
  /***/ ((module) => {
242739
243066
 
242740
243067
  // Module
242741
- var code = "<h1>Change Log</h1>\n<p>All notable changes to this project will be documented in this file.</p>\n<p>The format is based on <a href=\"http://keepachangelog.com/\">Keep a Changelog</a>\nand this project adheres to <a href=\"http://semver.org/\">Semantic Versioning</a></p>\n<h2>[unreleased] (Added 🚀 | Changed | Removed 🗑 | Fixed 🐞 | Chore 👨‍💻 👩‍💻)</h2>\n<h2>[1.87.1] - 2022-01-17</h2>\n<h3>Changed</h3>\n<ul>\n<li>User-friendly renaming for display quality options <a href=\"https://github.com/MaibornWolff/codecharta/pull/2601\">#2601</a></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix color of selected building in delta mode <a href=\"https://github.com/MaibornWolff/codecharta/pull/2603\">#2603</a></li>\n<li>Fix link to news page when clicking 'Know more' button changelog dialog <a href=\"https://github.com/MaibornWolff/codecharta/pull/2602\">#2602</a></li>\n</ul>\n<h2>[1.87.0] - 2022-01-11</h2>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Migrate <code>unfocus-button-component</code> to Angular.</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Remove suspicious metrics from custom map configurations <a href=\"https://github.com/MaibornWolff/codecharta/pull/2564\">#2564</a>.</li>\n<li>Add 'show/hide non-applicable CustomConfigs' button to Custom Configs menu <a href=\"https://github.com/MaibornWolff/codecharta/pull/2591\">#2591</a>.</li>\n</ul>\n<h2>[1.86.0] - 2021-12-20</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Add 3D export feature for 3D printing <a href=\"https://github.com/MaibornWolff/codecharta/pull/2561\">#2561</a>. \n \n</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Replace all color pickers in the context of ongoing Angular migration <a href=\"https://github.com/MaibornWolff/codecharta/pull/2560\">#2560</a>.</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix showing names of custom configs properly <a href=\"https://github.com/MaibornWolff/codecharta/pull/2557\">#2557</a>.</li>\n<li>Fix minor memory leak in context menu for code map buildings <a href=\"https://github.com/MaibornWolff/codecharta/issues/2565\">#2565</a>.</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Migrate legend panel to Angular <a href=\"https://github.com/MaibornWolff/codecharta/pull/2560\">#2560</a>.</li>\n</ul>\n<h2>[1.85.0] - 2021-12-13</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix delta values of secondary metrics not shown in delta mode within attribute side bar <a href=\"https://github.com/MaibornWolff/codecharta/issues/2539\">#2539</a>.</li>\n<li>Use icon tag instead of font awesome icon <a href=\"https://github.com/MaibornWolff/codecharta/pull/2537\">#2537</a>.</li>\n<li>Rename text for placeholder of metric chooser <a href=\"https://github.com/MaibornWolff/codecharta/pull/2547\">#2547</a></li>\n<li>Fix attribute type selector of primary edge metric not shown <a href=\"https://github.com/MaibornWolff/codecharta/issues/2528\">#2528</a>.</li>\n<li>Identical files and files with identical file names but different hashes can be loaded <a href=\"https://github.com/MaibornWolff/codecharta/pull/2548\">#2548</a></li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Remove <code>secondaryMetrics</code> from store and remove <code>secondaryMetrics.service</code> as the data can be derived from selected node <a href=\"https://github.com/MaibornWolff/codecharta/pull/2527\">#2527</a>.</li>\n<li>Migrate <code>attribute-side-bar-component</code> to Angular <a href=\"https://github.com/MaibornWolff/codecharta/pull/2527\">#2527</a>.</li>\n<li>Switch from Webpack 4 Loaders to Asset Module to load icons properly with css-loader 6.x <a href=\"https://github.com/MaibornWolff/codecharta/pull/2542\">#2542</a>.</li>\n</ul>\n<h3>Removed 🗑</h3>\n<ul>\n<li>Remove notification dialog when deleting a custom config <a href=\"https://github.com/MaibornWolff/codecharta/pull/2553\">#2553</a></li>\n</ul>\n<h2>[1.84.1] - 2021-11-29</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix compressed files not being loaded (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2525\">#2524</a>)</li>\n</ul>\n<h2>[1.84.0] - 2021-11-22</h2>\n<h3>Changed</h3>\n<ul>\n<li>Improved the UI and usability of the Suspicious Metrics Feature (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2494\">#2376</a>) \n<ul>\n<li>The Metrics and the Analysis are now split in two menus \n</li>\n<li>The Suspicious Metrics are now sorted with the Very High Risk on top \n</li>\n<li>The bar in the analysis shows the percentages \n</li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix showing labels when weighted gradient on yellow buildings in color metric options are enabled (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2511\">#2511</a>)</li>\n<li>Fix rounding of the sum of percentages in risk profile (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2516\">#2393</a>)</li>\n<li>Fix legend panel not having a background (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2510\">#2422</a>)</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Remove <code>nodeSearch.service.ts</code> and <code>searchedNodePaths</code> from store as they can be derived from <code>searchPattern</code> (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2495\">#2495</a>).</li>\n<li>Refactor where metric data are calculated (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2514\">#2514</a>).</li>\n<li>Migrate <code>attribute-type-selector-component</code> to Angular (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2519\">#2519</a>).</li>\n</ul>\n<h2>[1.83.1] - 2021-11-10</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix loading files from URL in Web Demo (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2494\">#2494</a>)</li>\n</ul>\n<h2>[1.83.0] - 2021-11-09</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix unwanted calculations of suspicious metrics when experimental features are disabled (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2471\">#2471</a>)</li>\n<li>Fix UI issues in the configuration panel (<a href=\"https://github.com/maibornwolff/codecharta/issues/2322\">#2322</a>)</li>\n<li>Fix tooltip of sorting order button in map tree view showing wrong sorting order (<a href=\"https://github.com/maibornwolff/codecharta/issues/2473\">#2473</a>)</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Calculate MD5 checksum when generating .cc.json files (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2450\">#2411</a>)</li>\n</ul>\n<h2>[1.82.0] - 2021-10-18</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix what's new section including the last opened version (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2453\">#2447</a>)</li>\n<li>Fix unfocus button text not showing correctly (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2439\">#2439</a>)</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Folders in the Folder structure view of the top left come now always before any files, regardless of the sort order.</li>\n</ul>\n<h2>[1.81.0] - 2021-10-11</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix color picker not being usable (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2439\">#2439</a>)</li>\n<li>Fix Changelog inconsistencies (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2425\">#2425</a>) \n</li>\n<li>Fix memory and performance issues related to drawing labels on floors/folders (<a href=\"https://github.com/MaibornWolff/codecharta/issues/2348\">#2348</a>).</li>\n<li>Hides legend block if label description is not available and adds new metric descriptions (<a href=\"https://github.com/maibornwolff/codecharta/issues/2377\">#2377</a>).</li>\n</ul>\n<h2>[1.80.0] - 2021-10-04</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Adds feature to display building colors as a gradients (<a href=\"https://github.com/MaibornWolff/codecharta/issues/2327\">#2327</a>).\n<ul>\n<li>\"Weighted Gradient\" only mixes colors in a small interval around the preset values.</li>\n<li>\"True Gradient\" mixes colors from the 0 to the highest value, the two preset color range values determine the balance.</li>\n<li>\"Absolute\" represents the old behaviour without gradients. \n</li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix broken file/node search #2389</li>\n<li>Fix changelog inconsistencies (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2425\">#2425</a>)</li>\n</ul>\n<h2>[1.79.0] - 2021-09-20</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Add metric descriptions to the frontend and show a translation next to the entry (<a href=\"https://github.com/MaibornWolff/codecharta/issues/2330\">#2330</a>) \n</li>\n<li>An option has been added to the global settings to enable copying screenshots to clipboard instead of saving them in a file (<a href=\"https://github.com/MaibornWolff/codecharta/issues/2326\">#2326</a>) \n</li>\n<li>Add changelog guidelines (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2358\">#2358</a>)</li>\n<li>A changelog dialog with the latest additions to CodeCharta appears on version update (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2342\">#1315</a>) \n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix broken method call in screenshot feature.</li>\n<li>Improve changelog entries.</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Changing the background color and remove \"outgoing\" and \"incoming\" edges from the legend, if not applicable (<a href=\"https://github.com/MaibornWolff/codecharta/issues/2330\">#2330</a>)</li>\n<li>Improve the user experience for the AI Feature \"Suspicious Metrics and Risk Profiles\" and enable it for any programming language (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2362\">#2362</a>) \n</li>\n</ul>\n<h2>[1.78.0] - 2021-09-06</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>A changelog dialog with the latest additions to CodeCharta appears on version update (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1315\">#1315</a>)</li>\n<li>Add documentation for SCMLogParserV2 (<a href=\"https://github.com/maibornwolff/codecharta/issues/1349\">#1349</a>)</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Empty temporary label during hovering (<a href=\"https://github.com/maibornwolff/codecharta/issues/2328\">#2328</a>)</li>\n<li>Show the screenshot hotkey in the screenshot title (<a href=\"https://github.com/maibornwolff/codecharta/issues/2323\">#2323</a>)</li>\n<li>Improved rendering performance (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2345\">#2345</a>)</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Update GH-Pages and visualization dependencies (<a href=\"https://github.com/maibornwolff/codecharta/issues/2356\">#2356</a>)</li>\n</ul>\n<h2>[1.77.0] - 2021-07-30</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>The \"Color Metric Options\" panel and \"Legend\" panel display the maximum value of the selected metric instead of infinite. (<a href=\"https://github.com/maibornwolff/codecharta/issues/1520\">#1520</a>)</li>\n<li>Mark color-section as unimportant in delta mode (<a href=\"https://github.com/maibornwolff/codecharta/issues/769\">#769</a>)</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Small ui improvements added. (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1881\">#1881</a>)</li>\n<li>Numbers/Percentages always show in the distribution bar(<a href=\"https://github.com/MaibornWolff/codecharta/issues/1540\">#1540</a>)\n<ul>\n<li>Toggle between percentage and absolute numbers by clicking anywhere on the (expanded) distribution bar.</li>\n<li>The old expanded distribution bar is now accessible through a button.</li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>It is no longer possible to exclude all files on the map (<a href=\"https://github.com/MaibornWolff/codecharta/issues/901\">#901</a>)</li>\n</ul>\n<h2>[1.76.0] - 2021-07-13</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Custom metric scenarios which include the 'Color-Metric' (rloc) will now also save any changes made to the color scheme.</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Performance improvements when loading new files. (<a href=\"https://github.com/maibornwolff/codecharta/issues/1312\">#1312</a>)</li>\n</ul>\n<h2>[1.75.0] - 2021-07-05</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Imported files are now compressed by default. Use the -nc parameter to uncompress the files. (<a href=\"https://github.com/maibornwolff/codecharta/issues/1702\">#1702</a>)</li>\n<li>Export the current view as a png image by using \"Ctrl+Alt+S\" or clicking the corresponding button (<a href=\"https://github.com/MaibornWolff/codecharta/issues/674\">#674</a>)</li>\n<li>Show only labels of buildings according to a chosen color (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1347\">#1347</a>)</li>\n<li>New buttons to reset the color hex values and color metric thresholds separately (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1613\">#1613</a>) \n</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Metric aggregations now work as intended and are available from the sidebar when selecting folders (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1953\">#1953</a>)</li>\n<li>Opening new files does no longer remove old ones.\n<ul>\n<li>Already loaded files can be individually removed.</li>\n<li>The 'Multiple' view will select the latest files. \n</li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>It is now possible to rotate the map by rotating the view cube (<a href=\"https://github.com/MaibornWolff/codecharta/issues/353\">#353</a>)</li>\n</ul>\n<h2>[1.74.0] - 2021-05-31</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>SonarImport: SonarQube 8.8 support. Older versions are still supported.</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Only show labels for building included in the search</li>\n<li>Color slider not initialized correctly (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1592\">#1592</a>)</li>\n</ul>\n<h2>[1.73.0] - 2021-05-10</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Improve descriptions (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1879\">#1879</a>)\n\n<img src=\"https://user-images.githubusercontent.com/57844849/115393175-b2897b00-a1e1-11eb-8601-d2128f3469a3.png\" alt=\"option dialog\"></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Excluding in delta mode is broken (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1578\">#1578</a>)\n(Inclusion and exclusion of files using wildcard searches in the flatten and exclude operations)</li>\n<li>Fix labels and lines missing a connection in some cases(<a href=\"https://github.com/MaibornWolff/codecharta/issues/1716\">#1716</a>)</li>\n<li>Ribbons resizing when expanding (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1952\">#1952</a>)</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Fix breaking changes with newest three-js version(<a href=\"https://github.com/MaibornWolff/codecharta/issues/1877\">#1877</a>)</li>\n</ul>\n<h2>[1.72.0] - 2021-04-22</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Hints for Global Settings (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1715\">#1715</a>)</li>\n<li>Indicate total nodes and excluded / flattened nodes in file explorer (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1880\">#1880</a>)</li>\n<li>Add path to node context menu (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1667\">#1667</a>)</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Made the header semi responsive (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1037\">#1037</a>)</li>\n</ul>\n<h2>[1.71.2] - 2021-03-16</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>DevOps pipeline changes</li>\n<li>Fixed web visualization in github</li>\n</ul>\n<h2>[1.71.1] - 2021-03-16</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>DevOps pipeline changes</li>\n</ul>\n<h2>[1.71.0] - 2021-03-16</h2>\n<h3>Changed</h3>\n<ul>\n<li>Disable unready AI function</li>\n<li>Fix linter errors</li>\n<li>Fix editorconfig</li>\n</ul>\n<h2>[1.70.2] - 2021-03-12</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>DevOps pipeline changes</li>\n<li>Project naming for Docker deployment</li>\n</ul>\n<h2>[1.70.1] - 2021-03-12</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>DevOps pipeline changes</li>\n</ul>\n<h2>[1.70.0] - 2021-03-09</h2>\n<h3>Changed</h3>\n<ul>\n<li>Render on demand (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1728\">#1728</a>)</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Memory leaks</li>\n</ul>\n<h2>[1.69.0] - 2021-02-23</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Added WebGL FXAA antialias &#x26; PixelRatio Options in order to achieve better resolution on high dpi displays(https://github.com/MaibornWolff/codecharta/pull/1551).\n<img src=\"https://user-images.githubusercontent.com/74670211/106582136-f4404900-6543-11eb-8f5b-5e1ec47457c7.png\" alt=\"option dialog\">\nThere are 4 available modes:\n<ul>\n<li><strong>standard mode</strong>: the pixel density is only applied to the small cube with standard browser aliasing</li>\n<li><strong>pixel ratio without aliasing</strong>: no antialiasing is used</li>\n<li><strong>pixel ration with FXAA</strong>: Nvidia FXAA antialiasing shader is used as an alisaing technique. this has better perfromance the standard browser aliasing aliasing</li>\n<li><strong>pixel ration with MSAA</strong>: this is the best aliasing quality, slower then FXAA.</li>\n</ul>\n</li>\n<li>Added GPU Stats (only in dev mode)</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Unfocus now respects the focus depth (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1099\">#1099</a>)</li>\n<li>Track anonymous usage data also for older CodeCharta API versions and fix some minor bugs.</li>\n</ul>\n<h2>[1.68.0] - 2021-02-08</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>A new experimental feature has been added to track anonymous metadata of a currently loaded map.\n<ul>\n<li>Neither the map name nor file names will be tracked but anonymous metric values and statistics like (average, min, max).</li>\n<li>The tracked data will not be sent to a server yet. Instead, it can be downloaded as a json file in the Global Settings for now.</li>\n<li>It is planned to send the anonymous data to a server in the future, so that we can collect tracking data automatically.</li>\n<li><img src=\"https://user-images.githubusercontent.com/26900540/106896300-ac5f2480-66f1-11eb-8096-246d1733c0ee.png\" alt=\"example of new feature\"></li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Errors occurred in delta mode if names of root folders were different</li>\n<li>Switching maps in delta mode now shows the differences between the maps (<a href=\"https://github.com/maibornwolff/codecharta/issues/1606\">#1606</a>)</li>\n<li>Label over hovered building not shown for height Metric value of zero (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1623\">#1623</a>)</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>CodeChartaStorage class has been introduced to dynamically store values either on disk (standalone version) or in the localStorage (web version). This is the first step to solve <a href=\"https://github.com/MaibornWolff/codecharta/issues/684\">#684</a>.</li>\n</ul>\n<h2>[1.67.0] - 2021-01-26</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>\n<p>Allow opening files from local drive by double clicking on the buildings or clicking on their names (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1314\">#1314</a>)</p>\n<ul>\n<li>Only available in the standalone version!</li>\n<li>files are opened in associated third-party applications</li>\n<li>web-links are opened in a browser window</li>\n</ul>\n</li>\n<li>\n<p>Allow customized color in the node context menu (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1556\">#1556</a>).</p>\n<p><a href=\"https://user-images.githubusercontent.com/3596742/104302048-a007f300-54c8-11eb-86c1-287483884783.png\">!example of new feature #1556</a></p>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>fixed wrong max tree map visibility (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1624\">#1624</a>)</li>\n<li>fixed incorrect label placement on delta maps that share no common nodes (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1686\">#1686</a>)</li>\n</ul>\n<h2>[1.66.0] - 2021-01-18</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Allow color of buildings to be customizable in the ribbon bar and in the legend. Colors of edges are now customizable as well (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1533\">#1533</a>)\n<img src=\"https://user-images.githubusercontent.com/3596742/103547861-3c1c7380-4ea5-11eb-8df2-541caf65b9df.png\" alt=\"example of new feature\"></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Global settings not reverting to default ones (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1632\">#1632</a>)</li>\n<li>Maximum treemap files shown in squarified node (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1624\">#1624</a>)</li>\n<li>Wrong folder names and colors in legend when using the highlight folder feature (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1555\">#1555</a>)</li>\n<li>Temporary labels are placed at the wrong height for scaled buildings (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1618\">#1618</a>)</li>\n<li>Visible labels will disappear or placed lower for scaled buildings (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1619\">#1619</a>)</li>\n<li>Unnecessary break line for secondary metrics (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1093\">#1093</a>)</li>\n</ul>\n<h2>[1.65.0] - 2020-12-23</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Highlight label while hovering over building, draw a temporary label for hovered buildings that have none (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1529\">#1529</a>)</li>\n<li>Integrated streetlayout (<a href=\"https://github.com/MaibornWolff/codecharta/issues/904\">#904</a>)\n<img src=\"https://user-images.githubusercontent.com/63230711/78872405-87eed900-7a49-11ea-984a-c0ef738779b9.png\" alt=\"cc_street_ccv\">\nIn street layout file nodes are displayed as buildings and directories are displayed as streets. A street layout has the advantage of a more apparent directory structure and stable positioning of nodes after metric changes.\ntwo different Street layout are integrated : - StreetLayout : as described above. - TMStreet : a combination of street layout and squarified layout.</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>The button to see excluded buildings is now merged into the flattened button. Excluded and flattened buildings can now be seen by opening the building with the eye slash icon (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1543\">#1543</a>)</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Height scaling not applied to buildings (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1595\">#1595</a>))</li>\n<li>Fixed multiple label positioning/scaling bugs</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>e2e flaky test (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1322\">#1322</a>)</li>\n</ul>\n<h2>[1.64.0] - 2020-12-15</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>\n<p>Download and upload Custom Configurations is now possible (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1472\">#1472</a>)</p>\n<ul>\n<li>Open the Custom Configs menu in the toolbar on top of the map</li>\n<li>Next to the <code>plus</code> Button you can see two new buttons: Upload and download.\n<ul>\n<li>Download: If you already have added Custom Configs you can download them by clicking the download button.\n<ul>\n<li>Custom Configs which are applicable for the currently selected map(s) will be downloaded as <code>.cc.config.json</code> files.</li>\n</ul>\n</li>\n<li>Upload: Click the upload button and specify your Custom Config file (<code>&#x3C;file-name>.cc.config.json</code>)\n<ul>\n<li>Already existing Custom Configs will be skipped.</li>\n<li>Different Custom Configs with same names will be renamed.</li>\n<li>Another way to upload your Custom Configs is to upload a <code>.cc.json</code> file together with one or multiple <code>.cc.config.json</code> files using the default <code>Load .cc.json map</code> button in the upper left corner.</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>The Configs are stored to the local storage of your browser.\n<ul>\n<li>If a limit of <code>768KB</code> is exceeded you will see a warning when trying to add a new Custom Config.</li>\n<li>You can click the displayed \"download and purge\" button to download/backup at least 6 months old Configs and then purge them from the local storage to make space for new ones.</li>\n<li>If we cannot purge any Configs, you might have to do that by your own by deleting specific Configs manually.</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Increase possible margin size (<a href=\"https://github.com/MaibornWolff/codecharta/pull/1490\">#1490</a>)\n<ul>\n<li>change displayed margin value from % to pixel</li>\n<li>change dynamic margin value to a default margin value that should fit the map</li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Re-enabled color selection for folders and on hover (<a href=\"https://github.com/MaibornWolff/codecharta/pull/1544\">#1544</a>)</li>\n<li>Labels do not take delta height into account (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1523\">#1523</a>)</li>\n<li>The calculation of the map resolution scale factor was wrong (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1491\">#1491</a>)\n<ul>\n<li>The factor is used to decrease the map resolution especially for big maps to avoid performance issues.</li>\n<li>Now only the selected maps will be considered for the calculation. Unselected maps will be skipped.</li>\n</ul>\n</li>\n</ul>\n<h2>[1.63.0] - 2020-11-30</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Add the folder name onto the floor on the first 3 layers to get a better overview of the map (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1491\">#1491</a>)</li>\n<li>UX Improvements related to labels allowing for user interaction #1404\n<ul>\n<li>Labels can be hovered, hovering their corresponding node</li>\n<li>Selecting a label will select the corresponding node</li>\n<li>Hovering a label will remove its transparency and move towards the user:\n<ul>\n<li>If other labels obstruct the hovered label it will move to the front</li>\n</ul>\n</li>\n<li>Increased the transparency of other labels; this makes it easier to distinguish the hovered label</li>\n<li>Increase the amount of labels to 250.</li>\n</ul>\n</li>\n<li>Show file count of folders in Attribute-Side-Bar (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1255\">#1255</a>):\n<img src=\"https://user-images.githubusercontent.com/3596742/100371884-be915800-3008-11eb-89f5-ed57c62680cc.png\" alt=\"img showing file count of folder\"></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Buildings are flattened when delta is active #824.</li>\n<li>Selected Building now stays highlighted when map is rotated #1498</li>\n</ul>\n<h2>[1.62.0] - 2020-11-12</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>\n<p>A new option in the Global Settings allows to enable/disable experimental features #1318</p>\n<ul>\n<li>Click on the settings button in the upper right corner to open the Global Settings dialog.</li>\n<li>Activate/Deactivate the new option \"Enable Experimental Features\"</li>\n<li>The features will be shown/hidden accordingly</li>\n</ul>\n</li>\n<li>\n<p>\"CustomViews\", the first experimental feature has been added #1318</p>\n<ul>\n<li>It must be enabled by activating the new option in the Global Settings dialog as mentioned before.</li>\n<li>You can save your current map configurations to replay/restore them later.</li>\n<li>A saved CustomView can only be applied for it's original map.</li>\n<li>This will enable you to be more efficient in analizing projects by switching between different CustomViews.</li>\n</ul>\n</li>\n<li>\n<p>NodeContextMenu now contains option to keep buildings highlighted #1323</p>\n</li>\n<li>\n<p>Fixed Folder algorithm supports nested (parent-child) Fixed Folders #1431</p>\n<ol>\n<li>Define children of a Fixed Folder also as Fixed Folders by adding the <code>fixedPosition</code> attribute manually in <code>.cc.json</code>.</li>\n<li>All children of a parent Fixed Folder must be fixed.</li>\n<li>Read the how-to guide for further information: https://maibornwolff.github.io/codecharta/how-to/fixate_folders_with_a_custom_cc_json/</li>\n</ol>\n</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>\n<p>Improved search</p>\n<ol>\n<li>Not providing any star in the search bar from now on expects the input to\nbe a wildcard search. Thus, files are going to match paths that have\nleading or following characters. E.g., <code>oo</code> is going to match\n<code>/root/foobar</code>.</li>\n<li>To use the explicit former search mode, wrap the search entry in quotes as\nin: <code>\"oo\"</code>. This would only match filenames that are exactly <code>oo</code>.</li>\n<li>The search field accepts multiple search entries at once, separated by\ncommata. <code>foo,bar</code> is going to search for both <code>*foo*</code> and <code>*bar*</code> and\nmarks all matched files accordingly.</li>\n<li>It is possible to invert the search with a leading exclamation mark as in\n<code>!foobar</code>. That will match any file that does not match <code>*foobar*</code>. It is\nonly possible to invert the complete input, not individual search entries.</li>\n<li>Whitespace handling changed to ignore leading whitespace.</li>\n</ol>\n</li>\n<li>\n<p>Distribution metric #1188</p>\n<ol>\n<li>set rloc to default distribution metric, showing language percentages for real lines of code, if available. Else set to unary to show language distribution over files</li>\n</ol>\n</li>\n<li>\n<p>Improved file sorting in the file overview of the search bar</p>\n<ul>\n<li>Numbers are sorted naturally</li>\n<li>Characters are compared with their base character (e.g., <code>a</code> is now next to <code>á</code>).</li>\n</ul>\n</li>\n<li>\n<p>Label metric not shown by default anymore</p>\n</li>\n</ul>\n<h2>[1.61.0] - 2020-10-30</h2>\n<h3>Changed</h3>\n<ul>\n<li>Disable highlighting buildings during map movement #1432</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>File tree/flattened/excluded overlay visualization is buggy #1269</li>\n<li>EdgePreview on Map broken when selecting zero #1276</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Schedules and merge retries of dependabot dependency updates changed</li>\n</ul>\n<h2>[1.60.2] - 2020-10-24</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Mouse cursor flickering #1170</li>\n<li>Fix flipping map when clicking any option in the toolbar #1410</li>\n<li>Fix edge metric not working correctly</li>\n</ul>\n<h2>[1.60.1] - 2020-10-20</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Issue with first start without an internet connection not working#1266</li>\n<li>Issue with ribbon bar sizes for opened cards #1035</li>\n</ul>\n<h2>[1.60.0] - 2020-10-16</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Parsing feedback with progressbar and probable ETA for parsers and SonarImporter #847</li>\n<li>Mark node names and make the names clickable for nodes that have a link to them #1313</li>\n<li>Indicate the metric name next to a shown value in a new line on labels #1035</li>\n<li>Checkboxes to display metric names and values and to display node names on labels #1035</li>\n<li>Mark node names and make the names clickable for nodes that have a link to them #1313</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Label design #1035</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>First start without an internet connection of standalone not working #1266</li>\n<li>Comparing a map in delta mode shows the correct differences</li>\n<li>This mainly applies to maps compared with itself while it also fixes some other minor miscalculations</li>\n<li>File extensions detection is improved</li>\n<li>Zooming in and out the map will now close the node context menu #1324\n<ul>\n<li>Improved and simplified event handling in NodeContextMenu component</li>\n</ul>\n</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Improved performance of multiple operations (e.g., delta mode).</li>\n</ul>\n<h2>[1.59.0] - 2020-10-09</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>New EXPERIMENTAL SCMLogParser version</li>\n<li>Improved performance around 300% when parsing CodeCharta</li>\n<li>Improved memory usage</li>\n<li>Fixed issue with old parser creating incorrect nodes in CodeCharta #871</li>\n<li>ATTENTION: the parser is experimental, therefore some potential issues might remain, e.g. potentially an unhandled edge case when parsing node</li>\n<li>To use the new parser a reversed git log is needed, as well as a git file list, refer to <code>ccsh scmlogparserv2 -h</code> for additional information</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Color-Metric slider is set and activated in the map accordingly to the released sliderbutton #1319</li>\n<li>Deselcting a building will instantly dehighlight the buildings which were connected through edges #890</li>\n</ul>\n<h2>[1.58.1] - 2020-10-02</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Showing wrong edges when hovering a building after selecting one #1137</li>\n</ul>\n<h2>[1.58.0] - 2020-10-02</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Add active color metric to the top of the legend panel #1278</li>\n<li>SourceCodeParser: Java 14 Support #1277</li>\n</ul>\n<h2>[1.57.4] - 2020-09-25</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Metric-Settings-Panels closed when clicking an option inside the panel #1258</li>\n<li>Improve loading and rendering maps performance</li>\n</ul>\n<h2>[1.57.3] - 2020-09-18</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Improve overall performance for loading and rendering maps</li>\n<li>Improve error messages when a file can't be loaded with the URL parameters</li>\n</ul>\n<h2>[1.57.2] - 2020-09-11</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>New API version 1.2 not set correctly in analysis</li>\n</ul>\n<h2>[1.57.1] - 2020-09-11</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Validation of unique filenames not checking for the complete path and instead throwing an error on duplicate filename</li>\n</ul>\n<h2>[1.57.0] - 2020-09-11</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li><code>fixedPosition</code> as a new property in the <code>cc.json</code> that allows to fixate folders in the map</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li><code>cc.json</code> version updated to <code>1.2</code></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Compressed `cc.jsons (.gz) not marked as accepted when selecting a file in the file chooser</li>\n</ul>\n<h3>Docs 🔎</h3>\n<ul>\n<li><a href=\"https://maibornwolff.github.io//codecharta/how-to/fixate_folders_with_a_custom_cc_json/\">How-To: Fixate Folders in the <code>cc.json</code></a></li>\n<li>CC-Json-API changes</li>\n</ul>\n<h2>[1.56.0] - 2020-09-04</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Improve performance when switching to multiple or delta mode when edges are available</li>\n<li>Scenario with EdgeMetric is only appliable when EdgeMetric is existing for the Map #1201</li>\n<li>Starting standalone version results in infinite loading loop #1202</li>\n<li>Expanded metric selection will close when clicking anywhere outside of that selection #1036</li>\n</ul>\n<h2>[1.55.0] - 2020-08-28</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Cursor indicator for different mouse actions #1042</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Edge-Metrics sorted by name now instead of number of incoming and outgoing edges</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Number of incoming and outgoing edges not visible when hovering over a node #1095</li>\n<li>Highlighting buildings in multiple mode now works #956</li>\n</ul>\n<h2>[1.54.0] - 2020-08-21</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Opening NodeContextMenu in the tree-view marks the node until it is closed #1068</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Missing Sonarcloud metrics in demo</li>\n</ul>\n<h3>Docs 🔎</h3>\n<ul>\n<li>Added note how to fix missing <code>sh</code> command issue when running integration tests on Windows</li>\n</ul>\n<h2>[1.53.0] - 2020-08-14</h2>\n<h3>Changed</h3>\n<ul>\n<li>NodeContextMenu will show up when releasing the right-mouse-button now #1027</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>NodeContextMenu showing up after moving the mouse while holding right-mouse-button #1027</li>\n</ul>\n<h2>[1.52.0] - 2020-08-07</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Support for Tokei 12 new JSON schema #1103</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Rename master branch to main for a more inclusive naming #1117</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>After loading an invalid file the filechooser pops up again, so that the user can choose a valid file #1021</li>\n<li>Quality gates on sonarcloud.io are red #879</li>\n</ul>\n<h3>Docs 🔎</h3>\n<ul>\n<li>Moved developer guides to our <a href=\"https://maibornwolff.github.io/codecharta/\">gh-pages</a> #986</li>\n</ul>\n<h2>[1.51.0] - 2020-07-24</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>File chooser now accept \".json\" files only to avoid accidentally loading incorrect files #1094</li>\n<li>Lots of tooltips #1030</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Blacklisting a building would sometimes not update the map #1098</li>\n<li>Changes made after opening the filechooser and closing it won't be applied #875</li>\n<li>Edge metric list not always updated correctly when loading a new file #1106</li>\n</ul>\n<h2>[1.50.0] - 2020-07-10</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Line between scenario indicator and remove button #1069</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Reduced transition time when opening or collapsing parts of the ribbon bar #1043</li>\n<li>Search Panel will open now when clicking in the search field and collapse when clicking somewhere else #1071</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Opening the same file again will now reload the file and reset the application #1032</li>\n<li>Improve render performance by persisting color conversions #1034</li>\n<li>Sorting in tree-view not being applied #1040</li>\n</ul>\n<h2>[1.49.1] - 2020-07-03</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Improved performance significantly when switching between single, multiple and delta</li>\n<li>Color-Range-Slider sometimes misbehaved when loading a new map or excluding buildings #926</li>\n</ul>\n<h2>[1.49.0] - 2020-06-19</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Custom scenarios can be created and saved through the scenario menu #675</li>\n<li>Importer and parser documentation can now be found on the github Website #954</li>\n<li>Output of sourcemonitor can now be compressed with the compression flag</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>[Security] Bump angular from 1.7.9 to 1.8.0 in /visualization #995</li>\n</ul>\n<h2>[1.48.0] - 2020-06-12</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Support of compressed cc.json files. Files can be compressed in the analysis #848</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Improved performance of several importers #846</li>\n</ul>\n<h2>[1.47.1] - 2020-05-08</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Attribute-Side-Bar being invisible</li>\n</ul>\n<h2>[1.47.0] - 2020-05-02</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>When hovering over a folder, all buildings inside it will be highlighted as well #694</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Rename the button Show-Complete-Map button to Unfocus #642</li>\n<li>Move the Unfocus button (visible when right-clicking a focused node) to the node-context-menu #948</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Generating a delta map with merged empty folders in between is now working correctly #730</li>\n<li>Reduced time when opening a new file #932</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>[Security] Bump jquery from 3.4.0 to 3.5.0 in /visualization #944</li>\n</ul>\n<h2>[1.46.1] - 2020-04-24</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Error dialogs in case of validation or api version issues #610</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Improved overall rendering performance of larger maps by roughly 40% #836</li>\n</ul>\n<h2>[1.45.5] - 2020-04-17</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Median symbol for aggregated relative metrics #365</li>\n<li>AttributeTypes for tokeiImporter and SCMLogParser #365</li>\n<li>Ellipsis button in TreeView list when hovering a node to access context menu #780</li>\n<li>Show gray eye-icon next to the ellipsis-button to indicate a flattened node #780</li>\n<li>Attribute Type selector in the metric dropdowns for edges and nodes</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Metrics with AttributeType relative are now aggregated using the median #365</li>\n<li>Showing absolute number of files instead of relative number when hovering list item in TreeView #780</li>\n<li>Clicking a hovered list item inside the TreeView opens folders #780</li>\n<li>Color node name in gray when flattened #780</li>\n</ul>\n<h3>Removed 🗑</h3>\n<ul>\n<li>Eye-icon in TreeView list to flatten a node #780</li>\n<li>Option to focus a node when clicking the node name inside the TreeView #780</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Consistency of AttributeTypes representation #365</li>\n<li>Wrong file description for tokeiimporter</li>\n<li>Improved search performance #837</li>\n</ul>\n<h2>[1.44.0] - 2020-03-27</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Dialog to select between different sorting options #388</li>\n<li>Button to reverse the current selected sorting #388</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Show file selection in toolBar after excluding or hiding a node instead of an empty toolBar #896</li>\n</ul>\n<h2>[1.43.0] - 2020-03-20</h2>\n<h3>Changed</h3>\n<ul>\n<li>Selectable metrics will only contain metrics from the visible maps</li>\n<li>Closing the attribute-side-bar by clicking somewhere in the map will now be triggered on mouse up instead of mouse down</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Search-panel opening for a short duration when importing a new file</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Fix vulnerability with nokogiri &#x3C;1.10.8</li>\n</ul>\n<h2>[1.42.3] - 2020-03-13</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Loading Gif not displayed when preparing to render a new map #857</li>\n<li>Selecting zero files in Multiple mode will not trigger the 3D CodeMap creation</li>\n<li>Metrics in the dropdown menu now show the correct max value for the visible maps #876</li>\n</ul>\n<h2>[1.42.2] - 2020-02-14</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Replaced non standard <code>[[</code> in sh scripts #849</li>\n<li>Improved performance for loading a new file #836</li>\n<li>Marked Packages are loaded from files #798</li>\n</ul>\n<h2>[1.42.1] - 2020-02-07</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>GC Overhead Limit (OutOfMemory Exception) during analysis of large SCMLogs fixed #845</li>\n</ul>\n<h2>[1.42.0] - 2020-01-31</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Support for camel and kebab-case for ccsh arguments #772</li>\n<li>RawTextParser for analysis #660</li>\n<li>IndentationLevel as metric for RawTextParser #660</li>\n<li>Show additional Pairing Rate of Selected Building, simultaneously to the currently hovered Buildings #736</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Options of the ccsh are now consistently in kebab-case #772</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Path prefix handling in tokeiimporter #841</li>\n</ul>\n<h2>[1.41.8] - 2020-01-17</h2>\n<h3>Removed 🗑</h3>\n<ul>\n<li>Project name parameters in the ccsh #773</li>\n</ul>\n<h2>[1.41.6] - 2020-01-10</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Deployment</li>\n</ul>\n<h2>[1.41.1] - 2020-01-10</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Performance of loading maps with edges improved #823</li>\n<li>Calculation of other Group for fileExtensionBar #768</li>\n<li>Remove focus of UI elements when they are not visible anymore</li>\n</ul>\n<h2>[1.41.0] - 2019-12-06</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Show the relative number of files a folder includes compared to the project in the TreeView #380</li>\n<li>Show the number of files a folder includes in the TreeView when hovering #380</li>\n<li>When the File Extension Bar is hovered, all buildings corresponding to that extension are highlighted #545</li>\n<li>Toggle between percentage and absolute values when clicking the file extension details section #545</li>\n<li>Sum hovered delta values for folders #781</li>\n</ul>\n<h2>[1.40.0] - 2019-11-22</h2>\n<h3>Changed</h3>\n<ul>\n<li>Replaced Blacklist Hide with Flatten option #691</li>\n<li>Flattened buildings are not hidden by default #691</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Bump @types/three from 0.89.12 to 0.103.2 in /visualization #453</li>\n<li>Bump angularjs-slider from 6.5.1 to 7.0.0 in /visualization #454</li>\n<li>Bump webpack from 3.12.0 to 4.41.2 in /visualization #436</li>\n<li>[Security] Bump angular from 1.7.7 to 1.7.9 in /visualization #800</li>\n</ul>\n<h2>[1.39.0] - 2019-11-15</h2>\n<h3>Added</h3>\n<ul>\n<li>Progress indicator for SonarImporter #544</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>New style for hovered metric values #696</li>\n<li>Redesigned slider labels in ribbonBar sections #696</li>\n<li>Shortened ribbonBar sections #696</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Missing pictures and broken links in docs #785</li>\n<li>SCMLogParser is now more resilient to unusual SVN commit messages #763</li>\n</ul>\n<h2>[1.38.1] - 2019-11-13</h2>\n<h3>Added</h3>\n<ul>\n<li>New github-pages https://maibornwolff.github.io/codecharta/</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Sum symbol for hovered metric values only shows for folders #775</li>\n</ul>\n<h2>[1.38.0] - 2019-11-08</h2>\n<h3>Added</h3>\n<ul>\n<li>Temporal coupling edges generated by SCMLogParser #622</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Downloaded files are no longer formatted #679</li>\n<li>Added highly and median coupled files metrics to non-churn metric list of SCMLogParser #622</li>\n<li>Moved nodePathPanel to toolBar and updated style #607</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Removed attributes from downloaded files that should not be there #679</li>\n</ul>\n<h2>[1.37.0] - 2019-10-25</h2>\n<h3>Added</h3>\n<ul>\n<li>Sidebar with information regarding the selected building #527</li>\n<li>Sidebar closes when selected buildings is excluded #748</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Animation to show or hide the legend panel #527</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Expandable detail panel in lower left corner #527</li>\n<li>Removed option to maximize/minimize detail panel #527</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Autofocus and label size for focused nodes #747</li>\n<li>Selected buildings stays selected when settings are changed #748</li>\n<li>IllegalStateException when scanning single file in SourceCodeParser #573</li>\n<li>SourceCodeParser places files in the project root correctly into the hierarchy #574</li>\n</ul>\n<h2>[1.36.0] - 2019-10-18</h2>\n<h3>Changed</h3>\n<ul>\n<li>Open and close the ribbonBar sections independently with an updated animation</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Camera is now resetted correctly, when unfocusing #634</li>\n<li>Inputs of Color Range Slider now waits a second before it commits its values #676</li>\n<li>Fixed root folder name in TreeView after new map after loading new map #649</li>\n<li>Increased size of ribbonBar for big screens #644</li>\n<li>File-Extension-Bar will not display excluded nodes anymore #725</li>\n<li>Sanitize input for shelljs #600</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump jacoco from 0.8.1 to 0.8.4 in /analysis</li>\n</ul>\n<h2>[1.35.0] - 2019-10-04</h2>\n<h3>Added</h3>\n<ul>\n<li>Checkbox in global Settings for disabling camera reset, when new map is loaded #685</li>\n<li>Pipe support for SourceCodeParser #716</li>\n<li>Pipe support for SCMLogParser #717</li>\n<li>Pipe support for SonarImporter #715</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Exclude and Hide options are disabled for empty and already existing search patterns #654</li>\n</ul>\n<h2>[1.34.0] - 2019-09-20</h2>\n<h3>Added</h3>\n<ul>\n<li>Tokei Importer #538</li>\n<li>Prominent Notice that we use Sonar-jar #713</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump kotlin-reflect from 1.3.41 to 1.3.50 in /analysis</li>\n<li>Bump json from 20180813 to 20190722 in /analysis</li>\n<li>Bump rxjava from 2.2.9 to 2.2.12 in /analysis</li>\n<li>Bump assertj-core from 3.12.2 to 3.13.2 in /analysis</li>\n<li>Bump sonar-java-plugin from 5.12.1.17771 to 5.14.0.18788 in /analysis</li>\n</ul>\n<h2>[1.33.0] - 2019-09-10</h2>\n<h3>Added</h3>\n<ul>\n<li>Edge Previews (Palm-Tree-Effect) #529</li>\n<li>Dropdown to select Edge Metric, including Edge Counter #529</li>\n<li>Edge Metric settings for Edge Height, Number of Previews &#x26; show only building with Edges #529</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Edge Visualization to better distinguish between incoming and outgoing edges #529</li>\n<li>Distribution metric is by default the same as area metric #689</li>\n<li>MapTreeView below searchBar opens the first level by default #690</li>\n<li>Focus metric search when opening metricChooser #693</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Edge Options in Context menu #529</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>SourceCodeParser now skips custom metrics for files, if the syntax tree cannot be created</li>\n<li>Nodes with color metric equals 0 are colored correct again #677</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>[Security] Bump mixin-deep from 1.3.1 to 1.3.2 in /visualization</li>\n</ul>\n<h2>[1.32.0] - 2019-08-09</h2>\n<h3>Added</h3>\n<ul>\n<li>Search for metrics and an indicator for the highest value in dropdown #575</li>\n<li>Button to enable PresentationMode that uses Flashlight-Hovering #576</li>\n<li>Clarifying information which file is which in the file bar when in delta mode #615</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Replaced Scenario dropdown with button on the left of the metric sections #628</li>\n</ul>\n<h2>[1.31.0] - 2019-08-02</h2>\n<h3>Added</h3>\n<ul>\n<li>New Metric in SourceCodeParser: Maximum-Nesting-Level #659</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Label hight adjustment now matches scaling of map #594</li>\n<li>SCMLogParser now guesses the input file encoding #614</li>\n</ul>\n<h2>[1.30.0] - 2019-07-26</h2>\n<h3>Added</h3>\n<ul>\n<li>New Search Bar #526</li>\n<li>Number of Renames Metric to SCMLogParser #621</li>\n<li>Age In Weeks Metric for SCMLogParser #620</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>ToolBar now shows partially cut-off controls if the window is too small #582</li>\n<li>Position of the legendPanel was moved to the bottom-right corner #633</li>\n<li>RibbonBar only opens the three metric section</li>\n<li>Moved Scenario-select to the right in order to use less space</li>\n<li>Moved loading-gif from ribbonBar to toolBar</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>RibbonBar toggle button</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>FileExtensionBar height to not show a bottom-margin in Chrome</li>\n<li>PointerEvents not being propagated when RibbonBar was extended</li>\n<li>Reduced memory usage of SCMLogParser to avoid OutOfMemory Exception #631</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>[Security] Bump lodash.mergewith from 4.6.1 to 4.6.2 in /visualization</li>\n<li>[Security] Bump lodash from 4.17.11 to 4.17.13 in /visualization</li>\n<li>[Security] Bump fstream from 1.0.11 to 1.0.12 in /visualization</li>\n</ul>\n<h2>[1.29.0] - 2019-07-12</h2>\n<h3>Changed</h3>\n<ul>\n<li>Moved Button to reset the map to the center next to the view-cube #606</li>\n<li>Moved FileExtensionBar #527</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Burger Menu / SideNav #526</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Colors in File-Extension-Bar will be displayed in MS Edge and Standlone now #584</li>\n</ul>\n<h2>[1.28.0] - 2019-06-28</h2>\n<h3>Added</h3>\n<ul>\n<li>Releasing will now remind the developer to manually add the release notes #533</li>\n<li>StructureModifier to remove and move nodes and set root of projects #547 / #181</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>More informative log messages regarding the success of project merging #547</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Release Notes are not generated and added automatically to a release #533</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Margin will now be set correctly depending on whether dynamicMargin is enabled or not #602</li>\n</ul>\n<h2>[1.27.0] - 2019-06-25</h2>\n<h3>Added</h3>\n<ul>\n<li>Automatically generates release notes from changelog and appends it to release #533</li>\n<li>Adds global settings-menu with settings from options panel and weblinks #528</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Moved File Settings from Ribbon Bar to new File Setting Bar #525</li>\n<li>Rename sample file codemap-nodes #587</li>\n<li>Hide checkbox to select white-positive-buildings in delta state #345</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Removes Options panel from sidebar #528</li>\n<li>Removes Weblinks panel from sidebar #528</li>\n<li>Removed URL-parameter info from sidebar #525</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Unary Metric will no longer be auto-selected when a new map is loaded #579</li>\n</ul>\n<h2>[1.26.0] - 2019-06-14</h2>\n<h3>Added</h3>\n<ul>\n<li>FileExtensionBar to show file-distribution of chosen metric #495</li>\n<li>sum icon is now displayed on the left of the metric value #364</li>\n<li>Added Pop-up dialog before downloading file to set filename and see what data will be stored #523</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fix set default ColorRange when resetting color section #560</li>\n</ul>\n<h2>[1.25.1] - 2019-05-30</h2>\n<h3>Added</h3>\n<ul>\n<li>SVN log parser keeps track of renaming of files for metric calculation #542</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Entries with renaming information in SVN logs are attributed to correct file #542</li>\n<li>Unary metric will no longer be removed from the MetricChooser-Dropdown when a folder was excluded or hidden #548</li>\n<li>Changing margin and then file or mode will no longer freeze the application #524</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>[Security] Bump tar from 2.2.1 to 2.2.2 in /visualization</li>\n</ul>\n<h2>[1.25.0] - 2019-05-17</h2>\n<h3>Added</h3>\n<ul>\n<li>Added SonarJava to Source code parser #343</li>\n<li>Added exclude and defaultExclude options to SourceCodeParser #508</li>\n<li>Show loading-gif in ribbonBar when rerendering map</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Using Sonar Plugins for Source code parser, giving the Sonar Metrics #343</li>\n<li>Use debounced settings update instead of throttled</li>\n<li>Filename of downloaded file now contains time #484</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fixed issue with too long line in ccsh.bat #506</li>\n<li>Prevent downloaded files from having multiple Timestamps #484</li>\n<li>Do not show loadingGif when cancelling the fileChooser #498</li>\n<li>Excluding a building now updates the maximum value of colorRange #355</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump angular-material from 1.1.9 to 1.1.14 in /visualization</li>\n<li>[Security] Bump jquery from 3.3.1 to 3.4.0 in /visualization</li>\n</ul>\n<h2>[1.24.0] - 2019-04-23</h2>\n<h3>Removed</h3>\n<ul>\n<li>Settings as URL parameters #470</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fixed issue with trailing slash in URL parameter of SonarImporter #356</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump d3 from 4.13.0 to 5.9.2 in /visualization</li>\n<li>Bump sinon from 4.5.0 to 7.3.1 in /visualization</li>\n</ul>\n<h2>[1.23.0] - 2019-03-22</h2>\n<h3>Added</h3>\n<ul>\n<li>Project Name can be specified for merge filter #394</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Throw a MergeException if project names do not match in MergeFilter #394</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Excluded buildings are no longer used for aggregated metric calculation #352</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump browser-sync-webpack-plugin from 1.2.0 to 2.2.2 in /visualization</li>\n<li>Bump @types/node from 8.10.19 to 11.11.3 in /visualization</li>\n<li>Bump html-webpack-plugin from 2.30.1 to 3.2.0 in /visualization</li>\n<li>Bump load-grunt-tasks from 3.5.2 to 4.0.0 in /visualization #444</li>\n<li>Bump ajv from 5.5.2 to 6.10.0 in /visualization #447</li>\n<li>Bump resolve-url-loader from 2.3.0 to 3.0.1 in /visualization #448</li>\n</ul>\n<h2>[1.22.0] - 2019-03-15</h2>\n<h3>Added</h3>\n<ul>\n<li>Added buttons to select all/none/inversion of revisions/maps in multiple mode #391</li>\n<li>Merge filter can merge all files of folders #392</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fixed bug that code map was not re-loaded when changing from multiple to single revision mode #396</li>\n<li>Fixed missing apiVersion in aggregated map #398</li>\n<li>Input Fields of color sliders adjust width according to content #409</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump nouislider from 11.1.0 to 13.1.1 in /visualization</li>\n<li>Bump typescript from 2.7.2 to 3.3.3333 in /visualization</li>\n<li>Bump @types/d3 from 4.13.0 to 5.7.1 in /visualization</li>\n</ul>\n<h2>[1.21.2] - 2019-02-26</h2>\n<h3>Added</h3>\n<ul>\n<li>When entering Multiple Mode, all Maps/revisions are preselected</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fixing non-existent metric aggregation on root-level when using multiple Files</li>\n</ul>\n<h2>[1.21.1] - 2019-02-22</h2>\n<h3>Added</h3>\n<ul>\n<li>Hovering a node in the map also hovers it in the tree view #351</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fixing sync between treeview hovering and map hovering #351</li>\n<li>Folders can no longer be colored in the CodeMap or TreeView #359</li>\n</ul>\n<h2>[1.21.0] - 2019-02-16</h2>\n<h3>Added</h3>\n<ul>\n<li>Color searched node names green in TreeView #225</li>\n<li>Add option buttons (three dots) in TreeViewSearch to <code>Hide</code> or <code>Exclude</code> matching nodes #298</li>\n<li>Show blacklist entry counter in blacklistPanel header #298</li>\n<li>Option checkbox 'Hide Flattened Buildings' #225</li>\n<li>Hide/Flatten non-searched buildings #225</li>\n<li>Hide/Flatten all buildings, if searchPattern can't find any matching nodes #225</li>\n<li>Show maxValue of each metric in metricChooser select list #204</li>\n<li>Colored color-slider inside the RibbonBar #318</li>\n<li>Option to color positive buildings white #311</li>\n<li>Clicking the ribbonBar section-titles toggles the ribbonBar #324</li>\n<li>View-Cube displayed in top right corner #274</li>\n<li>Adding prettier formatter</li>\n<li>Adapt colorRange when changing colorMetric #330</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Update TreeView filter with search field #225</li>\n<li>Use 'gitignore' style matching in TreeViewSearch #225</li>\n<li>Reorder <code>Focus</code>, <code>Hide</code> and <code>Exclude</code> buttons in nodeContextMenu #298</li>\n<li>Reorder sidebarPanels (BlacklistPanel beneath TreeViewSearchPanel) #298</li>\n<li>Use <code>fa-ban</code>-icon as symbols for blacklistPanel (instead of <code>fa-list</code>) #298</li>\n<li>Use <code>fa-ban</code>-icon as symbols for blacklistType <code>Exclude</code> (instead of <code>fa-times</code>) #298</li>\n<li>Label size keeps readable for large maps or a high distance between camera and map #237</li>\n<li>updated dependencies to fix vulnerabilities</li>\n<li>Scenarios only update settings which exist in Scenario and not all #224</li>\n<li>MergeFilter to merge unique blacklist entries #275</li>\n<li>MergeFilter to only merge unique attributeType entries #275</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Remove invertHeight checkbox in delta-view #306</li>\n<li>Remove option to add blacklist entries from inside the blacklistPanel #298</li>\n<li>Remove statistic functions in Experimental panel #308</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>CodeMap does not move anymore when navigating in text-fields #307</li>\n<li>Merge blacklist in multipleFile view and convert paths #275</li>\n<li>Show logo in NW.js standalone application #233</li>\n</ul>\n<h2>[1.20.1] - 2018-12-19</h2>\n<p>Fixed release issues.</p>\n<h2>[1.20.0] - 2018-12-19</h2>\n<h3>Added</h3>\n<ul>\n<li>button to unfocus node</li>\n<li>NodeContextMenu: Option to only hide dependent edges</li>\n<li>plop support</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Renaming 'isolate node' to 'focus node'</li>\n<li>Focusing a node does not remove the blacklist items of type Hide</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>NodeContextMenu: Option to 'show all' nodes, which used to unhide all nodes</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Reshow hidden nodes from Treeview or Blacklist</li>\n</ul>\n<h2>[1.19.0] - 2018-11-02</h2>\n<h3>Added</h3>\n<ul>\n<li>Deleted files in delta view use their previous area value in order to be visible #254</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Buildings in the delta view are not colored correctly #253</li>\n<li>Reset Button in RibbonBar to reset 'Invert Colors' #255</li>\n<li>Remove lag of 'Invert Color' checkboxes, when selecting single/delta mode #255</li>\n</ul>\n<h2>[1.18.1] - 2018-10-31</h2>\n<p>Fixed release issues</p>\n<h2>[1.18.0] - 2018-10-29</h2>\n<h3>Added</h3>\n<ul>\n<li>Integration with Jasome through JasomeImporter #245</li>\n<li>URL parameter 'mode' with the values Single, Multiple or Delta</li>\n<li>Blacklist to persist excluded or hidden nodes #205</li>\n<li>Option to exclude nodes in nodeContextMenu #205</li>\n<li>BlacklistPanel in SettingsSidebar to manage blacklist #205</li>\n<li>Save-Button to download current CodeMap #205</li>\n<li>Publishing visualization on Docker Hub #252</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>No longer fat jar of every subcomponent of analysis, baked into ccsh</li>\n<li>Changed simple syserr write to logger call for analysis #243</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>URL parameter 'delta' does not exist anymore</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Show delta of CodeMap when URL parameter mode=delta is set</li>\n</ul>\n<h2>[1.17.0] - 2018-09-28</h2>\n<h3>Changed</h3>\n<ul>\n<li>Invert delta colors moved from color to heigh metric column in ribbon bar #220</li>\n<li>Delta value now as kindOfMap shown #220</li>\n<li>Aggreate maps as multiple rename #220</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Single/delta buttons now correctly activated when delta in ulr shown #220</li>\n</ul>\n<h2>[1.17.0] - 2018-09-21</h2>\n<h3>Added</h3>\n<ul>\n<li>CodeMaatImport for temporal coupling dependencies #172</li>\n<li>EdgeFilter to aggregate edge-attributes as node-attributes #222</li>\n<li>Option to show and hide dependent edges from node-context-menu #218</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>MergeFilter merges edges #172</li>\n</ul>\n<h2>[1.16.2] - 2018-09-10</h2>\n<h3>Fixed</h3>\n<ul>\n<li>missing event in firefox #232</li>\n</ul>\n<h2>[1.16.1] - 2018-08-31</h2>\n<h3>Added</h3>\n<ul>\n<li>gitlab + dotnet manual</li>\n</ul>\n<h2>[1.16.0] - 2018-08-31</h2>\n<h3>Added</h3>\n<ul>\n<li>add the option to add multiple files via url parameter (e.g. ?file=a&#x26;file=b...)</li>\n</ul>\n<h2>[1.15.1] - 2018-08-13</h2>\n<p>Fixed release issues</p>\n<h2>[1.15.0] - 2018-08-13</h2>\n<h3>Added</h3>\n<ul>\n<li>e2e tests are running in CI Environment (headless)</li>\n<li>pupeteer as e2e test framework</li>\n<li>Show names of marked packages in legend</li>\n<li>Added a source code importer that can analyse rloc,mcc for java source code</li>\n<li>keep settings when the user changes a file</li>\n<li>Added option to set white background</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>cypress</li>\n</ul>\n<h2>[1.14.2] - 2018-07-16</h2>\n<h3>Changed</h3>\n<ul>\n<li>Changed folder detail metrics from mean to sum</li>\n</ul>\n<h2>[1.14.1] - 2018-07-13</h2>\n<p>Fixed release issues</p>\n<h2>[1.14.0] - 2018-07-13</h2>\n<h3>Added</h3>\n<ul>\n<li>Added UnderstandImporter to Analysis</li>\n<li>Packages can be highlighted in different colors #152</li>\n<li>Adding a context menu with highlighting colors and convenience methods for the tree view and 3D view #155</li>\n<li>Folders and files to highlight can be described in the cc.json #165</li>\n<li>Dynamic/automatic margin computing de/activated by tick</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Details panel: using the sum of the childrens metrics instead of the mean value</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Display buttons do not trigger map changes #185</li>\n<li>Flickering surfaces when zooming out</li>\n</ul>\n<h2>[1.13.0] - 2018-06-08</h2>\n<h3>Added</h3>\n<ul>\n<li>Layout switcher #141</li>\n<li>Added CrococosmoImporter to Analysis</li>\n<li>Added type, dirs, name to CSVExporter</li>\n<li>Invert height of building checkbox</li>\n<li>Aggregate multiple maps in visualization #110</li>\n<li>Auto Focus selected map part</li>\n<li>Timmer added to applySettings in SettingsService</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Crococosmo xml files will now generate a cc.json file for each version</li>\n<li>Suppressing ARIA warnings</li>\n<li>Simplified gradle structure of analysis part</li>\n<li>Deltas added in the metric quick access panel #138</li>\n<li>Ticks and ResetValue Buttons call to onSettingsChange to avoid applySettings timer</li>\n<li>compacting empty middle packages #150</li>\n<li>Detail panel minimized by default</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>filter by regex shows parent nodes #116</li>\n<li>typo in scss file</li>\n</ul>\n<h2>[1.12.0] - 2018-04-27</h2>\n<h3>Added</h3>\n<ul>\n<li>horizontal quick access metric chooser</li>\n<li>Link behind filepath in detailPanel #84</li>\n<li>Double click event-handler on Buildings #84</li>\n<li>Detail Panel can be minimized and maximized</li>\n<li>Settings option to minimize Detail Panel</li>\n<li>cypress as an e2e test runner</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>metric details from legend</li>\n<li>metric chooser from settings panel</li>\n</ul>\n<h2>[1.11.2] - 2018-04-13</h2>\n<h3>Fixed</h3>\n<ul>\n<li>a sonar importer bug which prevented the importer to fetch the last page #122</li>\n</ul>\n<h2>[1.11.1] - 2018-04-11</h2>\n<p>Fixed release issues</p>\n<h2>[1.11.0] - 2018-04-11</h2>\n<h3>Added</h3>\n<ul>\n<li>SASS support</li>\n<li>simple regex filter</li>\n<li>Reset Button</li>\n<li>Dialog Service replaces console log calls and window.alert calls</li>\n<li>linking tree view and map hover</li>\n<li>auto fit scene button</li>\n<li>anugularJS material</li>\n<li>Scenarios are now filtered by compatibility for the given map</li>\n<li>Link in visualization #84</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>materialize-css</li>\n<li>grunt</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>less flickering and artifacts</li>\n</ul>\n<h2>[1.10.0] - 2018-03-22</h2>\n<h3>Changed</h3>\n<ul>\n<li>Clean up UI #86</li>\n<li>Updated analysis dependencies</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Delta View shows Deltas of itself as non-trivial if nodes have same name #89: Compare deltas by path not name</li>\n<li>Delta calculation performance boost #91</li>\n<li>Problems when intermediate nodes missed metrics #92</li>\n<li>removed unnecessary calculations</li>\n<li>removed bug in SonarImporter that slowed up performance and missed out multiple metrics</li>\n<li>minor bugs</li>\n</ul>\n<h2>[1.9.3] - 2018-02-23</h2>\n<h3>Changed</h3>\n<ul>\n<li>sorting treeview by folders and names</li>\n</ul>\n<h2>[1.9.2] - 2018-02-20</h2>\n<h3>Added</h3>\n<ul>\n<li>added preliminary CSVExporter for visualisation data</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>padding rendering</li>\n<li>minimal building height is 1 to prevent clipping issues</li>\n<li>fallback values for visualization when no metric is available (area = 1, height = 1, color = grey). Data in data structure will not be changed.</li>\n</ul>\n<h2>[1.9.1] - 2018-02-20</h2>\n<h3>Fixed</h3>\n<ul>\n<li>detail panel bug fix</li>\n</ul>\n<h2>[1.9.0] - 2018-02-20</h2>\n<h3>Changed</h3>\n<ul>\n<li>moved to unscoped npm packages</li>\n</ul>\n<h2>[1.8.2] - 2018-02-20</h2>\n<h3>Changed</h3>\n<ul>\n<li>detail panel background is white now. better visibility</li>\n</ul>\n<h2>[1.8.1] - 2018-02-20</h2>\n<h3>Changed</h3>\n<ul>\n<li>revision chooser moved to settings panel and uses now understandable dropdowns instead of links. Part of the #82 proposals</li>\n</ul>\n<h2>[1.8.0] - 2018-02-20</h2>\n<h3>Added</h3>\n<ul>\n<li>Experimental dependency support</li>\n<li>loading indicator</li>\n<li>file path to detail panel</li>\n<li>collapsible tree view and visibility/isolation per node toggles</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>added a ray-aabb intersection test before precise testing. Less time is spent in intersection methods.</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>fixed a minor bug</li>\n<li>canvas mouse event listener are now limited to the canvas dom element. UI events will not trigger the canvas listeners anymore</li>\n<li>canvas mouse events distinguish now between click and drag. Dragging does not reset selection anymore</li>\n<li>slider input #64</li>\n<li>rz slider initialization bug</li>\n<li>increasing test coverage</li>\n<li>deltas where calculated on map loading even though, they were disabled</li>\n</ul>\n<h2>[1.7.2] - 2018-02-02</h2>\n<h3>Fixed</h3>\n<ul>\n<li>url to homepage</li>\n<li>analysis package</li>\n</ul>\n<h2>[1.7.1] - 2018-02-02</h2>\n<p>Fixed release issues</p>\n<h2>[1.7.0] - 2018-02-02</h2>\n<h3>Changed</h3>\n<ul>\n<li>npm pachage scoped to @maibornwolff</li>\n<li>Defined further scenarios via json file</li>\n<li>Added description for metrics and scenarios</li>\n<li>using fixed point values in detail panel (ui) to truncate infinite or long decimals</li>\n<li>folders now use the mean attributes of their buildings(leaves)</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Bugfix: detail panel should be cleared before setting new details else old values may survive</li>\n</ul>\n<h2>[1.6.7] - 2018-02-01</h2>\n<p>Fixed release issues</p>\n<h2>[1.6.6] - 2018-02-01</h2>\n<h3>Added</h3>\n<ul>\n<li>added anonymous git log generator anongit</li>\n<li>browser demo shows codecharta-visualization sonar analysis</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>rewrote command line interface</li>\n<li>linking ccsh to bin/ccsh will be deleted later</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>No underscore for scenarios in tooltips #71</li>\n</ul>\n<h2>[1.6.5] - 2018-01-30</h2>\n<p>Fixed release issues</p>\n<h2>[1.6.4] - 2018-01-30</h2>\n<h3>Fixed</h3>\n<ul>\n<li>fixed broken SonarImporter due to jdk9 migration</li>\n</ul>\n<h2>[1.6.3] - 2018-01-26</h2>\n<h3>Added</h3>\n<ul>\n<li>added npm publish for analysis</li>\n<li>simple release script for automatic changelog updates, commits, tags, version bumps</li>\n</ul>\n<h2>[1.6.2] - 2018-01-25</h2>\n<h3>Added</h3>\n<ul>\n<li>added support for git log --raw and git log --numstat --raw</li>\n<li>added support for git log --numstat and codechurn</li>\n<li>added support for renames in SCMLogParser for git log --name-status</li>\n<li>added support for renames in SCMLogParser for git log --numstat, git log --raw and git log --numstat --raw</li>\n<li>added new SCM experimental metrics range_of_weeks_with_commits and successive_weeks_of_commits</li>\n<li>the file origin of a node is displayed in the details now</li>\n<li>sonarqube analysis on CI build</li>\n<li>npm publish support in visualization</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Deltas are no longer experimental</li>\n<li>two selected delta maps now merge their nodes correctly. The map where\na node was missing get's a copy of this node with metrics=0.\nFile additions/deletions are therefore only visible when areaMetric is\nunary and deltas are activated.</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>delta display bug for heights</li>\n<li>going back from delta view now correctly removes deltas from node data</li>\n<li>Delta shown although not in delta mode #60</li>\n<li>Allow inversion of delta colors #57</li>\n<li>npm binary error</li>\n</ul>\n<h2>[1.5.2] - 2018-01-04</h2>\n<h3>Changed</h3>\n<ul>\n<li>scaling slider now has steps of 0.1. This allows the user to select precise values like 2.0</li>\n<li>updated jdk to jdk9</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Opening the same file a second time does not work #53</li>\n<li>added missing require declaration</li>\n<li>added glsl loader in testing environment</li>\n<li>Native Application support is bugged while building in Travis CI #48</li>\n</ul>\n<h2>[1.5.1] - 2017-11-14</h2>\n<h3>Added</h3>\n<ul>\n<li>command line parameter to toggle \"authors\" attribute in SCMLogParser</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>when passing a file through the \"file\" parameter in the URL, the map now renders correctly</li>\n</ul>\n<h2>[1.5.0] - 2017-10-24</h2>\n<h3>Added</h3>\n<ul>\n<li>experimental delta functionality</li>\n<li>loading multiple maps</li>\n<li>experimental margin slider</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>faster rendering</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>nwjs packages and native apps due to a bug</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>using color metric instead of height metric for color range slider ceil</li>\n</ul>\n<h2>[1.4.0] - 2017-09-14</h2>\n<h3>Added</h3>\n<ul>\n<li>Typescript support</li>\n<li>Browsersync</li>\n<li>added advanced merging strategy \"leaf\" in MergeFilter</li>\n<li>advanced merging with restructuring</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Browserify replaced with Webpack</li>\n<li>Better debugging</li>\n<li>Karma instead of Mocha</li>\n</ul>\n<h2>[1.3.2] - 2017-08-18</h2>\n<h3>Added</h3>\n<ul>\n<li>add slider controls for color thresholds #19</li>\n<li>Added additional structuring in SonarImporter for multi-module projects</li>\n<li>button to generate current url parameters</li>\n<li>camera position is now a setting (e.g. in scenarios or url parameters)</li>\n<li>margin slider: make it easier to find out to which package/folder a class belongs #20</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>better url parameter resolution (nested parameters are handled correctly)</li>\n<li>changed hover color. Allows better distinction between hover and select</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>obsolete helper grid</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>changing display or color settings resets scaling #18</li>\n<li>scenario description #32</li>\n<li>Scaling should not scale the labels #35</li>\n</ul>\n<h2>[1.3.1] - 2017-07-05</h2>\n<h3>Fixed</h3>\n<ul>\n<li>Prevented override of URL-parameters by default scenario</li>\n</ul>\n<h2>[1.3.0] - 2017-07-05</h2>\n<h3>Added</h3>\n<ul>\n<li>Adding simple merge functionality for multiple json files</li>\n<li>Added CSVImporter</li>\n<li>Added Translation for SonarQube metrics</li>\n<li>Added descriptions for metrics</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Changed uppercase metrics, e.g. RLOC, to lowercase metrics</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Simple cc.json does not display anything #17</li>\n</ul>\n<h2>[1.2.0] - 2017-06-19</h2>\n<h3>Added</h3>\n<ul>\n<li>Adding Labels and UI</li>\n<li>Support for links to source page of SonarQube in sonarimporter</li>\n<li>Added SCMLogParser</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>GitHub Issue: legend is wrong #21</li>\n</ul>\n<h2>[1.1.5] - 2017-05-31</h2>\n<h3>Fixed</h3>\n<ul>\n<li>Wrong version numbers in analysis part</li>\n</ul>\n<h2>[1.1.4] - 2017-05-26</h2>\n<h3>Added</h3>\n<ul>\n<li>Scenarios and default scenario</li>\n<li>Translation API for Metrics</li>\n<li>Metric tooltips in dropdown</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>GitHub Issue: Sonarimporter crashes with null pointer exception when there is a component without path. #13</li>\n</ul>\n<h2>[1.1.3] - 2017-05-01</h2>\n<h3>Added</h3>\n<ul>\n<li>Support for SonarQube Measures-API</li>\n<li>Error logging for sonarqube errors</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Standard Sonar metric is now complexity,ncloc,functions,duplicated_lines,classes,blocker_violations,generated_lines,bugs,commented_out_code_lines,lines,violations,comment_lines,duplicated_blocks</li>\n</ul>\n<h2>[1.1.2] - 2017-04-28</h2>\n<h3>Added</h3>\n<ul>\n<li>Translation API for Metrics</li>\n</ul>\n<h2>[1.1.1] - 2017-04-07</h2>\n<h3>Fixed</h3>\n<ul>\n<li>GitHub Issue: Flickering surfaces #3</li>\n<li>GitHub Issue: Unable to install due to readlink error on macOS #4</li>\n</ul>\n<h2>[1.1.0] - 2017-03-27</h2>\n<h3>Added</h3>\n<ul>\n<li>SourceMonitorImporter for importing projects from SourceMonitor.</li>\n</ul>\n<h2>[1.0.0] - 2017-03-17</h2>\n<h3>Added</h3>\n<ul>\n<li>SonarImporter for importing projects from SonarQube.</li>\n<li>ValidationTool for validating an existing json file.</li>\n</ul>\n";
243068
+ var code = "<h1>Change Log</h1>\n<p>All notable changes to this project will be documented in this file.</p>\n<p>The format is based on <a href=\"http://keepachangelog.com/\">Keep a Changelog</a>\nand this project adheres to <a href=\"http://semver.org/\">Semantic Versioning</a></p>\n<h2>[unreleased] (Added 🚀 | Changed | Removed 🗑 | Fixed 🐞 | Chore 👨‍💻 👩‍💻)</h2>\n<h2>[1.88.0] - 2022-01-24</h2>\n<h3>Changed</h3>\n<ul>\n<li>Rename custom configs to custom view <a href=\"https://github.com/MaibornWolff/codecharta/pull/2625\">#2625</a></li>\n<li>Combine single and multiple mode into standard mode <a href=\"https://github.com/MaibornWolff/codecharta/pull/2578\">#2578</a>\n<img src=\"https://user-images.githubusercontent.com/72517530/150765617-2d66eb78-2c26-45c5-b63b-f84994ed88ab.png\" alt=\"xs\"></li>\n<li>Improve file validation handling and provide more descriptive import messages <a href=\"https://github.com/MaibornWolff/codecharta/pull/2604\">#2604</a>\n<img src=\"https://user-images.githubusercontent.com/48621967/150532207-f3b482ed-3a14-43c0-b1a3-80ac4c25d5e0.png\" alt=\"xs\"></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix Image not shown in what is new dialog <a href=\"https://github.com/MaibornWolff/codecharta/pull/2610\">#2610</a></li>\n</ul>\n<h2>[1.87.1] - 2022-01-17</h2>\n<h3>Changed</h3>\n<ul>\n<li>User-friendly renaming for display quality options <a href=\"https://github.com/MaibornWolff/codecharta/pull/2601\">#2601</a></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix color of selected building in delta mode <a href=\"https://github.com/MaibornWolff/codecharta/pull/2603\">#2603</a></li>\n<li>Fix link to news page when clicking 'Know more' button changelog dialog <a href=\"https://github.com/MaibornWolff/codecharta/pull/2602\">#2602</a></li>\n<li>Fix Image not shown in what is new dialog <a href=\"https://github.com/MaibornWolff/codecharta/pull/2610\">#2610</a></li>\n</ul>\n<h2>[1.87.0] - 2022-01-11</h2>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Migrate <code>unfocus-button-component</code> to Angular.</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Remove suspicious metrics from custom map configurations <a href=\"https://github.com/MaibornWolff/codecharta/pull/2564\">#2564</a>.</li>\n<li>Add 'show/hide non-applicable CustomConfigs' button to Custom Configs menu <a href=\"https://github.com/MaibornWolff/codecharta/pull/2591\">#2591</a>.</li>\n</ul>\n<h2>[1.86.0] - 2021-12-20</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Add 3D export feature for 3D printing <a href=\"https://github.com/MaibornWolff/codecharta/pull/2561\">#2561</a>. \n<img src=\"https://user-images.githubusercontent.com/48621967/146173663-e0ea177e-6ed8-4ddb-bd11-410415541e9f.png\" alt=\"xs\">\n<img src=\"https://user-images.githubusercontent.com/48621967/146174397-42a6e475-ed2f-47c0-ba9c-4f8304d53399.png\" alt=\"l\"></li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Replace all color pickers in the context of ongoing Angular migration <a href=\"https://github.com/MaibornWolff/codecharta/pull/2560\">#2560</a>.</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix showing names of custom configs properly <a href=\"https://github.com/MaibornWolff/codecharta/pull/2557\">#2557</a>.</li>\n<li>Fix minor memory leak in context menu for code map buildings <a href=\"https://github.com/MaibornWolff/codecharta/issues/2565\">#2565</a>.</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Migrate legend panel to Angular <a href=\"https://github.com/MaibornWolff/codecharta/pull/2560\">#2560</a>.</li>\n</ul>\n<h2>[1.85.0] - 2021-12-13</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix delta values of secondary metrics not shown in delta mode within attribute side bar <a href=\"https://github.com/MaibornWolff/codecharta/issues/2539\">#2539</a>.</li>\n<li>Use icon tag instead of font awesome icon <a href=\"https://github.com/MaibornWolff/codecharta/pull/2537\">#2537</a>.</li>\n<li>Rename text for placeholder of metric chooser <a href=\"https://github.com/MaibornWolff/codecharta/pull/2547\">#2547</a></li>\n<li>Fix attribute type selector of primary edge metric not shown <a href=\"https://github.com/MaibornWolff/codecharta/issues/2528\">#2528</a>.</li>\n<li>Identical files and files with identical file names but different hashes can be loaded <a href=\"https://github.com/MaibornWolff/codecharta/pull/2548\">#2548</a></li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Remove <code>secondaryMetrics</code> from store and remove <code>secondaryMetrics.service</code> as the data can be derived from selected node <a href=\"https://github.com/MaibornWolff/codecharta/pull/2527\">#2527</a>.</li>\n<li>Migrate <code>attribute-side-bar-component</code> to Angular <a href=\"https://github.com/MaibornWolff/codecharta/pull/2527\">#2527</a>.</li>\n<li>Switch from Webpack 4 Loaders to Asset Module to load icons properly with css-loader 6.x <a href=\"https://github.com/MaibornWolff/codecharta/pull/2542\">#2542</a>.</li>\n</ul>\n<h3>Removed 🗑</h3>\n<ul>\n<li>Remove notification dialog when deleting a custom config <a href=\"https://github.com/MaibornWolff/codecharta/pull/2553\">#2553</a></li>\n</ul>\n<h2>[1.84.1] - 2021-11-29</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix compressed files not being loaded (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2525\">#2524</a>)</li>\n</ul>\n<h2>[1.84.0] - 2021-11-22</h2>\n<h3>Changed</h3>\n<ul>\n<li>Improved the UI and usability of the Suspicious Metrics Feature (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2494\">#2376</a>) \n<ul>\n<li>The Metrics and the Analysis are now split in two menus \n<img src=\"https://user-images.githubusercontent.com/48621967/141795078-bb856f53-1bc3-4c09-8be5-d031899835ae.png\" alt=\"xs\"></li>\n<li>The Suspicious Metrics are now sorted with the Very High Risk on top \n<img src=\"https://user-images.githubusercontent.com/48621967/141793011-1bfc0e19-bd3a-4bd2-af70-c3dd472821b6.png\" alt=\"m\"></li>\n<li>The bar in the analysis shows the percentages \n<img src=\"https://user-images.githubusercontent.com/48621967/141791111-564778fa-b767-4ee4-b024-6856f1a79b4b.png\" alt=\"m\"></li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix showing labels when weighted gradient on yellow buildings in color metric options are enabled (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2511\">#2511</a>)</li>\n<li>Fix rounding of the sum of percentages in risk profile (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2516\">#2393</a>)</li>\n<li>Fix legend panel not having a background (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2510\">#2422</a>)</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Remove <code>nodeSearch.service.ts</code> and <code>searchedNodePaths</code> from store as they can be derived from <code>searchPattern</code> (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2495\">#2495</a>).</li>\n<li>Refactor where metric data are calculated (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2514\">#2514</a>).</li>\n<li>Migrate <code>attribute-type-selector-component</code> to Angular (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2519\">#2519</a>).</li>\n</ul>\n<h2>[1.83.1] - 2021-11-10</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix loading files from URL in Web Demo (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2494\">#2494</a>)</li>\n</ul>\n<h2>[1.83.0] - 2021-11-09</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix unwanted calculations of suspicious metrics when experimental features are disabled (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2471\">#2471</a>)</li>\n<li>Fix UI issues in the configuration panel (<a href=\"https://github.com/maibornwolff/codecharta/issues/2322\">#2322</a>)</li>\n<li>Fix tooltip of sorting order button in map tree view showing wrong sorting order (<a href=\"https://github.com/maibornwolff/codecharta/issues/2473\">#2473</a>)</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Calculate MD5 checksum when generating .cc.json files (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2450\">#2411</a>)</li>\n</ul>\n<h2>[1.82.0] - 2021-10-18</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix what's new section including the last opened version (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2453\">#2447</a>)</li>\n<li>Fix unfocus button text not showing correctly (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2439\">#2439</a>)</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Folders in the Folder structure view of the top left come now always before any files, regardless of the sort order.</li>\n</ul>\n<h2>[1.81.0] - 2021-10-11</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix color picker not being usable (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2439\">#2439</a>)</li>\n<li>Fix Changelog inconsistencies (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2425\">#2425</a>) \n<img src=\"https://user-images.githubusercontent.com/48621967/135866024-ee06119a-1a62-4912-90df-ac3aa9216608.PNG\" alt=\"xl\"></li>\n<li>Fix memory and performance issues related to drawing labels on floors/folders (<a href=\"https://github.com/MaibornWolff/codecharta/issues/2348\">#2348</a>).</li>\n<li>Hides legend block if label description is not available and adds new metric descriptions (<a href=\"https://github.com/maibornwolff/codecharta/issues/2377\">#2377</a>).</li>\n</ul>\n<h2>[1.80.0] - 2021-10-04</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Adds feature to display building colors as a gradients (<a href=\"https://github.com/MaibornWolff/codecharta/issues/2327\">#2327</a>).\n<ul>\n<li>\"Weighted Gradient\" only mixes colors in a small interval around the preset values.</li>\n<li>\"True Gradient\" mixes colors from the 0 to the highest value, the two preset color range values determine the balance.</li>\n<li>\"Absolute\" represents the old behaviour without gradients. \n<img src=\"https://user-images.githubusercontent.com/42114276/134924267-245c65c9-2893-43a8-9a0a-17e3182bf15a.JPG\" alt=\"l\"></li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix broken file/node search #2389</li>\n<li>Fix changelog inconsistencies (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2425\">#2425</a>)</li>\n</ul>\n<h2>[1.79.0] - 2021-09-20</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Add metric descriptions to the frontend and show a translation next to the entry (<a href=\"https://github.com/MaibornWolff/codecharta/issues/2330\">#2330</a>) \n</li>\n<li>An option has been added to the global settings to enable copying screenshots to clipboard instead of saving them in a file (<a href=\"https://github.com/MaibornWolff/codecharta/issues/2326\">#2326</a>) \n<img src=\"https://user-images.githubusercontent.com/57844849/131342771-a3c637e3-8241-49aa-8d51-71e3a8d38aef.png\" alt=\"xl\"></li>\n<li>Add changelog guidelines (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2358\">#2358</a>)</li>\n<li>A changelog dialog with the latest additions to CodeCharta appears on version update (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2342\">#1315</a>) \n<img src=\"https://user-images.githubusercontent.com/48621967/131360878-a8e1ef40-7f73-4de7-8b3f-4c8dc21448da.PNG\" alt=\"xl\"></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Fix broken method call in screenshot feature.</li>\n<li>Improve changelog entries.</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Changing the background color and remove \"outgoing\" and \"incoming\" edges from the legend, if not applicable (<a href=\"https://github.com/MaibornWolff/codecharta/issues/2330\">#2330</a>)</li>\n<li>Improve the user experience for the AI Feature \"Suspicious Metrics and Risk Profiles\" and enable it for any programming language (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2362\">#2362</a>) \n<img src=\"https://user-images.githubusercontent.com/26900540/133250867-adf4583d-9d0e-4f81-b8a7-1407b93d9f40.png\" alt=\"m\"></li>\n</ul>\n<h2>[1.78.0] - 2021-09-06</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>A changelog dialog with the latest additions to CodeCharta appears on version update (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1315\">#1315</a>)</li>\n<li>Add documentation for SCMLogParserV2 (<a href=\"https://github.com/maibornwolff/codecharta/issues/1349\">#1349</a>)</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Empty temporary label during hovering (<a href=\"https://github.com/maibornwolff/codecharta/issues/2328\">#2328</a>)</li>\n<li>Show the screenshot hotkey in the screenshot title (<a href=\"https://github.com/maibornwolff/codecharta/issues/2323\">#2323</a>)</li>\n<li>Improved rendering performance (<a href=\"https://github.com/MaibornWolff/codecharta/pull/2345\">#2345</a>)</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Update GH-Pages and visualization dependencies (<a href=\"https://github.com/maibornwolff/codecharta/issues/2356\">#2356</a>)</li>\n</ul>\n<h2>[1.77.0] - 2021-07-30</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>The \"Color Metric Options\" panel and \"Legend\" panel display the maximum value of the selected metric instead of infinite. (<a href=\"https://github.com/maibornwolff/codecharta/issues/1520\">#1520</a>)</li>\n<li>Mark color-section as unimportant in delta mode (<a href=\"https://github.com/maibornwolff/codecharta/issues/769\">#769</a>)</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Small ui improvements added. (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1881\">#1881</a>)</li>\n<li>Numbers/Percentages always show in the distribution bar(<a href=\"https://github.com/MaibornWolff/codecharta/issues/1540\">#1540</a>)\n<ul>\n<li>Toggle between percentage and absolute numbers by clicking anywhere on the (expanded) distribution bar.</li>\n<li>The old expanded distribution bar is now accessible through a button.</li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>It is no longer possible to exclude all files on the map (<a href=\"https://github.com/MaibornWolff/codecharta/issues/901\">#901</a>)</li>\n</ul>\n<h2>[1.76.0] - 2021-07-13</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Custom metric scenarios which include the 'Color-Metric' (rloc) will now also save any changes made to the color scheme.</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Performance improvements when loading new files. (<a href=\"https://github.com/maibornwolff/codecharta/issues/1312\">#1312</a>)</li>\n</ul>\n<h2>[1.75.0] - 2021-07-05</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Imported files are now compressed by default. Use the -nc parameter to uncompress the files. (<a href=\"https://github.com/maibornwolff/codecharta/issues/1702\">#1702</a>)</li>\n<li>Export the current view as a png image by using \"Ctrl+Alt+S\" or clicking the corresponding button (<a href=\"https://github.com/MaibornWolff/codecharta/issues/674\">#674</a>)</li>\n<li>Show only labels of buildings according to a chosen color (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1347\">#1347</a>)</li>\n<li>New buttons to reset the color hex values and color metric thresholds separately (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1613\">#1613</a>) \n<img src=\"https://user-images.githubusercontent.com/50167165/121889295-5b071780-cd19-11eb-87ef-aba0ab0c6c09.png\" alt=\"l\"></li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Metric aggregations now work as intended and are available from the sidebar when selecting folders (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1953\">#1953</a>)</li>\n<li>Opening new files does no longer remove old ones.\n<ul>\n<li>Already loaded files can be individually removed.</li>\n<li>The 'Multiple' view will select the latest files. \n<img src=\"https://user-images.githubusercontent.com/50167165/123071234-c6856f00-d414-11eb-8326-e25f614e75d7.png\" alt=\"l\"></li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>It is now possible to rotate the map by rotating the view cube (<a href=\"https://github.com/MaibornWolff/codecharta/issues/353\">#353</a>)</li>\n</ul>\n<h2>[1.74.0] - 2021-05-31</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>SonarImport: SonarQube 8.8 support. Older versions are still supported.</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Only show labels for building included in the search</li>\n<li>Color slider not initialized correctly (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1592\">#1592</a>)</li>\n</ul>\n<h2>[1.73.0] - 2021-05-10</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Improve descriptions (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1879\">#1879</a>)\n\n<img src=\"https://user-images.githubusercontent.com/57844849/115393175-b2897b00-a1e1-11eb-8601-d2128f3469a3.png\" alt=\"m\"></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Excluding in delta mode is broken (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1578\">#1578</a>)\n(Inclusion and exclusion of files using wildcard searches in the flatten and exclude operations)</li>\n<li>Fix labels and lines missing a connection in some cases(<a href=\"https://github.com/MaibornWolff/codecharta/issues/1716\">#1716</a>)</li>\n<li>Ribbons resizing when expanding (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1952\">#1952</a>)</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Fix breaking changes with newest three-js version(<a href=\"https://github.com/MaibornWolff/codecharta/issues/1877\">#1877</a>)</li>\n</ul>\n<h2>[1.72.0] - 2021-04-22</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Hints for Global Settings (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1715\">#1715</a>)</li>\n<li>Indicate total nodes and excluded / flattened nodes in file explorer (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1880\">#1880</a>)</li>\n<li>Add path to node context menu (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1667\">#1667</a>)</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Made the header semi responsive (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1037\">#1037</a>)</li>\n</ul>\n<h2>[1.71.2] - 2021-03-16</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>DevOps pipeline changes</li>\n<li>Fixed web visualization in github</li>\n</ul>\n<h2>[1.71.1] - 2021-03-16</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>DevOps pipeline changes</li>\n</ul>\n<h2>[1.71.0] - 2021-03-16</h2>\n<h3>Changed</h3>\n<ul>\n<li>Disable unready AI function</li>\n<li>Fix linter errors</li>\n<li>Fix editorconfig</li>\n</ul>\n<h2>[1.70.2] - 2021-03-12</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>DevOps pipeline changes</li>\n<li>Project naming for Docker deployment</li>\n</ul>\n<h2>[1.70.1] - 2021-03-12</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>DevOps pipeline changes</li>\n</ul>\n<h2>[1.70.0] - 2021-03-09</h2>\n<h3>Changed</h3>\n<ul>\n<li>Render on demand (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1728\">#1728</a>)</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Memory leaks</li>\n</ul>\n<h2>[1.69.0] - 2021-02-23</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Added WebGL FXAA antialias &#x26; PixelRatio Options in order to achieve better resolution on high dpi displays(https://github.com/MaibornWolff/codecharta/pull/1551).\n<img src=\"https://user-images.githubusercontent.com/74670211/106582136-f4404900-6543-11eb-8f5b-5e1ec47457c7.png\" alt=\"option dialog\">\nThere are 4 available modes:\n<ul>\n<li><strong>standard mode</strong>: the pixel density is only applied to the small cube with standard browser aliasing</li>\n<li><strong>pixel ratio without aliasing</strong>: no antialiasing is used</li>\n<li><strong>pixel ration with FXAA</strong>: Nvidia FXAA antialiasing shader is used as an alisaing technique. this has better perfromance the standard browser aliasing aliasing</li>\n<li><strong>pixel ration with MSAA</strong>: this is the best aliasing quality, slower then FXAA.</li>\n</ul>\n</li>\n<li>Added GPU Stats (only in dev mode)</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Unfocus now respects the focus depth (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1099\">#1099</a>)</li>\n<li>Track anonymous usage data also for older CodeCharta API versions and fix some minor bugs.</li>\n</ul>\n<h2>[1.68.0] - 2021-02-08</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>A new experimental feature has been added to track anonymous metadata of a currently loaded map.\n<ul>\n<li>Neither the map name nor file names will be tracked but anonymous metric values and statistics like (average, min, max).</li>\n<li>The tracked data will not be sent to a server yet. Instead, it can be downloaded as a json file in the Global Settings for now.</li>\n<li>It is planned to send the anonymous data to a server in the future, so that we can collect tracking data automatically.</li>\n<li><img src=\"https://user-images.githubusercontent.com/26900540/106896300-ac5f2480-66f1-11eb-8096-246d1733c0ee.png\" alt=\"example of new feature\"></li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Errors occurred in delta mode if names of root folders were different</li>\n<li>Switching maps in delta mode now shows the differences between the maps (<a href=\"https://github.com/maibornwolff/codecharta/issues/1606\">#1606</a>)</li>\n<li>Label over hovered building not shown for height Metric value of zero (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1623\">#1623</a>)</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>CodeChartaStorage class has been introduced to dynamically store values either on disk (standalone version) or in the localStorage (web version). This is the first step to solve <a href=\"https://github.com/MaibornWolff/codecharta/issues/684\">#684</a>.</li>\n</ul>\n<h2>[1.67.0] - 2021-01-26</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>\n<p>Allow opening files from local drive by double clicking on the buildings or clicking on their names (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1314\">#1314</a>)</p>\n<ul>\n<li>Only available in the standalone version!</li>\n<li>files are opened in associated third-party applications</li>\n<li>web-links are opened in a browser window</li>\n</ul>\n</li>\n<li>\n<p>Allow customized color in the node context menu (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1556\">#1556</a>).</p>\n<p><a href=\"https://user-images.githubusercontent.com/3596742/104302048-a007f300-54c8-11eb-86c1-287483884783.png\">!example of new feature #1556</a></p>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>fixed wrong max tree map visibility (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1624\">#1624</a>)</li>\n<li>fixed incorrect label placement on delta maps that share no common nodes (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1686\">#1686</a>)</li>\n</ul>\n<h2>[1.66.0] - 2021-01-18</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Allow color of buildings to be customizable in the ribbon bar and in the legend. Colors of edges are now customizable as well (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1533\">#1533</a>)\n<img src=\"https://user-images.githubusercontent.com/3596742/103547861-3c1c7380-4ea5-11eb-8df2-541caf65b9df.png\" alt=\"example of new feature\"></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Global settings not reverting to default ones (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1632\">#1632</a>)</li>\n<li>Maximum treemap files shown in squarified node (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1624\">#1624</a>)</li>\n<li>Wrong folder names and colors in legend when using the highlight folder feature (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1555\">#1555</a>)</li>\n<li>Temporary labels are placed at the wrong height for scaled buildings (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1618\">#1618</a>)</li>\n<li>Visible labels will disappear or placed lower for scaled buildings (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1619\">#1619</a>)</li>\n<li>Unnecessary break line for secondary metrics (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1093\">#1093</a>)</li>\n</ul>\n<h2>[1.65.0] - 2020-12-23</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Highlight label while hovering over building, draw a temporary label for hovered buildings that have none (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1529\">#1529</a>)</li>\n<li>Integrated streetlayout (<a href=\"https://github.com/MaibornWolff/codecharta/issues/904\">#904</a>)\n<img src=\"https://user-images.githubusercontent.com/63230711/78872405-87eed900-7a49-11ea-984a-c0ef738779b9.png\" alt=\"cc_street_ccv\">\nIn street layout file nodes are displayed as buildings and directories are displayed as streets. A street layout has the advantage of a more apparent directory structure and stable positioning of nodes after metric changes.\ntwo different Street layout are integrated : - StreetLayout : as described above. - TMStreet : a combination of street layout and squarified layout.</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>The button to see excluded buildings is now merged into the flattened button. Excluded and flattened buildings can now be seen by opening the building with the eye slash icon (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1543\">#1543</a>)</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Height scaling not applied to buildings (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1595\">#1595</a>))</li>\n<li>Fixed multiple label positioning/scaling bugs</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>e2e flaky test (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1322\">#1322</a>)</li>\n</ul>\n<h2>[1.64.0] - 2020-12-15</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>\n<p>Download and upload Custom Configurations is now possible (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1472\">#1472</a>)</p>\n<ul>\n<li>Open the Custom Configs menu in the toolbar on top of the map</li>\n<li>Next to the <code>plus</code> Button you can see two new buttons: Upload and download.\n<ul>\n<li>Download: If you already have added Custom Configs you can download them by clicking the download button.\n<ul>\n<li>Custom Configs which are applicable for the currently selected map(s) will be downloaded as <code>.cc.config.json</code> files.</li>\n</ul>\n</li>\n<li>Upload: Click the upload button and specify your Custom Config file (<code>&#x3C;file-name>.cc.config.json</code>)\n<ul>\n<li>Already existing Custom Configs will be skipped.</li>\n<li>Different Custom Configs with same names will be renamed.</li>\n<li>Another way to upload your Custom Configs is to upload a <code>.cc.json</code> file together with one or multiple <code>.cc.config.json</code> files using the default <code>Load .cc.json map</code> button in the upper left corner.</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>The Configs are stored to the local storage of your browser.\n<ul>\n<li>If a limit of <code>768KB</code> is exceeded you will see a warning when trying to add a new Custom Config.</li>\n<li>You can click the displayed \"download and purge\" button to download/backup at least 6 months old Configs and then purge them from the local storage to make space for new ones.</li>\n<li>If we cannot purge any Configs, you might have to do that by your own by deleting specific Configs manually.</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Increase possible margin size (<a href=\"https://github.com/MaibornWolff/codecharta/pull/1490\">#1490</a>)\n<ul>\n<li>change displayed margin value from % to pixel</li>\n<li>change dynamic margin value to a default margin value that should fit the map</li>\n</ul>\n</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Re-enabled color selection for folders and on hover (<a href=\"https://github.com/MaibornWolff/codecharta/pull/1544\">#1544</a>)</li>\n<li>Labels do not take delta height into account (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1523\">#1523</a>)</li>\n<li>The calculation of the map resolution scale factor was wrong (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1491\">#1491</a>)\n<ul>\n<li>The factor is used to decrease the map resolution especially for big maps to avoid performance issues.</li>\n<li>Now only the selected maps will be considered for the calculation. Unselected maps will be skipped.</li>\n</ul>\n</li>\n</ul>\n<h2>[1.63.0] - 2020-11-30</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Add the folder name onto the floor on the first 3 layers to get a better overview of the map (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1491\">#1491</a>)</li>\n<li>UX Improvements related to labels allowing for user interaction #1404\n<ul>\n<li>Labels can be hovered, hovering their corresponding node</li>\n<li>Selecting a label will select the corresponding node</li>\n<li>Hovering a label will remove its transparency and move towards the user:\n<ul>\n<li>If other labels obstruct the hovered label it will move to the front</li>\n</ul>\n</li>\n<li>Increased the transparency of other labels; this makes it easier to distinguish the hovered label</li>\n<li>Increase the amount of labels to 250.</li>\n</ul>\n</li>\n<li>Show file count of folders in Attribute-Side-Bar (<a href=\"https://github.com/MaibornWolff/codecharta/issues/1255\">#1255</a>):\n<img src=\"https://user-images.githubusercontent.com/3596742/100371884-be915800-3008-11eb-89f5-ed57c62680cc.png\" alt=\"img showing file count of folder\"></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Buildings are flattened when delta is active #824.</li>\n<li>Selected Building now stays highlighted when map is rotated #1498</li>\n</ul>\n<h2>[1.62.0] - 2020-11-12</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>\n<p>A new option in the Global Settings allows to enable/disable experimental features #1318</p>\n<ul>\n<li>Click on the settings button in the upper right corner to open the Global Settings dialog.</li>\n<li>Activate/Deactivate the new option \"Enable Experimental Features\"</li>\n<li>The features will be shown/hidden accordingly</li>\n</ul>\n</li>\n<li>\n<p>\"CustomViews\", the first experimental feature has been added #1318</p>\n<ul>\n<li>It must be enabled by activating the new option in the Global Settings dialog as mentioned before.</li>\n<li>You can save your current map configurations to replay/restore them later.</li>\n<li>A saved CustomView can only be applied for it's original map.</li>\n<li>This will enable you to be more efficient in analizing projects by switching between different CustomViews.</li>\n</ul>\n</li>\n<li>\n<p>NodeContextMenu now contains option to keep buildings highlighted #1323</p>\n</li>\n<li>\n<p>Fixed Folder algorithm supports nested (parent-child) Fixed Folders #1431</p>\n<ol>\n<li>Define children of a Fixed Folder also as Fixed Folders by adding the <code>fixedPosition</code> attribute manually in <code>.cc.json</code>.</li>\n<li>All children of a parent Fixed Folder must be fixed.</li>\n<li>Read the how-to guide for further information: https://maibornwolff.github.io/codecharta/how-to/fixate_folders_with_a_custom_cc_json/</li>\n</ol>\n</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>\n<p>Improved search</p>\n<ol>\n<li>Not providing any star in the search bar from now on expects the input to\nbe a wildcard search. Thus, files are going to match paths that have\nleading or following characters. E.g., <code>oo</code> is going to match\n<code>/root/foobar</code>.</li>\n<li>To use the explicit former search mode, wrap the search entry in quotes as\nin: <code>\"oo\"</code>. This would only match filenames that are exactly <code>oo</code>.</li>\n<li>The search field accepts multiple search entries at once, separated by\ncommata. <code>foo,bar</code> is going to search for both <code>*foo*</code> and <code>*bar*</code> and\nmarks all matched files accordingly.</li>\n<li>It is possible to invert the search with a leading exclamation mark as in\n<code>!foobar</code>. That will match any file that does not match <code>*foobar*</code>. It is\nonly possible to invert the complete input, not individual search entries.</li>\n<li>Whitespace handling changed to ignore leading whitespace.</li>\n</ol>\n</li>\n<li>\n<p>Distribution metric #1188</p>\n<ol>\n<li>set rloc to default distribution metric, showing language percentages for real lines of code, if available. Else set to unary to show language distribution over files</li>\n</ol>\n</li>\n<li>\n<p>Improved file sorting in the file overview of the search bar</p>\n<ul>\n<li>Numbers are sorted naturally</li>\n<li>Characters are compared with their base character (e.g., <code>a</code> is now next to <code>á</code>).</li>\n</ul>\n</li>\n<li>\n<p>Label metric not shown by default anymore</p>\n</li>\n</ul>\n<h2>[1.61.0] - 2020-10-30</h2>\n<h3>Changed</h3>\n<ul>\n<li>Disable highlighting buildings during map movement #1432</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>File tree/flattened/excluded overlay visualization is buggy #1269</li>\n<li>EdgePreview on Map broken when selecting zero #1276</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Schedules and merge retries of dependabot dependency updates changed</li>\n</ul>\n<h2>[1.60.2] - 2020-10-24</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Mouse cursor flickering #1170</li>\n<li>Fix flipping map when clicking any option in the toolbar #1410</li>\n<li>Fix edge metric not working correctly</li>\n</ul>\n<h2>[1.60.1] - 2020-10-20</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Issue with first start without an internet connection not working#1266</li>\n<li>Issue with ribbon bar sizes for opened cards #1035</li>\n</ul>\n<h2>[1.60.0] - 2020-10-16</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Parsing feedback with progressbar and probable ETA for parsers and SonarImporter #847</li>\n<li>Mark node names and make the names clickable for nodes that have a link to them #1313</li>\n<li>Indicate the metric name next to a shown value in a new line on labels #1035</li>\n<li>Checkboxes to display metric names and values and to display node names on labels #1035</li>\n<li>Mark node names and make the names clickable for nodes that have a link to them #1313</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Label design #1035</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>First start without an internet connection of standalone not working #1266</li>\n<li>Comparing a map in delta mode shows the correct differences</li>\n<li>This mainly applies to maps compared with itself while it also fixes some other minor miscalculations</li>\n<li>File extensions detection is improved</li>\n<li>Zooming in and out the map will now close the node context menu #1324\n<ul>\n<li>Improved and simplified event handling in NodeContextMenu component</li>\n</ul>\n</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Improved performance of multiple operations (e.g., delta mode).</li>\n</ul>\n<h2>[1.59.0] - 2020-10-09</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>New EXPERIMENTAL SCMLogParser version</li>\n<li>Improved performance around 300% when parsing CodeCharta</li>\n<li>Improved memory usage</li>\n<li>Fixed issue with old parser creating incorrect nodes in CodeCharta #871</li>\n<li>ATTENTION: the parser is experimental, therefore some potential issues might remain, e.g. potentially an unhandled edge case when parsing node</li>\n<li>To use the new parser a reversed git log is needed, as well as a git file list, refer to <code>ccsh scmlogparserv2 -h</code> for additional information</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Color-Metric slider is set and activated in the map accordingly to the released sliderbutton #1319</li>\n<li>Deselcting a building will instantly dehighlight the buildings which were connected through edges #890</li>\n</ul>\n<h2>[1.58.1] - 2020-10-02</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Showing wrong edges when hovering a building after selecting one #1137</li>\n</ul>\n<h2>[1.58.0] - 2020-10-02</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Add active color metric to the top of the legend panel #1278</li>\n<li>SourceCodeParser: Java 14 Support #1277</li>\n</ul>\n<h2>[1.57.4] - 2020-09-25</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Metric-Settings-Panels closed when clicking an option inside the panel #1258</li>\n<li>Improve loading and rendering maps performance</li>\n</ul>\n<h2>[1.57.3] - 2020-09-18</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Improve overall performance for loading and rendering maps</li>\n<li>Improve error messages when a file can't be loaded with the URL parameters</li>\n</ul>\n<h2>[1.57.2] - 2020-09-11</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>New API version 1.2 not set correctly in analysis</li>\n</ul>\n<h2>[1.57.1] - 2020-09-11</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Validation of unique filenames not checking for the complete path and instead throwing an error on duplicate filename</li>\n</ul>\n<h2>[1.57.0] - 2020-09-11</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li><code>fixedPosition</code> as a new property in the <code>cc.json</code> that allows to fixate folders in the map</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li><code>cc.json</code> version updated to <code>1.2</code></li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Compressed `cc.jsons (.gz) not marked as accepted when selecting a file in the file chooser</li>\n</ul>\n<h3>Docs 🔎</h3>\n<ul>\n<li><a href=\"https://maibornwolff.github.io//codecharta/how-to/fixate_folders_with_a_custom_cc_json/\">How-To: Fixate Folders in the <code>cc.json</code></a></li>\n<li>CC-Json-API changes</li>\n</ul>\n<h2>[1.56.0] - 2020-09-04</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Improve performance when switching to multiple or delta mode when edges are available</li>\n<li>Scenario with EdgeMetric is only appliable when EdgeMetric is existing for the Map #1201</li>\n<li>Starting standalone version results in infinite loading loop #1202</li>\n<li>Expanded metric selection will close when clicking anywhere outside of that selection #1036</li>\n</ul>\n<h2>[1.55.0] - 2020-08-28</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Cursor indicator for different mouse actions #1042</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Edge-Metrics sorted by name now instead of number of incoming and outgoing edges</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Number of incoming and outgoing edges not visible when hovering over a node #1095</li>\n<li>Highlighting buildings in multiple mode now works #956</li>\n</ul>\n<h2>[1.54.0] - 2020-08-21</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Opening NodeContextMenu in the tree-view marks the node until it is closed #1068</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Missing Sonarcloud metrics in demo</li>\n</ul>\n<h3>Docs 🔎</h3>\n<ul>\n<li>Added note how to fix missing <code>sh</code> command issue when running integration tests on Windows</li>\n</ul>\n<h2>[1.53.0] - 2020-08-14</h2>\n<h3>Changed</h3>\n<ul>\n<li>NodeContextMenu will show up when releasing the right-mouse-button now #1027</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>NodeContextMenu showing up after moving the mouse while holding right-mouse-button #1027</li>\n</ul>\n<h2>[1.52.0] - 2020-08-07</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Support for Tokei 12 new JSON schema #1103</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Rename master branch to main for a more inclusive naming #1117</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>After loading an invalid file the filechooser pops up again, so that the user can choose a valid file #1021</li>\n<li>Quality gates on sonarcloud.io are red #879</li>\n</ul>\n<h3>Docs 🔎</h3>\n<ul>\n<li>Moved developer guides to our <a href=\"https://maibornwolff.github.io/codecharta/\">gh-pages</a> #986</li>\n</ul>\n<h2>[1.51.0] - 2020-07-24</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>File chooser now accept \".json\" files only to avoid accidentally loading incorrect files #1094</li>\n<li>Lots of tooltips #1030</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Blacklisting a building would sometimes not update the map #1098</li>\n<li>Changes made after opening the filechooser and closing it won't be applied #875</li>\n<li>Edge metric list not always updated correctly when loading a new file #1106</li>\n</ul>\n<h2>[1.50.0] - 2020-07-10</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Line between scenario indicator and remove button #1069</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Reduced transition time when opening or collapsing parts of the ribbon bar #1043</li>\n<li>Search Panel will open now when clicking in the search field and collapse when clicking somewhere else #1071</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Opening the same file again will now reload the file and reset the application #1032</li>\n<li>Improve render performance by persisting color conversions #1034</li>\n<li>Sorting in tree-view not being applied #1040</li>\n</ul>\n<h2>[1.49.1] - 2020-07-03</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Improved performance significantly when switching between single, multiple and delta</li>\n<li>Color-Range-Slider sometimes misbehaved when loading a new map or excluding buildings #926</li>\n</ul>\n<h2>[1.49.0] - 2020-06-19</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Custom scenarios can be created and saved through the scenario menu #675</li>\n<li>Importer and parser documentation can now be found on the github Website #954</li>\n<li>Output of sourcemonitor can now be compressed with the compression flag</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>[Security] Bump angular from 1.7.9 to 1.8.0 in /visualization #995</li>\n</ul>\n<h2>[1.48.0] - 2020-06-12</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Support of compressed cc.json files. Files can be compressed in the analysis #848</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Improved performance of several importers #846</li>\n</ul>\n<h2>[1.47.1] - 2020-05-08</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Attribute-Side-Bar being invisible</li>\n</ul>\n<h2>[1.47.0] - 2020-05-02</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>When hovering over a folder, all buildings inside it will be highlighted as well #694</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Rename the button Show-Complete-Map button to Unfocus #642</li>\n<li>Move the Unfocus button (visible when right-clicking a focused node) to the node-context-menu #948</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Generating a delta map with merged empty folders in between is now working correctly #730</li>\n<li>Reduced time when opening a new file #932</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>[Security] Bump jquery from 3.4.0 to 3.5.0 in /visualization #944</li>\n</ul>\n<h2>[1.46.1] - 2020-04-24</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Error dialogs in case of validation or api version issues #610</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Improved overall rendering performance of larger maps by roughly 40% #836</li>\n</ul>\n<h2>[1.45.5] - 2020-04-17</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Median symbol for aggregated relative metrics #365</li>\n<li>AttributeTypes for tokeiImporter and SCMLogParser #365</li>\n<li>Ellipsis button in TreeView list when hovering a node to access context menu #780</li>\n<li>Show gray eye-icon next to the ellipsis-button to indicate a flattened node #780</li>\n<li>Attribute Type selector in the metric dropdowns for edges and nodes</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Metrics with AttributeType relative are now aggregated using the median #365</li>\n<li>Showing absolute number of files instead of relative number when hovering list item in TreeView #780</li>\n<li>Clicking a hovered list item inside the TreeView opens folders #780</li>\n<li>Color node name in gray when flattened #780</li>\n</ul>\n<h3>Removed 🗑</h3>\n<ul>\n<li>Eye-icon in TreeView list to flatten a node #780</li>\n<li>Option to focus a node when clicking the node name inside the TreeView #780</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Consistency of AttributeTypes representation #365</li>\n<li>Wrong file description for tokeiimporter</li>\n<li>Improved search performance #837</li>\n</ul>\n<h2>[1.44.0] - 2020-03-27</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Dialog to select between different sorting options #388</li>\n<li>Button to reverse the current selected sorting #388</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Show file selection in toolBar after excluding or hiding a node instead of an empty toolBar #896</li>\n</ul>\n<h2>[1.43.0] - 2020-03-20</h2>\n<h3>Changed</h3>\n<ul>\n<li>Selectable metrics will only contain metrics from the visible maps</li>\n<li>Closing the attribute-side-bar by clicking somewhere in the map will now be triggered on mouse up instead of mouse down</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Search-panel opening for a short duration when importing a new file</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Fix vulnerability with nokogiri &#x3C;1.10.8</li>\n</ul>\n<h2>[1.42.3] - 2020-03-13</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Loading Gif not displayed when preparing to render a new map #857</li>\n<li>Selecting zero files in Multiple mode will not trigger the 3D CodeMap creation</li>\n<li>Metrics in the dropdown menu now show the correct max value for the visible maps #876</li>\n</ul>\n<h2>[1.42.2] - 2020-02-14</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Replaced non standard <code>[[</code> in sh scripts #849</li>\n<li>Improved performance for loading a new file #836</li>\n<li>Marked Packages are loaded from files #798</li>\n</ul>\n<h2>[1.42.1] - 2020-02-07</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>GC Overhead Limit (OutOfMemory Exception) during analysis of large SCMLogs fixed #845</li>\n</ul>\n<h2>[1.42.0] - 2020-01-31</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Support for camel and kebab-case for ccsh arguments #772</li>\n<li>RawTextParser for analysis #660</li>\n<li>IndentationLevel as metric for RawTextParser #660</li>\n<li>Show additional Pairing Rate of Selected Building, simultaneously to the currently hovered Buildings #736</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Options of the ccsh are now consistently in kebab-case #772</li>\n</ul>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Path prefix handling in tokeiimporter #841</li>\n</ul>\n<h2>[1.41.8] - 2020-01-17</h2>\n<h3>Removed 🗑</h3>\n<ul>\n<li>Project name parameters in the ccsh #773</li>\n</ul>\n<h2>[1.41.6] - 2020-01-10</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Deployment</li>\n</ul>\n<h2>[1.41.1] - 2020-01-10</h2>\n<h3>Fixed 🐞</h3>\n<ul>\n<li>Performance of loading maps with edges improved #823</li>\n<li>Calculation of other Group for fileExtensionBar #768</li>\n<li>Remove focus of UI elements when they are not visible anymore</li>\n</ul>\n<h2>[1.41.0] - 2019-12-06</h2>\n<h3>Added 🚀</h3>\n<ul>\n<li>Show the relative number of files a folder includes compared to the project in the TreeView #380</li>\n<li>Show the number of files a folder includes in the TreeView when hovering #380</li>\n<li>When the File Extension Bar is hovered, all buildings corresponding to that extension are highlighted #545</li>\n<li>Toggle between percentage and absolute values when clicking the file extension details section #545</li>\n<li>Sum hovered delta values for folders #781</li>\n</ul>\n<h2>[1.40.0] - 2019-11-22</h2>\n<h3>Changed</h3>\n<ul>\n<li>Replaced Blacklist Hide with Flatten option #691</li>\n<li>Flattened buildings are not hidden by default #691</li>\n</ul>\n<h3>Chore 👨‍💻 👩‍💻</h3>\n<ul>\n<li>Bump @types/three from 0.89.12 to 0.103.2 in /visualization #453</li>\n<li>Bump angularjs-slider from 6.5.1 to 7.0.0 in /visualization #454</li>\n<li>Bump webpack from 3.12.0 to 4.41.2 in /visualization #436</li>\n<li>[Security] Bump angular from 1.7.7 to 1.7.9 in /visualization #800</li>\n</ul>\n<h2>[1.39.0] - 2019-11-15</h2>\n<h3>Added</h3>\n<ul>\n<li>Progress indicator for SonarImporter #544</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>New style for hovered metric values #696</li>\n<li>Redesigned slider labels in ribbonBar sections #696</li>\n<li>Shortened ribbonBar sections #696</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Missing pictures and broken links in docs #785</li>\n<li>SCMLogParser is now more resilient to unusual SVN commit messages #763</li>\n</ul>\n<h2>[1.38.1] - 2019-11-13</h2>\n<h3>Added</h3>\n<ul>\n<li>New github-pages https://maibornwolff.github.io/codecharta/</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Sum symbol for hovered metric values only shows for folders #775</li>\n</ul>\n<h2>[1.38.0] - 2019-11-08</h2>\n<h3>Added</h3>\n<ul>\n<li>Temporal coupling edges generated by SCMLogParser #622</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Downloaded files are no longer formatted #679</li>\n<li>Added highly and median coupled files metrics to non-churn metric list of SCMLogParser #622</li>\n<li>Moved nodePathPanel to toolBar and updated style #607</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Removed attributes from downloaded files that should not be there #679</li>\n</ul>\n<h2>[1.37.0] - 2019-10-25</h2>\n<h3>Added</h3>\n<ul>\n<li>Sidebar with information regarding the selected building #527</li>\n<li>Sidebar closes when selected buildings is excluded #748</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Animation to show or hide the legend panel #527</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Expandable detail panel in lower left corner #527</li>\n<li>Removed option to maximize/minimize detail panel #527</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Autofocus and label size for focused nodes #747</li>\n<li>Selected buildings stays selected when settings are changed #748</li>\n<li>IllegalStateException when scanning single file in SourceCodeParser #573</li>\n<li>SourceCodeParser places files in the project root correctly into the hierarchy #574</li>\n</ul>\n<h2>[1.36.0] - 2019-10-18</h2>\n<h3>Changed</h3>\n<ul>\n<li>Open and close the ribbonBar sections independently with an updated animation</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Camera is now resetted correctly, when unfocusing #634</li>\n<li>Inputs of Color Range Slider now waits a second before it commits its values #676</li>\n<li>Fixed root folder name in TreeView after new map after loading new map #649</li>\n<li>Increased size of ribbonBar for big screens #644</li>\n<li>File-Extension-Bar will not display excluded nodes anymore #725</li>\n<li>Sanitize input for shelljs #600</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump jacoco from 0.8.1 to 0.8.4 in /analysis</li>\n</ul>\n<h2>[1.35.0] - 2019-10-04</h2>\n<h3>Added</h3>\n<ul>\n<li>Checkbox in global Settings for disabling camera reset, when new map is loaded #685</li>\n<li>Pipe support for SourceCodeParser #716</li>\n<li>Pipe support for SCMLogParser #717</li>\n<li>Pipe support for SonarImporter #715</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Exclude and Hide options are disabled for empty and already existing search patterns #654</li>\n</ul>\n<h2>[1.34.0] - 2019-09-20</h2>\n<h3>Added</h3>\n<ul>\n<li>Tokei Importer #538</li>\n<li>Prominent Notice that we use Sonar-jar #713</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump kotlin-reflect from 1.3.41 to 1.3.50 in /analysis</li>\n<li>Bump json from 20180813 to 20190722 in /analysis</li>\n<li>Bump rxjava from 2.2.9 to 2.2.12 in /analysis</li>\n<li>Bump assertj-core from 3.12.2 to 3.13.2 in /analysis</li>\n<li>Bump sonar-java-plugin from 5.12.1.17771 to 5.14.0.18788 in /analysis</li>\n</ul>\n<h2>[1.33.0] - 2019-09-10</h2>\n<h3>Added</h3>\n<ul>\n<li>Edge Previews (Palm-Tree-Effect) #529</li>\n<li>Dropdown to select Edge Metric, including Edge Counter #529</li>\n<li>Edge Metric settings for Edge Height, Number of Previews &#x26; show only building with Edges #529</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Edge Visualization to better distinguish between incoming and outgoing edges #529</li>\n<li>Distribution metric is by default the same as area metric #689</li>\n<li>MapTreeView below searchBar opens the first level by default #690</li>\n<li>Focus metric search when opening metricChooser #693</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Edge Options in Context menu #529</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>SourceCodeParser now skips custom metrics for files, if the syntax tree cannot be created</li>\n<li>Nodes with color metric equals 0 are colored correct again #677</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>[Security] Bump mixin-deep from 1.3.1 to 1.3.2 in /visualization</li>\n</ul>\n<h2>[1.32.0] - 2019-08-09</h2>\n<h3>Added</h3>\n<ul>\n<li>Search for metrics and an indicator for the highest value in dropdown #575</li>\n<li>Button to enable PresentationMode that uses Flashlight-Hovering #576</li>\n<li>Clarifying information which file is which in the file bar when in delta mode #615</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Replaced Scenario dropdown with button on the left of the metric sections #628</li>\n</ul>\n<h2>[1.31.0] - 2019-08-02</h2>\n<h3>Added</h3>\n<ul>\n<li>New Metric in SourceCodeParser: Maximum-Nesting-Level #659</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Label hight adjustment now matches scaling of map #594</li>\n<li>SCMLogParser now guesses the input file encoding #614</li>\n</ul>\n<h2>[1.30.0] - 2019-07-26</h2>\n<h3>Added</h3>\n<ul>\n<li>New Search Bar #526</li>\n<li>Number of Renames Metric to SCMLogParser #621</li>\n<li>Age In Weeks Metric for SCMLogParser #620</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>ToolBar now shows partially cut-off controls if the window is too small #582</li>\n<li>Position of the legendPanel was moved to the bottom-right corner #633</li>\n<li>RibbonBar only opens the three metric section</li>\n<li>Moved Scenario-select to the right in order to use less space</li>\n<li>Moved loading-gif from ribbonBar to toolBar</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>RibbonBar toggle button</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>FileExtensionBar height to not show a bottom-margin in Chrome</li>\n<li>PointerEvents not being propagated when RibbonBar was extended</li>\n<li>Reduced memory usage of SCMLogParser to avoid OutOfMemory Exception #631</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>[Security] Bump lodash.mergewith from 4.6.1 to 4.6.2 in /visualization</li>\n<li>[Security] Bump lodash from 4.17.11 to 4.17.13 in /visualization</li>\n<li>[Security] Bump fstream from 1.0.11 to 1.0.12 in /visualization</li>\n</ul>\n<h2>[1.29.0] - 2019-07-12</h2>\n<h3>Changed</h3>\n<ul>\n<li>Moved Button to reset the map to the center next to the view-cube #606</li>\n<li>Moved FileExtensionBar #527</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Burger Menu / SideNav #526</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Colors in File-Extension-Bar will be displayed in MS Edge and Standlone now #584</li>\n</ul>\n<h2>[1.28.0] - 2019-06-28</h2>\n<h3>Added</h3>\n<ul>\n<li>Releasing will now remind the developer to manually add the release notes #533</li>\n<li>StructureModifier to remove and move nodes and set root of projects #547 / #181</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>More informative log messages regarding the success of project merging #547</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Release Notes are not generated and added automatically to a release #533</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Margin will now be set correctly depending on whether dynamicMargin is enabled or not #602</li>\n</ul>\n<h2>[1.27.0] - 2019-06-25</h2>\n<h3>Added</h3>\n<ul>\n<li>Automatically generates release notes from changelog and appends it to release #533</li>\n<li>Adds global settings-menu with settings from options panel and weblinks #528</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Moved File Settings from Ribbon Bar to new File Setting Bar #525</li>\n<li>Rename sample file codemap-nodes #587</li>\n<li>Hide checkbox to select white-positive-buildings in delta state #345</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Removes Options panel from sidebar #528</li>\n<li>Removes Weblinks panel from sidebar #528</li>\n<li>Removed URL-parameter info from sidebar #525</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Unary Metric will no longer be auto-selected when a new map is loaded #579</li>\n</ul>\n<h2>[1.26.0] - 2019-06-14</h2>\n<h3>Added</h3>\n<ul>\n<li>FileExtensionBar to show file-distribution of chosen metric #495</li>\n<li>sum icon is now displayed on the left of the metric value #364</li>\n<li>Added Pop-up dialog before downloading file to set filename and see what data will be stored #523</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fix set default ColorRange when resetting color section #560</li>\n</ul>\n<h2>[1.25.1] - 2019-05-30</h2>\n<h3>Added</h3>\n<ul>\n<li>SVN log parser keeps track of renaming of files for metric calculation #542</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Entries with renaming information in SVN logs are attributed to correct file #542</li>\n<li>Unary metric will no longer be removed from the MetricChooser-Dropdown when a folder was excluded or hidden #548</li>\n<li>Changing margin and then file or mode will no longer freeze the application #524</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>[Security] Bump tar from 2.2.1 to 2.2.2 in /visualization</li>\n</ul>\n<h2>[1.25.0] - 2019-05-17</h2>\n<h3>Added</h3>\n<ul>\n<li>Added SonarJava to Source code parser #343</li>\n<li>Added exclude and defaultExclude options to SourceCodeParser #508</li>\n<li>Show loading-gif in ribbonBar when rerendering map</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Using Sonar Plugins for Source code parser, giving the Sonar Metrics #343</li>\n<li>Use debounced settings update instead of throttled</li>\n<li>Filename of downloaded file now contains time #484</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fixed issue with too long line in ccsh.bat #506</li>\n<li>Prevent downloaded files from having multiple Timestamps #484</li>\n<li>Do not show loadingGif when cancelling the fileChooser #498</li>\n<li>Excluding a building now updates the maximum value of colorRange #355</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump angular-material from 1.1.9 to 1.1.14 in /visualization</li>\n<li>[Security] Bump jquery from 3.3.1 to 3.4.0 in /visualization</li>\n</ul>\n<h2>[1.24.0] - 2019-04-23</h2>\n<h3>Removed</h3>\n<ul>\n<li>Settings as URL parameters #470</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fixed issue with trailing slash in URL parameter of SonarImporter #356</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump d3 from 4.13.0 to 5.9.2 in /visualization</li>\n<li>Bump sinon from 4.5.0 to 7.3.1 in /visualization</li>\n</ul>\n<h2>[1.23.0] - 2019-03-22</h2>\n<h3>Added</h3>\n<ul>\n<li>Project Name can be specified for merge filter #394</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Throw a MergeException if project names do not match in MergeFilter #394</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Excluded buildings are no longer used for aggregated metric calculation #352</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump browser-sync-webpack-plugin from 1.2.0 to 2.2.2 in /visualization</li>\n<li>Bump @types/node from 8.10.19 to 11.11.3 in /visualization</li>\n<li>Bump html-webpack-plugin from 2.30.1 to 3.2.0 in /visualization</li>\n<li>Bump load-grunt-tasks from 3.5.2 to 4.0.0 in /visualization #444</li>\n<li>Bump ajv from 5.5.2 to 6.10.0 in /visualization #447</li>\n<li>Bump resolve-url-loader from 2.3.0 to 3.0.1 in /visualization #448</li>\n</ul>\n<h2>[1.22.0] - 2019-03-15</h2>\n<h3>Added</h3>\n<ul>\n<li>Added buttons to select all/none/inversion of revisions/maps in multiple mode #391</li>\n<li>Merge filter can merge all files of folders #392</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fixed bug that code map was not re-loaded when changing from multiple to single revision mode #396</li>\n<li>Fixed missing apiVersion in aggregated map #398</li>\n<li>Input Fields of color sliders adjust width according to content #409</li>\n</ul>\n<h3>Chore</h3>\n<ul>\n<li>Bump nouislider from 11.1.0 to 13.1.1 in /visualization</li>\n<li>Bump typescript from 2.7.2 to 3.3.3333 in /visualization</li>\n<li>Bump @types/d3 from 4.13.0 to 5.7.1 in /visualization</li>\n</ul>\n<h2>[1.21.2] - 2019-02-26</h2>\n<h3>Added</h3>\n<ul>\n<li>When entering Multiple Mode, all Maps/revisions are preselected</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fixing non-existent metric aggregation on root-level when using multiple Files</li>\n</ul>\n<h2>[1.21.1] - 2019-02-22</h2>\n<h3>Added</h3>\n<ul>\n<li>Hovering a node in the map also hovers it in the tree view #351</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fixing sync between treeview hovering and map hovering #351</li>\n<li>Folders can no longer be colored in the CodeMap or TreeView #359</li>\n</ul>\n<h2>[1.21.0] - 2019-02-16</h2>\n<h3>Added</h3>\n<ul>\n<li>Color searched node names green in TreeView #225</li>\n<li>Add option buttons (three dots) in TreeViewSearch to <code>Hide</code> or <code>Exclude</code> matching nodes #298</li>\n<li>Show blacklist entry counter in blacklistPanel header #298</li>\n<li>Option checkbox 'Hide Flattened Buildings' #225</li>\n<li>Hide/Flatten non-searched buildings #225</li>\n<li>Hide/Flatten all buildings, if searchPattern can't find any matching nodes #225</li>\n<li>Show maxValue of each metric in metricChooser select list #204</li>\n<li>Colored color-slider inside the RibbonBar #318</li>\n<li>Option to color positive buildings white #311</li>\n<li>Clicking the ribbonBar section-titles toggles the ribbonBar #324</li>\n<li>View-Cube displayed in top right corner #274</li>\n<li>Adding prettier formatter</li>\n<li>Adapt colorRange when changing colorMetric #330</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Update TreeView filter with search field #225</li>\n<li>Use 'gitignore' style matching in TreeViewSearch #225</li>\n<li>Reorder <code>Focus</code>, <code>Hide</code> and <code>Exclude</code> buttons in nodeContextMenu #298</li>\n<li>Reorder sidebarPanels (BlacklistPanel beneath TreeViewSearchPanel) #298</li>\n<li>Use <code>fa-ban</code>-icon as symbols for blacklistPanel (instead of <code>fa-list</code>) #298</li>\n<li>Use <code>fa-ban</code>-icon as symbols for blacklistType <code>Exclude</code> (instead of <code>fa-times</code>) #298</li>\n<li>Label size keeps readable for large maps or a high distance between camera and map #237</li>\n<li>updated dependencies to fix vulnerabilities</li>\n<li>Scenarios only update settings which exist in Scenario and not all #224</li>\n<li>MergeFilter to merge unique blacklist entries #275</li>\n<li>MergeFilter to only merge unique attributeType entries #275</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>Remove invertHeight checkbox in delta-view #306</li>\n<li>Remove option to add blacklist entries from inside the blacklistPanel #298</li>\n<li>Remove statistic functions in Experimental panel #308</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>CodeMap does not move anymore when navigating in text-fields #307</li>\n<li>Merge blacklist in multipleFile view and convert paths #275</li>\n<li>Show logo in NW.js standalone application #233</li>\n</ul>\n<h2>[1.20.1] - 2018-12-19</h2>\n<p>Fixed release issues.</p>\n<h2>[1.20.0] - 2018-12-19</h2>\n<h3>Added</h3>\n<ul>\n<li>button to unfocus node</li>\n<li>NodeContextMenu: Option to only hide dependent edges</li>\n<li>plop support</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Renaming 'isolate node' to 'focus node'</li>\n<li>Focusing a node does not remove the blacklist items of type Hide</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>NodeContextMenu: Option to 'show all' nodes, which used to unhide all nodes</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Reshow hidden nodes from Treeview or Blacklist</li>\n</ul>\n<h2>[1.19.0] - 2018-11-02</h2>\n<h3>Added</h3>\n<ul>\n<li>Deleted files in delta view use their previous area value in order to be visible #254</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Buildings in the delta view are not colored correctly #253</li>\n<li>Reset Button in RibbonBar to reset 'Invert Colors' #255</li>\n<li>Remove lag of 'Invert Color' checkboxes, when selecting single/delta mode #255</li>\n</ul>\n<h2>[1.18.1] - 2018-10-31</h2>\n<p>Fixed release issues</p>\n<h2>[1.18.0] - 2018-10-29</h2>\n<h3>Added</h3>\n<ul>\n<li>Integration with Jasome through JasomeImporter #245</li>\n<li>URL parameter 'mode' with the values Single, Multiple or Delta</li>\n<li>Blacklist to persist excluded or hidden nodes #205</li>\n<li>Option to exclude nodes in nodeContextMenu #205</li>\n<li>BlacklistPanel in SettingsSidebar to manage blacklist #205</li>\n<li>Save-Button to download current CodeMap #205</li>\n<li>Publishing visualization on Docker Hub #252</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>No longer fat jar of every subcomponent of analysis, baked into ccsh</li>\n<li>Changed simple syserr write to logger call for analysis #243</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>URL parameter 'delta' does not exist anymore</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Show delta of CodeMap when URL parameter mode=delta is set</li>\n</ul>\n<h2>[1.17.0] - 2018-09-28</h2>\n<h3>Changed</h3>\n<ul>\n<li>Invert delta colors moved from color to heigh metric column in ribbon bar #220</li>\n<li>Delta value now as kindOfMap shown #220</li>\n<li>Aggreate maps as multiple rename #220</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Single/delta buttons now correctly activated when delta in ulr shown #220</li>\n</ul>\n<h2>[1.17.0] - 2018-09-21</h2>\n<h3>Added</h3>\n<ul>\n<li>CodeMaatImport for temporal coupling dependencies #172</li>\n<li>EdgeFilter to aggregate edge-attributes as node-attributes #222</li>\n<li>Option to show and hide dependent edges from node-context-menu #218</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>MergeFilter merges edges #172</li>\n</ul>\n<h2>[1.16.2] - 2018-09-10</h2>\n<h3>Fixed</h3>\n<ul>\n<li>missing event in firefox #232</li>\n</ul>\n<h2>[1.16.1] - 2018-08-31</h2>\n<h3>Added</h3>\n<ul>\n<li>gitlab + dotnet manual</li>\n</ul>\n<h2>[1.16.0] - 2018-08-31</h2>\n<h3>Added</h3>\n<ul>\n<li>add the option to add multiple files via url parameter (e.g. ?file=a&#x26;file=b...)</li>\n</ul>\n<h2>[1.15.1] - 2018-08-13</h2>\n<p>Fixed release issues</p>\n<h2>[1.15.0] - 2018-08-13</h2>\n<h3>Added</h3>\n<ul>\n<li>e2e tests are running in CI Environment (headless)</li>\n<li>pupeteer as e2e test framework</li>\n<li>Show names of marked packages in legend</li>\n<li>Added a source code importer that can analyse rloc,mcc for java source code</li>\n<li>keep settings when the user changes a file</li>\n<li>Added option to set white background</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>cypress</li>\n</ul>\n<h2>[1.14.2] - 2018-07-16</h2>\n<h3>Changed</h3>\n<ul>\n<li>Changed folder detail metrics from mean to sum</li>\n</ul>\n<h2>[1.14.1] - 2018-07-13</h2>\n<p>Fixed release issues</p>\n<h2>[1.14.0] - 2018-07-13</h2>\n<h3>Added</h3>\n<ul>\n<li>Added UnderstandImporter to Analysis</li>\n<li>Packages can be highlighted in different colors #152</li>\n<li>Adding a context menu with highlighting colors and convenience methods for the tree view and 3D view #155</li>\n<li>Folders and files to highlight can be described in the cc.json #165</li>\n<li>Dynamic/automatic margin computing de/activated by tick</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Details panel: using the sum of the childrens metrics instead of the mean value</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Display buttons do not trigger map changes #185</li>\n<li>Flickering surfaces when zooming out</li>\n</ul>\n<h2>[1.13.0] - 2018-06-08</h2>\n<h3>Added</h3>\n<ul>\n<li>Layout switcher #141</li>\n<li>Added CrococosmoImporter to Analysis</li>\n<li>Added type, dirs, name to CSVExporter</li>\n<li>Invert height of building checkbox</li>\n<li>Aggregate multiple maps in visualization #110</li>\n<li>Auto Focus selected map part</li>\n<li>Timmer added to applySettings in SettingsService</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Crococosmo xml files will now generate a cc.json file for each version</li>\n<li>Suppressing ARIA warnings</li>\n<li>Simplified gradle structure of analysis part</li>\n<li>Deltas added in the metric quick access panel #138</li>\n<li>Ticks and ResetValue Buttons call to onSettingsChange to avoid applySettings timer</li>\n<li>compacting empty middle packages #150</li>\n<li>Detail panel minimized by default</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>filter by regex shows parent nodes #116</li>\n<li>typo in scss file</li>\n</ul>\n<h2>[1.12.0] - 2018-04-27</h2>\n<h3>Added</h3>\n<ul>\n<li>horizontal quick access metric chooser</li>\n<li>Link behind filepath in detailPanel #84</li>\n<li>Double click event-handler on Buildings #84</li>\n<li>Detail Panel can be minimized and maximized</li>\n<li>Settings option to minimize Detail Panel</li>\n<li>cypress as an e2e test runner</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>metric details from legend</li>\n<li>metric chooser from settings panel</li>\n</ul>\n<h2>[1.11.2] - 2018-04-13</h2>\n<h3>Fixed</h3>\n<ul>\n<li>a sonar importer bug which prevented the importer to fetch the last page #122</li>\n</ul>\n<h2>[1.11.1] - 2018-04-11</h2>\n<p>Fixed release issues</p>\n<h2>[1.11.0] - 2018-04-11</h2>\n<h3>Added</h3>\n<ul>\n<li>SASS support</li>\n<li>simple regex filter</li>\n<li>Reset Button</li>\n<li>Dialog Service replaces console log calls and window.alert calls</li>\n<li>linking tree view and map hover</li>\n<li>auto fit scene button</li>\n<li>anugularJS material</li>\n<li>Scenarios are now filtered by compatibility for the given map</li>\n<li>Link in visualization #84</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>materialize-css</li>\n<li>grunt</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>less flickering and artifacts</li>\n</ul>\n<h2>[1.10.0] - 2018-03-22</h2>\n<h3>Changed</h3>\n<ul>\n<li>Clean up UI #86</li>\n<li>Updated analysis dependencies</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Delta View shows Deltas of itself as non-trivial if nodes have same name #89: Compare deltas by path not name</li>\n<li>Delta calculation performance boost #91</li>\n<li>Problems when intermediate nodes missed metrics #92</li>\n<li>removed unnecessary calculations</li>\n<li>removed bug in SonarImporter that slowed up performance and missed out multiple metrics</li>\n<li>minor bugs</li>\n</ul>\n<h2>[1.9.3] - 2018-02-23</h2>\n<h3>Changed</h3>\n<ul>\n<li>sorting treeview by folders and names</li>\n</ul>\n<h2>[1.9.2] - 2018-02-20</h2>\n<h3>Added</h3>\n<ul>\n<li>added preliminary CSVExporter for visualisation data</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>padding rendering</li>\n<li>minimal building height is 1 to prevent clipping issues</li>\n<li>fallback values for visualization when no metric is available (area = 1, height = 1, color = grey). Data in data structure will not be changed.</li>\n</ul>\n<h2>[1.9.1] - 2018-02-20</h2>\n<h3>Fixed</h3>\n<ul>\n<li>detail panel bug fix</li>\n</ul>\n<h2>[1.9.0] - 2018-02-20</h2>\n<h3>Changed</h3>\n<ul>\n<li>moved to unscoped npm packages</li>\n</ul>\n<h2>[1.8.2] - 2018-02-20</h2>\n<h3>Changed</h3>\n<ul>\n<li>detail panel background is white now. better visibility</li>\n</ul>\n<h2>[1.8.1] - 2018-02-20</h2>\n<h3>Changed</h3>\n<ul>\n<li>revision chooser moved to settings panel and uses now understandable dropdowns instead of links. Part of the #82 proposals</li>\n</ul>\n<h2>[1.8.0] - 2018-02-20</h2>\n<h3>Added</h3>\n<ul>\n<li>Experimental dependency support</li>\n<li>loading indicator</li>\n<li>file path to detail panel</li>\n<li>collapsible tree view and visibility/isolation per node toggles</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>added a ray-aabb intersection test before precise testing. Less time is spent in intersection methods.</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>fixed a minor bug</li>\n<li>canvas mouse event listener are now limited to the canvas dom element. UI events will not trigger the canvas listeners anymore</li>\n<li>canvas mouse events distinguish now between click and drag. Dragging does not reset selection anymore</li>\n<li>slider input #64</li>\n<li>rz slider initialization bug</li>\n<li>increasing test coverage</li>\n<li>deltas where calculated on map loading even though, they were disabled</li>\n</ul>\n<h2>[1.7.2] - 2018-02-02</h2>\n<h3>Fixed</h3>\n<ul>\n<li>url to homepage</li>\n<li>analysis package</li>\n</ul>\n<h2>[1.7.1] - 2018-02-02</h2>\n<p>Fixed release issues</p>\n<h2>[1.7.0] - 2018-02-02</h2>\n<h3>Changed</h3>\n<ul>\n<li>npm pachage scoped to @maibornwolff</li>\n<li>Defined further scenarios via json file</li>\n<li>Added description for metrics and scenarios</li>\n<li>using fixed point values in detail panel (ui) to truncate infinite or long decimals</li>\n<li>folders now use the mean attributes of their buildings(leaves)</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Bugfix: detail panel should be cleared before setting new details else old values may survive</li>\n</ul>\n<h2>[1.6.7] - 2018-02-01</h2>\n<p>Fixed release issues</p>\n<h2>[1.6.6] - 2018-02-01</h2>\n<h3>Added</h3>\n<ul>\n<li>added anonymous git log generator anongit</li>\n<li>browser demo shows codecharta-visualization sonar analysis</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>rewrote command line interface</li>\n<li>linking ccsh to bin/ccsh will be deleted later</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>No underscore for scenarios in tooltips #71</li>\n</ul>\n<h2>[1.6.5] - 2018-01-30</h2>\n<p>Fixed release issues</p>\n<h2>[1.6.4] - 2018-01-30</h2>\n<h3>Fixed</h3>\n<ul>\n<li>fixed broken SonarImporter due to jdk9 migration</li>\n</ul>\n<h2>[1.6.3] - 2018-01-26</h2>\n<h3>Added</h3>\n<ul>\n<li>added npm publish for analysis</li>\n<li>simple release script for automatic changelog updates, commits, tags, version bumps</li>\n</ul>\n<h2>[1.6.2] - 2018-01-25</h2>\n<h3>Added</h3>\n<ul>\n<li>added support for git log --raw and git log --numstat --raw</li>\n<li>added support for git log --numstat and codechurn</li>\n<li>added support for renames in SCMLogParser for git log --name-status</li>\n<li>added support for renames in SCMLogParser for git log --numstat, git log --raw and git log --numstat --raw</li>\n<li>added new SCM experimental metrics range_of_weeks_with_commits and successive_weeks_of_commits</li>\n<li>the file origin of a node is displayed in the details now</li>\n<li>sonarqube analysis on CI build</li>\n<li>npm publish support in visualization</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Deltas are no longer experimental</li>\n<li>two selected delta maps now merge their nodes correctly. The map where\na node was missing get's a copy of this node with metrics=0.\nFile additions/deletions are therefore only visible when areaMetric is\nunary and deltas are activated.</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>delta display bug for heights</li>\n<li>going back from delta view now correctly removes deltas from node data</li>\n<li>Delta shown although not in delta mode #60</li>\n<li>Allow inversion of delta colors #57</li>\n<li>npm binary error</li>\n</ul>\n<h2>[1.5.2] - 2018-01-04</h2>\n<h3>Changed</h3>\n<ul>\n<li>scaling slider now has steps of 0.1. This allows the user to select precise values like 2.0</li>\n<li>updated jdk to jdk9</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Opening the same file a second time does not work #53</li>\n<li>added missing require declaration</li>\n<li>added glsl loader in testing environment</li>\n<li>Native Application support is bugged while building in Travis CI #48</li>\n</ul>\n<h2>[1.5.1] - 2017-11-14</h2>\n<h3>Added</h3>\n<ul>\n<li>command line parameter to toggle \"authors\" attribute in SCMLogParser</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>when passing a file through the \"file\" parameter in the URL, the map now renders correctly</li>\n</ul>\n<h2>[1.5.0] - 2017-10-24</h2>\n<h3>Added</h3>\n<ul>\n<li>experimental delta functionality</li>\n<li>loading multiple maps</li>\n<li>experimental margin slider</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>faster rendering</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>nwjs packages and native apps due to a bug</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>using color metric instead of height metric for color range slider ceil</li>\n</ul>\n<h2>[1.4.0] - 2017-09-14</h2>\n<h3>Added</h3>\n<ul>\n<li>Typescript support</li>\n<li>Browsersync</li>\n<li>added advanced merging strategy \"leaf\" in MergeFilter</li>\n<li>advanced merging with restructuring</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Browserify replaced with Webpack</li>\n<li>Better debugging</li>\n<li>Karma instead of Mocha</li>\n</ul>\n<h2>[1.3.2] - 2017-08-18</h2>\n<h3>Added</h3>\n<ul>\n<li>add slider controls for color thresholds #19</li>\n<li>Added additional structuring in SonarImporter for multi-module projects</li>\n<li>button to generate current url parameters</li>\n<li>camera position is now a setting (e.g. in scenarios or url parameters)</li>\n<li>margin slider: make it easier to find out to which package/folder a class belongs #20</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>better url parameter resolution (nested parameters are handled correctly)</li>\n<li>changed hover color. Allows better distinction between hover and select</li>\n</ul>\n<h3>Removed</h3>\n<ul>\n<li>obsolete helper grid</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>changing display or color settings resets scaling #18</li>\n<li>scenario description #32</li>\n<li>Scaling should not scale the labels #35</li>\n</ul>\n<h2>[1.3.1] - 2017-07-05</h2>\n<h3>Fixed</h3>\n<ul>\n<li>Prevented override of URL-parameters by default scenario</li>\n</ul>\n<h2>[1.3.0] - 2017-07-05</h2>\n<h3>Added</h3>\n<ul>\n<li>Adding simple merge functionality for multiple json files</li>\n<li>Added CSVImporter</li>\n<li>Added Translation for SonarQube metrics</li>\n<li>Added descriptions for metrics</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Changed uppercase metrics, e.g. RLOC, to lowercase metrics</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Simple cc.json does not display anything #17</li>\n</ul>\n<h2>[1.2.0] - 2017-06-19</h2>\n<h3>Added</h3>\n<ul>\n<li>Adding Labels and UI</li>\n<li>Support for links to source page of SonarQube in sonarimporter</li>\n<li>Added SCMLogParser</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>GitHub Issue: legend is wrong #21</li>\n</ul>\n<h2>[1.1.5] - 2017-05-31</h2>\n<h3>Fixed</h3>\n<ul>\n<li>Wrong version numbers in analysis part</li>\n</ul>\n<h2>[1.1.4] - 2017-05-26</h2>\n<h3>Added</h3>\n<ul>\n<li>Scenarios and default scenario</li>\n<li>Translation API for Metrics</li>\n<li>Metric tooltips in dropdown</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>GitHub Issue: Sonarimporter crashes with null pointer exception when there is a component without path. #13</li>\n</ul>\n<h2>[1.1.3] - 2017-05-01</h2>\n<h3>Added</h3>\n<ul>\n<li>Support for SonarQube Measures-API</li>\n<li>Error logging for sonarqube errors</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Standard Sonar metric is now complexity,ncloc,functions,duplicated_lines,classes,blocker_violations,generated_lines,bugs,commented_out_code_lines,lines,violations,comment_lines,duplicated_blocks</li>\n</ul>\n<h2>[1.1.2] - 2017-04-28</h2>\n<h3>Added</h3>\n<ul>\n<li>Translation API for Metrics</li>\n</ul>\n<h2>[1.1.1] - 2017-04-07</h2>\n<h3>Fixed</h3>\n<ul>\n<li>GitHub Issue: Flickering surfaces #3</li>\n<li>GitHub Issue: Unable to install due to readlink error on macOS #4</li>\n</ul>\n<h2>[1.1.0] - 2017-03-27</h2>\n<h3>Added</h3>\n<ul>\n<li>SourceMonitorImporter for importing projects from SourceMonitor.</li>\n</ul>\n<h2>[1.0.0] - 2017-03-17</h2>\n<h3>Added</h3>\n<ul>\n<li>SonarImporter for importing projects from SonarQube.</li>\n<li>ValidationTool for validating an existing json file.</li>\n</ul>\n";
242742
243069
  // Exports
242743
243070
  module.exports = code;
242744
243071
 
@@ -280129,6 +280456,36 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
280129
280456
 
280130
280457
  /***/ }),
280131
280458
 
280459
+ /***/ "./app/codeCharta/ui/dialog/dialog.changelog.component.scss":
280460
+ /*!******************************************************************!*\
280461
+ !*** ./app/codeCharta/ui/dialog/dialog.changelog.component.scss ***!
280462
+ \******************************************************************/
280463
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
280464
+
280465
+ "use strict";
280466
+ __webpack_require__.r(__webpack_exports__);
280467
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
280468
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
280469
+ /* harmony export */ });
280470
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
280471
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
280472
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_dialog_changelog_component_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./dialog.changelog.component.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/dialog/dialog.changelog.component.scss");
280473
+
280474
+
280475
+
280476
+ var options = {};
280477
+
280478
+ options.insert = "head";
280479
+ options.singleton = false;
280480
+
280481
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_dialog_changelog_component_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options);
280482
+
280483
+
280484
+
280485
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_dialog_changelog_component_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
280486
+
280487
+ /***/ }),
280488
+
280132
280489
  /***/ "./app/codeCharta/ui/dialog/dialog.component.scss":
280133
280490
  /*!********************************************************!*\
280134
280491
  !*** ./app/codeCharta/ui/dialog/dialog.component.scss ***!
@@ -280729,10 +281086,10 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
280729
281086
 
280730
281087
  /***/ }),
280731
281088
 
280732
- /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.scss":
280733
- /*!******************************************************************************************************!*\
280734
- !*** ./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.scss ***!
280735
- \******************************************************************************************************/
281089
+ /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.scss":
281090
+ /*!**************************************************************************************!*\
281091
+ !*** ./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.scss ***!
281092
+ \**************************************************************************************/
280736
281093
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
280737
281094
 
280738
281095
  "use strict";
@@ -280742,7 +281099,7 @@ __webpack_require__.r(__webpack_exports__);
280742
281099
  /* harmony export */ });
280743
281100
  /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
280744
281101
  /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
280745
- /* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_markFolderColorPicker_component_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/sass-loader/dist/cjs.js!./markFolderColorPicker.component.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.scss");
281102
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_markFolderRow_component_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/sass-loader/dist/cjs.js!./markFolderRow.component.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.scss");
280746
281103
 
280747
281104
 
280748
281105
 
@@ -280751,11 +281108,11 @@ var options = {};
280751
281108
  options.insert = "head";
280752
281109
  options.singleton = false;
280753
281110
 
280754
- var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_markFolderColorPicker_component_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options);
281111
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_markFolderRow_component_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options);
280755
281112
 
280756
281113
 
280757
281114
 
280758
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_markFolderColorPicker_component_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
281115
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_markFolderRow_component_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
280759
281116
 
280760
281117
  /***/ }),
280761
281118
 
@@ -341929,7 +342286,7 @@ module.exports = JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#
341929
342286
  /***/ ((module) => {
341930
342287
 
341931
342288
  "use strict";
341932
- module.exports = JSON.parse('{"author":"MaibornWolff GmbH <dist_intern_codecharta@maibornwolff.de>","homepage":"https://maibornwolff.github.io/codecharta/","bugs":{"url":"https://github.com/MaibornWolff/codecharta/issues","email":"dist_intern_codecharta@maibornwolff.de"},"repository":{"type":"git","url":"https://github.com/MaibornWolff/codecharta.git"},"name":"codecharta-visualization","version":"1.87.1","engines":{"node":">=16"},"description":"MaibornWolff CodeCharta","files":["dist/webpack","app","conf","Dockerfile","LICENSE.md","package.json","package-lock.json","README.md","tsconfig.json","cli.js"],"codecharta":{"apiVersion":"1.3"},"window":{"icon":"app/icon.png","toolbar":true,"frame":true,"width":1024,"height":768},"main":"dist/webpack/index.html","build":{"nwVersion":"0.53.0","output":"./dist/packages/","outputPattern":"codecharta-visualization-${VERSION}-${PLATFORM}-${ARCH}","files":"./dist/webpack/**/*","packed":true,"targets":["zip"],"appId":"io.github.maibornwolff.codecharta","win":{"productName":"codecharta-visualization","companyName":"MaibornWolff GmbH","icon":"app/assets/icon.ico"},"mac":{"icon":"app/assets/icon.icns","displayName":"codecharta-visualization"}},"browserslist":["last 2 versions","not IE 11"],"scripts":{"start":"nw .","build":"webpack --config ./conf/webpack.config.js --env STANDALONE=true --env DEV=false","build:web":"webpack --config ./conf/webpack.config.js --env STANDALONE=false --env DEV=false","dev":"webpack serve --config ./conf/webpack.config.js --env STANDALONE=false --env DEV=true","test":"jest --config ./jest.config.json .*\\\\.spec\\\\.ts --env=jsdom","test:auto":"npm test -- --watch","test:autoNoCoverage":"npm run test:auto -- --coverage false","test:updateSnaps":"npm test -- --updateSnapshot","e2e":"cross-env TEST_TYPE=\\"e2e\\" jest --config ./jest.config.json .*\\\\.e2e\\\\.ts --coverage false","e2e:auto":"npm run e2e -- --watch","e2e:ci":"npm run e2e -- --runInBand","package":"node -e \'fs.rmSync(\\"dist/packages\\", { recursive: true, force: true })\' && build --concurrent --tasks win-x86,win-x64,linux-x86,linux-x64,mac-x64 --mirror https://dl.nwjs.io/ . && bestzip ./dist/packages/codecharta-visualization-$npm_package_version-web.zip ./dist/webpack","lint":"eslint \\"app/**/*.ts\\"","lint:fix":"npm run lint -- --fix","precommit":"lint-staged","schema:generate":"typescript-json-schema ./app/codeCharta/codeCharta.model.ts ExportCCFile --required --topRef --out app/codeCharta/util/generatedSchema.json"},"lint-staged":{"app/**/*.ts":"eslint --fix"},"bin":{"codecharta-visualization":"cli.js"},"license":"BSD-3-Clause","dependencies":{"@angular/animations":"^12.2.12","@angular/cdk":"^12.2.12","@angular/common":"^12.2.12","@angular/compiler":"^12.2.12","@angular/core":"^12.2.12","@angular/material":"^12.2.12","@angular/platform-browser":"^12.2.12","@angular/platform-browser-dynamic":"^12.2.12","@angular/upgrade":"^12.2.12","@types/webpack":"^5.28.0","ajv":"^6.12.6","angular":"^1.8.2","angular-animate":"^1.8.2","angular-aria":"^1.8.2","angular-material":"^1.2.2","angular-messages":"^1.8.2","angular-mocks":"^1.8.2","angular-sanitize":"^1.8.2","angularjs-nouislider":"^14.1.3","angularjs-slider":"^7.0.0","babel-plugin-transform-es2015-modules-commonjs":"^6.26.2","browserify-zlib":"^0.2.0","changelog-parser":"^2.8.0","color-convert":"^2.0.1","core-js":"^3.15.2","d3-hierarchy":"^2.0.0","font-awesome":"^4.7.0","hotkeys-js":"^3.8.2","ignore":"^5.1.8","klona":"^2.0.4","lodash.camelcase":"^4.3.0","lodash.debounce":"^4.0.8","lodash.isequal":"^4.5.0","lodash.throttle":"^4.1.1","material-icons":"^1.10.4","md5":"^2.3.0","ngx-color":"^7.3.3","nouislider":"^15.0.0","nw":"^0.58.0","open":"^8.0.6","percent-round":"^2.2.1","redux":"^4.0.5","remark":"^13.0.0","remark-html":"^13.0.1","remark-loader":"^4.0.0","rxjs":"^7.5.1","shelljs":"^0.8.4","three":"^0.126.1","three-orbit-controls":"^82.1.0","typescript-json-schema":"^0.52.0","zone.js":"^0.11.4"},"devDependencies":{"@babel/cli":"^7.13.14","@babel/core":"^7.13.15","@babel/preset-env":"^7.13.15","@babel/preset-typescript":"^7.13.0","@testing-library/angular":"^10.11.0","@testing-library/user-event":"^13.5.0","@types/angular":"^1.8.1","@types/angular-mocks":"^1.7.0","@types/color-convert":"^2.0.0","@types/d3-hierarchy":"^3.0.2","@types/expect-puppeteer":"^4.4.5","@types/jest":"^26.0.22","@types/jest-environment-puppeteer":"^4.4.1","@types/lodash":"^4.14.168","@types/node":"^16.0.0","@types/puppeteer":"^5.4.3","@types/three":"^0.126.0","@typescript-eslint/eslint-plugin":"^5.0.0","@typescript-eslint/parser":"^5.0.0","babel-loader":"^8.2.2","babel-plugin-angularjs-annotate":"^0.10.0","bestzip":"^2.2.0","canvas":"^2.7.0","clean-webpack-plugin":"^4.0.0","cross-env":"^7.0.3","css-loader":"^6.0.0","eslint":"^8.0.0","eslint-config-prettier":"^8.2.0","eslint-plugin-unicorn":"^40.0.0","file-loader":"^6.2.0","html-loader":"^1.1.0","html-loader-jest":"^0.2.1","html-webpack-plugin":"^5.3.1","jest":"^26.6.3","jest-preset-angular":"^9.0.7","jest-puppeteer":"^6.0.0","jest-serializer-html":"^7.0.0","lint-staged":"^11.0.0","makeshift":"^1.1.0","node-polyfill-webpack-plugin":"^1.1.4","node-sass":"^6.0.1","nwjs-builder-phoenix":"^1.15.0","puppeteer":"^10.4.0","sass-loader":"^12.0.0","style-loader":"^2.0.0","ts-jest":"^26.5.5","ts-loader":"^9.0.0","typescript":"^4.3.5","webpack":"^5.33.2","webpack-cli":"^4.7.2","webpack-dev-server":"^3.11.2","webpack-glsl-loader":"^1.0.1"},"optionalDependencies":{"7zip-bin-linux":"^1.3.1","7zip-bin-mac":"^1.0.1","7zip-bin-win":"^2.2.0"}}');
342289
+ module.exports = JSON.parse('{"author":"MaibornWolff GmbH <dist_intern_codecharta@maibornwolff.de>","homepage":"https://maibornwolff.github.io/codecharta/","bugs":{"url":"https://github.com/MaibornWolff/codecharta/issues","email":"dist_intern_codecharta@maibornwolff.de"},"repository":{"type":"git","url":"https://github.com/MaibornWolff/codecharta.git"},"name":"codecharta-visualization","version":"1.88.0","engines":{"node":">=16"},"description":"MaibornWolff CodeCharta","files":["dist/webpack","app","conf","Dockerfile","LICENSE.md","package.json","package-lock.json","README.md","tsconfig.json","cli.js"],"codecharta":{"apiVersion":"1.3"},"window":{"icon":"app/icon.png","toolbar":true,"frame":true,"width":1024,"height":768},"main":"dist/webpack/index.html","build":{"nwVersion":"0.53.0","output":"./dist/packages/","outputPattern":"codecharta-visualization-${VERSION}-${PLATFORM}-${ARCH}","files":"./dist/webpack/**/*","packed":true,"targets":["zip"],"appId":"io.github.maibornwolff.codecharta","win":{"productName":"codecharta-visualization","companyName":"MaibornWolff GmbH","icon":"app/assets/icon.ico"},"mac":{"icon":"app/assets/icon.icns","displayName":"codecharta-visualization"}},"browserslist":["last 2 versions","not IE 11"],"scripts":{"start":"nw .","build":"webpack --config ./conf/webpack.config.js --env STANDALONE=true --env DEV=false","build:web":"webpack --config ./conf/webpack.config.js --env STANDALONE=false --env DEV=false","dev":"webpack serve --config ./conf/webpack.config.js --env STANDALONE=false --env DEV=true","test":"jest --config ./jest.config.json .*\\\\.spec\\\\.ts --env=jsdom","test:auto":"npm test -- --watch","test:autoNoCoverage":"npm run test:auto -- --coverage false","test:updateSnaps":"npm test -- --updateSnapshot","e2e":"cross-env TEST_TYPE=\\"e2e\\" jest --config ./jest.config.json .*\\\\.e2e\\\\.ts --coverage false","e2e:auto":"npm run e2e -- --watch","e2e:ci":"npm run e2e -- --runInBand","package":"node -e \'fs.rmSync(\\"dist/packages\\", { recursive: true, force: true })\' && build --concurrent --tasks win-x86,win-x64,linux-x86,linux-x64,mac-x64 --mirror https://dl.nwjs.io/ . && bestzip ./dist/packages/codecharta-visualization-$npm_package_version-web.zip ./dist/webpack","lint":"eslint \\"app/**/*.ts\\"","lint:fix":"npm run lint -- --fix","precommit":"lint-staged","schema:generate":"typescript-json-schema ./app/codeCharta/codeCharta.model.ts ExportCCFile --required --topRef --out app/codeCharta/util/generatedSchema.json"},"lint-staged":{"app/**/*.ts":"eslint --fix"},"bin":{"codecharta-visualization":"cli.js"},"license":"BSD-3-Clause","dependencies":{"@angular/animations":"^12.2.12","@angular/cdk":"^12.2.12","@angular/common":"^12.2.12","@angular/compiler":"^12.2.12","@angular/core":"^12.2.12","@angular/material":"^12.2.12","@angular/platform-browser":"^12.2.12","@angular/platform-browser-dynamic":"^12.2.12","@angular/upgrade":"^12.2.12","@types/webpack":"^5.28.0","ajv":"^6.12.6","angular":"^1.8.2","angular-animate":"^1.8.2","angular-aria":"^1.8.2","angular-material":"^1.2.2","angular-messages":"^1.8.2","angular-mocks":"^1.8.2","angular-sanitize":"^1.8.2","angularjs-nouislider":"^14.1.3","angularjs-slider":"^7.0.0","babel-plugin-transform-es2015-modules-commonjs":"^6.26.2","browserify-zlib":"^0.2.0","changelog-parser":"^2.8.0","color-convert":"^2.0.1","core-js":"^3.15.2","d3-hierarchy":"^2.0.0","font-awesome":"^4.7.0","hotkeys-js":"^3.8.2","ignore":"^5.1.8","klona":"^2.0.4","lodash.camelcase":"^4.3.0","lodash.debounce":"^4.0.8","lodash.isequal":"^4.5.0","lodash.throttle":"^4.1.1","material-icons":"^1.10.4","md5":"^2.3.0","ngx-color":"^7.3.3","nouislider":"^15.0.0","nw":"^0.58.0","open":"^8.0.6","percent-round":"^2.2.1","redux":"^4.0.5","remark":"^13.0.0","remark-html":"^13.0.1","remark-loader":"^4.0.0","rxjs":"^7.5.1","shelljs":"^0.8.4","three":"^0.126.1","three-orbit-controls":"^82.1.0","typescript-json-schema":"^0.52.0","zone.js":"^0.11.4"},"devDependencies":{"@babel/cli":"^7.13.14","@babel/core":"^7.13.15","@babel/preset-env":"^7.13.15","@babel/preset-typescript":"^7.13.0","@testing-library/angular":"^10.11.0","@testing-library/user-event":"^13.5.0","@types/angular":"^1.8.1","@types/angular-mocks":"^1.7.0","@types/color-convert":"^2.0.0","@types/d3-hierarchy":"^3.0.2","@types/expect-puppeteer":"^4.4.5","@types/jest":"^26.0.22","@types/jest-environment-puppeteer":"^4.4.1","@types/lodash":"^4.14.168","@types/node":"^16.0.0","@types/puppeteer":"^5.4.3","@types/three":"^0.126.0","@typescript-eslint/eslint-plugin":"^5.0.0","@typescript-eslint/parser":"^5.0.0","babel-loader":"^8.2.2","babel-plugin-angularjs-annotate":"^0.10.0","bestzip":"^2.2.0","canvas":"^2.7.0","clean-webpack-plugin":"^4.0.0","cross-env":"^7.0.3","css-loader":"^6.0.0","eslint":"^8.0.0","eslint-config-prettier":"^8.2.0","eslint-plugin-unicorn":"^40.0.0","file-loader":"^6.2.0","html-loader":"^1.1.0","html-loader-jest":"^0.2.1","html-webpack-plugin":"^5.3.1","jest":"^26.6.3","jest-preset-angular":"^9.0.7","jest-puppeteer":"^6.0.0","jest-serializer-html":"^7.0.0","lint-staged":"^11.0.0","makeshift":"^1.1.0","node-polyfill-webpack-plugin":"^1.1.4","node-sass":"^6.0.1","nwjs-builder-phoenix":"^1.15.0","puppeteer":"^10.4.0","sass-loader":"^12.0.0","style-loader":"^2.0.0","ts-jest":"^26.5.5","ts-loader":"^9.0.0","typescript":"^4.3.5","webpack":"^5.33.2","webpack-cli":"^4.7.2","webpack-dev-server":"^3.11.2","webpack-glsl-loader":"^1.0.1"},"optionalDependencies":{"7zip-bin-linux":"^1.3.1","7zip-bin-mac":"^1.0.1","7zip-bin-win":"^2.2.0"}}');
341933
342290
 
341934
342291
  /***/ })
341935
342292
 
@@ -342250,27 +342607,32 @@ __webpack_require__.r(__webpack_exports__);
342250
342607
  /* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app */ "./app/app.ts");
342251
342608
  /* harmony import */ var zone_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zone.js */ "./node_modules/zone.js/fesm2015/zone.js");
342252
342609
  /* harmony import */ var zone_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(zone_js__WEBPACK_IMPORTED_MODULE_1__);
342253
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
342254
- /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/fesm2015/platform-browser.js");
342255
- /* harmony import */ var _angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @angular/platform-browser-dynamic */ "./node_modules/@angular/platform-browser-dynamic/fesm2015/platform-browser-dynamic.js");
342256
- /* harmony import */ var _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @angular/upgrade/static */ "./node_modules/@angular/upgrade/fesm2015/static.js");
342257
- /* harmony import */ var _codeCharta_ui_mapTreeView_mapTreeView_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./codeCharta/ui/mapTreeView/mapTreeView.module */ "./app/codeCharta/ui/mapTreeView/mapTreeView.module.ts");
342258
- /* harmony import */ var _codeCharta_ui_mapTreeView_mapTreeView_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./codeCharta/ui/mapTreeView/mapTreeView.component */ "./app/codeCharta/ui/mapTreeView/mapTreeView.component.ts");
342259
- /* harmony import */ var _codeCharta_ui_matchingFilesCounter_matchingFilesCounter_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./codeCharta/ui/matchingFilesCounter/matchingFilesCounter.component */ "./app/codeCharta/ui/matchingFilesCounter/matchingFilesCounter.component.ts");
342260
- /* harmony import */ var _codeCharta_ui_matchingFilesCounter_matchingFilesCounter_module__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./codeCharta/ui/matchingFilesCounter/matchingFilesCounter.module */ "./app/codeCharta/ui/matchingFilesCounter/matchingFilesCounter.module.ts");
342261
- /* harmony import */ var _codeCharta_ui_attributeSideBar_attributeSideBar_module__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./codeCharta/ui/attributeSideBar/attributeSideBar.module */ "./app/codeCharta/ui/attributeSideBar/attributeSideBar.module.ts");
342262
- /* harmony import */ var _codeCharta_ui_attributeSideBar_attributeSideBar_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./codeCharta/ui/attributeSideBar/attributeSideBar.component */ "./app/codeCharta/ui/attributeSideBar/attributeSideBar.component.ts");
342263
- /* harmony import */ var _codeCharta_ui_export3DMapButton_export3DMapButton_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./codeCharta/ui/export3DMapButton/export3DMapButton.component */ "./app/codeCharta/ui/export3DMapButton/export3DMapButton.component.ts");
342264
- /* harmony import */ var _codeCharta_ui_export3DMapButton_export3DMapButton_module__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./codeCharta/ui/export3DMapButton/export3DMapButton.module */ "./app/codeCharta/ui/export3DMapButton/export3DMapButton.module.ts");
342265
- /* harmony import */ var _codeCharta_ui_labelledColorPicker_labelledColorPicker_component__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./codeCharta/ui/labelledColorPicker/labelledColorPicker.component */ "./app/codeCharta/ui/labelledColorPicker/labelledColorPicker.component.ts");
342266
- /* harmony import */ var _codeCharta_ui_legendPanel_legendPanel_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./codeCharta/ui/legendPanel/legendPanel.component */ "./app/codeCharta/ui/legendPanel/legendPanel.component.ts");
342267
- /* harmony import */ var _codeCharta_ui_legendPanel_legendPanel_module__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./codeCharta/ui/legendPanel/legendPanel.module */ "./app/codeCharta/ui/legendPanel/legendPanel.module.ts");
342268
- /* harmony import */ var _codeCharta_ui_colorPickerForMapColor_colorPickerForMapColor_module__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.module */ "./app/codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.module.ts");
342269
- /* harmony import */ var _codeCharta_ui_colorPickerForMapColor_colorPickerForMapColor_component__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.component */ "./app/codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.component.ts");
342270
- /* harmony import */ var _codeCharta_ui_nodeContextMenu_markFolderColorPicker_markFolderColorPicker_module__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.module */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.module.ts");
342271
- /* harmony import */ var _codeCharta_ui_nodeContextMenu_markFolderColorPicker_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts");
342272
- /* harmony import */ var _codeCharta_ui_nodeContextMenu_focusButtons_focusButtons_module__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.module */ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.module.ts");
342273
- /* harmony import */ var _codeCharta_ui_nodeContextMenu_focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component */ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.ts");
342610
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
342611
+ /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/fesm2015/platform-browser.js");
342612
+ /* harmony import */ var _angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @angular/platform-browser-dynamic */ "./node_modules/@angular/platform-browser-dynamic/fesm2015/platform-browser-dynamic.js");
342613
+ /* harmony import */ var _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @angular/upgrade/static */ "./node_modules/@angular/upgrade/fesm2015/static.js");
342614
+ /* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm2015/forms.js");
342615
+ /* harmony import */ var _material_material_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./material/material.module */ "./app/material/material.module.ts");
342616
+ /* harmony import */ var _codeCharta_ui_mapTreeView_mapTreeView_module__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./codeCharta/ui/mapTreeView/mapTreeView.module */ "./app/codeCharta/ui/mapTreeView/mapTreeView.module.ts");
342617
+ /* harmony import */ var _codeCharta_ui_mapTreeView_mapTreeView_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./codeCharta/ui/mapTreeView/mapTreeView.component */ "./app/codeCharta/ui/mapTreeView/mapTreeView.component.ts");
342618
+ /* harmony import */ var _codeCharta_ui_matchingFilesCounter_matchingFilesCounter_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./codeCharta/ui/matchingFilesCounter/matchingFilesCounter.component */ "./app/codeCharta/ui/matchingFilesCounter/matchingFilesCounter.component.ts");
342619
+ /* harmony import */ var _codeCharta_ui_matchingFilesCounter_matchingFilesCounter_module__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./codeCharta/ui/matchingFilesCounter/matchingFilesCounter.module */ "./app/codeCharta/ui/matchingFilesCounter/matchingFilesCounter.module.ts");
342620
+ /* harmony import */ var _codeCharta_ui_attributeSideBar_attributeSideBar_module__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./codeCharta/ui/attributeSideBar/attributeSideBar.module */ "./app/codeCharta/ui/attributeSideBar/attributeSideBar.module.ts");
342621
+ /* harmony import */ var _codeCharta_ui_attributeSideBar_attributeSideBar_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./codeCharta/ui/attributeSideBar/attributeSideBar.component */ "./app/codeCharta/ui/attributeSideBar/attributeSideBar.component.ts");
342622
+ /* harmony import */ var _codeCharta_ui_export3DMapButton_export3DMapButton_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./codeCharta/ui/export3DMapButton/export3DMapButton.component */ "./app/codeCharta/ui/export3DMapButton/export3DMapButton.component.ts");
342623
+ /* harmony import */ var _codeCharta_ui_export3DMapButton_export3DMapButton_module__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./codeCharta/ui/export3DMapButton/export3DMapButton.module */ "./app/codeCharta/ui/export3DMapButton/export3DMapButton.module.ts");
342624
+ /* harmony import */ var _codeCharta_ui_labelledColorPicker_labelledColorPicker_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./codeCharta/ui/labelledColorPicker/labelledColorPicker.component */ "./app/codeCharta/ui/labelledColorPicker/labelledColorPicker.component.ts");
342625
+ /* harmony import */ var _codeCharta_ui_legendPanel_legendPanel_component__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./codeCharta/ui/legendPanel/legendPanel.component */ "./app/codeCharta/ui/legendPanel/legendPanel.component.ts");
342626
+ /* harmony import */ var _codeCharta_ui_legendPanel_legendPanel_module__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./codeCharta/ui/legendPanel/legendPanel.module */ "./app/codeCharta/ui/legendPanel/legendPanel.module.ts");
342627
+ /* harmony import */ var _codeCharta_ui_colorPickerForMapColor_colorPickerForMapColor_module__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.module */ "./app/codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.module.ts");
342628
+ /* harmony import */ var _codeCharta_ui_colorPickerForMapColor_colorPickerForMapColor_component__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.component */ "./app/codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.component.ts");
342629
+ /* harmony import */ var _codeCharta_ui_nodeContextMenu_focusButtons_focusButtons_module__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.module */ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.module.ts");
342630
+ /* harmony import */ var _codeCharta_ui_nodeContextMenu_focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component */ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.ts");
342631
+ /* harmony import */ var _codeCharta_ui_filePanel_filePanelFileSelector_filePanelFileSelector_component__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./codeCharta/ui/filePanel/filePanelFileSelector/filePanelFileSelector.component */ "./app/codeCharta/ui/filePanel/filePanelFileSelector/filePanelFileSelector.component.ts");
342632
+ /* harmony import */ var _codeCharta_ui_filePanel_filePanelStateButtons_filePanelStateButtons_component__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./codeCharta/ui/filePanel/filePanelStateButtons/filePanelStateButtons.component */ "./app/codeCharta/ui/filePanel/filePanelStateButtons/filePanelStateButtons.component.ts");
342633
+ /* harmony import */ var _codeCharta_ui_filePanel_filePanelDeltaSelector_filePanelDeltaSelector_component__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./codeCharta/ui/filePanel/filePanelDeltaSelector/filePanelDeltaSelector.component */ "./app/codeCharta/ui/filePanel/filePanelDeltaSelector/filePanelDeltaSelector.component.ts");
342634
+ /* harmony import */ var _codeCharta_ui_nodeContextMenu_markFolderRow_markFolderRow_component__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component */ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.component.ts");
342635
+ /* harmony import */ var _codeCharta_ui_nodeContextMenu_markFolderRow_markFolderRow_module__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.module */ "./app/codeCharta/ui/nodeContextMenu/markFolderRow/markFolderRow.module.ts");
342274
342636
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
342275
342637
  var c = arguments.length,
342276
342638
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -342306,6 +342668,11 @@ var __param = undefined && undefined.__param || function (paramIndex, decorator)
342306
342668
 
342307
342669
 
342308
342670
 
342671
+
342672
+
342673
+
342674
+
342675
+
342309
342676
 
342310
342677
 
342311
342678
 
@@ -342324,13 +342691,13 @@ let AppModule = class AppModule {
342324
342691
  }
342325
342692
 
342326
342693
  };
342327
- AppModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_19__.NgModule)({
342328
- imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_20__.BrowserModule, _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_21__.UpgradeModule, _codeCharta_ui_mapTreeView_mapTreeView_module__WEBPACK_IMPORTED_MODULE_2__.MapTreeViewModule, _codeCharta_ui_matchingFilesCounter_matchingFilesCounter_module__WEBPACK_IMPORTED_MODULE_5__.MatchingFilesCounterModule, _codeCharta_ui_attributeSideBar_attributeSideBar_module__WEBPACK_IMPORTED_MODULE_6__.AttributeSideBarModule, _codeCharta_ui_export3DMapButton_export3DMapButton_module__WEBPACK_IMPORTED_MODULE_9__.Export3DMapButtonModule, _codeCharta_ui_legendPanel_legendPanel_module__WEBPACK_IMPORTED_MODULE_12__.LegendPanelModule, _codeCharta_ui_colorPickerForMapColor_colorPickerForMapColor_module__WEBPACK_IMPORTED_MODULE_13__.ColorPickerForMapColorModule, _codeCharta_ui_nodeContextMenu_markFolderColorPicker_markFolderColorPicker_module__WEBPACK_IMPORTED_MODULE_15__.MarkFolderColorPickerModule, _codeCharta_ui_nodeContextMenu_focusButtons_focusButtons_module__WEBPACK_IMPORTED_MODULE_17__.FocusButtonsModule],
342329
- declarations: [],
342330
- entryComponents: [_codeCharta_ui_mapTreeView_mapTreeView_component__WEBPACK_IMPORTED_MODULE_3__.MapTreeViewComponent, _codeCharta_ui_matchingFilesCounter_matchingFilesCounter_component__WEBPACK_IMPORTED_MODULE_4__.MatchingFilesCounterComponent, _codeCharta_ui_attributeSideBar_attributeSideBar_component__WEBPACK_IMPORTED_MODULE_7__.AttributeSideBarComponent, _codeCharta_ui_export3DMapButton_export3DMapButton_component__WEBPACK_IMPORTED_MODULE_8__.Export3DMapButtonComponent, _codeCharta_ui_legendPanel_legendPanel_component__WEBPACK_IMPORTED_MODULE_11__.LegendPanelComponent, _codeCharta_ui_labelledColorPicker_labelledColorPicker_component__WEBPACK_IMPORTED_MODULE_10__.LabelledColorPickerComponent, _codeCharta_ui_colorPickerForMapColor_colorPickerForMapColor_component__WEBPACK_IMPORTED_MODULE_14__.ColorPickerForMapColorComponent, _codeCharta_ui_nodeContextMenu_markFolderColorPicker_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_16__.MarkFolderColorPickerComponent, _codeCharta_ui_nodeContextMenu_focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_18__.FocusButtonsComponent]
342331
- }), __param(0, (0,_angular_core__WEBPACK_IMPORTED_MODULE_19__.Inject)(_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_21__.UpgradeModule)), __metadata("design:paramtypes", [_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_21__.UpgradeModule])], AppModule);
342694
+ AppModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_23__.NgModule)({
342695
+ imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_24__.BrowserModule, _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_25__.UpgradeModule, _codeCharta_ui_mapTreeView_mapTreeView_module__WEBPACK_IMPORTED_MODULE_3__.MapTreeViewModule, _codeCharta_ui_matchingFilesCounter_matchingFilesCounter_module__WEBPACK_IMPORTED_MODULE_6__.MatchingFilesCounterModule, _codeCharta_ui_attributeSideBar_attributeSideBar_module__WEBPACK_IMPORTED_MODULE_7__.AttributeSideBarModule, _material_material_module__WEBPACK_IMPORTED_MODULE_2__.MaterialModule, _angular_forms__WEBPACK_IMPORTED_MODULE_26__.FormsModule, _codeCharta_ui_export3DMapButton_export3DMapButton_module__WEBPACK_IMPORTED_MODULE_10__.Export3DMapButtonModule, _codeCharta_ui_legendPanel_legendPanel_module__WEBPACK_IMPORTED_MODULE_13__.LegendPanelModule, _codeCharta_ui_colorPickerForMapColor_colorPickerForMapColor_module__WEBPACK_IMPORTED_MODULE_14__.ColorPickerForMapColorModule, _codeCharta_ui_nodeContextMenu_focusButtons_focusButtons_module__WEBPACK_IMPORTED_MODULE_16__.FocusButtonsModule, _codeCharta_ui_nodeContextMenu_markFolderRow_markFolderRow_module__WEBPACK_IMPORTED_MODULE_22__.MarkFolderRowModule],
342696
+ declarations: [_codeCharta_ui_filePanel_filePanelFileSelector_filePanelFileSelector_component__WEBPACK_IMPORTED_MODULE_18__.FilePanelFileSelectorComponent, _codeCharta_ui_filePanel_filePanelStateButtons_filePanelStateButtons_component__WEBPACK_IMPORTED_MODULE_19__.FilePanelStateButtonsComponent, _codeCharta_ui_filePanel_filePanelDeltaSelector_filePanelDeltaSelector_component__WEBPACK_IMPORTED_MODULE_20__.FilePanelDeltaSelectorComponent],
342697
+ entryComponents: [_codeCharta_ui_mapTreeView_mapTreeView_component__WEBPACK_IMPORTED_MODULE_4__.MapTreeViewComponent, _codeCharta_ui_matchingFilesCounter_matchingFilesCounter_component__WEBPACK_IMPORTED_MODULE_5__.MatchingFilesCounterComponent, _codeCharta_ui_attributeSideBar_attributeSideBar_component__WEBPACK_IMPORTED_MODULE_8__.AttributeSideBarComponent, _codeCharta_ui_export3DMapButton_export3DMapButton_component__WEBPACK_IMPORTED_MODULE_9__.Export3DMapButtonComponent, _codeCharta_ui_legendPanel_legendPanel_component__WEBPACK_IMPORTED_MODULE_12__.LegendPanelComponent, _codeCharta_ui_labelledColorPicker_labelledColorPicker_component__WEBPACK_IMPORTED_MODULE_11__.LabelledColorPickerComponent, _codeCharta_ui_colorPickerForMapColor_colorPickerForMapColor_component__WEBPACK_IMPORTED_MODULE_15__.ColorPickerForMapColorComponent, _codeCharta_ui_nodeContextMenu_focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_17__.FocusButtonsComponent, _codeCharta_ui_filePanel_filePanelFileSelector_filePanelFileSelector_component__WEBPACK_IMPORTED_MODULE_18__.FilePanelFileSelectorComponent, _codeCharta_ui_filePanel_filePanelStateButtons_filePanelStateButtons_component__WEBPACK_IMPORTED_MODULE_19__.FilePanelStateButtonsComponent, _codeCharta_ui_filePanel_filePanelDeltaSelector_filePanelDeltaSelector_component__WEBPACK_IMPORTED_MODULE_20__.FilePanelDeltaSelectorComponent, _codeCharta_ui_nodeContextMenu_focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_17__.FocusButtonsComponent, _codeCharta_ui_nodeContextMenu_markFolderRow_markFolderRow_component__WEBPACK_IMPORTED_MODULE_21__.MarkFolderRowComponent]
342698
+ }), __param(0, (0,_angular_core__WEBPACK_IMPORTED_MODULE_23__.Inject)(_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_25__.UpgradeModule)), __metadata("design:paramtypes", [_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_25__.UpgradeModule])], AppModule);
342332
342699
 
342333
- (0,_angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_22__.platformBrowserDynamic)().bootstrapModule(AppModule);
342700
+ (0,_angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_27__.platformBrowserDynamic)().bootstrapModule(AppModule);
342334
342701
  })();
342335
342702
 
342336
342703
  /******/ })()