codecharta-visualization 1.86.0 → 1.87.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 (72) hide show
  1. package/Dockerfile +1 -1
  2. package/app/app.module.ts +6 -2
  3. package/app/codeCharta/codeCharta.model.ts +1 -1
  4. package/app/codeCharta/state/store/dynamicSettings/dynamicSettings.splitter.ts +2 -2
  5. package/app/codeCharta/state/store/dynamicSettings/focusedNodePath/currentFocused.selector.ts +8 -0
  6. package/app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions.ts +27 -7
  7. package/app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.reducer.spec.ts +27 -11
  8. package/app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.reducer.ts +11 -5
  9. package/app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.selector.ts +4 -0
  10. package/app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.service.spec.ts +2 -2
  11. package/app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.service.ts +1 -1
  12. package/app/codeCharta/state/store/fileSettings/markedPackages/markedPackages.actions.ts +9 -10
  13. package/app/codeCharta/state/store/fileSettings/markedPackages/markedPackages.reducer.spec.ts +37 -7
  14. package/app/codeCharta/state/store/fileSettings/markedPackages/markedPackages.reducer.ts +7 -3
  15. package/app/codeCharta/state/store/fileSettings/markedPackages/util/findIndexOfMarkedPackageOrParent.spec.ts +39 -0
  16. package/app/codeCharta/state/store/fileSettings/markedPackages/util/findIndexOfMarkedPackageOrParent.ts +19 -0
  17. package/app/codeCharta/state/store/state.splitter.spec.ts +4 -4
  18. package/app/codeCharta/state/store.service.spec.ts +3 -3
  19. package/app/codeCharta/state/store.service.ts +5 -0
  20. package/app/codeCharta/ui/artificialIntelligence/__snapshots__/artificialIntelligence.component.spec.ts.snap +13 -16
  21. package/app/codeCharta/ui/artificialIntelligence/artificialIntelligence.component.html +4 -4
  22. package/app/codeCharta/ui/artificialIntelligence/artificialIntelligence.component.scss +0 -4
  23. package/app/codeCharta/ui/artificialIntelligence/artificialIntelligence.component.spec.ts +82 -52
  24. package/app/codeCharta/ui/artificialIntelligence/artificialIntelligence.component.ts +41 -101
  25. package/app/codeCharta/ui/codeMap/codeMap.actions.service.ts +1 -40
  26. package/app/codeCharta/ui/codeMap/codeMap.mouseEvent.service.ts +10 -16
  27. package/app/codeCharta/ui/colorPicker/colorPicker.component.html +16 -7
  28. package/app/codeCharta/ui/colorPicker/colorPicker.component.spec.ts +55 -16
  29. package/app/codeCharta/ui/colorPicker/colorPicker.component.ts +32 -1
  30. package/app/codeCharta/ui/colorPicker/colorPicker.module.ts +3 -1
  31. package/app/codeCharta/ui/customConfigs/customConfigs.component.html +21 -3
  32. package/app/codeCharta/ui/customConfigs/customConfigs.component.scss +1 -0
  33. package/app/codeCharta/ui/customConfigs/customConfigs.component.spec.ts +123 -2
  34. package/app/codeCharta/ui/customConfigs/customConfigs.component.ts +56 -2
  35. package/app/codeCharta/ui/labelledColorPicker/labelledColorPicker.component.html +21 -13
  36. package/app/codeCharta/ui/labelledColorPicker/labelledColorPicker.component.spec.ts +11 -24
  37. package/app/codeCharta/ui/labelledColorPicker/labelledColorPicker.component.ts +1 -40
  38. package/app/codeCharta/ui/labelledColorPicker/labelledColorPicker.module.ts +1 -2
  39. package/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.component.ts +2 -2
  40. package/app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.html +24 -0
  41. package/app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.spec.ts +55 -0
  42. package/app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.ts +38 -0
  43. package/app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.module.ts +13 -0
  44. package/app/codeCharta/ui/nodeContextMenu/focusButtons/isNodeFocused.pipe.spec.ts +31 -0
  45. package/app/codeCharta/ui/nodeContextMenu/focusButtons/isNodeFocused.pipe.ts +25 -0
  46. package/app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.html +8 -4
  47. package/app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts +1 -21
  48. package/app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.module.ts +1 -2
  49. package/app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.html +2 -12
  50. package/app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.scss +3 -1
  51. package/app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.spec.ts +28 -125
  52. package/app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.ts +29 -55
  53. package/app/codeCharta/ui/nodeContextMenu/nodeContextMenu.module.ts +2 -0
  54. package/app/codeCharta/ui/ui.ts +0 -2
  55. package/app/codeCharta/util/algorithm/streetLayout/strip/strip.ts +2 -2
  56. package/app/codeCharta/util/algorithm/streetLayout/treeMap.ts +1 -1
  57. package/app/codeCharta/util/algorithm/treeMapLayout/treeMapGenerator.spec.ts +1 -1
  58. package/app/codeCharta/util/algorithm/treeMapLayout/treeMapHelper.spec.ts +2 -2
  59. package/app/codeCharta/util/algorithm/treeMapLayout/treeMapHelper.ts +1 -1
  60. package/app/codeCharta/util/customConfigBuilder.ts +1 -1
  61. package/app/codeCharta/util/dataMocks.ts +2 -2
  62. package/app/codeCharta/util/fileExtensionCalculator.ts +1 -1
  63. package/dist/webpack/bundle.js +963 -934
  64. package/dist/webpack/bundle.js.map +1 -1
  65. package/package.json +6 -5
  66. package/app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.splitter.ts +0 -8
  67. package/app/codeCharta/ui/codeMap/codeMap.actions.service.spec.ts +0 -147
  68. package/app/codeCharta/ui/unfocusButton/unfocusButton.component.html +0 -15
  69. package/app/codeCharta/ui/unfocusButton/unfocusButton.component.scss +0 -5
  70. package/app/codeCharta/ui/unfocusButton/unfocusButton.component.spec.ts +0 -106
  71. package/app/codeCharta/ui/unfocusButton/unfocusButton.component.ts +0 -62
  72. package/app/codeCharta/ui/unfocusButton/unfocusButton.module.ts +0 -7
@@ -205640,6 +205640,8 @@ __webpack_require__.r(__webpack_exports__);
205640
205640
  /* harmony import */ var _store_store__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./store/store */ "./app/codeCharta/state/store/store.ts");
205641
205641
  /* harmony import */ var _store_appSettings_enableClipboard_screenshotToClipboardEnabled_actions__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./store/appSettings/enableClipboard/screenshotToClipboardEnabled.actions */ "./app/codeCharta/state/store/appSettings/enableClipboard/screenshotToClipboardEnabled.actions.ts");
205642
205642
  /* harmony import */ var _store_appStatus_hoveredBuildingPath_hoveredBuildingPath_actions__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./store/appStatus/hoveredBuildingPath/hoveredBuildingPath.actions */ "./app/codeCharta/state/store/appStatus/hoveredBuildingPath/hoveredBuildingPath.actions.ts");
205643
+ /* harmony import */ var _store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./store/dynamicSettings/focusedNodePath/focusedNodePath.actions */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions.ts");
205644
+
205643
205645
 
205644
205646
 
205645
205647
 
@@ -205671,6 +205673,10 @@ class StoreService {
205671
205673
  this.dispatch((0,_store_appSettings_isLoadingMap_isLoadingMap_actions__WEBPACK_IMPORTED_MODULE_1__.setIsLoadingMap)(true));
205672
205674
  }
205673
205675
 
205676
+ if ((0,_util_reduxHelper__WEBPACK_IMPORTED_MODULE_4__.isActionOfType)(action.type, _store_appSettings_isLoadingFile_isLoadingFile_actions__WEBPACK_IMPORTED_MODULE_2__.IsLoadingFileActions)) {
205677
+ this.dispatch((0,_store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_14__.unfocusAllNodes)());
205678
+ }
205679
+
205674
205680
  for (const atomicAction of (0,_store_state_splitter__WEBPACK_IMPORTED_MODULE_0__.splitStateActions)(action)) {
205675
205681
  this.originalDispatch(atomicAction);
205676
205682
 
@@ -210883,11 +210889,11 @@ __webpack_require__.r(__webpack_exports__);
210883
210889
  /* harmony import */ var _colorRange_colorRange_splitter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./colorRange/colorRange.splitter */ "./app/codeCharta/state/store/dynamicSettings/colorRange/colorRange.splitter.ts");
210884
210890
  /* harmony import */ var _margin_margin_splitter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./margin/margin.splitter */ "./app/codeCharta/state/store/dynamicSettings/margin/margin.splitter.ts");
210885
210891
  /* harmony import */ var _searchPattern_searchPattern_splitter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./searchPattern/searchPattern.splitter */ "./app/codeCharta/state/store/dynamicSettings/searchPattern/searchPattern.splitter.ts");
210886
- /* harmony import */ var _focusedNodePath_focusedNodePath_splitter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./focusedNodePath/focusedNodePath.splitter */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.splitter.ts");
210887
- /* harmony import */ var _heightMetric_heightMetric_splitter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./heightMetric/heightMetric.splitter */ "./app/codeCharta/state/store/dynamicSettings/heightMetric/heightMetric.splitter.ts");
210888
- /* harmony import */ var _distributionMetric_distributionMetric_splitter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./distributionMetric/distributionMetric.splitter */ "./app/codeCharta/state/store/dynamicSettings/distributionMetric/distributionMetric.splitter.ts");
210889
- /* harmony import */ var _colorMetric_colorMetric_splitter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./colorMetric/colorMetric.splitter */ "./app/codeCharta/state/store/dynamicSettings/colorMetric/colorMetric.splitter.ts");
210890
- /* harmony import */ var _areaMetric_areaMetric_splitter__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./areaMetric/areaMetric.splitter */ "./app/codeCharta/state/store/dynamicSettings/areaMetric/areaMetric.splitter.ts");
210892
+ /* harmony import */ var _heightMetric_heightMetric_splitter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./heightMetric/heightMetric.splitter */ "./app/codeCharta/state/store/dynamicSettings/heightMetric/heightMetric.splitter.ts");
210893
+ /* harmony import */ var _distributionMetric_distributionMetric_splitter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./distributionMetric/distributionMetric.splitter */ "./app/codeCharta/state/store/dynamicSettings/distributionMetric/distributionMetric.splitter.ts");
210894
+ /* harmony import */ var _colorMetric_colorMetric_splitter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./colorMetric/colorMetric.splitter */ "./app/codeCharta/state/store/dynamicSettings/colorMetric/colorMetric.splitter.ts");
210895
+ /* harmony import */ var _areaMetric_areaMetric_splitter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./areaMetric/areaMetric.splitter */ "./app/codeCharta/state/store/dynamicSettings/areaMetric/areaMetric.splitter.ts");
210896
+ /* harmony import */ var _focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./focusedNodePath/focusedNodePath.actions */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions.ts");
210891
210897
 
210892
210898
 
210893
210899
 
@@ -210932,23 +210938,23 @@ function splitDynamicSettingsActions(payload) {
210932
210938
  }
210933
210939
 
210934
210940
  if (payload.focusedNodePath !== undefined) {
210935
- actions.push((0,_focusedNodePath_focusedNodePath_splitter__WEBPACK_IMPORTED_MODULE_7__.splitFocusedNodePathAction)(payload.focusedNodePath));
210941
+ actions.push((0,_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_11__.setAllFocusedNodes)(payload.focusedNodePath));
210936
210942
  }
210937
210943
 
210938
210944
  if (payload.heightMetric !== undefined) {
210939
- actions.push((0,_heightMetric_heightMetric_splitter__WEBPACK_IMPORTED_MODULE_8__.splitHeightMetricAction)(payload.heightMetric));
210945
+ actions.push((0,_heightMetric_heightMetric_splitter__WEBPACK_IMPORTED_MODULE_7__.splitHeightMetricAction)(payload.heightMetric));
210940
210946
  }
210941
210947
 
210942
210948
  if (payload.distributionMetric !== undefined) {
210943
- actions.push((0,_distributionMetric_distributionMetric_splitter__WEBPACK_IMPORTED_MODULE_9__.splitDistributionMetricAction)(payload.distributionMetric));
210949
+ actions.push((0,_distributionMetric_distributionMetric_splitter__WEBPACK_IMPORTED_MODULE_8__.splitDistributionMetricAction)(payload.distributionMetric));
210944
210950
  }
210945
210951
 
210946
210952
  if (payload.colorMetric !== undefined) {
210947
- actions.push((0,_colorMetric_colorMetric_splitter__WEBPACK_IMPORTED_MODULE_10__.splitColorMetricAction)(payload.colorMetric));
210953
+ actions.push((0,_colorMetric_colorMetric_splitter__WEBPACK_IMPORTED_MODULE_9__.splitColorMetricAction)(payload.colorMetric));
210948
210954
  }
210949
210955
 
210950
210956
  if (payload.areaMetric !== undefined) {
210951
- actions.push((0,_areaMetric_areaMetric_splitter__WEBPACK_IMPORTED_MODULE_11__.splitAreaMetricAction)(payload.areaMetric));
210957
+ actions.push((0,_areaMetric_areaMetric_splitter__WEBPACK_IMPORTED_MODULE_10__.splitAreaMetricAction)(payload.areaMetric));
210952
210958
  }
210953
210959
 
210954
210960
  return actions;
@@ -211119,6 +211125,25 @@ function splitEdgeMetricAction(payload) {
211119
211125
 
211120
211126
  /***/ }),
211121
211127
 
211128
+ /***/ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/currentFocused.selector.ts":
211129
+ /*!***********************************************************************************************!*\
211130
+ !*** ./app/codeCharta/state/store/dynamicSettings/focusedNodePath/currentFocused.selector.ts ***!
211131
+ \***********************************************************************************************/
211132
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
211133
+
211134
+ "use strict";
211135
+ __webpack_require__.r(__webpack_exports__);
211136
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
211137
+ /* harmony export */ "currentFocusedNodePathSelector": () => (/* binding */ currentFocusedNodePathSelector)
211138
+ /* harmony export */ });
211139
+ /* harmony import */ var _angular_redux_createSelector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../angular-redux/createSelector */ "./app/codeCharta/state/angular-redux/createSelector.ts");
211140
+ /* harmony import */ var _focusedNodePath_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./focusedNodePath.selector */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.selector.ts");
211141
+
211142
+
211143
+ const currentFocusedNodePathSelector = (0,_angular_redux_createSelector__WEBPACK_IMPORTED_MODULE_0__.createSelector)([_focusedNodePath_selector__WEBPACK_IMPORTED_MODULE_1__.focusedNodePathSelector], focusedNodePath => focusedNodePath[0]);
211144
+
211145
+ /***/ }),
211146
+
211122
211147
  /***/ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions.ts":
211123
211148
  /*!***********************************************************************************************!*\
211124
211149
  !*** ./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions.ts ***!
@@ -211131,6 +211156,8 @@ __webpack_require__.r(__webpack_exports__);
211131
211156
  /* harmony export */ "FocusedNodePathActions": () => (/* binding */ FocusedNodePathActions),
211132
211157
  /* harmony export */ "focusNode": () => (/* binding */ focusNode),
211133
211158
  /* harmony export */ "unfocusNode": () => (/* binding */ unfocusNode),
211159
+ /* harmony export */ "unfocusAllNodes": () => (/* binding */ unfocusAllNodes),
211160
+ /* harmony export */ "setAllFocusedNodes": () => (/* binding */ setAllFocusedNodes),
211134
211161
  /* harmony export */ "defaultFocusedNodePath": () => (/* binding */ defaultFocusedNodePath)
211135
211162
  /* harmony export */ });
211136
211163
  var FocusedNodePathActions;
@@ -211138,9 +211165,11 @@ var FocusedNodePathActions;
211138
211165
  (function (FocusedNodePathActions) {
211139
211166
  FocusedNodePathActions["FOCUS_NODE"] = "FOCUS_NODE";
211140
211167
  FocusedNodePathActions["UNFOCUS_NODE"] = "UNFOCUS_NODE";
211168
+ FocusedNodePathActions["UNFOCUS_ALL_NODES"] = "UNFOCUS_ALL_NODES";
211169
+ FocusedNodePathActions["SET_ALL_FOCUSED_NODES"] = "SET_ALL_FOCUSED_NODES";
211141
211170
  })(FocusedNodePathActions || (FocusedNodePathActions = {}));
211142
211171
 
211143
- function focusNode(focusedNodePath = defaultFocusedNodePath) {
211172
+ function focusNode(focusedNodePath) {
211144
211173
  return {
211145
211174
  type: FocusedNodePathActions.FOCUS_NODE,
211146
211175
  payload: focusedNodePath
@@ -211148,11 +211177,21 @@ function focusNode(focusedNodePath = defaultFocusedNodePath) {
211148
211177
  }
211149
211178
  function unfocusNode() {
211150
211179
  return {
211151
- type: FocusedNodePathActions.UNFOCUS_NODE,
211152
- payload: ""
211180
+ type: FocusedNodePathActions.UNFOCUS_NODE
211153
211181
  };
211154
211182
  }
211155
- const defaultFocusedNodePath = "";
211183
+ function unfocusAllNodes() {
211184
+ return {
211185
+ type: FocusedNodePathActions.UNFOCUS_ALL_NODES
211186
+ };
211187
+ }
211188
+ function setAllFocusedNodes(focusedNodePaths) {
211189
+ return {
211190
+ type: FocusedNodePathActions.SET_ALL_FOCUSED_NODES,
211191
+ payload: focusedNodePaths
211192
+ };
211193
+ }
211194
+ const defaultFocusedNodePath = [];
211156
211195
 
211157
211196
  /***/ }),
211158
211197
 
@@ -211171,13 +211210,22 @@ __webpack_require__.r(__webpack_exports__);
211171
211210
  /* harmony import */ var _codeCharta_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../codeCharta.service */ "./app/codeCharta/codeCharta.service.ts");
211172
211211
 
211173
211212
 
211174
- function focusedNodePath(state = (0,_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_0__.focusNode)().payload, action) {
211213
+ function focusedNodePath(state = _focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_0__.defaultFocusedNodePath, action) {
211175
211214
  switch (action.type) {
211176
211215
  case _focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_0__.FocusedNodePathActions.FOCUS_NODE:
211177
- return action.payload === _codeCharta_service__WEBPACK_IMPORTED_MODULE_1__.CodeChartaService.ROOT_PATH ? state : action.payload;
211216
+ {
211217
+ if (action.payload === _codeCharta_service__WEBPACK_IMPORTED_MODULE_1__.CodeChartaService.ROOT_PATH) return state;
211218
+ return [action.payload, ...state];
211219
+ }
211178
211220
 
211179
211221
  case _focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_0__.FocusedNodePathActions.UNFOCUS_NODE:
211180
- return action.payload;
211222
+ return state.slice(1);
211223
+
211224
+ case _focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_0__.FocusedNodePathActions.UNFOCUS_ALL_NODES:
211225
+ return [];
211226
+
211227
+ case _focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_0__.FocusedNodePathActions.SET_ALL_FOCUSED_NODES:
211228
+ return [...action.payload];
211181
211229
 
211182
211230
  default:
211183
211231
  return state;
@@ -211186,6 +211234,25 @@ function focusedNodePath(state = (0,_focusedNodePath_actions__WEBPACK_IMPORTED_M
211186
211234
 
211187
211235
  /***/ }),
211188
211236
 
211237
+ /***/ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.selector.ts":
211238
+ /*!************************************************************************************************!*\
211239
+ !*** ./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.selector.ts ***!
211240
+ \************************************************************************************************/
211241
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
211242
+
211243
+ "use strict";
211244
+ __webpack_require__.r(__webpack_exports__);
211245
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
211246
+ /* harmony export */ "focusedNodePathSelector": () => (/* binding */ focusedNodePathSelector)
211247
+ /* harmony export */ });
211248
+ /* harmony import */ var _angular_redux_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../angular-redux/store */ "./app/codeCharta/state/angular-redux/store.ts");
211249
+ /* harmony import */ var _dynamicSettings_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dynamicSettings.selector */ "./app/codeCharta/state/store/dynamicSettings/dynamicSettings.selector.ts");
211250
+
211251
+
211252
+ const focusedNodePathSelector = (0,_angular_redux_store__WEBPACK_IMPORTED_MODULE_0__.createSelector)([_dynamicSettings_selector__WEBPACK_IMPORTED_MODULE_1__.dynamicSettingsSelector], dynamicSettings => dynamicSettings.focusedNodePath);
211253
+
211254
+ /***/ }),
211255
+
211189
211256
  /***/ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.service.ts":
211190
211257
  /*!***********************************************************************************************!*\
211191
211258
  !*** ./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.service.ts ***!
@@ -211264,29 +211331,6 @@ FocusedNodePathService.UNFOCUS_NODE_EVENT = "unfocus-node";
211264
211331
 
211265
211332
  /***/ }),
211266
211333
 
211267
- /***/ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.splitter.ts":
211268
- /*!************************************************************************************************!*\
211269
- !*** ./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.splitter.ts ***!
211270
- \************************************************************************************************/
211271
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
211272
-
211273
- "use strict";
211274
- __webpack_require__.r(__webpack_exports__);
211275
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
211276
- /* harmony export */ "splitFocusedNodePathAction": () => (/* binding */ splitFocusedNodePathAction)
211277
- /* harmony export */ });
211278
- /* harmony import */ var _focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./focusedNodePath.actions */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions.ts");
211279
-
211280
- function splitFocusedNodePathAction(payload) {
211281
- if (payload === "") {
211282
- return (0,_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_0__.unfocusNode)();
211283
- }
211284
-
211285
- return (0,_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_0__.focusNode)(payload);
211286
- }
211287
-
211288
- /***/ }),
211289
-
211290
211334
  /***/ "./app/codeCharta/state/store/dynamicSettings/heightMetric/heightMetric.actions.ts":
211291
211335
  /*!*****************************************************************************************!*\
211292
211336
  !*** ./app/codeCharta/state/store/dynamicSettings/heightMetric/heightMetric.actions.ts ***!
@@ -212859,7 +212903,7 @@ function splitFileSettingsActions(payload) {
212859
212903
  __webpack_require__.r(__webpack_exports__);
212860
212904
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
212861
212905
  /* harmony export */ "MarkedPackagesActions": () => (/* binding */ MarkedPackagesActions),
212862
- /* harmony export */ "calculateMarkedPackages": () => (/* binding */ calculateMarkedPackages),
212906
+ /* harmony export */ "markPackages": () => (/* binding */ markPackages),
212863
212907
  /* harmony export */ "setMarkedPackages": () => (/* binding */ setMarkedPackages),
212864
212908
  /* harmony export */ "unmarkPackage": () => (/* binding */ unmarkPackage),
212865
212909
  /* harmony export */ "defaultMarkedPackages": () => (/* binding */ defaultMarkedPackages)
@@ -212868,14 +212912,13 @@ var MarkedPackagesActions;
212868
212912
 
212869
212913
  (function (MarkedPackagesActions) {
212870
212914
  MarkedPackagesActions["SET_MARKED_PACKAGES"] = "SET_MARKED_PACKAGES";
212871
- MarkedPackagesActions["CALCULATE_MARKED_PACKAGES_FOR_PATHS"] = "CALCULATE_MARKED_PACKAGES";
212872
212915
  MarkedPackagesActions["MARK_PACKAGE"] = "MARK_PACKAGE";
212873
212916
  MarkedPackagesActions["UNMARK_PACKAGE"] = "UNMARK_PACKAGE";
212874
212917
  })(MarkedPackagesActions || (MarkedPackagesActions = {}));
212875
212918
 
212876
- function calculateMarkedPackages(packagesToBeMarked) {
212919
+ function markPackages(packagesToBeMarked) {
212877
212920
  return {
212878
- type: MarkedPackagesActions.CALCULATE_MARKED_PACKAGES_FOR_PATHS,
212921
+ type: MarkedPackagesActions.MARK_PACKAGE,
212879
212922
  payload: packagesToBeMarked
212880
212923
  };
212881
212924
  }
@@ -212885,10 +212928,10 @@ function setMarkedPackages(markedPackages = defaultMarkedPackages) {
212885
212928
  payload: markedPackages
212886
212929
  };
212887
212930
  }
212888
- function unmarkPackage(index) {
212931
+ function unmarkPackage(node) {
212889
212932
  return {
212890
212933
  type: MarkedPackagesActions.UNMARK_PACKAGE,
212891
- payload: index
212934
+ payload: node.path
212892
212935
  };
212893
212936
  }
212894
212937
  const defaultMarkedPackages = [];
@@ -212946,6 +212989,8 @@ __webpack_require__.r(__webpack_exports__);
212946
212989
  /* harmony import */ var _markedPackages_actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./markedPackages.actions */ "./app/codeCharta/state/store/fileSettings/markedPackages/markedPackages.actions.ts");
212947
212990
  /* harmony import */ var _util_reduxHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../util/reduxHelper */ "./app/codeCharta/util/reduxHelper.ts");
212948
212991
  /* harmony import */ var _util_addMarkedPackage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/addMarkedPackage */ "./app/codeCharta/state/store/fileSettings/markedPackages/util/addMarkedPackage.ts");
212992
+ /* harmony import */ var _util_findIndexOfMarkedPackageOrParent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/findIndexOfMarkedPackageOrParent */ "./app/codeCharta/state/store/fileSettings/markedPackages/util/findIndexOfMarkedPackageOrParent.ts");
212993
+
212949
212994
 
212950
212995
 
212951
212996
 
@@ -212955,9 +213000,13 @@ function markedPackages(state = (0,_markedPackages_actions__WEBPACK_IMPORTED_MOD
212955
213000
  return action.payload;
212956
213001
 
212957
213002
  case _markedPackages_actions__WEBPACK_IMPORTED_MODULE_0__.MarkedPackagesActions.UNMARK_PACKAGE:
212958
- return (0,_util_reduxHelper__WEBPACK_IMPORTED_MODULE_1__.removeEntryAtIndexFromArray)(state, action.payload);
213003
+ {
213004
+ const indexOfPackageToBeUnmarked = (0,_util_findIndexOfMarkedPackageOrParent__WEBPACK_IMPORTED_MODULE_3__.findIndexOfMarkedPackageOrParent)(state, action.payload);
213005
+ if (indexOfPackageToBeUnmarked !== -1) return (0,_util_reduxHelper__WEBPACK_IMPORTED_MODULE_1__.removeEntryAtIndexFromArray)(state, indexOfPackageToBeUnmarked);
213006
+ return state;
213007
+ }
212959
213008
 
212960
- case _markedPackages_actions__WEBPACK_IMPORTED_MODULE_0__.MarkedPackagesActions.CALCULATE_MARKED_PACKAGES_FOR_PATHS:
213009
+ case _markedPackages_actions__WEBPACK_IMPORTED_MODULE_0__.MarkedPackagesActions.MARK_PACKAGE:
212961
213010
  {
212962
213011
  const markedPackagesMap = new Map(state.map(entry => [entry.path, entry]));
212963
213012
 
@@ -213128,6 +213177,32 @@ const addMarkedPackage = (markedPackagesMap, {
213128
213177
 
213129
213178
  /***/ }),
213130
213179
 
213180
+ /***/ "./app/codeCharta/state/store/fileSettings/markedPackages/util/findIndexOfMarkedPackageOrParent.ts":
213181
+ /*!*********************************************************************************************************!*\
213182
+ !*** ./app/codeCharta/state/store/fileSettings/markedPackages/util/findIndexOfMarkedPackageOrParent.ts ***!
213183
+ \*********************************************************************************************************/
213184
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
213185
+
213186
+ "use strict";
213187
+ __webpack_require__.r(__webpack_exports__);
213188
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
213189
+ /* harmony export */ "findIndexOfMarkedPackageOrParent": () => (/* binding */ findIndexOfMarkedPackageOrParent)
213190
+ /* harmony export */ });
213191
+ const findIndexOfMarkedPackageOrParent = (markedPackages, nodePath) => {
213192
+ const indexOfNodePath = markedPackages.findIndex(mp => mp.path === nodePath);
213193
+ if (indexOfNodePath !== -1) return indexOfNodePath;
213194
+ let indexOfNearestParent = -1;
213195
+
213196
+ for (let loopIndex = 0; loopIndex < markedPackages.length; loopIndex++) {
213197
+ const markedPackage = markedPackages[loopIndex];
213198
+ if (nodePath.startsWith(markedPackage.path) && (indexOfNearestParent === -1 || markedPackages[indexOfNearestParent].path.length < markedPackage.path.length)) indexOfNearestParent = loopIndex;
213199
+ }
213200
+
213201
+ return indexOfNearestParent;
213202
+ };
213203
+
213204
+ /***/ }),
213205
+
213131
213206
  /***/ "./app/codeCharta/state/store/files/files.actions.ts":
213132
213207
  /*!***********************************************************!*\
213133
213208
  !*** ./app/codeCharta/state/store/files/files.actions.ts ***!
@@ -214608,21 +214683,21 @@ __webpack_require__.r(__webpack_exports__);
214608
214683
  /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash.debounce */ "./node_modules/lodash.debounce/index.js");
214609
214684
  /* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_1__);
214610
214685
  /* harmony import */ var _state_store_files_files_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../state/store/files/files.service */ "./app/codeCharta/state/store/files/files.service.ts");
214611
- /* harmony import */ var _util_customConfigBuilder__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/customConfigBuilder */ "./app/codeCharta/util/customConfigBuilder.ts");
214612
- /* harmony import */ var _util_customConfigHelper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/customConfigHelper */ "./app/codeCharta/util/customConfigHelper.ts");
214613
- /* harmony import */ var klona__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! klona */ "./node_modules/klona/dist/index.mjs");
214614
- /* harmony import */ var _model_customConfig_customConfig_api_model__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../model/customConfig/customConfig.api.model */ "./app/codeCharta/model/customConfig/customConfig.api.model.ts");
214615
- /* harmony import */ var _util_nodeDecorator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/nodeDecorator */ "./app/codeCharta/util/nodeDecorator.ts");
214616
- /* harmony import */ var _codeCharta_model__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../codeCharta.model */ "./app/codeCharta/codeCharta.model.ts");
214686
+ /* harmony import */ var _util_nodeDecorator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/nodeDecorator */ "./app/codeCharta/util/nodeDecorator.ts");
214687
+ /* harmony import */ var _codeCharta_model__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../codeCharta.model */ "./app/codeCharta/codeCharta.model.ts");
214617
214688
  /* harmony import */ var d3_hierarchy__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! d3-hierarchy */ "./node_modules/d3-hierarchy/src/hierarchy/index.js");
214618
- /* harmony import */ var _model_files_files_helper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../model/files/files.helper */ "./app/codeCharta/model/files/files.helper.ts");
214619
- /* harmony import */ var _artificialIntelligence_metricThresholds__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./artificialIntelligence.metricThresholds */ "./app/codeCharta/ui/artificialIntelligence/artificialIntelligence.metricThresholds.ts");
214620
- /* harmony import */ var _state_store_appSettings_mapColors_mapColors_actions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../state/store/appSettings/mapColors/mapColors.actions */ "./app/codeCharta/state/store/appSettings/mapColors/mapColors.actions.ts");
214621
- /* harmony import */ var _state_store_fileSettings_blacklist_blacklist_service__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../state/store/fileSettings/blacklist/blacklist.service */ "./app/codeCharta/state/store/fileSettings/blacklist/blacklist.service.ts");
214622
- /* harmony import */ var _util_codeMapHelper__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../util/codeMapHelper */ "./app/codeCharta/util/codeMapHelper.ts");
214623
- /* harmony import */ var _state_store_appSettings_enableExperimentalFeatures_experimentalFeaturesEnabled_service__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../state/store/appSettings/enableExperimentalFeatures/experimentalFeaturesEnabled.service */ "./app/codeCharta/state/store/appSettings/enableExperimentalFeatures/experimentalFeaturesEnabled.service.ts");
214624
- /* harmony import */ var _util_metric_metricDescriptions__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../util/metric/metricDescriptions */ "./app/codeCharta/util/metric/metricDescriptions.ts");
214625
- /* harmony import */ var percent_round__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! percent-round */ "./node_modules/percent-round/dist/percent-round.esm.js");
214689
+ /* harmony import */ var _model_files_files_helper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../model/files/files.helper */ "./app/codeCharta/model/files/files.helper.ts");
214690
+ /* harmony import */ var _artificialIntelligence_metricThresholds__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./artificialIntelligence.metricThresholds */ "./app/codeCharta/ui/artificialIntelligence/artificialIntelligence.metricThresholds.ts");
214691
+ /* harmony import */ var _state_store_appSettings_mapColors_mapColors_actions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../state/store/appSettings/mapColors/mapColors.actions */ "./app/codeCharta/state/store/appSettings/mapColors/mapColors.actions.ts");
214692
+ /* harmony import */ var _state_store_fileSettings_blacklist_blacklist_service__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../state/store/fileSettings/blacklist/blacklist.service */ "./app/codeCharta/state/store/fileSettings/blacklist/blacklist.service.ts");
214693
+ /* harmony import */ var _util_codeMapHelper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../util/codeMapHelper */ "./app/codeCharta/util/codeMapHelper.ts");
214694
+ /* harmony import */ var _state_store_appSettings_enableExperimentalFeatures_experimentalFeaturesEnabled_service__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../state/store/appSettings/enableExperimentalFeatures/experimentalFeaturesEnabled.service */ "./app/codeCharta/state/store/appSettings/enableExperimentalFeatures/experimentalFeaturesEnabled.service.ts");
214695
+ /* harmony import */ var _util_metric_metricDescriptions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../util/metric/metricDescriptions */ "./app/codeCharta/util/metric/metricDescriptions.ts");
214696
+ /* harmony import */ var percent_round__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! percent-round */ "./node_modules/percent-round/dist/percent-round.esm.js");
214697
+ /* harmony import */ var _state_store_dynamicSettings_colorRange_colorRange_actions__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../state/store/dynamicSettings/colorRange/colorRange.actions */ "./app/codeCharta/state/store/dynamicSettings/colorRange/colorRange.actions.ts");
214698
+ /* harmony import */ var _state_store_dynamicSettings_heightMetric_heightMetric_actions__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../state/store/dynamicSettings/heightMetric/heightMetric.actions */ "./app/codeCharta/state/store/dynamicSettings/heightMetric/heightMetric.actions.ts");
214699
+ /* harmony import */ var _state_store_dynamicSettings_colorMetric_colorMetric_actions__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../state/store/dynamicSettings/colorMetric/colorMetric.actions */ "./app/codeCharta/state/store/dynamicSettings/colorMetric/colorMetric.actions.ts");
214700
+ /* harmony import */ var _state_store_dynamicSettings_areaMetric_areaMetric_actions__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../state/store/dynamicSettings/areaMetric/areaMetric.actions */ "./app/codeCharta/state/store/dynamicSettings/areaMetric/areaMetric.actions.ts");
214626
214701
 
214627
214702
 
214628
214703
 
@@ -214642,13 +214717,11 @@ __webpack_require__.r(__webpack_exports__);
214642
214717
 
214643
214718
 
214644
214719
  class ArtificialIntelligenceController {
214645
- constructor($rootScope, storeService, threeOrbitControlsService, threeCameraService) {
214720
+ constructor($rootScope, storeService) {
214646
214721
  "ngInject";
214647
214722
 
214648
214723
  this.$rootScope = $rootScope;
214649
214724
  this.storeService = storeService;
214650
- this.threeOrbitControlsService = threeOrbitControlsService;
214651
- this.threeCameraService = threeCameraService;
214652
214725
  this._viewModel = {
214653
214726
  analyzedProgrammingLanguage: undefined,
214654
214727
  suspiciousMetricSuggestionLinks: [],
@@ -214658,13 +214731,12 @@ class ArtificialIntelligenceController {
214658
214731
  moderateRisk: 0,
214659
214732
  highRisk: 0,
214660
214733
  veryHighRisk: 0
214661
- },
214662
- isHighRiskFilesModeEnabled: false
214734
+ }
214663
214735
  };
214664
214736
  this.blacklist = [];
214665
214737
  _state_store_files_files_service__WEBPACK_IMPORTED_MODULE_2__.FilesService.subscribe(this.$rootScope, this);
214666
- _state_store_fileSettings_blacklist_blacklist_service__WEBPACK_IMPORTED_MODULE_12__.BlacklistService.subscribe(this.$rootScope, this);
214667
- _state_store_appSettings_enableExperimentalFeatures_experimentalFeaturesEnabled_service__WEBPACK_IMPORTED_MODULE_14__.ExperimentalFeaturesEnabledService.subscribe(this.$rootScope, this);
214738
+ _state_store_fileSettings_blacklist_blacklist_service__WEBPACK_IMPORTED_MODULE_8__.BlacklistService.subscribe(this.$rootScope, this);
214739
+ _state_store_appSettings_enableExperimentalFeatures_experimentalFeaturesEnabled_service__WEBPACK_IMPORTED_MODULE_10__.ExperimentalFeaturesEnabledService.subscribe(this.$rootScope, this);
214668
214740
  this.debounceCalculation = lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default()(() => {
214669
214741
  this.calculate();
214670
214742
  }, 10);
@@ -214676,13 +214748,37 @@ class ArtificialIntelligenceController {
214676
214748
  }
214677
214749
  }
214678
214750
 
214679
- applyCustomConfig(configId) {
214680
- _util_customConfigHelper__WEBPACK_IMPORTED_MODULE_4__.CustomConfigHelper.applyCustomConfig(configId, this.storeService, this.threeCameraService, this.threeOrbitControlsService);
214751
+ applySuspiciousMetric(metric, isOutlier) {
214752
+ if (this._viewModel.suspiciousMetricSuggestionLinks.includes(metric)) {
214753
+ const mapColors = Object.assign({}, this.storeService.getState().appSettings.mapColors);
214754
+ const colorRange = {
214755
+ from: metric.from,
214756
+ to: metric.to,
214757
+ max: 0,
214758
+ min: 0
214759
+ };
214760
+
214761
+ if (metric.isOutlier === isOutlier) {
214762
+ mapColors.positive = "#ffffff";
214763
+ mapColors.neutral = "#ffffff";
214764
+ mapColors.negative = "#A900C0";
214765
+ } else {
214766
+ mapColors.positive = _state_store_appSettings_mapColors_mapColors_actions__WEBPACK_IMPORTED_MODULE_7__.defaultMapColors.positive;
214767
+ mapColors.neutral = _state_store_appSettings_mapColors_mapColors_actions__WEBPACK_IMPORTED_MODULE_7__.defaultMapColors.neutral;
214768
+ mapColors.negative = _state_store_appSettings_mapColors_mapColors_actions__WEBPACK_IMPORTED_MODULE_7__.defaultMapColors.negative;
214769
+ }
214770
+
214771
+ this.storeService.dispatch((0,_state_store_dynamicSettings_areaMetric_areaMetric_actions__WEBPACK_IMPORTED_MODULE_16__.setAreaMetric)("rloc"));
214772
+ this.storeService.dispatch((0,_state_store_dynamicSettings_heightMetric_heightMetric_actions__WEBPACK_IMPORTED_MODULE_14__.setHeightMetric)(metric.metric));
214773
+ this.storeService.dispatch((0,_state_store_dynamicSettings_colorMetric_colorMetric_actions__WEBPACK_IMPORTED_MODULE_15__.setColorMetric)(metric.metric));
214774
+ this.storeService.dispatch((0,_state_store_dynamicSettings_colorRange_colorRange_actions__WEBPACK_IMPORTED_MODULE_13__.setColorRange)(colorRange));
214775
+ this.storeService.dispatch((0,_state_store_appSettings_mapColors_mapColors_actions__WEBPACK_IMPORTED_MODULE_7__.setMapColors)(mapColors));
214776
+ }
214681
214777
  }
214682
214778
 
214683
214779
  onBlacklistChanged(blacklist) {
214684
214780
  this.blacklist = blacklist;
214685
- this.fileState = (0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_9__.getVisibleFileStates)(this.storeService.getState().files)[0];
214781
+ this.fileState = (0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_5__.getVisibleFileStates)(this.storeService.getState().files)[0];
214686
214782
 
214687
214783
  if (this.fileState !== undefined) {
214688
214784
  this.debounceCalculation();
@@ -214690,7 +214786,7 @@ class ArtificialIntelligenceController {
214690
214786
  }
214691
214787
 
214692
214788
  onFilesSelectionChanged(files) {
214693
- const fileState = (0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_9__.getVisibleFileStates)(files)[0];
214789
+ const fileState = (0,_model_files_files_helper__WEBPACK_IMPORTED_MODULE_5__.getVisibleFileStates)(files)[0];
214694
214790
 
214695
214791
  if (fileState === undefined) {
214696
214792
  return;
@@ -214715,7 +214811,7 @@ class ArtificialIntelligenceController {
214715
214811
 
214716
214812
  if (mainProgrammingLanguage !== undefined) {
214717
214813
  this.calculateRiskProfile(this.fileState, mainProgrammingLanguage, "mcc");
214718
- this.createCustomConfigSuggestions(this.fileState, mainProgrammingLanguage);
214814
+ this.calculateSuspiciousMetrics(this.fileState, mainProgrammingLanguage);
214719
214815
  }
214720
214816
  }
214721
214817
 
@@ -214735,7 +214831,7 @@ class ArtificialIntelligenceController {
214735
214831
  for (const {
214736
214832
  data
214737
214833
  } of (0,d3_hierarchy__WEBPACK_IMPORTED_MODULE_17__["default"])(fileState.file.map)) {
214738
- if (data.type !== _codeCharta_model__WEBPACK_IMPORTED_MODULE_8__.NodeType.FILE || (0,_util_codeMapHelper__WEBPACK_IMPORTED_MODULE_13__.isPathBlacklisted)(data.path, this.blacklist, _codeCharta_model__WEBPACK_IMPORTED_MODULE_8__.BlacklistType.exclude) || data.attributes[metricName] === undefined || data.attributes["rloc"] === undefined || this.getFileExtension(data.name) !== programmingLanguage) {
214834
+ if (data.type !== _codeCharta_model__WEBPACK_IMPORTED_MODULE_4__.NodeType.FILE || (0,_util_codeMapHelper__WEBPACK_IMPORTED_MODULE_9__.isPathBlacklisted)(data.path, this.blacklist, _codeCharta_model__WEBPACK_IMPORTED_MODULE_4__.BlacklistType.exclude) || data.attributes[metricName] === undefined || data.attributes["rloc"] === undefined || this.getFileExtension(data.name) !== programmingLanguage) {
214739
214835
  continue;
214740
214836
  }
214741
214837
 
@@ -214758,7 +214854,7 @@ class ArtificialIntelligenceController {
214758
214854
  return;
214759
214855
  }
214760
214856
 
214761
- const [lowRisk, moderateRisk, highRisk, veryHighRisk] = (0,percent_round__WEBPACK_IMPORTED_MODULE_16__["default"])([numberOfRlocLowRisk, numberOfRlocModerateRisk, numberOfRlocHighRisk, numberOfRlocVeryHighRisk]);
214857
+ const [lowRisk, moderateRisk, highRisk, veryHighRisk] = (0,percent_round__WEBPACK_IMPORTED_MODULE_12__["default"])([numberOfRlocLowRisk, numberOfRlocModerateRisk, numberOfRlocHighRisk, numberOfRlocVeryHighRisk]);
214762
214858
  this._viewModel.riskProfile = {
214763
214859
  lowRisk,
214764
214860
  moderateRisk,
@@ -214767,37 +214863,29 @@ class ArtificialIntelligenceController {
214767
214863
  };
214768
214864
  }
214769
214865
 
214770
- createCustomConfigSuggestions(fileState, programmingLanguage) {
214866
+ calculateSuspiciousMetrics(fileState, programmingLanguage) {
214771
214867
  const metricValues = this.getSortedMetricValues(fileState, programmingLanguage);
214772
214868
  const metricAssessmentResults = this.findGoodAndBadMetrics(metricValues, programmingLanguage);
214773
214869
  const noticeableMetricSuggestionLinks = new Map();
214774
- const newCustomConfigs = [];
214775
214870
 
214776
214871
  for (const [metricName, colorRange] of metricAssessmentResults.suspiciousMetrics) {
214777
- const suspiciousMetricConfig = this.createOrUpdateCustomConfig(`Suspicious Files - Metric ${metricName.toUpperCase()} - (AI)`, this.prepareOverviewConfigState(metricName, colorRange.from, colorRange.to), fileState);
214778
- newCustomConfigs.push(suspiciousMetricConfig);
214779
- noticeableMetricSuggestionLinks.set(metricName, Object.assign(Object.assign({
214872
+ noticeableMetricSuggestionLinks.set(metricName, Object.assign({
214780
214873
  metric: metricName
214781
- }, colorRange), {
214782
- generalCustomConfigId: suspiciousMetricConfig.id
214783
- }));
214874
+ }, colorRange));
214784
214875
  const outlierThreshold = metricAssessmentResults.outliersThresholds.get(metricName);
214785
214876
 
214786
214877
  if (outlierThreshold > 0) {
214787
- const highRiskMetricConfig = this.createOrUpdateCustomConfig(`Very High Risk Files - Metric ${metricName.toUpperCase()} - (AI)`, this.prepareOutlierConfigState(metricName, outlierThreshold - 1, outlierThreshold), fileState);
214788
- newCustomConfigs.push(highRiskMetricConfig);
214789
- noticeableMetricSuggestionLinks.get(metricName).outlierCustomConfigId = highRiskMetricConfig.id;
214878
+ noticeableMetricSuggestionLinks.get(metricName).isOutlier = true;
214790
214879
  }
214791
214880
  }
214792
214881
 
214793
- _util_customConfigHelper__WEBPACK_IMPORTED_MODULE_4__.CustomConfigHelper.addCustomConfigs(newCustomConfigs);
214794
214882
  this._viewModel.suspiciousMetricSuggestionLinks = [...noticeableMetricSuggestionLinks.values()].sort(this.compareSuspiciousMetricSuggestionLinks);
214795
214883
  this._viewModel.unsuspiciousMetrics = metricAssessmentResults.unsuspiciousMetrics;
214796
214884
  }
214797
214885
 
214798
214886
  compareSuspiciousMetricSuggestionLinks(a, b) {
214799
- if (a.outlierCustomConfigId && !b.outlierCustomConfigId) return -1;
214800
- if (!a.outlierCustomConfigId && b.outlierCustomConfigId) return 1;
214887
+ if (a.isOutlier && !b.isOutlier) return -1;
214888
+ if (!a.isOutlier && b.isOutlier) return 1;
214801
214889
  return 0;
214802
214890
  }
214803
214891
 
@@ -214820,7 +214908,7 @@ class ArtificialIntelligenceController {
214820
214908
  const maxMetricValue = Math.max(...valuesOfMetric);
214821
214909
 
214822
214910
  if (maxMetricValue <= thresholdConfig.percentile70) {
214823
- metricAssessmentResults.unsuspiciousMetrics.push(`${metricName} (${_util_metric_metricDescriptions__WEBPACK_IMPORTED_MODULE_15__.metricDescriptions.get(metricName)})`);
214911
+ metricAssessmentResults.unsuspiciousMetrics.push(`${metricName} (${_util_metric_metricDescriptions__WEBPACK_IMPORTED_MODULE_11__.metricDescriptions.get(metricName)})`);
214824
214912
  } else if (maxMetricValue > thresholdConfig.percentile70) {
214825
214913
  metricAssessmentResults.suspiciousMetrics.set(metricName, {
214826
214914
  from: thresholdConfig.percentile70,
@@ -214838,49 +214926,13 @@ class ArtificialIntelligenceController {
214838
214926
  return metricAssessmentResults;
214839
214927
  }
214840
214928
 
214841
- createOrUpdateCustomConfig(configName, state, fileState) {
214842
- const customConfig = _util_customConfigHelper__WEBPACK_IMPORTED_MODULE_4__.CustomConfigHelper.getCustomConfigByName(_model_customConfig_customConfig_api_model__WEBPACK_IMPORTED_MODULE_6__.CustomConfigMapSelectionMode.SINGLE, [fileState.file.fileMeta.fileName], configName);
214843
-
214844
- if (customConfig !== null) {
214845
- _util_customConfigHelper__WEBPACK_IMPORTED_MODULE_4__.CustomConfigHelper.deleteCustomConfig(customConfig.id);
214846
- }
214847
-
214848
- return (0,_util_customConfigBuilder__WEBPACK_IMPORTED_MODULE_3__.buildCustomConfigFromState)(configName, state);
214849
- }
214850
-
214851
- prepareOverviewConfigState(metricName, colorRangeFrom, colorRangeTo) {
214852
- const state = (0,klona__WEBPACK_IMPORTED_MODULE_5__.klona)(this.storeService.getState());
214853
- state.dynamicSettings.areaMetric = "rloc";
214854
- state.dynamicSettings.heightMetric = metricName;
214855
- state.dynamicSettings.colorMetric = metricName;
214856
- state.dynamicSettings.colorRange.from = colorRangeFrom;
214857
- state.dynamicSettings.colorRange.to = colorRangeTo;
214858
- state.appSettings.mapColors.positive = _state_store_appSettings_mapColors_mapColors_actions__WEBPACK_IMPORTED_MODULE_11__.defaultMapColors.positive;
214859
- state.appSettings.mapColors.neutral = _state_store_appSettings_mapColors_mapColors_actions__WEBPACK_IMPORTED_MODULE_11__.defaultMapColors.neutral;
214860
- state.appSettings.mapColors.negative = _state_store_appSettings_mapColors_mapColors_actions__WEBPACK_IMPORTED_MODULE_11__.defaultMapColors.negative;
214861
- return state;
214862
- }
214863
-
214864
- prepareOutlierConfigState(metricName, colorRangeFrom, colorRangeTo) {
214865
- const state = (0,klona__WEBPACK_IMPORTED_MODULE_5__.klona)(this.storeService.getState());
214866
- state.dynamicSettings.areaMetric = "rloc";
214867
- state.dynamicSettings.heightMetric = metricName;
214868
- state.dynamicSettings.colorMetric = metricName;
214869
- state.dynamicSettings.colorRange.to = colorRangeTo;
214870
- state.dynamicSettings.colorRange.from = colorRangeFrom;
214871
- state.appSettings.mapColors.positive = "#ffffff";
214872
- state.appSettings.mapColors.neutral = "#ffffff";
214873
- state.appSettings.mapColors.negative = "#A900C0";
214874
- return state;
214875
- }
214876
-
214877
214929
  getSortedMetricValues(fileState, programmingLanguage) {
214878
214930
  const metricValues = {};
214879
214931
 
214880
214932
  for (const {
214881
214933
  data
214882
214934
  } of (0,d3_hierarchy__WEBPACK_IMPORTED_MODULE_17__["default"])(fileState.file.map)) {
214883
- if (data.type !== _codeCharta_model__WEBPACK_IMPORTED_MODULE_8__.NodeType.FILE || (0,_util_codeMapHelper__WEBPACK_IMPORTED_MODULE_13__.isPathBlacklisted)(data.path, this.blacklist, _codeCharta_model__WEBPACK_IMPORTED_MODULE_8__.BlacklistType.exclude) || this.getFileExtension(data.name) !== programmingLanguage) {
214935
+ if (data.type !== _codeCharta_model__WEBPACK_IMPORTED_MODULE_4__.NodeType.FILE || (0,_util_codeMapHelper__WEBPACK_IMPORTED_MODULE_9__.isPathBlacklisted)(data.path, this.blacklist, _codeCharta_model__WEBPACK_IMPORTED_MODULE_4__.BlacklistType.exclude) || this.getFileExtension(data.name) !== programmingLanguage) {
214884
214936
  continue;
214885
214937
  }
214886
214938
 
@@ -214892,7 +214944,7 @@ class ArtificialIntelligenceController {
214892
214944
  metricValues[metricIndex] = [];
214893
214945
  }
214894
214946
 
214895
- (0,_util_nodeDecorator__WEBPACK_IMPORTED_MODULE_7__.pushSorted)(metricValues[metricIndex], data.attributes[metricIndex]);
214947
+ (0,_util_nodeDecorator__WEBPACK_IMPORTED_MODULE_3__.pushSorted)(metricValues[metricIndex], data.attributes[metricIndex]);
214896
214948
  }
214897
214949
  }
214898
214950
  }
@@ -214916,7 +214968,7 @@ class ArtificialIntelligenceController {
214916
214968
  continue;
214917
214969
  }
214918
214970
 
214919
- if (data.type === _codeCharta_model__WEBPACK_IMPORTED_MODULE_8__.NodeType.FILE) {
214971
+ if (data.type === _codeCharta_model__WEBPACK_IMPORTED_MODULE_4__.NodeType.FILE) {
214920
214972
  const fileExtension = data.name.slice(data.name.lastIndexOf(".") + 1);
214921
214973
  const filesPerLanguage = (_a = numberOfFilesPerLanguage.get(fileExtension)) !== null && _a !== void 0 ? _a : 0;
214922
214974
  numberOfFilesPerLanguage.set(fileExtension, filesPerLanguage + 1);
@@ -214941,11 +214993,11 @@ class ArtificialIntelligenceController {
214941
214993
  }
214942
214994
 
214943
214995
  getAssociatedMetricThresholds(programmingLanguage) {
214944
- return programmingLanguage === "java" ? _artificialIntelligence_metricThresholds__WEBPACK_IMPORTED_MODULE_10__.metricThresholds.java : _artificialIntelligence_metricThresholds__WEBPACK_IMPORTED_MODULE_10__.metricThresholds.miscellaneous;
214996
+ return programmingLanguage === "java" ? _artificialIntelligence_metricThresholds__WEBPACK_IMPORTED_MODULE_6__.metricThresholds.java : _artificialIntelligence_metricThresholds__WEBPACK_IMPORTED_MODULE_6__.metricThresholds.miscellaneous;
214945
214997
  }
214946
214998
 
214947
214999
  }
214948
- ArtificialIntelligenceController.$inject = ["$rootScope", "storeService", "threeOrbitControlsService", "threeCameraService"];
215000
+ ArtificialIntelligenceController.$inject = ["$rootScope", "storeService"];
214949
215001
  const artificialIntelligenceComponent = {
214950
215002
  selector: "artificialIntelligenceComponent",
214951
215003
  template: __webpack_require__(/*! ./artificialIntelligence.component.html */ "./app/codeCharta/ui/artificialIntelligence/artificialIntelligence.component.html"),
@@ -216091,10 +216143,6 @@ __webpack_require__.r(__webpack_exports__);
216091
216143
  /* harmony export */ });
216092
216144
  /* harmony import */ var _codeCharta_model__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../codeCharta.model */ "./app/codeCharta/codeCharta.model.ts");
216093
216145
  /* harmony import */ var _state_store_fileSettings_edges_edges_actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../state/store/fileSettings/edges/edges.actions */ "./app/codeCharta/state/store/fileSettings/edges/edges.actions.ts");
216094
- /* 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");
216095
- /* harmony import */ var _state_store_fileSettings_markedPackages_util_addMarkedPackage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../state/store/fileSettings/markedPackages/util/addMarkedPackage */ "./app/codeCharta/state/store/fileSettings/markedPackages/util/addMarkedPackage.ts");
216096
-
216097
-
216098
216146
 
216099
216147
 
216100
216148
  class CodeMapActionsService {
@@ -216105,32 +216153,6 @@ class CodeMapActionsService {
216105
216153
  this.storeService = storeService;
216106
216154
  }
216107
216155
 
216108
- markFolder({
216109
- path
216110
- }, color) {
216111
- const {
216112
- markedPackages
216113
- } = this.storeService.getState().fileSettings;
216114
- const markedPackagesMap = new Map(markedPackages.map(entry => [entry.path, entry]));
216115
- (0,_state_store_fileSettings_markedPackages_util_addMarkedPackage__WEBPACK_IMPORTED_MODULE_3__.addMarkedPackage)(markedPackagesMap, {
216116
- path,
216117
- color
216118
- });
216119
- this.storeService.dispatch((0,_state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_2__.setMarkedPackages)([...markedPackagesMap.values()]));
216120
- }
216121
-
216122
- unmarkFolder(node) {
216123
- let index = this.storeService.getState().fileSettings.markedPackages.findIndex(mp => mp.path === node.path);
216124
-
216125
- if (index === -1) {
216126
- index = this.getParentMarkedPackageIndex(node.path);
216127
- }
216128
-
216129
- if (index !== -1) {
216130
- this.storeService.dispatch((0,_state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_2__.unmarkPackage)(index));
216131
- }
216132
- }
216133
-
216134
216156
  updateEdgePreviews() {
216135
216157
  const state = this.storeService.getState();
216136
216158
  const {
@@ -216164,21 +216186,6 @@ class CodeMapActionsService {
216164
216186
  this.storeService.dispatch((0,_state_store_fileSettings_edges_edges_actions__WEBPACK_IMPORTED_MODULE_1__.setEdges)(edges));
216165
216187
  }
216166
216188
 
216167
- getParentMarkedPackageIndex(path) {
216168
- const markedPackages = this.storeService.getState().fileSettings.markedPackages;
216169
- let index = -1;
216170
-
216171
- for (let loopIndex = 0; loopIndex < markedPackages.length; loopIndex++) {
216172
- const markedPackage = markedPackages[loopIndex];
216173
-
216174
- if (path.startsWith(markedPackage.path) && path !== markedPackage.path && (index === -1 || markedPackages[index].path.length < markedPackage.path.length)) {
216175
- index = loopIndex;
216176
- }
216177
- }
216178
-
216179
- return index;
216180
- }
216181
-
216182
216189
  }
216183
216190
  CodeMapActionsService.$inject = ["edgeMetricDataService", "storeService"];
216184
216191
 
@@ -216986,12 +216993,6 @@ class CodeMapMouseEventService {
216986
216993
  });
216987
216994
  }
216988
216995
 
216989
- static subscribeToBuildingRightClickedEvents($rootScope, subscriber) {
216990
- $rootScope.$on(this.BUILDING_RIGHT_CLICKED_EVENT, (_event, data) => {
216991
- subscriber.onBuildingRightClicked(data.building, data.x, data.y);
216992
- });
216993
- }
216994
-
216995
216996
  start() {
216996
216997
  this.threeRendererService.renderer.domElement.addEventListener("mousemove", event => this.onDocumentMouseMove(event));
216997
216998
  this.threeRendererService.renderer.domElement.addEventListener("mouseup", event => this.onDocumentMouseUp(event));
@@ -217252,11 +217253,13 @@ class CodeMapMouseEventService {
217252
217253
  const building = this.intersectedBuilding;
217253
217254
 
217254
217255
  if (building && !this.hasMouseMovedMoreThanThreePixels(this.mouseOnLastClick)) {
217255
- this.$rootScope.$broadcast(CodeMapMouseEventService.BUILDING_RIGHT_CLICKED_EVENT, {
217256
- building,
217257
- x: this.mouse.x,
217258
- y: this.mouse.y
217259
- });
217256
+ document.dispatchEvent(new CustomEvent("building-right-clicked", {
217257
+ detail: {
217258
+ building,
217259
+ x: this.mouse.x,
217260
+ y: this.mouse.y
217261
+ }
217262
+ }));
217260
217263
  }
217261
217264
 
217262
217265
  this.threeUpdateCycleService.update();
@@ -217360,7 +217363,6 @@ class CodeMapMouseEventService {
217360
217363
  CodeMapMouseEventService.$inject = ["$rootScope", "$window", "threeCameraService", "threeRendererService", "threeSceneService", "threeUpdateCycleService", "storeService", "codeMapLabelService", "codeMapPreRenderService", "viewCubeMouseEventsService", "threeViewerService"];
217361
217364
  CodeMapMouseEventService.BUILDING_HOVERED_EVENT = "building-hovered";
217362
217365
  CodeMapMouseEventService.BUILDING_UNHOVERED_EVENT = "building-unhovered";
217363
- CodeMapMouseEventService.BUILDING_RIGHT_CLICKED_EVENT = "building-right-clicked";
217364
217366
 
217365
217367
  /***/ }),
217366
217368
 
@@ -220037,6 +220039,7 @@ __webpack_require__.r(__webpack_exports__);
220037
220039
  /* harmony export */ "ColorPickerComponent": () => (/* binding */ ColorPickerComponent)
220038
220040
  /* harmony export */ });
220039
220041
  /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
220042
+ /* harmony import */ var _angular_material_menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/material/menu */ "./node_modules/@angular/material/fesm2015/menu.js");
220040
220043
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
220041
220044
  var c = arguments.length,
220042
220045
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -220050,21 +220053,60 @@ var __metadata = undefined && undefined.__metadata || function (k, v) {
220050
220053
  };
220051
220054
 
220052
220055
 
220056
+
220053
220057
  let ColorPickerComponent = class ColorPickerComponent {
220054
220058
  constructor() {
220059
+ this.openXPosition = "after";
220055
220060
  this.onColorChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__.EventEmitter();
220061
+ this.isHovered = false;
220062
+ this.isClickInside = false;
220056
220063
  }
220057
220064
 
220058
220065
  handleChangeComplete(hexColor) {
220059
220066
  this.onColorChange.emit(hexColor);
220060
220067
  }
220061
220068
 
220069
+ onMouseEnter() {
220070
+ this.isHovered = true;
220071
+ }
220072
+
220073
+ onMouseLeave() {
220074
+ this.isHovered = false;
220075
+ }
220076
+
220077
+ onClick() {
220078
+ this.isClickInside = true;
220079
+ this.colorPickerMenuTrigger.openMenu();
220080
+ }
220081
+
220082
+ handleDocumentClick() {
220083
+ if (!this.isClickInside && this.colorPickerMenuTrigger.menuOpen) {
220084
+ this.colorPickerMenuTrigger.closeMenu();
220085
+ }
220086
+
220087
+ this.isClickInside = false;
220088
+ }
220089
+
220062
220090
  };
220063
220091
 
220064
220092
  __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", String)], ColorPickerComponent.prototype, "hexColor", void 0);
220065
220093
 
220094
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", String)], ColorPickerComponent.prototype, "openXPosition", void 0);
220095
+
220096
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Input)(), __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__.TemplateRef)], ColorPickerComponent.prototype, "triggerTemplate", void 0);
220097
+
220066
220098
  __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Output)(), __metadata("design:type", Object)], ColorPickerComponent.prototype, "onColorChange", void 0);
220067
220099
 
220100
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.ViewChild)("colorPickerMenuTrigger"), __metadata("design:type", _angular_material_menu__WEBPACK_IMPORTED_MODULE_1__.MatMenuTrigger)], ColorPickerComponent.prototype, "colorPickerMenuTrigger", void 0);
220101
+
220102
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.HostListener)("mouseenter"), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0)], ColorPickerComponent.prototype, "onMouseEnter", null);
220103
+
220104
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.HostListener)("mouseleave"), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0)], ColorPickerComponent.prototype, "onMouseLeave", null);
220105
+
220106
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.HostListener)("click"), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0)], ColorPickerComponent.prototype, "onClick", null);
220107
+
220108
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.HostListener)("document:click"), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0)], ColorPickerComponent.prototype, "handleDocumentClick", null);
220109
+
220068
220110
  ColorPickerComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Component)({
220069
220111
  selector: "cc-color-picker",
220070
220112
  template: __webpack_require__(/*! ./colorPicker.component.html */ "./app/codeCharta/ui/colorPicker/colorPicker.component.html")
@@ -220084,10 +220126,11 @@ __webpack_require__.r(__webpack_exports__);
220084
220126
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
220085
220127
  /* harmony export */ "ColorPickerModule": () => (/* binding */ ColorPickerModule)
220086
220128
  /* harmony export */ });
220087
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm2015/common.js");
220088
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
220089
- /* harmony import */ var ngx_color_chrome__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ngx-color/chrome */ "./node_modules/ngx-color/fesm2020/ngx-color-chrome.mjs");
220090
- /* harmony import */ var _colorPicker_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./colorPicker.component */ "./app/codeCharta/ui/colorPicker/colorPicker.component.ts");
220129
+ /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm2015/common.js");
220130
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
220131
+ /* harmony import */ var ngx_color_chrome__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ngx-color/chrome */ "./node_modules/ngx-color/fesm2020/ngx-color-chrome.mjs");
220132
+ /* harmony import */ var _material_material_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../material/material.module */ "./app/material/material.module.ts");
220133
+ /* harmony import */ var _colorPicker_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colorPicker.component */ "./app/codeCharta/ui/colorPicker/colorPicker.component.ts");
220091
220134
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
220092
220135
  var c = arguments.length,
220093
220136
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -220100,11 +220143,12 @@ var __decorate = undefined && undefined.__decorate || function (decorators, targ
220100
220143
 
220101
220144
 
220102
220145
 
220146
+
220103
220147
  let ColorPickerModule = class ColorPickerModule {};
220104
- ColorPickerModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.NgModule)({
220105
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_2__.CommonModule, ngx_color_chrome__WEBPACK_IMPORTED_MODULE_3__.ColorChromeModule],
220106
- declarations: [_colorPicker_component__WEBPACK_IMPORTED_MODULE_0__.ColorPickerComponent],
220107
- exports: [_colorPicker_component__WEBPACK_IMPORTED_MODULE_0__.ColorPickerComponent]
220148
+ ColorPickerModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_2__.NgModule)({
220149
+ imports: [_angular_common__WEBPACK_IMPORTED_MODULE_3__.CommonModule, ngx_color_chrome__WEBPACK_IMPORTED_MODULE_4__.ColorChromeModule, _material_material_module__WEBPACK_IMPORTED_MODULE_0__.MaterialModule],
220150
+ declarations: [_colorPicker_component__WEBPACK_IMPORTED_MODULE_1__.ColorPickerComponent],
220151
+ exports: [_colorPicker_component__WEBPACK_IMPORTED_MODULE_1__.ColorPickerComponent]
220108
220152
  })], ColorPickerModule);
220109
220153
 
220110
220154
 
@@ -220558,9 +220602,12 @@ class CustomConfigsController {
220558
220602
  this.threeCameraService = threeCameraService;
220559
220603
  this._viewModel = {
220560
220604
  dropDownCustomConfigItemGroups: [],
220561
- hasDownloadableConfigs: false
220605
+ hasDownloadableConfigs: false,
220606
+ showNonApplicableButton: false,
220607
+ visibleEntries: 0
220562
220608
  };
220563
220609
  this.downloadableConfigs = new Map();
220610
+ this.applicableEntries = 0;
220564
220611
  _state_store_files_files_service__WEBPACK_IMPORTED_MODULE_2__.FilesService.subscribe(this.$rootScope, this);
220565
220612
  }
220566
220613
 
@@ -220572,6 +220619,7 @@ class CustomConfigsController {
220572
220619
  initView() {
220573
220620
  this.loadCustomConfigs();
220574
220621
  this.preloadDownloadableConfigs();
220622
+ this.initVisibleEntries();
220575
220623
  }
220576
220624
 
220577
220625
  loadCustomConfigs() {
@@ -220589,8 +220637,45 @@ class CustomConfigsController {
220589
220637
  _util_customConfigHelper__WEBPACK_IMPORTED_MODULE_1__.CustomConfigHelper.applyCustomConfig(configId, this.storeService, this.threeCameraService, this.threeOrbitControlsService);
220590
220638
  }
220591
220639
 
220592
- removeCustomConfig(configId) {
220640
+ removeCustomConfig(configId, customConfigItemIndex, dropDownCustomConfigItemGroupIndex) {
220641
+ const {
220642
+ dropDownCustomConfigItemGroups
220643
+ } = this._viewModel;
220593
220644
  _util_customConfigHelper__WEBPACK_IMPORTED_MODULE_1__.CustomConfigHelper.deleteCustomConfig(configId);
220645
+ dropDownCustomConfigItemGroups[dropDownCustomConfigItemGroupIndex].customConfigItems.splice(customConfigItemIndex, 1);
220646
+
220647
+ if (dropDownCustomConfigItemGroups[dropDownCustomConfigItemGroupIndex].customConfigItems.length === 0) {
220648
+ if (dropDownCustomConfigItemGroups[dropDownCustomConfigItemGroupIndex].hasApplicableItems) {
220649
+ this.applicableEntries--;
220650
+ }
220651
+
220652
+ dropDownCustomConfigItemGroups.splice(dropDownCustomConfigItemGroupIndex, 1);
220653
+ this._viewModel.visibleEntries--;
220654
+ this.previousEntries--;
220655
+ this.updateButtonVisibility();
220656
+ }
220657
+ }
220658
+
220659
+ initVisibleEntries() {
220660
+ var _a;
220661
+
220662
+ this.applicableEntries = 0;
220663
+
220664
+ while ((_a = this._viewModel.dropDownCustomConfigItemGroups[this.applicableEntries]) === null || _a === void 0 ? void 0 : _a.hasApplicableItems) {
220665
+ this.applicableEntries++;
220666
+ }
220667
+
220668
+ this._viewModel.visibleEntries = this.applicableEntries;
220669
+ this.updateButtonVisibility();
220670
+ }
220671
+
220672
+ toggleNonApplicableItems() {
220673
+ if (!this.isExpanded()) {
220674
+ this.previousEntries = this._viewModel.visibleEntries;
220675
+ this._viewModel.visibleEntries = this._viewModel.dropDownCustomConfigItemGroups.length;
220676
+ } else {
220677
+ this._viewModel.visibleEntries = this.previousEntries;
220678
+ }
220594
220679
  }
220595
220680
 
220596
220681
  downloadPreloadedCustomConfigs() {
@@ -220626,6 +220711,20 @@ class CustomConfigsController {
220626
220711
  return false;
220627
220712
  }
220628
220713
 
220714
+ isExpanded() {
220715
+ return this._viewModel.visibleEntries === this._viewModel.dropDownCustomConfigItemGroups.length;
220716
+ }
220717
+
220718
+ updateButtonVisibility() {
220719
+ if (this._viewModel.dropDownCustomConfigItemGroups.length === 0) {
220720
+ this._viewModel.showNonApplicableButton = false;
220721
+ } else if (this.applicableEntries < this._viewModel.dropDownCustomConfigItemGroups.length) {
220722
+ this._viewModel.showNonApplicableButton = true;
220723
+ } else {
220724
+ this._viewModel.showNonApplicableButton = false;
220725
+ }
220726
+ }
220727
+
220629
220728
  }
220630
220729
  CustomConfigsController.$inject = ["$rootScope", "storeService", "dialogService", "threeOrbitControlsService", "threeCameraService"];
220631
220730
  const customConfigsComponent = {
@@ -222747,7 +222846,6 @@ __webpack_require__.r(__webpack_exports__);
222747
222846
  /* harmony export */ });
222748
222847
  /* harmony import */ var _labelledColorPicker_component_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./labelledColorPicker.component.scss */ "./app/codeCharta/ui/labelledColorPicker/labelledColorPicker.component.scss");
222749
222848
  /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
222750
- /* harmony import */ var _angular_material_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/material/menu */ "./node_modules/@angular/material/fesm2015/menu.js");
222751
222849
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
222752
222850
  var c = arguments.length,
222753
222851
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -222762,40 +222860,9 @@ var __metadata = undefined && undefined.__metadata || function (k, v) {
222762
222860
 
222763
222861
 
222764
222862
 
222765
-
222766
222863
  let LabelledColorPickerComponent = class LabelledColorPickerComponent {
222767
222864
  constructor() {
222768
222865
  this.onColorChange = new _angular_core__WEBPACK_IMPORTED_MODULE_1__.EventEmitter();
222769
- this.isClickInside = false;
222770
- }
222771
-
222772
- onMouseEnter() {
222773
- this.brush.nativeElement.style.opacity = "1";
222774
- }
222775
-
222776
- onMouseLeave() {
222777
- if (!this.colorPickerMenuTrigger.menuOpen) this.brush.nativeElement.style.opacity = "0";
222778
- }
222779
-
222780
- onClick() {
222781
- this.isClickInside = true;
222782
- const menuOpenedSubscription = this.colorPickerMenuTrigger.menuOpened.subscribe(() => {
222783
- this.brush.nativeElement.style.opacity = "1";
222784
- menuOpenedSubscription.unsubscribe();
222785
- });
222786
- const menuClosedSubscription = this.colorPickerMenuTrigger.menuClosed.subscribe(() => {
222787
- this.brush.nativeElement.style.opacity = "0";
222788
- menuClosedSubscription.unsubscribe();
222789
- });
222790
- this.colorPickerMenuTrigger.openMenu();
222791
- }
222792
-
222793
- handleDocumentClick() {
222794
- if (!this.isClickInside && this.colorPickerMenuTrigger && this.colorPickerMenuTrigger.menuOpen) {
222795
- this.colorPickerMenuTrigger.closeMenu();
222796
- }
222797
-
222798
- this.isClickInside = false;
222799
222866
  }
222800
222867
 
222801
222868
  handleColorChange(hexColor) {
@@ -222810,18 +222877,6 @@ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.Input)(), __metadata("
222810
222877
 
222811
222878
  __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.Output)(), __metadata("design:type", Object)], LabelledColorPickerComponent.prototype, "onColorChange", void 0);
222812
222879
 
222813
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewChild)("colorPickerMenuTrigger"), __metadata("design:type", _angular_material_menu__WEBPACK_IMPORTED_MODULE_2__.MatMenuTrigger)], LabelledColorPickerComponent.prototype, "colorPickerMenuTrigger", void 0);
222814
-
222815
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewChild)("brush"), __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_1__.ElementRef)], LabelledColorPickerComponent.prototype, "brush", void 0);
222816
-
222817
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.HostListener)("mouseenter"), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0)], LabelledColorPickerComponent.prototype, "onMouseEnter", null);
222818
-
222819
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.HostListener)("mouseleave"), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0)], LabelledColorPickerComponent.prototype, "onMouseLeave", null);
222820
-
222821
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.HostListener)("click"), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0)], LabelledColorPickerComponent.prototype, "onClick", null);
222822
-
222823
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.HostListener)("document:click"), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0)], LabelledColorPickerComponent.prototype, "handleDocumentClick", null);
222824
-
222825
222880
  LabelledColorPickerComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.Component)({
222826
222881
  selector: "cc-labelled-color-picker",
222827
222882
  template: __webpack_require__(/*! ./labelledColorPicker.component.html */ "./app/codeCharta/ui/labelledColorPicker/labelledColorPicker.component.html")
@@ -222841,12 +222896,11 @@ __webpack_require__.r(__webpack_exports__);
222841
222896
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
222842
222897
  /* harmony export */ "LabelledColorPickerModule": () => (/* binding */ LabelledColorPickerModule)
222843
222898
  /* harmony export */ });
222844
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm2015/common.js");
222845
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
222846
- /* harmony import */ var _material_material_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../material/material.module */ "./app/material/material.module.ts");
222847
- /* harmony import */ var _colorPicker_colorPicker_module__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../colorPicker/colorPicker.module */ "./app/codeCharta/ui/colorPicker/colorPicker.module.ts");
222848
- /* harmony import */ var _labelledColorPicker_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./labelledColorPicker.component */ "./app/codeCharta/ui/labelledColorPicker/labelledColorPicker.component.ts");
222849
- /* harmony import */ var _readableColorForBackground_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./readableColorForBackground.pipe */ "./app/codeCharta/ui/labelledColorPicker/readableColorForBackground.pipe.ts");
222899
+ /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm2015/common.js");
222900
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
222901
+ /* harmony import */ var _colorPicker_colorPicker_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colorPicker/colorPicker.module */ "./app/codeCharta/ui/colorPicker/colorPicker.module.ts");
222902
+ /* harmony import */ var _labelledColorPicker_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./labelledColorPicker.component */ "./app/codeCharta/ui/labelledColorPicker/labelledColorPicker.component.ts");
222903
+ /* harmony import */ var _readableColorForBackground_pipe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./readableColorForBackground.pipe */ "./app/codeCharta/ui/labelledColorPicker/readableColorForBackground.pipe.ts");
222850
222904
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
222851
222905
  var c = arguments.length,
222852
222906
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -222860,12 +222914,11 @@ var __decorate = undefined && undefined.__decorate || function (decorators, targ
222860
222914
 
222861
222915
 
222862
222916
 
222863
-
222864
222917
  let LabelledColorPickerModule = class LabelledColorPickerModule {};
222865
- LabelledColorPickerModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_4__.NgModule)({
222866
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_5__.CommonModule, _colorPicker_colorPicker_module__WEBPACK_IMPORTED_MODULE_1__.ColorPickerModule, _material_material_module__WEBPACK_IMPORTED_MODULE_0__.MaterialModule],
222867
- declarations: [_labelledColorPicker_component__WEBPACK_IMPORTED_MODULE_2__.LabelledColorPickerComponent, _readableColorForBackground_pipe__WEBPACK_IMPORTED_MODULE_3__.ReadableColorForBackgroundPipe],
222868
- exports: [_labelledColorPicker_component__WEBPACK_IMPORTED_MODULE_2__.LabelledColorPickerComponent]
222918
+ LabelledColorPickerModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_3__.NgModule)({
222919
+ imports: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.CommonModule, _colorPicker_colorPicker_module__WEBPACK_IMPORTED_MODULE_0__.ColorPickerModule],
222920
+ declarations: [_labelledColorPicker_component__WEBPACK_IMPORTED_MODULE_1__.LabelledColorPickerComponent, _readableColorForBackground_pipe__WEBPACK_IMPORTED_MODULE_2__.ReadableColorForBackgroundPipe],
222921
+ exports: [_labelledColorPicker_component__WEBPACK_IMPORTED_MODULE_1__.LabelledColorPickerComponent]
222869
222922
  })], LabelledColorPickerModule);
222870
222923
 
222871
222924
 
@@ -223070,7 +223123,7 @@ let LegendMarkedPackagesComponent = class LegendMarkedPackagesComponent {
223070
223123
  }
223071
223124
 
223072
223125
  handleColorChange(newHexColor, paths) {
223073
- this.store.dispatch((0,_state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_3__.calculateMarkedPackages)(paths.map(path => ({
223126
+ this.store.dispatch((0,_state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_3__.markPackages)(paths.map(path => ({
223074
223127
  color: newHexColor,
223075
223128
  path
223076
223129
  }))));
@@ -224606,20 +224659,23 @@ angular__WEBPACK_IMPORTED_MODULE_1___default().module("app.codeCharta.ui.metricV
224606
224659
 
224607
224660
  /***/ }),
224608
224661
 
224609
- /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts":
224610
- /*!****************************************************************************************************!*\
224611
- !*** ./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts ***!
224612
- \****************************************************************************************************/
224662
+ /***/ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.ts":
224663
+ /*!**********************************************************************************!*\
224664
+ !*** ./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.ts ***!
224665
+ \**********************************************************************************/
224613
224666
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
224614
224667
 
224615
224668
  "use strict";
224616
224669
  __webpack_require__.r(__webpack_exports__);
224617
224670
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
224618
- /* harmony export */ "MarkFolderColorPickerComponent": () => (/* binding */ MarkFolderColorPickerComponent)
224671
+ /* harmony export */ "FocusButtonsComponent": () => (/* binding */ FocusButtonsComponent)
224619
224672
  /* harmony export */ });
224620
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
224621
- /* harmony import */ var _angular_material_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/material/menu */ "./node_modules/@angular/material/fesm2015/menu.js");
224622
- /* harmony import */ var _markFolderColorPicker_component_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./markFolderColorPicker.component.scss */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.scss");
224673
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
224674
+ /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/dist/esm5/internal/operators/map.js");
224675
+ /* harmony import */ var _state_angular_redux_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../state/angular-redux/store */ "./app/codeCharta/state/angular-redux/store.ts");
224676
+ /* harmony import */ var _state_store_dynamicSettings_focusedNodePath_currentFocused_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../state/store/dynamicSettings/focusedNodePath/currentFocused.selector */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/currentFocused.selector.ts");
224677
+ /* harmony import */ var _state_store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions.ts");
224678
+ /* harmony import */ var _state_store_dynamicSettings_focusedNodePath_focusedNodePath_selector__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../state/store/dynamicSettings/focusedNodePath/focusedNodePath.selector */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.selector.ts");
224623
224679
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
224624
224680
  var c = arguments.length,
224625
224681
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -224632,35 +224688,160 @@ var __metadata = undefined && undefined.__metadata || function (k, v) {
224632
224688
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
224633
224689
  };
224634
224690
 
224691
+ var __param = undefined && undefined.__param || function (paramIndex, decorator) {
224692
+ return function (target, key) {
224693
+ decorator(target, key, paramIndex);
224694
+ };
224695
+ };
224696
+
224635
224697
 
224636
224698
 
224637
224699
 
224638
- let MarkFolderColorPickerComponent = class MarkFolderColorPickerComponent {
224639
- constructor() {
224640
- this.isClickInside = false;
224700
+
224701
+
224702
+
224703
+ let FocusButtonsComponent = class FocusButtonsComponent {
224704
+ constructor(store) {
224705
+ this.store = store;
224706
+ this.currentFocusedNodePath$ = this.store.select(_state_store_dynamicSettings_focusedNodePath_currentFocused_selector__WEBPACK_IMPORTED_MODULE_1__.currentFocusedNodePathSelector);
224707
+ this.hasPreviousFocusedNodePath$ = this.store.select(_state_store_dynamicSettings_focusedNodePath_focusedNodePath_selector__WEBPACK_IMPORTED_MODULE_3__.focusedNodePathSelector).pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_4__.map)(focusedNodePaths => focusedNodePaths.length > 1));
224641
224708
  }
224642
224709
 
224643
- onClick() {
224644
- this.isClickInside = true;
224710
+ handleFocusNodeClicked() {
224711
+ this.store.dispatch((0,_state_store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_2__.focusNode)(this.codeMapNode.path));
224645
224712
  }
224646
224713
 
224647
- handleDocumentClick() {
224648
- if (!this.isClickInside && this.colorPickerMenuTrigger && this.colorPickerMenuTrigger.menuOpen) {
224649
- this.colorPickerMenuTrigger.closeMenu();
224650
- }
224714
+ handleUnfocusNodeClicked() {
224715
+ this.store.dispatch((0,_state_store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_2__.unfocusNode)());
224716
+ }
224651
224717
 
224652
- this.isClickInside = false;
224718
+ handleUnfocusAllNodesClicked() {
224719
+ this.store.dispatch((0,_state_store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_2__.unfocusAllNodes)());
224653
224720
  }
224654
224721
 
224655
224722
  };
224656
224723
 
224657
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.Input)(), __metadata("design:type", Function)], MarkFolderColorPickerComponent.prototype, "markFolder", void 0);
224724
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_5__.Input)(), __metadata("design:type", Object)], FocusButtonsComponent.prototype, "codeMapNode", void 0);
224658
224725
 
224659
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.ViewChild)("colorPickerMenuTrigger"), __metadata("design:type", _angular_material_menu__WEBPACK_IMPORTED_MODULE_2__.MatMenuTrigger)], MarkFolderColorPickerComponent.prototype, "colorPickerMenuTrigger", void 0);
224726
+ FocusButtonsComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_5__.Component)({
224727
+ selector: "cc-focus-buttons",
224728
+ template: __webpack_require__(/*! ./focusButtons.component.html */ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.html")
224729
+ }), __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])], FocusButtonsComponent);
224660
224730
 
224661
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.HostListener)("click"), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0)], MarkFolderColorPickerComponent.prototype, "onClick", null);
224662
224731
 
224663
- __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.HostListener)("document:click"), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0)], MarkFolderColorPickerComponent.prototype, "handleDocumentClick", null);
224732
+ /***/ }),
224733
+
224734
+ /***/ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.module.ts":
224735
+ /*!*******************************************************************************!*\
224736
+ !*** ./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.module.ts ***!
224737
+ \*******************************************************************************/
224738
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
224739
+
224740
+ "use strict";
224741
+ __webpack_require__.r(__webpack_exports__);
224742
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
224743
+ /* harmony export */ "FocusButtonsModule": () => (/* binding */ FocusButtonsModule)
224744
+ /* harmony export */ });
224745
+ /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm2015/common.js");
224746
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
224747
+ /* harmony import */ var _material_material_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../material/material.module */ "./app/material/material.module.ts");
224748
+ /* harmony import */ var _focusButtons_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./focusButtons.component */ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.ts");
224749
+ /* harmony import */ var _isNodeFocused_pipe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isNodeFocused.pipe */ "./app/codeCharta/ui/nodeContextMenu/focusButtons/isNodeFocused.pipe.ts");
224750
+ var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
224751
+ var c = arguments.length,
224752
+ r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
224753
+ d;
224754
+ 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;
224755
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
224756
+ };
224757
+
224758
+
224759
+
224760
+
224761
+
224762
+
224763
+ let FocusButtonsModule = class FocusButtonsModule {};
224764
+ FocusButtonsModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_3__.NgModule)({
224765
+ imports: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.CommonModule, _material_material_module__WEBPACK_IMPORTED_MODULE_0__.MaterialModule],
224766
+ declarations: [_focusButtons_component__WEBPACK_IMPORTED_MODULE_1__.FocusButtonsComponent, _isNodeFocused_pipe__WEBPACK_IMPORTED_MODULE_2__.IsNodeFocusedPipe],
224767
+ exports: [_focusButtons_component__WEBPACK_IMPORTED_MODULE_1__.FocusButtonsComponent]
224768
+ })], FocusButtonsModule);
224769
+
224770
+
224771
+ /***/ }),
224772
+
224773
+ /***/ "./app/codeCharta/ui/nodeContextMenu/focusButtons/isNodeFocused.pipe.ts":
224774
+ /*!******************************************************************************!*\
224775
+ !*** ./app/codeCharta/ui/nodeContextMenu/focusButtons/isNodeFocused.pipe.ts ***!
224776
+ \******************************************************************************/
224777
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
224778
+
224779
+ "use strict";
224780
+ __webpack_require__.r(__webpack_exports__);
224781
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
224782
+ /* harmony export */ "IsNodeFocusedPipe": () => (/* binding */ IsNodeFocusedPipe)
224783
+ /* harmony export */ });
224784
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
224785
+ var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
224786
+ var c = arguments.length,
224787
+ r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
224788
+ d;
224789
+ 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;
224790
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
224791
+ };
224792
+
224793
+
224794
+ let IsNodeFocusedPipe = class IsNodeFocusedPipe {
224795
+ transform(focusedNodePath, node) {
224796
+ if (!focusedNodePath) return {
224797
+ isNodeFocused: false,
224798
+ isParentFocused: false
224799
+ };
224800
+ const isNodeFocused = focusedNodePath === node.path;
224801
+ return {
224802
+ isNodeFocused,
224803
+ isParentFocused: !isNodeFocused && node.path.startsWith(focusedNodePath)
224804
+ };
224805
+ }
224806
+
224807
+ };
224808
+ IsNodeFocusedPipe = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_0__.Pipe)({
224809
+ name: "isNodeFocused"
224810
+ })], IsNodeFocusedPipe);
224811
+
224812
+
224813
+ /***/ }),
224814
+
224815
+ /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts":
224816
+ /*!****************************************************************************************************!*\
224817
+ !*** ./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts ***!
224818
+ \****************************************************************************************************/
224819
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
224820
+
224821
+ "use strict";
224822
+ __webpack_require__.r(__webpack_exports__);
224823
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
224824
+ /* harmony export */ "MarkFolderColorPickerComponent": () => (/* binding */ MarkFolderColorPickerComponent)
224825
+ /* harmony export */ });
224826
+ /* harmony import */ var _markFolderColorPicker_component_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./markFolderColorPicker.component.scss */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.scss");
224827
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
224828
+ var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
224829
+ var c = arguments.length,
224830
+ r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
224831
+ d;
224832
+ 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;
224833
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
224834
+ };
224835
+
224836
+ var __metadata = undefined && undefined.__metadata || function (k, v) {
224837
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
224838
+ };
224839
+
224840
+
224841
+
224842
+ let MarkFolderColorPickerComponent = class MarkFolderColorPickerComponent {};
224843
+
224844
+ __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.Input)(), __metadata("design:type", Function)], MarkFolderColorPickerComponent.prototype, "markFolder", void 0);
224664
224845
 
224665
224846
  MarkFolderColorPickerComponent = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_1__.Component)({
224666
224847
  selector: "cc-mark-folder-color-picker",
@@ -224681,11 +224862,10 @@ __webpack_require__.r(__webpack_exports__);
224681
224862
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
224682
224863
  /* harmony export */ "MarkFolderColorPickerModule": () => (/* binding */ MarkFolderColorPickerModule)
224683
224864
  /* harmony export */ });
224684
- /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm2015/common.js");
224685
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
224686
- /* harmony import */ var _material_material_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../material/material.module */ "./app/material/material.module.ts");
224687
- /* harmony import */ var _colorPicker_colorPicker_module__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../colorPicker/colorPicker.module */ "./app/codeCharta/ui/colorPicker/colorPicker.module.ts");
224688
- /* harmony import */ var _markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./markFolderColorPicker.component */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts");
224865
+ /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm2015/common.js");
224866
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
224867
+ /* harmony import */ var _colorPicker_colorPicker_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../colorPicker/colorPicker.module */ "./app/codeCharta/ui/colorPicker/colorPicker.module.ts");
224868
+ /* harmony import */ var _markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./markFolderColorPicker.component */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts");
224689
224869
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
224690
224870
  var c = arguments.length,
224691
224871
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -224698,12 +224878,11 @@ var __decorate = undefined && undefined.__decorate || function (decorators, targ
224698
224878
 
224699
224879
 
224700
224880
 
224701
-
224702
224881
  let MarkFolderColorPickerModule = class MarkFolderColorPickerModule {};
224703
- MarkFolderColorPickerModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_3__.NgModule)({
224704
- imports: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.CommonModule, _material_material_module__WEBPACK_IMPORTED_MODULE_0__.MaterialModule, _colorPicker_colorPicker_module__WEBPACK_IMPORTED_MODULE_1__.ColorPickerModule],
224705
- declarations: [_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_2__.MarkFolderColorPickerComponent],
224706
- exports: [_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_2__.MarkFolderColorPickerComponent]
224882
+ MarkFolderColorPickerModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_2__.NgModule)({
224883
+ imports: [_angular_common__WEBPACK_IMPORTED_MODULE_3__.CommonModule, _colorPicker_colorPicker_module__WEBPACK_IMPORTED_MODULE_0__.ColorPickerModule],
224884
+ declarations: [_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_1__.MarkFolderColorPickerComponent],
224885
+ exports: [_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_1__.MarkFolderColorPickerComponent]
224707
224886
  })], MarkFolderColorPickerModule);
224708
224887
 
224709
224888
 
@@ -224727,11 +224906,11 @@ __webpack_require__.r(__webpack_exports__);
224727
224906
  /* harmony import */ var angular__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(angular__WEBPACK_IMPORTED_MODULE_1__);
224728
224907
  /* harmony import */ var _codeCharta_model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../codeCharta.model */ "./app/codeCharta/codeCharta.model.ts");
224729
224908
  /* 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");
224730
- /* harmony import */ var _state_store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions.ts");
224731
- /* harmony import */ var _codeMap_codeMap_mouseEvent_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../codeMap/codeMap.mouseEvent.service */ "./app/codeCharta/ui/codeMap/codeMap.mouseEvent.service.ts");
224732
- /* harmony import */ var _state_store_appSettings_mapColors_mapColors_service__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../state/store/appSettings/mapColors/mapColors.service */ "./app/codeCharta/state/store/appSettings/mapColors/mapColors.service.ts");
224733
- /* harmony import */ var _util_codeMapHelper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/codeMapHelper */ "./app/codeCharta/util/codeMapHelper.ts");
224734
- /* harmony import */ var _util_fileValidator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/fileValidator */ "./app/codeCharta/util/fileValidator.ts");
224909
+ /* 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");
224910
+ /* harmony import */ var _util_codeMapHelper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/codeMapHelper */ "./app/codeCharta/util/codeMapHelper.ts");
224911
+ /* harmony import */ var _util_fileValidator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/fileValidator */ "./app/codeCharta/util/fileValidator.ts");
224912
+ /* 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");
224913
+ /* 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");
224735
224914
 
224736
224915
 
224737
224916
 
@@ -224748,14 +224927,13 @@ var ClickType;
224748
224927
  })(ClickType || (ClickType = {}));
224749
224928
 
224750
224929
  class NodeContextMenuController {
224751
- constructor($element, $window, $rootScope, storeService, codeMapActionsService, codeMapPreRenderService, threeSceneService, dialogService, blacklistService) {
224930
+ constructor($element, $window, $rootScope, storeService, codeMapPreRenderService, threeSceneService, dialogService, blacklistService) {
224752
224931
  "ngInject";
224753
224932
 
224754
224933
  this.$element = $element;
224755
224934
  this.$window = $window;
224756
224935
  this.$rootScope = $rootScope;
224757
224936
  this.storeService = storeService;
224758
- this.codeMapActionsService = codeMapActionsService;
224759
224937
  this.codeMapPreRenderService = codeMapPreRenderService;
224760
224938
  this.threeSceneService = threeSceneService;
224761
224939
  this.dialogService = dialogService;
@@ -224765,37 +224943,49 @@ class NodeContextMenuController {
224765
224943
  showNodeContextMenu: false,
224766
224944
  markingColors: null,
224767
224945
  nodePath: "",
224768
- lastPartOfNodePath: "",
224769
- isNodeFocused: false,
224770
- isParentFocused: false
224946
+ lastPartOfNodePath: ""
224947
+ };
224948
+
224949
+ this.onBuildingRightClicked = ({
224950
+ detail: {
224951
+ building,
224952
+ x,
224953
+ y
224954
+ }
224955
+ }) => {
224956
+ const nodeType = building.node.isLeaf ? _codeCharta_model__WEBPACK_IMPORTED_MODULE_2__.NodeType.FILE : _codeCharta_model__WEBPACK_IMPORTED_MODULE_2__.NodeType.FOLDER;
224957
+ this.onShowNodeContextMenu(building.node.path, nodeType, x, y);
224771
224958
  };
224772
224959
 
224773
224960
  this.onBodyLeftClickHideNodeContextMenu = mouseEvent => {
224774
224961
  if (this.isEventFromColorPicker(mouseEvent)) return;
224775
- NodeContextMenuController.broadcastHideEvent(this.$rootScope);
224776
- document.body.removeEventListener("click", this.onBodyLeftClickHideNodeContextMenu, true);
224962
+ this.hideContextMenu();
224777
224963
  };
224778
224964
 
224779
224965
  this.onBodyRightClickHideNodeContextMenu = event => {
224780
224966
  if (event.button === ClickType.RightClick) {
224781
- NodeContextMenuController.broadcastHideEvent(this.$rootScope);
224967
+ this.hideContextMenu();
224782
224968
  }
224783
-
224784
- document.body.removeEventListener("mousedown", this.onBodyRightClickHideNodeContextMenu, true);
224785
224969
  };
224786
224970
 
224787
224971
  this.onMapWheelHideNodeContextMenu = () => {
224972
+ this.hideContextMenu();
224973
+ };
224974
+
224975
+ this.hideContextMenu = () => {
224788
224976
  NodeContextMenuController.broadcastHideEvent(this.$rootScope);
224789
- document.getElementById("codeMap").removeEventListener("wheel", this.onMapWheelHideNodeContextMenu, true);
224790
224977
  };
224791
224978
 
224792
224979
  this.markFolder = color => {
224793
- this.codeMapActionsService.markFolder(this._viewModel.codeMapNode, color);
224980
+ this.storeService.dispatch((0,_state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_8__.markPackages)([{
224981
+ path: this._viewModel.codeMapNode.path,
224982
+ color
224983
+ }]));
224794
224984
  };
224795
224985
 
224796
224986
  NodeContextMenuController.instance = this;
224797
- _state_store_appSettings_mapColors_mapColors_service__WEBPACK_IMPORTED_MODULE_6__.MapColorsService.subscribe(this.$rootScope, this);
224798
- _codeMap_codeMap_mouseEvent_service__WEBPACK_IMPORTED_MODULE_5__.CodeMapMouseEventService.subscribeToBuildingRightClickedEvents(this.$rootScope, this);
224987
+ _state_store_appSettings_mapColors_mapColors_service__WEBPACK_IMPORTED_MODULE_4__.MapColorsService.subscribe(this.$rootScope, this);
224988
+ document.addEventListener("building-right-clicked", this.onBuildingRightClicked);
224799
224989
  NodeContextMenuController.subscribeToShowNodeContextMenu(this.$rootScope, this);
224800
224990
  NodeContextMenuController.subscribeToHideNodeContextMenu(this.$rootScope, this);
224801
224991
  }
@@ -224804,18 +224994,10 @@ class NodeContextMenuController {
224804
224994
  this._viewModel.markingColors = mapColors.markingColors;
224805
224995
  }
224806
224996
 
224807
- onBuildingRightClicked(building, x, y) {
224808
- const nodeType = building.node.isLeaf ? _codeCharta_model__WEBPACK_IMPORTED_MODULE_2__.NodeType.FILE : _codeCharta_model__WEBPACK_IMPORTED_MODULE_2__.NodeType.FOLDER;
224809
- this.onShowNodeContextMenu(building.node.path, nodeType, x, y);
224810
- }
224811
-
224812
224997
  onShowNodeContextMenu(path, nodeType, mouseX, mouseY) {
224813
- this._viewModel.codeMapNode = (0,_util_codeMapHelper__WEBPACK_IMPORTED_MODULE_7__.getCodeMapNodeFromPath)(path, nodeType, this.codeMapPreRenderService.getRenderMap());
224998
+ this._viewModel.codeMapNode = (0,_util_codeMapHelper__WEBPACK_IMPORTED_MODULE_5__.getCodeMapNodeFromPath)(path, nodeType, this.codeMapPreRenderService.getRenderMap());
224814
224999
  this._viewModel.nodePath = path;
224815
225000
  this._viewModel.lastPartOfNodePath = `${path.lastIndexOf("/") === 0 ? "" : "..."}${path.slice(path.lastIndexOf("/"))}`;
224816
- const focusedNodePath = this.storeService.getState().dynamicSettings.focusedNodePath;
224817
- this._viewModel.isNodeFocused = path === focusedNodePath;
224818
- this._viewModel.isParentFocused = path.startsWith(focusedNodePath) && path !== focusedNodePath;
224819
225001
  this._viewModel.showNodeContextMenu = true;
224820
225002
  const {
224821
225003
  x,
@@ -224829,10 +225011,9 @@ class NodeContextMenuController {
224829
225011
 
224830
225012
  onHideNodeContextMenu() {
224831
225013
  this._viewModel.showNodeContextMenu = false;
224832
- }
224833
-
224834
- focusNode() {
224835
- this.storeService.dispatch((0,_state_store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_4__.focusNode)(this._viewModel.codeMapNode.path));
225014
+ document.body.removeEventListener("click", this.onBodyLeftClickHideNodeContextMenu, true);
225015
+ document.body.removeEventListener("mousedown", this.onBodyRightClickHideNodeContextMenu, true);
225016
+ document.getElementById("codeMap").removeEventListener("wheel", this.onMapWheelHideNodeContextMenu, true);
224836
225017
  }
224837
225018
 
224838
225019
  flattenNode() {
@@ -224864,7 +225045,7 @@ class NodeContextMenuController {
224864
225045
  };
224865
225046
 
224866
225047
  if (this.blacklistService.resultsInEmptyMap([blacklistItem])) {
224867
- this.dialogService.showErrorDialog(_util_fileValidator__WEBPACK_IMPORTED_MODULE_8__.ERROR_MESSAGES.blacklistError, "Blacklist Error");
225048
+ this.dialogService.showErrorDialog(_util_fileValidator__WEBPACK_IMPORTED_MODULE_6__.ERROR_MESSAGES.blacklistError, "Blacklist Error");
224868
225049
  } else {
224869
225050
  this.storeService.dispatch((0,_state_store_fileSettings_blacklist_blacklist_actions__WEBPACK_IMPORTED_MODULE_3__.addBlacklistItem)(blacklistItem));
224870
225051
  }
@@ -224889,7 +225070,7 @@ class NodeContextMenuController {
224889
225070
  }
224890
225071
 
224891
225072
  unmarkFolder() {
224892
- this.codeMapActionsService.unmarkFolder(this._viewModel.codeMapNode);
225073
+ this.storeService.dispatch((0,_state_store_fileSettings_markedPackages_markedPackages_actions__WEBPACK_IMPORTED_MODULE_8__.unmarkPackage)(this._viewModel.codeMapNode));
224893
225074
  }
224894
225075
 
224895
225076
  calculatePosition(mouseX, mouseY) {
@@ -224932,7 +225113,10 @@ class NodeContextMenuController {
224932
225113
  }
224933
225114
 
224934
225115
  packageMatchesColorOfParentMP(color) {
224935
- const index = this.codeMapActionsService.getParentMarkedPackageIndex(this._viewModel.codeMapNode.path);
225116
+ const {
225117
+ markedPackages
225118
+ } = this.storeService.getState().fileSettings;
225119
+ const index = (0,_state_store_fileSettings_markedPackages_util_findIndexOfMarkedPackageOrParent__WEBPACK_IMPORTED_MODULE_7__.findIndexOfMarkedPackageOrParent)(markedPackages, this._viewModel.codeMapNode.path);
224936
225120
 
224937
225121
  if (index === -1) {
224938
225122
  return false;
@@ -224956,23 +225140,6 @@ class NodeContextMenuController {
224956
225140
  return false;
224957
225141
  }
224958
225142
 
224959
- isNodeOrParentFocused() {
224960
- var _a;
224961
-
224962
- const {
224963
- focusedNodePath
224964
- } = this.storeService.getState().dynamicSettings;
224965
- return Boolean(focusedNodePath && ((_a = this._viewModel.codeMapNode) === null || _a === void 0 ? void 0 : _a.path.startsWith(focusedNodePath)));
224966
- }
224967
-
224968
- isNodeFocused() {
224969
- if (this._viewModel.codeMapNode) {
224970
- return this._viewModel.codeMapNode.path === this.storeService.getState().dynamicSettings.focusedNodePath;
224971
- }
224972
-
224973
- return false;
224974
- }
224975
-
224976
225143
  nodeIsFolder() {
224977
225144
  var _a, _b;
224978
225145
 
@@ -225008,7 +225175,7 @@ class NodeContextMenuController {
225008
225175
  }
225009
225176
 
225010
225177
  }
225011
- NodeContextMenuController.$inject = ["$element", "$window", "$rootScope", "storeService", "codeMapActionsService", "codeMapPreRenderService", "threeSceneService", "dialogService", "blacklistService"];
225178
+ NodeContextMenuController.$inject = ["$element", "$window", "$rootScope", "storeService", "codeMapPreRenderService", "threeSceneService", "dialogService", "blacklistService"];
225012
225179
  NodeContextMenuController.SHOW_NODE_CONTEXT_MENU_EVENT = "show-node-context-menu";
225013
225180
  NodeContextMenuController.HIDE_NODE_CONTEXT_MENU_EVENT = "hide-node-context-menu";
225014
225181
  const nodeContextMenuComponent = {
@@ -225031,17 +225198,21 @@ __webpack_require__.r(__webpack_exports__);
225031
225198
  /* harmony import */ var _ui_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ui/ui */ "./app/codeCharta/ui/ui.ts");
225032
225199
  /* harmony import */ var angular__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! angular */ "./node_modules/angular/index.js");
225033
225200
  /* harmony import */ var angular__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(angular__WEBPACK_IMPORTED_MODULE_2__);
225034
- /* harmony import */ var _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/upgrade/static */ "./node_modules/@angular/upgrade/fesm2015/static.js");
225201
+ /* harmony import */ var _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/upgrade/static */ "./node_modules/@angular/upgrade/fesm2015/static.js");
225035
225202
  /* harmony import */ var _nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nodeContextMenu.component */ "./app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.ts");
225036
225203
  /* harmony import */ var _markFolderColorPicker_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./markFolderColorPicker/markFolderColorPicker.component */ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.ts");
225204
+ /* harmony import */ var _focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./focusButtons/focusButtons.component */ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.ts");
225205
+
225037
225206
 
225038
225207
 
225039
225208
 
225040
225209
 
225041
225210
 
225042
225211
 
225043
- 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_5__.downgradeComponent)({
225212
+ 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)({
225044
225213
  component: _markFolderColorPicker_markFolderColorPicker_component__WEBPACK_IMPORTED_MODULE_4__.MarkFolderColorPickerComponent
225214
+ })).directive("ccFocusButtons", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_6__.downgradeComponent)({
225215
+ component: _focusButtons_focusButtons_component__WEBPACK_IMPORTED_MODULE_5__.FocusButtonsComponent
225045
225216
  }));
225046
225217
 
225047
225218
  /***/ }),
@@ -226565,52 +226736,51 @@ angular__WEBPACK_IMPORTED_MODULE_2___default().module("app.codeCharta.ui.toolBar
226565
226736
  __webpack_require__.r(__webpack_exports__);
226566
226737
  /* harmony import */ var angular__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! angular */ "./node_modules/angular/index.js");
226567
226738
  /* harmony import */ var angular__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(angular__WEBPACK_IMPORTED_MODULE_0__);
226568
- /* harmony import */ var _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! @angular/upgrade/static */ "./node_modules/@angular/upgrade/fesm2015/static.js");
226739
+ /* harmony import */ var _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! @angular/upgrade/static */ "./node_modules/@angular/upgrade/fesm2015/static.js");
226569
226740
  /* harmony import */ var _artificialIntelligence_artificialIntelligence_module__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./artificialIntelligence/artificialIntelligence.module */ "./app/codeCharta/ui/artificialIntelligence/artificialIntelligence.module.ts");
226570
226741
  /* harmony import */ var _customConfigs_customConfigs_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./customConfigs/customConfigs.module */ "./app/codeCharta/ui/customConfigs/customConfigs.module.ts");
226571
- /* harmony import */ var _unfocusButton_unfocusButton_module__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./unfocusButton/unfocusButton.module */ "./app/codeCharta/ui/unfocusButton/unfocusButton.module.ts");
226572
- /* harmony import */ var _metricValueHovered_metricValueHovered_module__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./metricValueHovered/metricValueHovered.module */ "./app/codeCharta/ui/metricValueHovered/metricValueHovered.module.ts");
226573
- /* harmony import */ var _downloadButton_downloadButton_module__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./downloadButton/downloadButton.module */ "./app/codeCharta/ui/downloadButton/downloadButton.module.ts");
226574
- /* harmony import */ var _screenshotButton_screenshotButton_module__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./screenshotButton/screenshotButton.module */ "./app/codeCharta/ui/screenshotButton/screenshotButton.module.ts");
226575
- /* harmony import */ var _globalSettingsButton_globalSettingsButton_module__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./globalSettingsButton/globalSettingsButton.module */ "./app/codeCharta/ui/globalSettingsButton/globalSettingsButton.module.ts");
226576
- /* harmony import */ var _nodePathPanel_nodePathPanel_module__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./nodePathPanel/nodePathPanel.module */ "./app/codeCharta/ui/nodePathPanel/nodePathPanel.module.ts");
226577
- /* harmony import */ var _edgeSettingsPanel_edgeSettingsPanel_module__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./edgeSettingsPanel/edgeSettingsPanel.module */ "./app/codeCharta/ui/edgeSettingsPanel/edgeSettingsPanel.module.ts");
226578
- /* harmony import */ var _edgeChooser_edgeChooser_module__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./edgeChooser/edgeChooser.module */ "./app/codeCharta/ui/edgeChooser/edgeChooser.module.ts");
226579
- /* harmony import */ var _presentationModeButton_presentationModeButton_module__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./presentationModeButton/presentationModeButton.module */ "./app/codeCharta/ui/presentationModeButton/presentationModeButton.module.ts");
226580
- /* harmony import */ var _centerMapButton_centerMapButton_module__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./centerMapButton/centerMapButton.module */ "./app/codeCharta/ui/centerMapButton/centerMapButton.module.ts");
226581
- /* harmony import */ var _searchPanel_searchPanel_module__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./searchPanel/searchPanel.module */ "./app/codeCharta/ui/searchPanel/searchPanel.module.ts");
226582
- /* harmony import */ var _searchPanelModeSelector_searchPanelModeSelector_module__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./searchPanelModeSelector/searchPanelModeSelector.module */ "./app/codeCharta/ui/searchPanelModeSelector/searchPanelModeSelector.module.ts");
226583
- /* harmony import */ var _searchBar_searchBar_module__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./searchBar/searchBar.module */ "./app/codeCharta/ui/searchBar/searchBar.module.ts");
226584
- /* harmony import */ var _areaSettingsPanel_areaSettingsPanel_module__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./areaSettingsPanel/areaSettingsPanel.module */ "./app/codeCharta/ui/areaSettingsPanel/areaSettingsPanel.module.ts");
226585
- /* harmony import */ var _blacklistPanel_blacklistPanel_module__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./blacklistPanel/blacklistPanel.module */ "./app/codeCharta/ui/blacklistPanel/blacklistPanel.module.ts");
226586
- /* harmony import */ var _codeMap_codeMap_module__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./codeMap/codeMap.module */ "./app/codeCharta/ui/codeMap/codeMap.module.ts");
226587
- /* harmony import */ var _colorSettingsPanel_colorSettingsPanel_module__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./colorSettingsPanel/colorSettingsPanel.module */ "./app/codeCharta/ui/colorSettingsPanel/colorSettingsPanel.module.ts");
226588
- /* harmony import */ var _dialog_dialog_module__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./dialog/dialog.module */ "./app/codeCharta/ui/dialog/dialog.module.ts");
226589
- /* harmony import */ var _fileChooser_fileChooser_module__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fileChooser/fileChooser.module */ "./app/codeCharta/ui/fileChooser/fileChooser.module.ts");
226590
- /* harmony import */ var _fileExtensionBar_fileExtensionBar_module__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./fileExtensionBar/fileExtensionBar.module */ "./app/codeCharta/ui/fileExtensionBar/fileExtensionBar.module.ts");
226591
- /* harmony import */ var _heightSettingsPanel_heightSettingsPanel_module__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./heightSettingsPanel/heightSettingsPanel.module */ "./app/codeCharta/ui/heightSettingsPanel/heightSettingsPanel.module.ts");
226592
- /* harmony import */ var _loadingGif_loadingGif_module__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./loadingGif/loadingGif.module */ "./app/codeCharta/ui/loadingGif/loadingGif.module.ts");
226593
- /* harmony import */ var _metricChooser_metricChooser_module__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./metricChooser/metricChooser.module */ "./app/codeCharta/ui/metricChooser/metricChooser.module.ts");
226594
- /* harmony import */ var _metricType_metricType_module__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./metricType/metricType.module */ "./app/codeCharta/ui/metricType/metricType.module.ts");
226595
- /* harmony import */ var _nodeContextMenu_nodeContextMenu_module__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./nodeContextMenu/nodeContextMenu.module */ "./app/codeCharta/ui/nodeContextMenu/nodeContextMenu.module.ts");
226596
- /* harmony import */ var _rangeSlider_rangeSlider_module__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./rangeSlider/rangeSlider.module */ "./app/codeCharta/ui/rangeSlider/rangeSlider.module.ts");
226597
- /* harmony import */ var _resetSettingsButton_resetSettingsButton_module__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./resetSettingsButton/resetSettingsButton.module */ "./app/codeCharta/ui/resetSettingsButton/resetSettingsButton.module.ts");
226598
- /* harmony import */ var _filePanel_filePanel_module__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./filePanel/filePanel.module */ "./app/codeCharta/ui/filePanel/filePanel.module.ts");
226599
- /* harmony import */ var _ribbonBar_ribbonBar_module__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./ribbonBar/ribbonBar.module */ "./app/codeCharta/ui/ribbonBar/ribbonBar.module.ts");
226600
- /* harmony import */ var _scenarioDropDown_scenarioDropDown_module__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./scenarioDropDown/scenarioDropDown.module */ "./app/codeCharta/ui/scenarioDropDown/scenarioDropDown.module.ts");
226601
- /* harmony import */ var _toolBar_toolBar_module__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./toolBar/toolBar.module */ "./app/codeCharta/ui/toolBar/toolBar.module.ts");
226602
- /* harmony import */ var _viewCube_viewCube_module__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./viewCube/viewCube.module */ "./app/codeCharta/ui/viewCube/viewCube.module.ts");
226603
- /* harmony import */ var _layoutSelection_layoutSelection_module__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./layoutSelection/layoutSelection.module */ "./app/codeCharta/ui/layoutSelection/layoutSelection.module.ts");
226604
- /* harmony import */ var _maxTreeMapFiles_maxTreeMapFiles_module__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./maxTreeMapFiles/maxTreeMapFiles.module */ "./app/codeCharta/ui/maxTreeMapFiles/maxTreeMapFiles.module.ts");
226605
- /* harmony import */ var _sharpnessModeSelector_sharpnessModeSelector_module__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./sharpnessModeSelector/sharpnessModeSelector.module */ "./app/codeCharta/ui/sharpnessModeSelector/sharpnessModeSelector.module.ts");
226606
- /* harmony import */ var _attributeSideBar_metricDeltaSelected_metricDeltaSelected_component__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./attributeSideBar/metricDeltaSelected/metricDeltaSelected.component */ "./app/codeCharta/ui/attributeSideBar/metricDeltaSelected/metricDeltaSelected.component.ts");
226607
- /* harmony import */ var _mapTreeView_mapTreeView_component__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./mapTreeView/mapTreeView.component */ "./app/codeCharta/ui/mapTreeView/mapTreeView.component.ts");
226608
- /* harmony import */ var _sortingOption_sortingOption_component__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./sortingOption/sortingOption.component */ "./app/codeCharta/ui/sortingOption/sortingOption.component.ts");
226609
- /* harmony import */ var _matchingFilesCounter_matchingFilesCounter_component__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./matchingFilesCounter/matchingFilesCounter.component */ "./app/codeCharta/ui/matchingFilesCounter/matchingFilesCounter.component.ts");
226610
- /* harmony import */ var _sortingButton_sortingButton_component__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./sortingButton/sortingButton.component */ "./app/codeCharta/ui/sortingButton/sortingButton.component.ts");
226611
- /* harmony import */ var _attributeSideBar_attributeTypeSelector_attributeTypeSelector_component__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./attributeSideBar/attributeTypeSelector/attributeTypeSelector.component */ "./app/codeCharta/ui/attributeSideBar/attributeTypeSelector/attributeTypeSelector.component.ts");
226612
- /* harmony import */ var _export3DMapButton_export3DMapButton_component__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./export3DMapButton/export3DMapButton.component */ "./app/codeCharta/ui/export3DMapButton/export3DMapButton.component.ts");
226613
- /* harmony import */ var _legendPanel_legendPanel_component__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./legendPanel/legendPanel.component */ "./app/codeCharta/ui/legendPanel/legendPanel.component.ts");
226742
+ /* harmony import */ var _metricValueHovered_metricValueHovered_module__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./metricValueHovered/metricValueHovered.module */ "./app/codeCharta/ui/metricValueHovered/metricValueHovered.module.ts");
226743
+ /* harmony import */ var _downloadButton_downloadButton_module__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./downloadButton/downloadButton.module */ "./app/codeCharta/ui/downloadButton/downloadButton.module.ts");
226744
+ /* harmony import */ var _screenshotButton_screenshotButton_module__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./screenshotButton/screenshotButton.module */ "./app/codeCharta/ui/screenshotButton/screenshotButton.module.ts");
226745
+ /* harmony import */ var _globalSettingsButton_globalSettingsButton_module__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./globalSettingsButton/globalSettingsButton.module */ "./app/codeCharta/ui/globalSettingsButton/globalSettingsButton.module.ts");
226746
+ /* harmony import */ var _nodePathPanel_nodePathPanel_module__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./nodePathPanel/nodePathPanel.module */ "./app/codeCharta/ui/nodePathPanel/nodePathPanel.module.ts");
226747
+ /* harmony import */ var _edgeSettingsPanel_edgeSettingsPanel_module__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./edgeSettingsPanel/edgeSettingsPanel.module */ "./app/codeCharta/ui/edgeSettingsPanel/edgeSettingsPanel.module.ts");
226748
+ /* harmony import */ var _edgeChooser_edgeChooser_module__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./edgeChooser/edgeChooser.module */ "./app/codeCharta/ui/edgeChooser/edgeChooser.module.ts");
226749
+ /* harmony import */ var _presentationModeButton_presentationModeButton_module__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./presentationModeButton/presentationModeButton.module */ "./app/codeCharta/ui/presentationModeButton/presentationModeButton.module.ts");
226750
+ /* harmony import */ var _centerMapButton_centerMapButton_module__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./centerMapButton/centerMapButton.module */ "./app/codeCharta/ui/centerMapButton/centerMapButton.module.ts");
226751
+ /* harmony import */ var _searchPanel_searchPanel_module__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./searchPanel/searchPanel.module */ "./app/codeCharta/ui/searchPanel/searchPanel.module.ts");
226752
+ /* harmony import */ var _searchPanelModeSelector_searchPanelModeSelector_module__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./searchPanelModeSelector/searchPanelModeSelector.module */ "./app/codeCharta/ui/searchPanelModeSelector/searchPanelModeSelector.module.ts");
226753
+ /* harmony import */ var _searchBar_searchBar_module__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./searchBar/searchBar.module */ "./app/codeCharta/ui/searchBar/searchBar.module.ts");
226754
+ /* harmony import */ var _areaSettingsPanel_areaSettingsPanel_module__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./areaSettingsPanel/areaSettingsPanel.module */ "./app/codeCharta/ui/areaSettingsPanel/areaSettingsPanel.module.ts");
226755
+ /* harmony import */ var _blacklistPanel_blacklistPanel_module__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./blacklistPanel/blacklistPanel.module */ "./app/codeCharta/ui/blacklistPanel/blacklistPanel.module.ts");
226756
+ /* harmony import */ var _codeMap_codeMap_module__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./codeMap/codeMap.module */ "./app/codeCharta/ui/codeMap/codeMap.module.ts");
226757
+ /* harmony import */ var _colorSettingsPanel_colorSettingsPanel_module__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./colorSettingsPanel/colorSettingsPanel.module */ "./app/codeCharta/ui/colorSettingsPanel/colorSettingsPanel.module.ts");
226758
+ /* harmony import */ var _dialog_dialog_module__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./dialog/dialog.module */ "./app/codeCharta/ui/dialog/dialog.module.ts");
226759
+ /* harmony import */ var _fileChooser_fileChooser_module__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fileChooser/fileChooser.module */ "./app/codeCharta/ui/fileChooser/fileChooser.module.ts");
226760
+ /* harmony import */ var _fileExtensionBar_fileExtensionBar_module__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fileExtensionBar/fileExtensionBar.module */ "./app/codeCharta/ui/fileExtensionBar/fileExtensionBar.module.ts");
226761
+ /* harmony import */ var _heightSettingsPanel_heightSettingsPanel_module__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./heightSettingsPanel/heightSettingsPanel.module */ "./app/codeCharta/ui/heightSettingsPanel/heightSettingsPanel.module.ts");
226762
+ /* harmony import */ var _loadingGif_loadingGif_module__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./loadingGif/loadingGif.module */ "./app/codeCharta/ui/loadingGif/loadingGif.module.ts");
226763
+ /* harmony import */ var _metricChooser_metricChooser_module__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./metricChooser/metricChooser.module */ "./app/codeCharta/ui/metricChooser/metricChooser.module.ts");
226764
+ /* harmony import */ var _metricType_metricType_module__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./metricType/metricType.module */ "./app/codeCharta/ui/metricType/metricType.module.ts");
226765
+ /* harmony import */ var _nodeContextMenu_nodeContextMenu_module__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./nodeContextMenu/nodeContextMenu.module */ "./app/codeCharta/ui/nodeContextMenu/nodeContextMenu.module.ts");
226766
+ /* harmony import */ var _rangeSlider_rangeSlider_module__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./rangeSlider/rangeSlider.module */ "./app/codeCharta/ui/rangeSlider/rangeSlider.module.ts");
226767
+ /* harmony import */ var _resetSettingsButton_resetSettingsButton_module__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./resetSettingsButton/resetSettingsButton.module */ "./app/codeCharta/ui/resetSettingsButton/resetSettingsButton.module.ts");
226768
+ /* harmony import */ var _filePanel_filePanel_module__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./filePanel/filePanel.module */ "./app/codeCharta/ui/filePanel/filePanel.module.ts");
226769
+ /* harmony import */ var _ribbonBar_ribbonBar_module__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./ribbonBar/ribbonBar.module */ "./app/codeCharta/ui/ribbonBar/ribbonBar.module.ts");
226770
+ /* harmony import */ var _scenarioDropDown_scenarioDropDown_module__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./scenarioDropDown/scenarioDropDown.module */ "./app/codeCharta/ui/scenarioDropDown/scenarioDropDown.module.ts");
226771
+ /* harmony import */ var _toolBar_toolBar_module__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./toolBar/toolBar.module */ "./app/codeCharta/ui/toolBar/toolBar.module.ts");
226772
+ /* harmony import */ var _viewCube_viewCube_module__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./viewCube/viewCube.module */ "./app/codeCharta/ui/viewCube/viewCube.module.ts");
226773
+ /* harmony import */ var _layoutSelection_layoutSelection_module__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./layoutSelection/layoutSelection.module */ "./app/codeCharta/ui/layoutSelection/layoutSelection.module.ts");
226774
+ /* harmony import */ var _maxTreeMapFiles_maxTreeMapFiles_module__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./maxTreeMapFiles/maxTreeMapFiles.module */ "./app/codeCharta/ui/maxTreeMapFiles/maxTreeMapFiles.module.ts");
226775
+ /* harmony import */ var _sharpnessModeSelector_sharpnessModeSelector_module__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./sharpnessModeSelector/sharpnessModeSelector.module */ "./app/codeCharta/ui/sharpnessModeSelector/sharpnessModeSelector.module.ts");
226776
+ /* harmony import */ var _attributeSideBar_metricDeltaSelected_metricDeltaSelected_component__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./attributeSideBar/metricDeltaSelected/metricDeltaSelected.component */ "./app/codeCharta/ui/attributeSideBar/metricDeltaSelected/metricDeltaSelected.component.ts");
226777
+ /* harmony import */ var _mapTreeView_mapTreeView_component__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./mapTreeView/mapTreeView.component */ "./app/codeCharta/ui/mapTreeView/mapTreeView.component.ts");
226778
+ /* harmony import */ var _sortingOption_sortingOption_component__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./sortingOption/sortingOption.component */ "./app/codeCharta/ui/sortingOption/sortingOption.component.ts");
226779
+ /* harmony import */ var _matchingFilesCounter_matchingFilesCounter_component__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./matchingFilesCounter/matchingFilesCounter.component */ "./app/codeCharta/ui/matchingFilesCounter/matchingFilesCounter.component.ts");
226780
+ /* harmony import */ var _sortingButton_sortingButton_component__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./sortingButton/sortingButton.component */ "./app/codeCharta/ui/sortingButton/sortingButton.component.ts");
226781
+ /* harmony import */ var _attributeSideBar_attributeTypeSelector_attributeTypeSelector_component__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./attributeSideBar/attributeTypeSelector/attributeTypeSelector.component */ "./app/codeCharta/ui/attributeSideBar/attributeTypeSelector/attributeTypeSelector.component.ts");
226782
+ /* harmony import */ var _export3DMapButton_export3DMapButton_component__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./export3DMapButton/export3DMapButton.component */ "./app/codeCharta/ui/export3DMapButton/export3DMapButton.component.ts");
226783
+ /* harmony import */ var _legendPanel_legendPanel_component__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./legendPanel/legendPanel.component */ "./app/codeCharta/ui/legendPanel/legendPanel.component.ts");
226614
226784
 
226615
226785
 
226616
226786
 
@@ -226657,124 +226827,26 @@ __webpack_require__.r(__webpack_exports__);
226657
226827
 
226658
226828
 
226659
226829
 
226660
-
226661
- angular__WEBPACK_IMPORTED_MODULE_0___default().module("app.codeCharta.ui", ["app.codeCharta.ui.artificialIntelligence", "app.codeCharta.ui.customConfigs", "app.codeCharta.ui.unfocusButton", "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_46__.downgradeComponent)({
226662
- component: _sortingButton_sortingButton_component__WEBPACK_IMPORTED_MODULE_42__.SortingButtonComponent
226663
- })).directive("ccSortingOption", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_46__.downgradeComponent)({
226664
- component: _sortingOption_sortingOption_component__WEBPACK_IMPORTED_MODULE_40__.SortingOptionComponent
226665
- })).directive("ccMetricDeltaSelected", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_46__.downgradeComponent)({
226666
- component: _attributeSideBar_metricDeltaSelected_metricDeltaSelected_component__WEBPACK_IMPORTED_MODULE_38__.MetricDeltaSelectedComponent
226667
- })).directive("ccMapTreeView", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_46__.downgradeComponent)({
226668
- component: _mapTreeView_mapTreeView_component__WEBPACK_IMPORTED_MODULE_39__.MapTreeViewComponent
226669
- })).directive("ccMatchingFilesCounter", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_46__.downgradeComponent)({
226670
- component: _matchingFilesCounter_matchingFilesCounter_component__WEBPACK_IMPORTED_MODULE_41__.MatchingFilesCounterComponent
226671
- })).directive("ccAttributeTypeSelector", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_46__.downgradeComponent)({
226672
- component: _attributeSideBar_attributeTypeSelector_attributeTypeSelector_component__WEBPACK_IMPORTED_MODULE_43__.AttributeTypeSelectorComponent
226673
- })).directive("ccExportThreedMapButton", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_46__.downgradeComponent)({
226674
- component: _export3DMapButton_export3DMapButton_component__WEBPACK_IMPORTED_MODULE_44__.Export3DMapButtonComponent
226675
- })).directive("ccLegendPanel", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_46__.downgradeComponent)({
226676
- component: _legendPanel_legendPanel_component__WEBPACK_IMPORTED_MODULE_45__.LegendPanelComponent
226830
+ 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)({
226831
+ component: _sortingButton_sortingButton_component__WEBPACK_IMPORTED_MODULE_41__.SortingButtonComponent
226832
+ })).directive("ccSortingOption", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__.downgradeComponent)({
226833
+ component: _sortingOption_sortingOption_component__WEBPACK_IMPORTED_MODULE_39__.SortingOptionComponent
226834
+ })).directive("ccMetricDeltaSelected", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__.downgradeComponent)({
226835
+ component: _attributeSideBar_metricDeltaSelected_metricDeltaSelected_component__WEBPACK_IMPORTED_MODULE_37__.MetricDeltaSelectedComponent
226836
+ })).directive("ccMapTreeView", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__.downgradeComponent)({
226837
+ component: _mapTreeView_mapTreeView_component__WEBPACK_IMPORTED_MODULE_38__.MapTreeViewComponent
226838
+ })).directive("ccMatchingFilesCounter", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__.downgradeComponent)({
226839
+ component: _matchingFilesCounter_matchingFilesCounter_component__WEBPACK_IMPORTED_MODULE_40__.MatchingFilesCounterComponent
226840
+ })).directive("ccAttributeTypeSelector", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__.downgradeComponent)({
226841
+ component: _attributeSideBar_attributeTypeSelector_attributeTypeSelector_component__WEBPACK_IMPORTED_MODULE_42__.AttributeTypeSelectorComponent
226842
+ })).directive("ccExportThreedMapButton", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__.downgradeComponent)({
226843
+ component: _export3DMapButton_export3DMapButton_component__WEBPACK_IMPORTED_MODULE_43__.Export3DMapButtonComponent
226844
+ })).directive("ccLegendPanel", (0,_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_45__.downgradeComponent)({
226845
+ component: _legendPanel_legendPanel_component__WEBPACK_IMPORTED_MODULE_44__.LegendPanelComponent
226677
226846
  }));
226678
226847
 
226679
226848
  /***/ }),
226680
226849
 
226681
- /***/ "./app/codeCharta/ui/unfocusButton/unfocusButton.component.ts":
226682
- /*!********************************************************************!*\
226683
- !*** ./app/codeCharta/ui/unfocusButton/unfocusButton.component.ts ***!
226684
- \********************************************************************/
226685
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
226686
-
226687
- "use strict";
226688
- __webpack_require__.r(__webpack_exports__);
226689
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
226690
- /* harmony export */ "UnfocusButtonController": () => (/* binding */ UnfocusButtonController),
226691
- /* harmony export */ "unfocusButtonComponent": () => (/* binding */ unfocusButtonComponent)
226692
- /* harmony export */ });
226693
- /* harmony import */ var _unfocusButton_component_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./unfocusButton.component.scss */ "./app/codeCharta/ui/unfocusButton/unfocusButton.component.scss");
226694
- /* harmony import */ var _state_store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.actions.ts");
226695
- /* harmony import */ var _nodeContextMenu_nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../nodeContextMenu/nodeContextMenu.component */ "./app/codeCharta/ui/nodeContextMenu/nodeContextMenu.component.ts");
226696
- /* harmony import */ var _state_store_appSettings_isLoadingFile_isLoadingFile_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../state/store/appSettings/isLoadingFile/isLoadingFile.service */ "./app/codeCharta/state/store/appSettings/isLoadingFile/isLoadingFile.service.ts");
226697
- /* harmony import */ var _state_store_dynamicSettings_focusedNodePath_focusedNodePath_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../state/store/dynamicSettings/focusedNodePath/focusedNodePath.service */ "./app/codeCharta/state/store/dynamicSettings/focusedNodePath/focusedNodePath.service.ts");
226698
-
226699
-
226700
-
226701
-
226702
-
226703
- class UnfocusButtonController {
226704
- constructor($rootScope, storeService) {
226705
- "ngInject";
226706
-
226707
- this.$rootScope = $rootScope;
226708
- this.storeService = storeService;
226709
- this._viewModel = {
226710
- isLoadingFile: false,
226711
- isNodeFocused: false,
226712
- isParentFocused: false,
226713
- focusedNodes: []
226714
- };
226715
- _state_store_appSettings_isLoadingFile_isLoadingFile_service__WEBPACK_IMPORTED_MODULE_3__.IsLoadingFileService.subscribe(this.$rootScope, this);
226716
- _state_store_dynamicSettings_focusedNodePath_focusedNodePath_service__WEBPACK_IMPORTED_MODULE_4__.FocusedNodePathService.subscribeToFocusNode(this.$rootScope, this);
226717
- }
226718
-
226719
- onFocusNode(focusedNodePath) {
226720
- if (focusedNodePath && !this._viewModel.focusedNodes.includes(focusedNodePath)) {
226721
- this._viewModel.focusedNodes.push(focusedNodePath);
226722
- }
226723
- }
226724
-
226725
- removeFocusedNode(removeAll = false) {
226726
- this.storeService.dispatch((0,_state_store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_1__.unfocusNode)());
226727
-
226728
- if (!removeAll) {
226729
- this._viewModel.focusedNodes.pop();
226730
-
226731
- const lastFocusedNode = this._viewModel.focusedNodes[this._viewModel.focusedNodes.length - 1];
226732
- this.storeService.dispatch((0,_state_store_dynamicSettings_focusedNodePath_focusedNodePath_actions__WEBPACK_IMPORTED_MODULE_1__.focusNode)(lastFocusedNode));
226733
- } else {
226734
- this._viewModel.focusedNodes = [];
226735
- }
226736
-
226737
- _nodeContextMenu_nodeContextMenu_component__WEBPACK_IMPORTED_MODULE_2__.NodeContextMenuController.broadcastHideEvent(this.$rootScope);
226738
- }
226739
-
226740
- onIsLoadingFileChanged(isLoadingFile) {
226741
- this._viewModel.isLoadingFile = isLoadingFile;
226742
- this._viewModel.focusedNodes = [];
226743
- }
226744
-
226745
- }
226746
- UnfocusButtonController.$inject = ["$rootScope", "storeService"];
226747
- const unfocusButtonComponent = {
226748
- selector: "unfocusButtonComponent",
226749
- template: __webpack_require__(/*! ./unfocusButton.component.html */ "./app/codeCharta/ui/unfocusButton/unfocusButton.component.html"),
226750
- controller: UnfocusButtonController,
226751
- bindings: {
226752
- isNodeFocused: "<",
226753
- isParentFocused: "<"
226754
- }
226755
- };
226756
-
226757
- /***/ }),
226758
-
226759
- /***/ "./app/codeCharta/ui/unfocusButton/unfocusButton.module.ts":
226760
- /*!*****************************************************************!*\
226761
- !*** ./app/codeCharta/ui/unfocusButton/unfocusButton.module.ts ***!
226762
- \*****************************************************************/
226763
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
226764
-
226765
- "use strict";
226766
- __webpack_require__.r(__webpack_exports__);
226767
- /* harmony import */ var _state_state_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../state/state.module */ "./app/codeCharta/state/state.module.ts");
226768
- /* harmony import */ var angular__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! angular */ "./node_modules/angular/index.js");
226769
- /* harmony import */ var angular__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(angular__WEBPACK_IMPORTED_MODULE_1__);
226770
- /* harmony import */ var _unfocusButton_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unfocusButton.component */ "./app/codeCharta/ui/unfocusButton/unfocusButton.component.ts");
226771
-
226772
-
226773
-
226774
- angular__WEBPACK_IMPORTED_MODULE_1___default().module("app.codeCharta.ui.unfocusButton", ["app.codeCharta.state"]).component(_unfocusButton_component__WEBPACK_IMPORTED_MODULE_2__.unfocusButtonComponent.selector, _unfocusButton_component__WEBPACK_IMPORTED_MODULE_2__.unfocusButtonComponent);
226775
-
226776
- /***/ }),
226777
-
226778
226850
  /***/ "./app/codeCharta/ui/viewCube/viewCube.component.ts":
226779
226851
  /*!**********************************************************!*\
226780
226852
  !*** ./app/codeCharta/ui/viewCube/viewCube.component.ts ***!
@@ -229152,7 +229224,7 @@ function isVisible(squaredNode, isNodeLeaf, state, flattened) {
229152
229224
  }
229153
229225
 
229154
229226
  if (state.dynamicSettings.focusedNodePath.length > 0) {
229155
- return squaredNode.path.startsWith(state.dynamicSettings.focusedNodePath);
229227
+ return squaredNode.path.startsWith(state.dynamicSettings.focusedNodePath[0]);
229156
229228
  }
229157
229229
 
229158
229230
  return true;
@@ -229911,7 +229983,7 @@ function initializeDynamicSettings(target) {
229911
229983
  colorMetric: "",
229912
229984
  distributionMetric: "",
229913
229985
  edgeMetric: "",
229914
- focusedNodePath: undefined,
229986
+ focusedNodePath: [],
229915
229987
  heightMetric: "",
229916
229988
  margin: 0,
229917
229989
  searchPattern: "",
@@ -230603,7 +230675,7 @@ class FileExtensionCalculator {
230603
230675
  let hash = 0;
230604
230676
 
230605
230677
  for (let index = 0; index < fileExtension.length; index++) {
230606
- hash = fileExtension.charCodeAt(index) + ((hash << 5) - hash);
230678
+ hash = fileExtension.codePointAt(index) + ((hash << 5) - hash);
230607
230679
  }
230608
230680
 
230609
230681
  return hash;
@@ -237652,7 +237724,7 @@ __webpack_require__.r(__webpack_exports__);
237652
237724
 
237653
237725
  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()));
237654
237726
  // Module
237655
- ___CSS_LOADER_EXPORT___.push([module.id, ".artificial-intelligence-component .suspicious-metrics-button,\n.artificial-intelligence-component .high-risk-profile-button {\n height: 22px;\n min-height: 0;\n line-height: 23px;\n min-width: 45px;\n margin: 0;\n padding: 0;\n font-size: 9pt;\n text-transform: none;\n background-color: rgba(230, 230, 230, 0.96);\n overflow: visible; }\n .artificial-intelligence-component .suspicious-metrics-button.plus,\n .artificial-intelligence-component .high-risk-profile-button.plus {\n min-width: 30px; }\n .artificial-intelligence-component .suspicious-metrics-button .ai-badge,\n .artificial-intelligence-component .high-risk-profile-button .ai-badge {\n position: absolute;\n top: 12px;\n padding: 4px 6px;\n border-radius: 50%;\n background: red;\n color: white;\n font-size: 10px;\n width: 18px;\n height: 18px;\n line-height: 10px; }\n .artificial-intelligence-component .suspicious-metrics-button:hover,\n .artificial-intelligence-component .high-risk-profile-button:hover {\n background-color: #c8c8c8; }\n\n.ai-drop-down {\n padding: 16px;\n width: fit-content; }\n .ai-drop-down md-menu-item {\n height: auto;\n min-height: auto; }\n .ai-drop-down md-menu-item:not(:last-child) {\n margin-bottom: 16px; }\n .ai-drop-down.metrics .title span {\n padding: 0;\n margin: 0;\n font-weight: bold; }\n .ai-drop-down.metrics .suspicious-metrics {\n margin: 0;\n padding: 0;\n list-style: none;\n width: max-content; }\n .ai-drop-down.metrics .suspicious-metric .metric-button {\n border-radius: 5px;\n background-color: rgba(230, 230, 230, 0.96);\n padding: 0 12px;\n text-transform: none;\n margin: 0; }\n .ai-drop-down.metrics .suspicious-metric .metric-button.high-risk {\n border-radius: 5px 0 0 5px; }\n .ai-drop-down.metrics .suspicious-metric .risk-button {\n border-radius: 0 5px 5px 0;\n background-color: rgba(230, 230, 230, 0.96);\n margin: 0;\n min-width: 36px;\n height: 36px;\n color: #9c0e6a; }\n .ai-drop-down.metrics .suspicious-metric .risk-button:hover,\n .ai-drop-down.metrics .suspicious-metric .metric-button:hover {\n background-color: #c8c8c8; }\n .ai-drop-down.metrics .suspicious-metric:not(:last-child) {\n margin-bottom: 12px; }\n .ai-drop-down.summary .title {\n flex-direction: column;\n gap: 6px;\n font-weight: bold; }\n .ai-drop-down.summary .title p {\n padding: 0;\n margin: 0; }\n .ai-drop-down.summary .risk-profiles .risk-profile {\n height: 36px;\n text-align: center;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0;\n overflow: hidden; }\n .ai-drop-down.summary .risk-profiles .risk-profile.low-risk, .ai-drop-down.summary .risk-profiles .risk-profile.moderate-risk, .ai-drop-down.summary .risk-profiles .risk-profile.high-risk, .ai-drop-down.summary .risk-profiles .risk-profile.very-high-risk {\n color: black; }\n .ai-drop-down.summary .risk-profiles .low-risk {\n background-color: #5cb34d; }\n .ai-drop-down.summary .risk-profiles .moderate-risk {\n background-color: #eef432; }\n .ai-drop-down.summary .risk-profiles .high-risk {\n background-color: #cc2900; }\n .ai-drop-down.summary .risk-profiles .very-high-risk {\n background-color: #9c0e6a; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/artificialIntelligence/artificialIntelligence.component.scss"],"names":[],"mappings":"AAAA;;EAGE,YAAY;EACZ,aAAa;EACb,iBAAiB;EACjB,eAAe;EACf,SAAS;EACT,UAAU;EACV,cAAc;EACd,oBAAoB;EACpB,2CAA2C;EAC3C,iBAAiB,EAAA;EAZnB;;IAeG,eAAe,EAAA;EAflB;;IAmBG,kBAAkB;IAClB,SAAS;IACT,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,eAAe;IACf,WAAW;IACX,YAAY;IACZ,iBAAiB,EAAA;EA5BpB;;IAgCG,yBAAyB,EAAA;;AAI5B;EACC,aAAa;EACb,kBAAkB,EAAA;EAFnB;IAKE,YAAY;IACZ,gBAAgB,EAAA;EANlB;IAUE,mBAAmB,EAAA;EAVrB;IAeG,UAAU;IACV,SAAS;IACT,iBAAiB,EAAA;EAjBpB;IAqBG,SAAS;IACT,UAAU;IACV,gBAAgB;IAChB,kBAAkB,EAAA;EAxBrB;IA6BI,kBAAkB;IAClB,2CAA2C;IAC3C,eAAe;IACf,oBAAoB;IACpB,SAAS,EAAA;IAjCb;MAoCK,0BAA0B,EAAA;EApC/B;IAyCI,0BAA0B;IAC1B,2CAA2C;IAC3C,SAAS;IACT,eAAe;IACf,YAAY;IACZ,cAAc,EAAA;EA9ClB;;IAmDI,yBAAyB,EAAA;EAnD7B;IAuDI,mBAAmB,EAAA;EAvDvB;IA8DG,sBAAsB;IACtB,QAAQ;IACR,iBAAiB,EAAA;IAhEpB;MAmEI,UAAU;MACV,SAAS,EAAA;EApEb;IA0EI,YAAY;IACZ,kBAAkB;IAClB,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,UAAU;IACV,gBAAgB,EAAA;IAhFpB;MAsFK,YAAY,EAAA;EAtFjB;IA2FI,yBAAyB,EAAA;EA3F7B;IA+FI,yBAAyB,EAAA;EA/F7B;IAmGI,yBAAyB,EAAA;EAnG7B;IAuGI,yBAAyB,EAAA","sourcesContent":[".artificial-intelligence-component {\n\t.suspicious-metrics-button,\n\t.high-risk-profile-button {\n\t\theight: 22px;\n\t\tmin-height: 0;\n\t\tline-height: 23px;\n\t\tmin-width: 45px;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\tfont-size: 9pt;\n\t\ttext-transform: none;\n\t\tbackground-color: rgba(230, 230, 230, 0.96);\n\t\toverflow: visible;\n\n\t\t&.plus {\n\t\t\tmin-width: 30px;\n\t\t}\n\n\t\t.ai-badge {\n\t\t\tposition: absolute;\n\t\t\ttop: 12px;\n\t\t\tpadding: 4px 6px;\n\t\t\tborder-radius: 50%;\n\t\t\tbackground: red;\n\t\t\tcolor: white;\n\t\t\tfont-size: 10px;\n\t\t\twidth: 18px;\n\t\t\theight: 18px;\n\t\t\tline-height: 10px;\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground-color: #c8c8c8;\n\t\t}\n\t}\n}\n.ai-drop-down {\n\tpadding: 16px;\n\twidth: fit-content;\n\n\tmd-menu-item {\n\t\theight: auto;\n\t\tmin-height: auto;\n\t}\n\n\tmd-menu-item:not(:last-child) {\n\t\tmargin-bottom: 16px;\n\t}\n\n\t&.metrics {\n\t\t.title span {\n\t\t\tpadding: 0;\n\t\t\tmargin: 0;\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t.suspicious-metrics {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tlist-style: none;\n\t\t\twidth: max-content;\n\t\t}\n\n\t\t.suspicious-metric {\n\t\t\t.metric-button {\n\t\t\t\tborder-radius: 5px;\n\t\t\t\tbackground-color: rgba(230, 230, 230, 0.96);\n\t\t\t\tpadding: 0 12px;\n\t\t\t\ttext-transform: none;\n\t\t\t\tmargin: 0;\n\n\t\t\t\t&.high-risk {\n\t\t\t\t\tborder-radius: 5px 0 0 5px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.risk-button {\n\t\t\t\tborder-radius: 0 5px 5px 0;\n\t\t\t\tbackground-color: rgba(230, 230, 230, 0.96);\n\t\t\t\tmargin: 0;\n\t\t\t\tmin-width: 36px;\n\t\t\t\theight: 36px;\n\t\t\t\tcolor: #9c0e6a;\n\t\t\t}\n\n\t\t\t.risk-button:hover,\n\t\t\t.metric-button:hover {\n\t\t\t\tbackground-color: #c8c8c8;\n\t\t\t}\n\n\t\t\t&:not(:last-child) {\n\t\t\t\tmargin-bottom: 12px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.summary {\n\t\t.title {\n\t\t\tflex-direction: column;\n\t\t\tgap: 6px;\n\t\t\tfont-weight: bold;\n\n\t\t\tp {\n\t\t\t\tpadding: 0;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t.risk-profiles {\n\t\t\t.risk-profile {\n\t\t\t\theight: 36px;\n\t\t\t\ttext-align: center;\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: center;\n\t\t\t\tpadding: 0;\n\t\t\t\toverflow: hidden;\n\n\t\t\t\t&.low-risk,\n\t\t\t\t&.moderate-risk,\n\t\t\t\t&.high-risk,\n\t\t\t\t&.very-high-risk {\n\t\t\t\t\tcolor: black;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.low-risk {\n\t\t\t\tbackground-color: #5cb34d;\n\t\t\t}\n\n\t\t\t.moderate-risk {\n\t\t\t\tbackground-color: #eef432;\n\t\t\t}\n\n\t\t\t.high-risk {\n\t\t\t\tbackground-color: #cc2900;\n\t\t\t}\n\n\t\t\t.very-high-risk {\n\t\t\t\tbackground-color: #9c0e6a;\n\t\t\t}\n\t\t}\n\t}\n}\n"],"sourceRoot":""}]);
237727
+ ___CSS_LOADER_EXPORT___.push([module.id, ".artificial-intelligence-component .suspicious-metrics-button,\n.artificial-intelligence-component .high-risk-profile-button {\n height: 22px;\n min-height: 0;\n line-height: 23px;\n min-width: 45px;\n margin: 0;\n padding: 0;\n font-size: 9pt;\n text-transform: none;\n background-color: rgba(230, 230, 230, 0.96);\n overflow: visible; }\n .artificial-intelligence-component .suspicious-metrics-button.plus,\n .artificial-intelligence-component .high-risk-profile-button.plus {\n min-width: 30px; }\n .artificial-intelligence-component .suspicious-metrics-button .ai-badge,\n .artificial-intelligence-component .high-risk-profile-button .ai-badge {\n position: absolute;\n top: 12px;\n padding: 4px 6px;\n border-radius: 50%;\n background: red;\n color: white;\n font-size: 10px;\n width: 18px;\n height: 18px;\n line-height: 10px; }\n .artificial-intelligence-component .suspicious-metrics-button:hover,\n .artificial-intelligence-component .high-risk-profile-button:hover {\n background-color: #c8c8c8; }\n\n.ai-drop-down {\n padding: 16px;\n width: fit-content; }\n .ai-drop-down md-menu-item {\n height: auto;\n min-height: auto; }\n .ai-drop-down md-menu-item:not(:last-child) {\n margin-bottom: 16px; }\n .ai-drop-down.metrics .title span {\n padding: 0;\n margin: 0;\n font-weight: bold; }\n .ai-drop-down.metrics .suspicious-metrics {\n margin: 0;\n padding: 0;\n list-style: none;\n width: max-content; }\n .ai-drop-down.metrics .suspicious-metric .metric-button {\n border-radius: 5px;\n background-color: rgba(230, 230, 230, 0.96);\n padding: 0 12px;\n text-transform: none;\n margin: 0; }\n .ai-drop-down.metrics .suspicious-metric .risk-button {\n border-radius: 0 5px 5px 0;\n background-color: rgba(230, 230, 230, 0.96);\n margin: 0;\n min-width: 36px;\n height: 36px;\n color: #9c0e6a; }\n .ai-drop-down.metrics .suspicious-metric .risk-button:hover,\n .ai-drop-down.metrics .suspicious-metric .metric-button:hover {\n background-color: #c8c8c8; }\n .ai-drop-down.metrics .suspicious-metric:not(:last-child) {\n margin-bottom: 12px; }\n .ai-drop-down.summary .title {\n flex-direction: column;\n gap: 6px;\n font-weight: bold; }\n .ai-drop-down.summary .title p {\n padding: 0;\n margin: 0; }\n .ai-drop-down.summary .risk-profiles .risk-profile {\n height: 36px;\n text-align: center;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0;\n overflow: hidden; }\n .ai-drop-down.summary .risk-profiles .risk-profile.low-risk, .ai-drop-down.summary .risk-profiles .risk-profile.moderate-risk, .ai-drop-down.summary .risk-profiles .risk-profile.high-risk, .ai-drop-down.summary .risk-profiles .risk-profile.very-high-risk {\n color: black; }\n .ai-drop-down.summary .risk-profiles .low-risk {\n background-color: #5cb34d; }\n .ai-drop-down.summary .risk-profiles .moderate-risk {\n background-color: #eef432; }\n .ai-drop-down.summary .risk-profiles .high-risk {\n background-color: #cc2900; }\n .ai-drop-down.summary .risk-profiles .very-high-risk {\n background-color: #9c0e6a; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/artificialIntelligence/artificialIntelligence.component.scss"],"names":[],"mappings":"AAAA;;EAGE,YAAY;EACZ,aAAa;EACb,iBAAiB;EACjB,eAAe;EACf,SAAS;EACT,UAAU;EACV,cAAc;EACd,oBAAoB;EACpB,2CAA2C;EAC3C,iBAAiB,EAAA;EAZnB;;IAeG,eAAe,EAAA;EAflB;;IAmBG,kBAAkB;IAClB,SAAS;IACT,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,eAAe;IACf,WAAW;IACX,YAAY;IACZ,iBAAiB,EAAA;EA5BpB;;IAgCG,yBAAyB,EAAA;;AAI5B;EACC,aAAa;EACb,kBAAkB,EAAA;EAFnB;IAKE,YAAY;IACZ,gBAAgB,EAAA;EANlB;IAUE,mBAAmB,EAAA;EAVrB;IAeG,UAAU;IACV,SAAS;IACT,iBAAiB,EAAA;EAjBpB;IAqBG,SAAS;IACT,UAAU;IACV,gBAAgB;IAChB,kBAAkB,EAAA;EAxBrB;IA6BI,kBAAkB;IAClB,2CAA2C;IAC3C,eAAe;IACf,oBAAoB;IACpB,SAAS,EAAA;EAjCb;IAqCI,0BAA0B;IAC1B,2CAA2C;IAC3C,SAAS;IACT,eAAe;IACf,YAAY;IACZ,cAAc,EAAA;EA1ClB;;IA+CI,yBAAyB,EAAA;EA/C7B;IAmDI,mBAAmB,EAAA;EAnDvB;IA0DG,sBAAsB;IACtB,QAAQ;IACR,iBAAiB,EAAA;IA5DpB;MA+DI,UAAU;MACV,SAAS,EAAA;EAhEb;IAsEI,YAAY;IACZ,kBAAkB;IAClB,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,UAAU;IACV,gBAAgB,EAAA;IA5EpB;MAkFK,YAAY,EAAA;EAlFjB;IAuFI,yBAAyB,EAAA;EAvF7B;IA2FI,yBAAyB,EAAA;EA3F7B;IA+FI,yBAAyB,EAAA;EA/F7B;IAmGI,yBAAyB,EAAA","sourcesContent":[".artificial-intelligence-component {\n\t.suspicious-metrics-button,\n\t.high-risk-profile-button {\n\t\theight: 22px;\n\t\tmin-height: 0;\n\t\tline-height: 23px;\n\t\tmin-width: 45px;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\tfont-size: 9pt;\n\t\ttext-transform: none;\n\t\tbackground-color: rgba(230, 230, 230, 0.96);\n\t\toverflow: visible;\n\n\t\t&.plus {\n\t\t\tmin-width: 30px;\n\t\t}\n\n\t\t.ai-badge {\n\t\t\tposition: absolute;\n\t\t\ttop: 12px;\n\t\t\tpadding: 4px 6px;\n\t\t\tborder-radius: 50%;\n\t\t\tbackground: red;\n\t\t\tcolor: white;\n\t\t\tfont-size: 10px;\n\t\t\twidth: 18px;\n\t\t\theight: 18px;\n\t\t\tline-height: 10px;\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground-color: #c8c8c8;\n\t\t}\n\t}\n}\n.ai-drop-down {\n\tpadding: 16px;\n\twidth: fit-content;\n\n\tmd-menu-item {\n\t\theight: auto;\n\t\tmin-height: auto;\n\t}\n\n\tmd-menu-item:not(:last-child) {\n\t\tmargin-bottom: 16px;\n\t}\n\n\t&.metrics {\n\t\t.title span {\n\t\t\tpadding: 0;\n\t\t\tmargin: 0;\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t.suspicious-metrics {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tlist-style: none;\n\t\t\twidth: max-content;\n\t\t}\n\n\t\t.suspicious-metric {\n\t\t\t.metric-button {\n\t\t\t\tborder-radius: 5px;\n\t\t\t\tbackground-color: rgba(230, 230, 230, 0.96);\n\t\t\t\tpadding: 0 12px;\n\t\t\t\ttext-transform: none;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.risk-button {\n\t\t\t\tborder-radius: 0 5px 5px 0;\n\t\t\t\tbackground-color: rgba(230, 230, 230, 0.96);\n\t\t\t\tmargin: 0;\n\t\t\t\tmin-width: 36px;\n\t\t\t\theight: 36px;\n\t\t\t\tcolor: #9c0e6a;\n\t\t\t}\n\n\t\t\t.risk-button:hover,\n\t\t\t.metric-button:hover {\n\t\t\t\tbackground-color: #c8c8c8;\n\t\t\t}\n\n\t\t\t&:not(:last-child) {\n\t\t\t\tmargin-bottom: 12px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.summary {\n\t\t.title {\n\t\t\tflex-direction: column;\n\t\t\tgap: 6px;\n\t\t\tfont-weight: bold;\n\n\t\t\tp {\n\t\t\t\tpadding: 0;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t.risk-profiles {\n\t\t\t.risk-profile {\n\t\t\t\theight: 36px;\n\t\t\t\ttext-align: center;\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: center;\n\t\t\t\tpadding: 0;\n\t\t\t\toverflow: hidden;\n\n\t\t\t\t&.low-risk,\n\t\t\t\t&.moderate-risk,\n\t\t\t\t&.high-risk,\n\t\t\t\t&.very-high-risk {\n\t\t\t\t\tcolor: black;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.low-risk {\n\t\t\t\tbackground-color: #5cb34d;\n\t\t\t}\n\n\t\t\t.moderate-risk {\n\t\t\t\tbackground-color: #eef432;\n\t\t\t}\n\n\t\t\t.high-risk {\n\t\t\t\tbackground-color: #cc2900;\n\t\t\t}\n\n\t\t\t.very-high-risk {\n\t\t\t\tbackground-color: #9c0e6a;\n\t\t\t}\n\t\t}\n\t}\n}\n"],"sourceRoot":""}]);
237656
237728
  // Exports
237657
237729
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
237658
237730
 
@@ -237868,7 +237940,7 @@ __webpack_require__.r(__webpack_exports__);
237868
237940
 
237869
237941
  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()));
237870
237942
  // Module
237871
- ___CSS_LOADER_EXPORT___.push([module.id, ".custom-configs {\n margin-left: 15%; }\n\n.custom-configs-component .custom-configs-button {\n height: 22px;\n min-height: 0;\n line-height: 23px;\n min-width: 45px;\n margin: 0;\n padding: 0;\n font-size: 9pt;\n text-transform: none;\n background-color: rgba(230, 230, 230, 0.96); }\n .custom-configs-component .custom-configs-button.plus {\n min-width: 30px; }\n .custom-configs-component .custom-configs-button:hover {\n background-color: #c8c8c8; }\n\n.custom-configs-drop-down {\n padding: 0; }\n .custom-configs-drop-down md-menu-item {\n height: auto;\n min-height: auto;\n display: block;\n align-content: unset;\n justify-content: unset;\n flex-direction: unset; }\n .custom-configs-drop-down md-menu-item .collapsable {\n margin: 0;\n padding: 0 0 0 10px;\n border-bottom: 1px solid grey; }\n .custom-configs-drop-down .custom-configs-item .button-hovering {\n height: 48px;\n text-align: left;\n background-color: unset;\n border-bottom: 1px solid grey; }\n .custom-configs-drop-down .custom-configs-item .button-hovering .collapse-trigger {\n display: inline-block;\n width: 91%;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 48px; }\n .custom-configs-drop-down .custom-configs-item .button-hovering:hover:not([disabled]) {\n background-color: rgba(158, 158, 158, 0.2); }\n .custom-configs-drop-down .custom-configs-item i.fa {\n margin-left: 0.8rem; }\n .custom-configs-drop-down .custom-configs-item i.collapse-icon {\n font-size: 10px;\n line-height: 48px;\n vertical-align: top; }\n .custom-configs-drop-down .custom-configs-item .action-button {\n display: inline-block;\n margin-right: 1px;\n min-width: 12%;\n height: 48px;\n width: 12%;\n text-align: center;\n line-height: 48px;\n background-color: #00a091;\n color: #ffffff; }\n .custom-configs-drop-down .custom-configs-item .action-button i.fa {\n font-size: 12px;\n margin-left: 0; }\n .custom-configs-drop-down .custom-configs-item .action-button.remove {\n display: inline-flex;\n justify-content: center;\n color: #b30000;\n background-color: transparent; }\n .custom-configs-drop-down .custom-configs-item .action-button:disabled,\n .custom-configs-drop-down .custom-configs-item .action-button[disabled] {\n background-color: #e6e6e6;\n color: #949494; }\n .custom-configs-drop-down .custom-configs-item .custom-configs-dialog-name {\n display: inline-block;\n width: 60%;\n min-height: 48px; }\n .custom-configs-drop-down .custom-configs-item .collapsable .button-hovering {\n width: 80%;\n border: none;\n display: inline-block;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 48px;\n text-transform: unset; }\n .custom-configs-drop-down .custom-configs-item .collapsable .action-button {\n width: 13%; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/customConfigs/customConfigs.component.scss"],"names":[],"mappings":"AAAA;EACC,gBAAgB,EAAA;;AAGjB;EAEE,YAAY;EACZ,aAAa;EACb,iBAAiB;EACjB,eAAe;EACf,SAAS;EACT,UAAU;EACV,cAAc;EACd,oBAAoB;EACpB,2CAA2C,EAAA;EAV7C;IAaG,eAAe,EAAA;EAblB;IAiBG,yBAAyB,EAAA;;AAK5B;EACC,UAAU,EAAA;EADX;IAIE,YAAY;IACZ,gBAAgB;IAChB,cAAc;IACd,oBAAoB;IACpB,sBAAsB;IACtB,qBAAqB,EAAA;IATvB;MAYG,SAAS;MACT,mBAAmB;MACnB,6BAA6B,EAAA;EAdhC;IAoBG,YAAY;IACZ,gBAAgB;IAChB,uBAAuB;IACvB,6BAA6B,EAAA;IAvBhC;MA0BI,qBAAqB;MACrB,UAAU;MACV,gBAAgB;MAChB,uBAAuB;MACvB,iBAAiB,EAAA;IA9BrB;MAkCI,0CAA0C,EAAA;EAlC9C;IAuCG,mBAAmB,EAAA;EAvCtB;IA0CG,eAAe;IACf,iBAAiB;IACjB,mBAAmB,EAAA;EA5CtB;IAgDG,qBAAqB;IACrB,iBAAiB;IACjB,cAAc;IACd,YAAY;IACZ,UAAU;IACV,kBAAkB;IAClB,iBAAiB;IACjB,yBAAyB;IACzB,cAAc,EAAA;IAxDjB;MA2DI,eAAe;MACf,cAAc,EAAA;IA5DlB;MAgEI,oBAAoB;MACpB,uBAAuB;MACvB,cAAc;MACd,6BAA6B,EAAA;EAnEjC;;IAyEG,yBAAyB;IACzB,cAAc,EAAA;EA1EjB;IA8EG,qBAAqB;IACrB,UAAU;IACV,gBAAgB,EAAA;EAhFnB;IAqFI,UAAU;IACV,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;IAChB,uBAAuB;IACvB,iBAAiB;IACjB,qBAAqB,EAAA;EA3FzB;IA8FI,UAAU,EAAA","sourcesContent":[".custom-configs {\n\tmargin-left: 15%;\n}\n\n.custom-configs-component {\n\t.custom-configs-button {\n\t\theight: 22px;\n\t\tmin-height: 0;\n\t\tline-height: 23px;\n\t\tmin-width: 45px;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\tfont-size: 9pt;\n\t\ttext-transform: none;\n\t\tbackground-color: rgba(230, 230, 230, 0.96);\n\n\t\t&.plus {\n\t\t\tmin-width: 30px;\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground-color: #c8c8c8;\n\t\t}\n\t}\n}\n\n.custom-configs-drop-down {\n\tpadding: 0;\n\n\tmd-menu-item {\n\t\theight: auto;\n\t\tmin-height: auto;\n\t\tdisplay: block;\n\t\talign-content: unset;\n\t\tjustify-content: unset;\n\t\tflex-direction: unset;\n\n\t\t.collapsable {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0 0 0 10px;\n\t\t\tborder-bottom: 1px solid grey;\n\t\t}\n\t}\n\n\t.custom-configs-item {\n\t\t.button-hovering {\n\t\t\theight: 48px;\n\t\t\ttext-align: left;\n\t\t\tbackground-color: unset;\n\t\t\tborder-bottom: 1px solid grey;\n\n\t\t\t.collapse-trigger {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\twidth: 91%;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\tline-height: 48px;\n\t\t\t}\n\n\t\t\t&:hover:not([disabled]) {\n\t\t\t\tbackground-color: rgba(158, 158, 158, 0.2);\n\t\t\t}\n\t\t}\n\n\t\ti.fa {\n\t\t\tmargin-left: 0.8rem;\n\t\t}\n\t\ti.collapse-icon {\n\t\t\tfont-size: 10px;\n\t\t\tline-height: 48px;\n\t\t\tvertical-align: top;\n\t\t}\n\n\t\t.action-button {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-right: 1px;\n\t\t\tmin-width: 12%;\n\t\t\theight: 48px;\n\t\t\twidth: 12%;\n\t\t\ttext-align: center;\n\t\t\tline-height: 48px;\n\t\t\tbackground-color: #00a091;\n\t\t\tcolor: #ffffff;\n\n\t\t\ti.fa {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\n\t\t\t&.remove {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\tcolor: #b30000;\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\t\t}\n\n\t\t.action-button:disabled,\n\t\t.action-button[disabled] {\n\t\t\tbackground-color: #e6e6e6;\n\t\t\tcolor: #949494;\n\t\t}\n\n\t\t.custom-configs-dialog-name {\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 60%;\n\t\t\tmin-height: 48px;\n\t\t}\n\n\t\t.collapsable {\n\t\t\t.button-hovering {\n\t\t\t\twidth: 80%;\n\t\t\t\tborder: none;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\tline-height: 48px;\n\t\t\t\ttext-transform: unset;\n\t\t\t}\n\t\t\t.action-button {\n\t\t\t\twidth: 13%;\n\t\t\t}\n\t\t}\n\t}\n}\n"],"sourceRoot":""}]);
237943
+ ___CSS_LOADER_EXPORT___.push([module.id, ".custom-configs {\n margin-left: 15%; }\n\n.custom-configs-component .custom-configs-button {\n height: 22px;\n min-height: 0;\n line-height: 23px;\n min-width: 45px;\n margin: 0;\n padding: 0;\n font-size: 9pt;\n text-transform: none;\n background-color: rgba(230, 230, 230, 0.96); }\n .custom-configs-component .custom-configs-button.plus {\n min-width: 30px; }\n .custom-configs-component .custom-configs-button:hover {\n background-color: #c8c8c8; }\n\n.custom-configs-drop-down {\n padding: 0; }\n .custom-configs-drop-down md-menu-item {\n height: auto;\n min-height: auto;\n display: block;\n align-content: unset;\n justify-content: unset;\n flex-direction: unset; }\n .custom-configs-drop-down md-menu-item .collapsable {\n margin: 0;\n padding: 0 0 0 10px;\n border-bottom: 1px solid grey; }\n .custom-configs-drop-down .custom-configs-item .button-hovering {\n height: 48px;\n text-align: left;\n background-color: unset;\n border-bottom: 1px solid grey; }\n .custom-configs-drop-down .custom-configs-item .button-hovering .collapse-trigger {\n display: inline-block;\n width: 91%;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 48px; }\n .custom-configs-drop-down .custom-configs-item .button-hovering:hover:not([disabled]) {\n background-color: rgba(158, 158, 158, 0.2); }\n .custom-configs-drop-down .custom-configs-item i.fa {\n margin-left: 0.8rem; }\n .custom-configs-drop-down .custom-configs-item i.collapse-icon {\n font-size: 10px;\n line-height: 48px;\n vertical-align: top;\n color: black; }\n .custom-configs-drop-down .custom-configs-item .action-button {\n display: inline-block;\n margin-right: 1px;\n min-width: 12%;\n height: 48px;\n width: 12%;\n text-align: center;\n line-height: 48px;\n background-color: #00a091;\n color: #ffffff; }\n .custom-configs-drop-down .custom-configs-item .action-button i.fa {\n font-size: 12px;\n margin-left: 0; }\n .custom-configs-drop-down .custom-configs-item .action-button.remove {\n display: inline-flex;\n justify-content: center;\n color: #b30000;\n background-color: transparent; }\n .custom-configs-drop-down .custom-configs-item .action-button:disabled,\n .custom-configs-drop-down .custom-configs-item .action-button[disabled] {\n background-color: #e6e6e6;\n color: #949494; }\n .custom-configs-drop-down .custom-configs-item .custom-configs-dialog-name {\n display: inline-block;\n width: 60%;\n min-height: 48px; }\n .custom-configs-drop-down .custom-configs-item .collapsable .button-hovering {\n width: 80%;\n border: none;\n display: inline-block;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 48px;\n text-transform: unset; }\n .custom-configs-drop-down .custom-configs-item .collapsable .action-button {\n width: 13%; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/customConfigs/customConfigs.component.scss"],"names":[],"mappings":"AAAA;EACC,gBAAgB,EAAA;;AAGjB;EAEE,YAAY;EACZ,aAAa;EACb,iBAAiB;EACjB,eAAe;EACf,SAAS;EACT,UAAU;EACV,cAAc;EACd,oBAAoB;EACpB,2CAA2C,EAAA;EAV7C;IAaG,eAAe,EAAA;EAblB;IAiBG,yBAAyB,EAAA;;AAK5B;EACC,UAAU,EAAA;EADX;IAIE,YAAY;IACZ,gBAAgB;IAChB,cAAc;IACd,oBAAoB;IACpB,sBAAsB;IACtB,qBAAqB,EAAA;IATvB;MAYG,SAAS;MACT,mBAAmB;MACnB,6BAA6B,EAAA;EAdhC;IAoBG,YAAY;IACZ,gBAAgB;IAChB,uBAAuB;IACvB,6BAA6B,EAAA;IAvBhC;MA0BI,qBAAqB;MACrB,UAAU;MACV,gBAAgB;MAChB,uBAAuB;MACvB,iBAAiB,EAAA;IA9BrB;MAkCI,0CAA0C,EAAA;EAlC9C;IAuCG,mBAAmB,EAAA;EAvCtB;IA0CG,eAAe;IACf,iBAAiB;IACjB,mBAAmB;IACnB,YAAY,EAAA;EA7Cf;IAiDG,qBAAqB;IACrB,iBAAiB;IACjB,cAAc;IACd,YAAY;IACZ,UAAU;IACV,kBAAkB;IAClB,iBAAiB;IACjB,yBAAyB;IACzB,cAAc,EAAA;IAzDjB;MA4DI,eAAe;MACf,cAAc,EAAA;IA7DlB;MAiEI,oBAAoB;MACpB,uBAAuB;MACvB,cAAc;MACd,6BAA6B,EAAA;EApEjC;;IA0EG,yBAAyB;IACzB,cAAc,EAAA;EA3EjB;IA+EG,qBAAqB;IACrB,UAAU;IACV,gBAAgB,EAAA;EAjFnB;IAsFI,UAAU;IACV,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;IAChB,uBAAuB;IACvB,iBAAiB;IACjB,qBAAqB,EAAA;EA5FzB;IA+FI,UAAU,EAAA","sourcesContent":[".custom-configs {\n\tmargin-left: 15%;\n}\n\n.custom-configs-component {\n\t.custom-configs-button {\n\t\theight: 22px;\n\t\tmin-height: 0;\n\t\tline-height: 23px;\n\t\tmin-width: 45px;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\tfont-size: 9pt;\n\t\ttext-transform: none;\n\t\tbackground-color: rgba(230, 230, 230, 0.96);\n\n\t\t&.plus {\n\t\t\tmin-width: 30px;\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground-color: #c8c8c8;\n\t\t}\n\t}\n}\n\n.custom-configs-drop-down {\n\tpadding: 0;\n\n\tmd-menu-item {\n\t\theight: auto;\n\t\tmin-height: auto;\n\t\tdisplay: block;\n\t\talign-content: unset;\n\t\tjustify-content: unset;\n\t\tflex-direction: unset;\n\n\t\t.collapsable {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0 0 0 10px;\n\t\t\tborder-bottom: 1px solid grey;\n\t\t}\n\t}\n\n\t.custom-configs-item {\n\t\t.button-hovering {\n\t\t\theight: 48px;\n\t\t\ttext-align: left;\n\t\t\tbackground-color: unset;\n\t\t\tborder-bottom: 1px solid grey;\n\n\t\t\t.collapse-trigger {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\twidth: 91%;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\tline-height: 48px;\n\t\t\t}\n\n\t\t\t&:hover:not([disabled]) {\n\t\t\t\tbackground-color: rgba(158, 158, 158, 0.2);\n\t\t\t}\n\t\t}\n\n\t\ti.fa {\n\t\t\tmargin-left: 0.8rem;\n\t\t}\n\t\ti.collapse-icon {\n\t\t\tfont-size: 10px;\n\t\t\tline-height: 48px;\n\t\t\tvertical-align: top;\n\t\t\tcolor: black;\n\t\t}\n\n\t\t.action-button {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-right: 1px;\n\t\t\tmin-width: 12%;\n\t\t\theight: 48px;\n\t\t\twidth: 12%;\n\t\t\ttext-align: center;\n\t\t\tline-height: 48px;\n\t\t\tbackground-color: #00a091;\n\t\t\tcolor: #ffffff;\n\n\t\t\ti.fa {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\n\t\t\t&.remove {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\tcolor: #b30000;\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\t\t}\n\n\t\t.action-button:disabled,\n\t\t.action-button[disabled] {\n\t\t\tbackground-color: #e6e6e6;\n\t\t\tcolor: #949494;\n\t\t}\n\n\t\t.custom-configs-dialog-name {\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 60%;\n\t\t\tmin-height: 48px;\n\t\t}\n\n\t\t.collapsable {\n\t\t\t.button-hovering {\n\t\t\t\twidth: 80%;\n\t\t\t\tborder: none;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\tline-height: 48px;\n\t\t\t\ttext-transform: unset;\n\t\t\t}\n\t\t\t.action-button {\n\t\t\t\twidth: 13%;\n\t\t\t}\n\t\t}\n\t}\n}\n"],"sourceRoot":""}]);
237872
237944
  // Exports
237873
237945
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
237874
237946
 
@@ -238462,7 +238534,7 @@ __webpack_require__.r(__webpack_exports__);
238462
238534
 
238463
238535
  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()));
238464
238536
  // Module
238465
- ___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) {\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 min-width: 15px; }\n node-context-menu-component .md-button:not(.colorButton):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;EAkBE,gBAAgB;EAChB,aAAa;EACb,iBAAiB;EACjB,gBAAgB,EAAA;EArBlB;IAwBG,eAAe,EAAA;EAxBlB;IA4BG,gBAAgB,EAAA;;AA5BnB;EAiCE,sBAAsB;EACtB,uBAAuB;EACvB,0BAA0B;EAC1B,2BAA2B,EAAA;EApC7B;IAuCG,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\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":""}]);
238537
+ ___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":""}]);
238466
238538
  // Exports
238467
238539
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
238468
238540
 
@@ -238794,33 +238866,6 @@ ___CSS_LOADER_EXPORT___.push([module.id, "tool-bar-component .tool-bar {\n disp
238794
238866
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
238795
238867
 
238796
238868
 
238797
- /***/ }),
238798
-
238799
- /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/unfocusButton/unfocusButton.component.scss":
238800
- /*!***************************************************************************************************************************************************!*\
238801
- !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/unfocusButton/unfocusButton.component.scss ***!
238802
- \***************************************************************************************************************************************************/
238803
- /***/ ((module, __webpack_exports__, __webpack_require__) => {
238804
-
238805
- "use strict";
238806
- __webpack_require__.r(__webpack_exports__);
238807
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
238808
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
238809
- /* harmony export */ });
238810
- /* 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");
238811
- /* 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__);
238812
- /* 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");
238813
- /* 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__);
238814
- // Imports
238815
-
238816
-
238817
- 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()));
238818
- // Module
238819
- ___CSS_LOADER_EXPORT___.push([module.id, "unfocus-button-component .md-button {\n margin-bottom: 0; }\n", "",{"version":3,"sources":["webpack://./app/codeCharta/ui/unfocusButton/unfocusButton.component.scss"],"names":[],"mappings":"AAAA;EAEE,gBAAgB,EAAA","sourcesContent":["unfocus-button-component {\n\t.md-button {\n\t\tmargin-bottom: 0;\n\t}\n}\n"],"sourceRoot":""}]);
238820
- // Exports
238821
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
238822
-
238823
-
238824
238869
  /***/ }),
238825
238870
 
238826
238871
  /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/viewCube/viewCube.component.scss":
@@ -241774,7 +241819,7 @@ module.exports = code;
241774
241819
  /***/ ((module) => {
241775
241820
 
241776
241821
  // Module
241777
- var code = "<div class=\"artificial-intelligence-component\">\n\t<md-menu>\n\t\t<md-button\n\t\t\tclass=\"suspicious-metrics-button\"\n\t\t\tng-click=\"$mdMenu.open($event);hideBadge = true;\"\n\t\t\ttitle=\"Open Suspicious Metrics Panel\"\n\t\t>\n\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t<span\n\t\t\t\tclass=\"ai-badge\"\n\t\t\t\tng-show=\"\n\t\t\t\t\t!hideBadge &&\n\t\t\t\t\t($ctrl._viewModel.riskProfile !== undefined ||\n\t\t\t\t\t\t$ctrl._viewModel.suspiciousMetricSuggestionLinks.length ||\n\t\t\t\t\t\t$ctrl._viewModel.unsuspiciousMetrics.length)\n\t\t\t\t\"\n\t\t\t>\n\t\t\t\t{{ $ctrl._viewModel.suspiciousMetricSuggestionLinks.length }}\n\t\t\t</span>\n\t\t</md-button>\n\n\t\t<md-menu-content class=\"ai-drop-down metrics\">\n\t\t\t<md-menu-item class=\"title\" ng-show=\"$ctrl._viewModel.unsuspiciousMetrics.length\">\n\t\t\t\t<span ng-show=\"$ctrl._viewModel.analyzedProgrammingLanguage.length\">\n\t\t\t\t\tUnsuspicious Metrics in {{ $ctrl._viewModel.analyzedProgrammingLanguage }} code\n\t\t\t\t</span>\n\t\t\t\t<span ng-show=\"!$ctrl._viewModel.analyzedProgrammingLanguage.length\"> Unsuspicious Metrics </span>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-menu-item ng-show=\"$ctrl._viewModel.unsuspiciousMetrics.length\">\n\t\t\t\t<ul>\n\t\t\t\t\t<li ng-repeat=\"unsuspiciousMetric in $ctrl._viewModel.unsuspiciousMetrics\">{{ unsuspiciousMetric }}</li>\n\t\t\t\t</ul>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-menu-item class=\"title\" ng-show=\"$ctrl._viewModel.suspiciousMetricSuggestionLinks.length\">\n\t\t\t\t<span ng-show=\"$ctrl._viewModel.analyzedProgrammingLanguage.length\">\n\t\t\t\t\tSuspicious Metrics in {{ $ctrl._viewModel.analyzedProgrammingLanguage }} code\n\t\t\t\t</span>\n\t\t\t\t<span ng-show=\"!$ctrl._viewModel.analyzedProgrammingLanguage.length\"> Suspicious Metrics (click below to view) </span>\n\t\t\t</md-menu-item>\n\n\t\t\t<ul class=\"suspicious-metrics\">\n\t\t\t\t<li class=\"suspicious-metric\" ng-repeat=\"item in $ctrl._viewModel.suspiciousMetricSuggestionLinks\">\n\t\t\t\t\t<md-button\n\t\t\t\t\t\tclass=\"metric-button {{ item.outlierCustomConfigId.length > 0 ? 'high-risk' : '' }}\"\n\t\t\t\t\t\tng-click=\"$ctrl.applyCustomConfig(item.generalCustomConfigId)\"\n\t\t\t\t\t\ttitle=\"Apply Map Configuration to show files with suspicious metric {{\n\t\t\t\t\t\t\titem.metric\n\t\t\t\t\t\t}} and high risk or very high risk depending on selection\"\n\t\t\t\t\t>\n\t\t\t\t\t\tSuspicious {{ item.metric.toUpperCase() }} Files\n\t\t\t\t\t</md-button>\n\n\t\t\t\t\t<md-button\n\t\t\t\t\t\tclass=\"risk-button\"\n\t\t\t\t\t\tng-click=\"$ctrl.applyCustomConfig(item.outlierCustomConfigId)\"\n\t\t\t\t\t\tng-show=\"item.outlierCustomConfigId.length > 0\"\n\t\t\t\t\t\ttitle=\"Show very high risk files\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t\t\t</md-button>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</md-menu-content>\n\t</md-menu>\n\n\t<md-menu>\n\t\t<md-button class=\"high-risk-profile-button\" ng-click=\"$mdMenu.open($event)\" title=\"Open High Risk Profile\">\n\t\t\t<i class=\"fa fa-bar-chart\"></i>\n\t\t</md-button>\n\n\t\t<md-menu-content class=\"ai-drop-down summary\">\n\t\t\t<md-menu-item class=\"title\">\n\t\t\t\t<p ng-show=\"$ctrl._viewModel.analyzedProgrammingLanguage.length\">\n\t\t\t\t\tRisk Profile for {{ $ctrl._viewModel.analyzedProgrammingLanguage }} code (most frequent programming language in project)\n\t\t\t\t</p>\n\t\t\t\t<p>Calculations are always based on mcc (cyclomatic complexity)</p>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-menu-item class=\"suspicious-metrics-summary\">\n\t\t\t\t<ul ng-show=\"$ctrl._viewModel.riskProfile !== undefined\">\n\t\t\t\t\t<li>{{ $ctrl._viewModel.riskProfile.lowRisk }}% of overall code is in files with low complexity</li>\n\t\t\t\t\t<li>{{ $ctrl._viewModel.riskProfile.moderateRisk }}% of overall code is in files with moderate complexity</li>\n\t\t\t\t\t<li>{{ $ctrl._viewModel.riskProfile.highRisk }}% of overall code is in files with high complexity</li>\n\t\t\t\t\t<li>{{ $ctrl._viewModel.riskProfile.veryHighRisk }}% of overall code is in files with extreme complexity</li>\n\t\t\t\t</ul>\n\t\t\t\t<span ng-show=\"$ctrl._viewModel.riskProfile === undefined\">\n\t\t\t\t\tCould not calculate Risk Profile. Metrics rloc and mcc not available.\n\t\t\t\t</span>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-menu-item class=\"risk-profiles\" ng-show=\"$ctrl._viewModel.riskProfile !== undefined\">\n\t\t\t\t<div\n\t\t\t\t\tng-if=\"$ctrl._viewModel.riskProfile.lowRisk > 0\"\n\t\t\t\t\ttitle=\"Low Risk ({{ $ctrl._viewModel.riskProfile.lowRisk }}% of code)\"\n\t\t\t\t\tclass=\"risk-profile low-risk\"\n\t\t\t\t\tstyle=\"width:{{ $ctrl._viewModel.riskProfile.lowRisk }}%;\n {{ $ctrl._viewModel.riskProfile.lowRisk < 5 ? 'color:rgba(0,0,0,0)' : '' }}\"\n\t\t\t\t>\n\t\t\t\t\t{{ $ctrl._viewModel.riskProfile.lowRisk }}%\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tng-if=\"$ctrl._viewModel.riskProfile.moderateRisk > 0\"\n\t\t\t\t\ttitle=\"Moderate Risk ({{ $ctrl._viewModel.riskProfile.moderateRisk }}% of code)\"\n\t\t\t\t\tclass=\"risk-profile moderate-risk\"\n\t\t\t\t\tstyle=\"width:{{ $ctrl._viewModel.riskProfile.moderateRisk }}%;\n {{ $ctrl._viewModel.riskProfile.moderateRisk < 5 ? 'color:rgba(0,0,0,0)' : '' }}\"\n\t\t\t\t>\n\t\t\t\t\t{{ $ctrl._viewModel.riskProfile.moderateRisk }}%\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tng-if=\"$ctrl._viewModel.riskProfile.highRisk > 0\"\n\t\t\t\t\ttitle=\"High Risk ({{ $ctrl._viewModel.riskProfile.highRisk }}% of code)\"\n\t\t\t\t\tclass=\"risk-profile high-risk\"\n\t\t\t\t\tstyle=\"width:{{ $ctrl._viewModel.riskProfile.highRisk }}%;\n {{ $ctrl._viewModel.riskProfile.highRisk < 5 ? 'color:rgba(0,0,0,0)' : '' }}\"\n\t\t\t\t>\n\t\t\t\t\t{{ $ctrl._viewModel.riskProfile.highRisk }}%\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tng-if=\"$ctrl._viewModel.riskProfile.veryHighRisk > 0\"\n\t\t\t\t\ttitle=\"Very High Risk ({{ $ctrl._viewModel.riskProfile.veryHighRisk }}% of code)\"\n\t\t\t\t\tclass=\"risk-profile very-high-risk\"\n\t\t\t\t\tstyle=\"width:{{ $ctrl._viewModel.riskProfile.veryHighRisk }}%;\n {{ $ctrl._viewModel.riskProfile.veryHighRisk < 5 ? 'color:rgba(0,0,0,0)' : '' }}\"\n\t\t\t\t>\n\t\t\t\t\t{{ $ctrl._viewModel.riskProfile.veryHighRisk }}%\n\t\t\t\t</div>\n\t\t\t</md-menu-item>\n\t\t</md-menu-content>\n\t</md-menu>\n</div>\n";
241822
+ var code = "<div class=\"artificial-intelligence-component\">\n\t<md-menu>\n\t\t<md-button\n\t\t\tclass=\"suspicious-metrics-button\"\n\t\t\tng-click=\"$mdMenu.open($event);hideBadge = true;\"\n\t\t\ttitle=\"Open Suspicious Metrics Panel\"\n\t\t>\n\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t<span\n\t\t\t\tclass=\"ai-badge\"\n\t\t\t\tng-show=\"\n\t\t\t\t\t!hideBadge &&\n\t\t\t\t\t($ctrl._viewModel.riskProfile !== undefined ||\n\t\t\t\t\t\t$ctrl._viewModel.suspiciousMetricSuggestionLinks.length ||\n\t\t\t\t\t\t$ctrl._viewModel.unsuspiciousMetrics.length)\n\t\t\t\t\"\n\t\t\t>\n\t\t\t\t{{ $ctrl._viewModel.suspiciousMetricSuggestionLinks.length }}\n\t\t\t</span>\n\t\t</md-button>\n\n\t\t<md-menu-content class=\"ai-drop-down metrics\">\n\t\t\t<md-menu-item class=\"title\" ng-show=\"$ctrl._viewModel.unsuspiciousMetrics.length\">\n\t\t\t\t<span ng-show=\"$ctrl._viewModel.analyzedProgrammingLanguage.length\">\n\t\t\t\t\tUnsuspicious Metrics in {{ $ctrl._viewModel.analyzedProgrammingLanguage }} code\n\t\t\t\t</span>\n\t\t\t\t<span ng-show=\"!$ctrl._viewModel.analyzedProgrammingLanguage.length\"> Unsuspicious Metrics </span>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-menu-item ng-show=\"$ctrl._viewModel.unsuspiciousMetrics.length\">\n\t\t\t\t<ul>\n\t\t\t\t\t<li ng-repeat=\"unsuspiciousMetric in $ctrl._viewModel.unsuspiciousMetrics\">{{ unsuspiciousMetric }}</li>\n\t\t\t\t</ul>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-menu-item class=\"title\" ng-show=\"$ctrl._viewModel.suspiciousMetricSuggestionLinks.length\">\n\t\t\t\t<span ng-show=\"$ctrl._viewModel.analyzedProgrammingLanguage.length\">\n\t\t\t\t\tSuspicious Metrics in {{ $ctrl._viewModel.analyzedProgrammingLanguage }} code\n\t\t\t\t</span>\n\t\t\t\t<span ng-show=\"!$ctrl._viewModel.analyzedProgrammingLanguage.length\"> Suspicious Metrics (click below to view) </span>\n\t\t\t</md-menu-item>\n\n\t\t\t<ul class=\"suspicious-metrics\">\n\t\t\t\t<li class=\"suspicious-metric\" ng-repeat=\"item in $ctrl._viewModel.suspiciousMetricSuggestionLinks\">\n\t\t\t\t\t<md-button\n\t\t\t\t\t\tclass=\"metric-button\"\n\t\t\t\t\t\tng-click=\"$ctrl.applySuspiciousMetric(item, false)\"\n\t\t\t\t\t\ttitle=\"Apply Map Configuration to show files with suspicious metric {{\n\t\t\t\t\t\t\titem.metric\n\t\t\t\t\t\t}} and high risk or very high risk depending on selection\"\n\t\t\t\t\t>\n\t\t\t\t\t\tSuspicious {{ item.metric.toUpperCase() }} Files\n\t\t\t\t\t</md-button>\n\n\t\t\t\t\t<md-button\n\t\t\t\t\t\tclass=\"risk-button\"\n\t\t\t\t\t\tng-click=\"$ctrl.applySuspiciousMetric(item, true)\"\n\t\t\t\t\t\tng-show=\"item.isOutlier\"\n\t\t\t\t\t\ttitle=\"Show very high risk files\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t\t\t</md-button>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</md-menu-content>\n\t</md-menu>\n\n\t<md-menu>\n\t\t<md-button class=\"high-risk-profile-button\" ng-click=\"$mdMenu.open($event)\" title=\"Open High Risk Profile\">\n\t\t\t<i class=\"fa fa-bar-chart\"></i>\n\t\t</md-button>\n\n\t\t<md-menu-content class=\"ai-drop-down summary\">\n\t\t\t<md-menu-item class=\"title\">\n\t\t\t\t<p ng-show=\"$ctrl._viewModel.analyzedProgrammingLanguage.length\">\n\t\t\t\t\tRisk Profile for {{ $ctrl._viewModel.analyzedProgrammingLanguage }} code (most frequent programming language in project)\n\t\t\t\t</p>\n\t\t\t\t<p>Calculations are always based on mcc (cyclomatic complexity)</p>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-menu-item class=\"suspicious-metrics-summary\">\n\t\t\t\t<ul ng-show=\"$ctrl._viewModel.riskProfile !== undefined\">\n\t\t\t\t\t<li>{{ $ctrl._viewModel.riskProfile.lowRisk }}% of overall code is in files with low complexity</li>\n\t\t\t\t\t<li>{{ $ctrl._viewModel.riskProfile.moderateRisk }}% of overall code is in files with moderate complexity</li>\n\t\t\t\t\t<li>{{ $ctrl._viewModel.riskProfile.highRisk }}% of overall code is in files with high complexity</li>\n\t\t\t\t\t<li>{{ $ctrl._viewModel.riskProfile.veryHighRisk }}% of overall code is in files with extreme complexity</li>\n\t\t\t\t</ul>\n\t\t\t\t<span ng-show=\"$ctrl._viewModel.riskProfile === undefined\">\n\t\t\t\t\tCould not calculate Risk Profile. Metrics rloc and mcc not available.\n\t\t\t\t</span>\n\t\t\t</md-menu-item>\n\n\t\t\t<md-menu-item class=\"risk-profiles\" ng-show=\"$ctrl._viewModel.riskProfile !== undefined\">\n\t\t\t\t<div\n\t\t\t\t\tng-if=\"$ctrl._viewModel.riskProfile.lowRisk > 0\"\n\t\t\t\t\ttitle=\"Low Risk ({{ $ctrl._viewModel.riskProfile.lowRisk }}% of code)\"\n\t\t\t\t\tclass=\"risk-profile low-risk\"\n\t\t\t\t\tstyle=\"width:{{ $ctrl._viewModel.riskProfile.lowRisk }}%;\n {{ $ctrl._viewModel.riskProfile.lowRisk < 5 ? 'color:rgba(0,0,0,0)' : '' }}\"\n\t\t\t\t>\n\t\t\t\t\t{{ $ctrl._viewModel.riskProfile.lowRisk }}%\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tng-if=\"$ctrl._viewModel.riskProfile.moderateRisk > 0\"\n\t\t\t\t\ttitle=\"Moderate Risk ({{ $ctrl._viewModel.riskProfile.moderateRisk }}% of code)\"\n\t\t\t\t\tclass=\"risk-profile moderate-risk\"\n\t\t\t\t\tstyle=\"width:{{ $ctrl._viewModel.riskProfile.moderateRisk }}%;\n {{ $ctrl._viewModel.riskProfile.moderateRisk < 5 ? 'color:rgba(0,0,0,0)' : '' }}\"\n\t\t\t\t>\n\t\t\t\t\t{{ $ctrl._viewModel.riskProfile.moderateRisk }}%\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tng-if=\"$ctrl._viewModel.riskProfile.highRisk > 0\"\n\t\t\t\t\ttitle=\"High Risk ({{ $ctrl._viewModel.riskProfile.highRisk }}% of code)\"\n\t\t\t\t\tclass=\"risk-profile high-risk\"\n\t\t\t\t\tstyle=\"width:{{ $ctrl._viewModel.riskProfile.highRisk }}%;\n {{ $ctrl._viewModel.riskProfile.highRisk < 5 ? 'color:rgba(0,0,0,0)' : '' }}\"\n\t\t\t\t>\n\t\t\t\t\t{{ $ctrl._viewModel.riskProfile.highRisk }}%\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tng-if=\"$ctrl._viewModel.riskProfile.veryHighRisk > 0\"\n\t\t\t\t\ttitle=\"Very High Risk ({{ $ctrl._viewModel.riskProfile.veryHighRisk }}% of code)\"\n\t\t\t\t\tclass=\"risk-profile very-high-risk\"\n\t\t\t\t\tstyle=\"width:{{ $ctrl._viewModel.riskProfile.veryHighRisk }}%;\n {{ $ctrl._viewModel.riskProfile.veryHighRisk < 5 ? 'color:rgba(0,0,0,0)' : '' }}\"\n\t\t\t\t>\n\t\t\t\t\t{{ $ctrl._viewModel.riskProfile.veryHighRisk }}%\n\t\t\t\t</div>\n\t\t\t</md-menu-item>\n\t\t</md-menu-content>\n\t</md-menu>\n</div>\n";
241778
241823
  // Exports
241779
241824
  module.exports = code;
241780
241825
 
@@ -241930,7 +241975,7 @@ module.exports = code;
241930
241975
  /***/ ((module) => {
241931
241976
 
241932
241977
  // Module
241933
- var code = "<color-chrome\n\trole=\"colorpicker\"\n\t(click)=\"$event.stopPropagation()\"\n\t[disableAlpha]=\"true\"\n\t[color]=\"hexColor\"\n\t(onChangeComplete)=\"handleChangeComplete($event.color.hex)\"\n></color-chrome>\n";
241978
+ var code = "<ng-container\n\t[ngTemplateOutlet]=\"triggerTemplate\"\n\t[ngTemplateOutletContext]=\"{ isOpen: colorPickerMenuTrigger.menuOpen, isHovered: isHovered }\"\n>\n</ng-container>\n\n<span [matMenuTriggerFor]=\"menu\" #colorPickerMenuTrigger=\"matMenuTrigger\"></span>\n<mat-menu #menu=\"matMenu\" class=\"cc-color-picker-menu\" [xPosition]=\"openXPosition\" [hasBackdrop]=\"false\">\n\t<color-chrome\n\t\trole=\"colorpicker\"\n\t\t(click)=\"$event.stopPropagation()\"\n\t\t[disableAlpha]=\"true\"\n\t\t[color]=\"hexColor\"\n\t\t(onChangeComplete)=\"handleChangeComplete($event.color.hex)\"\n\t></color-chrome>\n</mat-menu>\n";
241934
241979
  // Exports
241935
241980
  module.exports = code;
241936
241981
 
@@ -241969,7 +242014,7 @@ module.exports = code;
241969
242014
  /***/ ((module) => {
241970
242015
 
241971
242016
  // Module
241972
- 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 class=\"custom-configs-item\" ng-repeat=\"customConfigItemGroup in $ctrl._viewModel.dropDownCustomConfigItemGroups\">\n\t\t\t\t<md-button class=\"button-hovering\" ng-click=\"collapsed=!collapsed\" md-prevent-menu-close=\"md-prevent-menu-close\">\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)\"\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</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";
242017
+ 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";
241973
242018
  // Exports
241974
242019
  module.exports = code;
241975
242020
 
@@ -242164,7 +242209,7 @@ module.exports = code;
242164
242209
  /***/ ((module) => {
242165
242210
 
242166
242211
  // Module
242167
- var code = "<span [matMenuTriggerFor]=\"menu\" #colorPickerMenuTrigger=\"matMenuTrigger\"></span>\n\n<div class=\"cc-labelled-color-picker-container\">\n\t<div class=\"cc-color-swatch-container\">\n\t\t<span class=\"cc-color-swatch\" [style.background-color]=\"hexColor\"></span>\n\t\t<span #brush [style.color]=\"hexColor | readableColorForBackground\" class=\"cc-color-brush fa fa-paint-brush\"></span>\n\t</div>\n\t<div>\n\t\t<span *ngFor=\"let label of labels\"> {{ label }} <br *ngIf=\"!last\" /></span>\n\t</div>\n</div>\n\n<mat-menu #menu=\"matMenu\" xPosition=\"before\" [hasBackdrop]=\"false\" class=\"cc-color-picker-menu\">\n\t<cc-color-picker [hexColor]=\"hexColor\" (onColorChange)=\"handleColorChange($event)\"></cc-color-picker>\n</mat-menu>\n";
242212
+ var code = "<cc-color-picker\n\t[hexColor]=\"hexColor\"\n\t(onColorChange)=\"handleColorChange($event)\"\n\t[openXPosition]=\"'before'\"\n\t[triggerTemplate]=\"colorPickerTriggerTemplate\"\n></cc-color-picker>\n\n<ng-template #colorPickerTriggerTemplate let-isOpen=\"isOpen\" let-isHovered=\"isHovered\">\n\t<div class=\"cc-labelled-color-picker-container\">\n\t\t<div class=\"cc-color-swatch-container\">\n\t\t\t<span class=\"cc-color-swatch\" [style.background-color]=\"hexColor\"></span>\n\t\t\t<span\n\t\t\t\tclass=\"cc-color-brush fa fa-paint-brush\"\n\t\t\t\t[style.color]=\"hexColor | readableColorForBackground\"\n\t\t\t\t[style.opacity]=\"isHovered || isOpen ? '1' : '0'\"\n\t\t\t>\n\t\t\t</span>\n\t\t</div>\n\t\t<div>\n\t\t\t<span *ngFor=\"let label of labels\"> {{ label }} <br *ngIf=\"!last\" /></span>\n\t\t</div>\n\t</div>\n</ng-template>\n";
242168
242213
  // Exports
242169
242214
  module.exports = code;
242170
242215
 
@@ -242447,6 +242492,19 @@ module.exports = code;
242447
242492
 
242448
242493
  /***/ }),
242449
242494
 
242495
+ /***/ "./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.html":
242496
+ /*!************************************************************************************!*\
242497
+ !*** ./app/codeCharta/ui/nodeContextMenu/focusButtons/focusButtons.component.html ***!
242498
+ \************************************************************************************/
242499
+ /***/ ((module) => {
242500
+
242501
+ // Module
242502
+ var code = "<ng-container *ngIf=\"currentFocusedNodePath$ | async | isNodeFocused: codeMapNode; let isNodeFocused\">\n\t<ng-container *ngIf=\"!isNodeFocused.isNodeFocused\">\n\t\t<button mat-button (click)=\"handleFocusNodeClicked()\" id=\"focus-button\" title=\"Only show selected nodes with children-nodes\">\n\t\t\t<i class=\"fa fa-bullseye\"></i> FOCUS\n\t\t</button>\n\t</ng-container>\n\n\t<ng-container *ngIf=\"isNodeFocused.isNodeFocused || isNodeFocused.isParentFocused\">\n\t\t<button mat-button aria-label=\"Remove Focus from node\" (click)=\"handleUnfocusNodeClicked()\" title=\"Show previous focused node\">\n\t\t\t<i class=\"fa fa-bullseye\"></i>\n\t\t\t{{ isNodeFocused.isParentFocused ? \"UNFOCUS PARENT\" : \"UNFOCUS\" }}\n\t\t</button>\n\t\t<button\n\t\t\tmat-button\n\t\t\t*ngIf=\"hasPreviousFocusedNodePath$ | async\"\n\t\t\taria-label=\"Remove Focus from all nodes\"\n\t\t\t(click)=\"handleUnfocusAllNodesClicked()\"\n\t\t\ttitle=\"Show complete map\"\n\t\t>\n\t\t\t<i class=\"fa fa-bullseye\"></i>\n\t\t\tUNFOCUS ALL\n\t\t</button>\n\t</ng-container>\n</ng-container>\n";
242503
+ // Exports
242504
+ module.exports = code;
242505
+
242506
+ /***/ }),
242507
+
242450
242508
  /***/ "./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.html":
242451
242509
  /*!******************************************************************************************************!*\
242452
242510
  !*** ./app/codeCharta/ui/nodeContextMenu/markFolderColorPicker/markFolderColorPicker.component.html ***!
@@ -242454,7 +242512,7 @@ module.exports = code;
242454
242512
  /***/ ((module) => {
242455
242513
 
242456
242514
  // Module
242457
- var code = "<div class=\"cc-color-picker-trigger fa fa-paint-brush\" [matMenuTriggerFor]=\"menu\" #colorPickerMenuTrigger=\"matMenuTrigger\"></div>\n\n<mat-menu #menu=\"matMenu\" [hasBackdrop]=\"false\" class=\"cc-color-picker-menu\">\n\t<cc-color-picker [hexColor]=\"'#ff0000'\" (onColorChange)=\"markFolder($event)\"></cc-color-picker>\n</mat-menu>\n";
242515
+ 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";
242458
242516
  // Exports
242459
242517
  module.exports = code;
242460
242518
 
@@ -242471,7 +242529,7 @@ var ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___ = __webpack_require__(/*! ../../../
242471
242529
  var ___HTML_LOADER_IMPORT_0___ = __webpack_require__(/*! ../../../assets/flatten.png */ "./app/assets/flatten.png");
242472
242530
  // Module
242473
242531
  var ___HTML_LOADER_REPLACEMENT_0___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_0___);
242474
- 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\t\t<md-button\n\t\t\tng-show=\"!$ctrl.isNodeFocused()\"\n\t\t\tng-click=\"$ctrl.focusNode()\"\n\t\t\tid=\"focus-button\"\n\t\t\ttitle=\"Only show selected nodes with children-nodes\"\n\t\t\t><i class=\"fa fa-bullseye\"></i> Focus</md-button\n\t\t>\n\t\t<unfocus-button-component\n\t\t\tis-node-focused=\"$ctrl._viewModel.isNodeFocused\"\n\t\t\tis-parent-focused=\"$ctrl._viewModel.isParentFocused\"\n\t\t\tng-show=\"$ctrl.isNodeOrParentFocused()\"\n\t\t></unfocus-button-component>\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";
242532
+ 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";
242475
242533
  // Exports
242476
242534
  module.exports = code;
242477
242535
 
@@ -242659,19 +242717,6 @@ module.exports = code;
242659
242717
 
242660
242718
  /***/ }),
242661
242719
 
242662
- /***/ "./app/codeCharta/ui/unfocusButton/unfocusButton.component.html":
242663
- /*!**********************************************************************!*\
242664
- !*** ./app/codeCharta/ui/unfocusButton/unfocusButton.component.html ***!
242665
- \**********************************************************************/
242666
- /***/ ((module) => {
242667
-
242668
- // Module
242669
- var code = "<div layout=\"column\">\n\t<md-button aria-label=\"Remove Focus from node\" ng-click=\"$ctrl.removeFocusedNode()\" title=\"Show previous focused node\"\n\t\t><i class=\"fa fa-bullseye\"></i>\n\t\t<span ng-show=\"$ctrl.isParentFocused\">Unfocus Parent</span>\n\t\t<span ng-show=\"$ctrl.isNodeFocused\">Unfocus</span>\n\t</md-button>\n\t<md-button\n\t\taria-label=\"Remove Focus from all nodes\"\n\t\tng-click=\"$ctrl.removeFocusedNode(true)\"\n\t\ttitle=\"Show complete map\"\n\t\tng-show=\"$ctrl._viewModel.focusedNodes.length > 1\"\n\t\t><i class=\"fa fa-bullseye\"></i>\n\t\t<span>Unfocus All</span>\n\t</md-button>\n</div>\n";
242670
- // Exports
242671
- module.exports = code;
242672
-
242673
- /***/ }),
242674
-
242675
242720
  /***/ "./app/codeCharta/ui/viewCube/viewCube.component.html":
242676
242721
  /*!************************************************************!*\
242677
242722
  !*** ./app/codeCharta/ui/viewCube/viewCube.component.html ***!
@@ -242692,7 +242737,7 @@ module.exports = code;
242692
242737
  /***/ ((module) => {
242693
242738
 
242694
242739
  // Module
242695
- 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.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</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";
242740
+ 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.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";
242696
242741
  // Exports
242697
242742
  module.exports = code;
242698
242743
 
@@ -242868,6 +242913,8 @@ const define = (object, key, value) =>
242868
242913
 
242869
242914
  const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g
242870
242915
 
242916
+ const RETURN_FALSE = () => false
242917
+
242871
242918
  // Sanitize the range of a regular expression
242872
242919
  // The cases are complicated, see test cases for details
242873
242920
  const sanitizeRange = range => range.replace(
@@ -243126,22 +243173,18 @@ const REPLACERS = [
243126
243173
  const regexCache = Object.create(null)
243127
243174
 
243128
243175
  // @param {pattern}
243129
- const makeRegex = (pattern, negative, ignorecase) => {
243130
- const r = regexCache[pattern]
243131
- if (r) {
243132
- return r
243133
- }
243176
+ const makeRegex = (pattern, ignoreCase) => {
243177
+ let source = regexCache[pattern]
243134
243178
 
243135
- // const replacers = negative
243136
- // ? NEGATIVE_REPLACERS
243137
- // : POSITIVE_REPLACERS
243138
-
243139
- const source = REPLACERS.reduce(
243140
- (prev, current) => prev.replace(current[0], current[1].bind(pattern)),
243141
- pattern
243142
- )
243179
+ if (!source) {
243180
+ source = REPLACERS.reduce(
243181
+ (prev, current) => prev.replace(current[0], current[1].bind(pattern)),
243182
+ pattern
243183
+ )
243184
+ regexCache[pattern] = source
243185
+ }
243143
243186
 
243144
- return regexCache[pattern] = ignorecase
243187
+ return ignoreCase
243145
243188
  ? new RegExp(source, 'i')
243146
243189
  : new RegExp(source)
243147
243190
  }
@@ -243172,7 +243215,7 @@ class IgnoreRule {
243172
243215
  }
243173
243216
  }
243174
243217
 
243175
- const createRule = (pattern, ignorecase) => {
243218
+ const createRule = (pattern, ignoreCase) => {
243176
243219
  const origin = pattern
243177
243220
  let negative = false
243178
243221
 
@@ -243190,7 +243233,7 @@ const createRule = (pattern, ignorecase) => {
243190
243233
  // > begin with a hash.
243191
243234
  .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')
243192
243235
 
243193
- const regex = makeRegex(pattern, negative, ignorecase)
243236
+ const regex = makeRegex(pattern, ignoreCase)
243194
243237
 
243195
243238
  return new IgnoreRule(
243196
243239
  origin,
@@ -243236,11 +243279,15 @@ checkPath.convert = p => p
243236
243279
 
243237
243280
  class Ignore {
243238
243281
  constructor ({
243239
- ignorecase = true
243282
+ ignorecase = true,
243283
+ ignoreCase = ignorecase,
243284
+ allowRelativePaths = false
243240
243285
  } = {}) {
243241
- this._rules = []
243242
- this._ignorecase = ignorecase
243243
243286
  define(this, KEY_IGNORE, true)
243287
+
243288
+ this._rules = []
243289
+ this._ignoreCase = ignoreCase
243290
+ this._allowRelativePaths = allowRelativePaths
243244
243291
  this._initCache()
243245
243292
  }
243246
243293
 
@@ -243258,7 +243305,7 @@ class Ignore {
243258
243305
  }
243259
243306
 
243260
243307
  if (checkPattern(pattern)) {
243261
- const rule = createRule(pattern, this._ignorecase)
243308
+ const rule = createRule(pattern, this._ignoreCase)
243262
243309
  this._added = true
243263
243310
  this._rules.push(rule)
243264
243311
  }
@@ -243337,7 +243384,13 @@ class Ignore {
243337
243384
  // Supports nullable path
243338
243385
  && checkPath.convert(originalPath)
243339
243386
 
243340
- checkPath(path, originalPath, throwError)
243387
+ checkPath(
243388
+ path,
243389
+ originalPath,
243390
+ this._allowRelativePaths
243391
+ ? RETURN_FALSE
243392
+ : throwError
243393
+ )
243341
243394
 
243342
243395
  return this._t(path, cache, checkUnignored, slices)
243343
243396
  }
@@ -243395,10 +243448,8 @@ class Ignore {
243395
243448
 
243396
243449
  const factory = options => new Ignore(options)
243397
243450
 
243398
- const returnFalse = () => false
243399
-
243400
243451
  const isPathValid = path =>
243401
- checkPath(path && checkPath.convert(path), path, returnFalse)
243452
+ checkPath(path && checkPath.convert(path), path, RETURN_FALSE)
243402
243453
 
243403
243454
  factory.isPathValid = isPathValid
243404
243455
 
@@ -274911,7 +274962,7 @@ __webpack_require__.r(__webpack_exports__);
274911
274962
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
274912
274963
  /* harmony export */ "BehaviorSubject": () => (/* binding */ BehaviorSubject)
274913
274964
  /* harmony export */ });
274914
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
274965
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
274915
274966
  /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Subject */ "./node_modules/rxjs/dist/esm5/internal/Subject.js");
274916
274967
 
274917
274968
 
@@ -275049,16 +275100,20 @@ var Observable = (function () {
275049
275100
  var _this = this;
275050
275101
  promiseCtor = getPromiseCtor(promiseCtor);
275051
275102
  return new promiseCtor(function (resolve, reject) {
275052
- var subscription;
275053
- subscription = _this.subscribe(function (value) {
275054
- try {
275055
- next(value);
275056
- }
275057
- catch (err) {
275058
- reject(err);
275059
- subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();
275060
- }
275061
- }, reject, resolve);
275103
+ var subscriber = new _Subscriber__WEBPACK_IMPORTED_MODULE_0__.SafeSubscriber({
275104
+ next: function (value) {
275105
+ try {
275106
+ next(value);
275107
+ }
275108
+ catch (err) {
275109
+ reject(err);
275110
+ subscriber.unsubscribe();
275111
+ }
275112
+ },
275113
+ error: reject,
275114
+ complete: resolve,
275115
+ });
275116
+ _this.subscribe(subscriber);
275062
275117
  });
275063
275118
  };
275064
275119
  Observable.prototype._subscribe = function (subscriber) {
@@ -275114,7 +275169,7 @@ __webpack_require__.r(__webpack_exports__);
275114
275169
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
275115
275170
  /* harmony export */ "ReplaySubject": () => (/* binding */ ReplaySubject)
275116
275171
  /* harmony export */ });
275117
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
275172
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
275118
275173
  /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Subject */ "./node_modules/rxjs/dist/esm5/internal/Subject.js");
275119
275174
  /* harmony import */ var _scheduler_dateTimestampProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./scheduler/dateTimestampProvider */ "./node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js");
275120
275175
 
@@ -275221,7 +275276,7 @@ __webpack_require__.r(__webpack_exports__);
275221
275276
  /* harmony export */ "Subject": () => (/* binding */ Subject),
275222
275277
  /* harmony export */ "AnonymousSubject": () => (/* binding */ AnonymousSubject)
275223
275278
  /* harmony export */ });
275224
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
275279
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
275225
275280
  /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Observable */ "./node_modules/rxjs/dist/esm5/internal/Observable.js");
275226
275281
  /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Subscription */ "./node_modules/rxjs/dist/esm5/internal/Subscription.js");
275227
275282
  /* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/ObjectUnsubscribedError */ "./node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js");
@@ -275395,7 +275450,7 @@ __webpack_require__.r(__webpack_exports__);
275395
275450
  /* harmony export */ "SafeSubscriber": () => (/* binding */ SafeSubscriber),
275396
275451
  /* harmony export */ "EMPTY_OBSERVER": () => (/* binding */ EMPTY_OBSERVER)
275397
275452
  /* harmony export */ });
275398
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
275453
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
275399
275454
  /* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/isFunction */ "./node_modules/rxjs/dist/esm5/internal/util/isFunction.js");
275400
275455
  /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Subscription */ "./node_modules/rxjs/dist/esm5/internal/Subscription.js");
275401
275456
  /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./config */ "./node_modules/rxjs/dist/esm5/internal/config.js");
@@ -275568,7 +275623,7 @@ __webpack_require__.r(__webpack_exports__);
275568
275623
  /* harmony export */ "EMPTY_SUBSCRIPTION": () => (/* binding */ EMPTY_SUBSCRIPTION),
275569
275624
  /* harmony export */ "isSubscription": () => (/* binding */ isSubscription)
275570
275625
  /* harmony export */ });
275571
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
275626
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
275572
275627
  /* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/isFunction */ "./node_modules/rxjs/dist/esm5/internal/util/isFunction.js");
275573
275628
  /* harmony import */ var _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/UnsubscriptionError */ "./node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js");
275574
275629
  /* harmony import */ var _util_arrRemove__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/arrRemove */ "./node_modules/rxjs/dist/esm5/internal/util/arrRemove.js");
@@ -276012,7 +276067,7 @@ __webpack_require__.r(__webpack_exports__);
276012
276067
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
276013
276068
  /* harmony export */ "fromEvent": () => (/* binding */ fromEvent)
276014
276069
  /* harmony export */ });
276015
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
276070
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
276016
276071
  /* harmony import */ var _observable_innerFrom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../observable/innerFrom */ "./node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js");
276017
276072
  /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Observable */ "./node_modules/rxjs/dist/esm5/internal/Observable.js");
276018
276073
  /* harmony import */ var _operators_mergeMap__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../operators/mergeMap */ "./node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js");
@@ -276098,7 +276153,7 @@ __webpack_require__.r(__webpack_exports__);
276098
276153
  /* harmony export */ "fromAsyncIterable": () => (/* binding */ fromAsyncIterable),
276099
276154
  /* harmony export */ "fromReadableStreamLike": () => (/* binding */ fromReadableStreamLike)
276100
276155
  /* harmony export */ });
276101
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
276156
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
276102
276157
  /* harmony import */ var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/isArrayLike */ "./node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js");
276103
276158
  /* harmony import */ var _util_isPromise__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/isPromise */ "./node_modules/rxjs/dist/esm5/internal/util/isPromise.js");
276104
276159
  /* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Observable */ "./node_modules/rxjs/dist/esm5/internal/Observable.js");
@@ -276414,7 +276469,7 @@ __webpack_require__.r(__webpack_exports__);
276414
276469
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
276415
276470
  /* harmony export */ "OperatorSubscriber": () => (/* binding */ OperatorSubscriber)
276416
276471
  /* harmony export */ });
276417
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
276472
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
276418
276473
  /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscriber */ "./node_modules/rxjs/dist/esm5/internal/Subscriber.js");
276419
276474
 
276420
276475
 
@@ -277129,7 +277184,7 @@ __webpack_require__.r(__webpack_exports__);
277129
277184
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
277130
277185
  /* harmony export */ "share": () => (/* binding */ share)
277131
277186
  /* harmony export */ });
277132
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
277187
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
277133
277188
  /* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../observable/from */ "./node_modules/rxjs/dist/esm5/internal/observable/from.js");
277134
277189
  /* harmony import */ var _operators_take__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../operators/take */ "./node_modules/rxjs/dist/esm5/internal/operators/take.js");
277135
277190
  /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subject */ "./node_modules/rxjs/dist/esm5/internal/Subject.js");
@@ -277793,7 +277848,7 @@ __webpack_require__.r(__webpack_exports__);
277793
277848
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
277794
277849
  /* harmony export */ "Action": () => (/* binding */ Action)
277795
277850
  /* harmony export */ });
277796
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
277851
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
277797
277852
  /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Subscription */ "./node_modules/rxjs/dist/esm5/internal/Subscription.js");
277798
277853
 
277799
277854
 
@@ -277824,7 +277879,7 @@ __webpack_require__.r(__webpack_exports__);
277824
277879
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
277825
277880
  /* harmony export */ "AnimationFrameAction": () => (/* binding */ AnimationFrameAction)
277826
277881
  /* harmony export */ });
277827
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
277882
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
277828
277883
  /* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AsyncAction */ "./node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js");
277829
277884
  /* harmony import */ var _animationFrameProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./animationFrameProvider */ "./node_modules/rxjs/dist/esm5/internal/scheduler/animationFrameProvider.js");
277830
277885
 
@@ -277851,7 +277906,7 @@ var AnimationFrameAction = (function (_super) {
277851
277906
  if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {
277852
277907
  return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
277853
277908
  }
277854
- if (scheduler.actions.length === 0) {
277909
+ if (!scheduler.actions.some(function (action) { return action.id === id; })) {
277855
277910
  _animationFrameProvider__WEBPACK_IMPORTED_MODULE_1__.animationFrameProvider.cancelAnimationFrame(id);
277856
277911
  scheduler._scheduled = undefined;
277857
277912
  }
@@ -277875,7 +277930,7 @@ __webpack_require__.r(__webpack_exports__);
277875
277930
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
277876
277931
  /* harmony export */ "AnimationFrameScheduler": () => (/* binding */ AnimationFrameScheduler)
277877
277932
  /* harmony export */ });
277878
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
277933
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
277879
277934
  /* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsyncScheduler */ "./node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js");
277880
277935
 
277881
277936
 
@@ -277886,20 +277941,19 @@ var AnimationFrameScheduler = (function (_super) {
277886
277941
  }
277887
277942
  AnimationFrameScheduler.prototype.flush = function (action) {
277888
277943
  this._active = true;
277944
+ var flushId = this._scheduled;
277889
277945
  this._scheduled = undefined;
277890
277946
  var actions = this.actions;
277891
277947
  var error;
277892
- var index = -1;
277893
277948
  action = action || actions.shift();
277894
- var count = actions.length;
277895
277949
  do {
277896
277950
  if ((error = action.execute(action.state, action.delay))) {
277897
277951
  break;
277898
277952
  }
277899
- } while (++index < count && (action = actions.shift()));
277953
+ } while ((action = actions[0]) && action.id === flushId && actions.shift());
277900
277954
  this._active = false;
277901
277955
  if (error) {
277902
- while (++index < count && (action = actions.shift())) {
277956
+ while ((action = actions[0]) && action.id === flushId && actions.shift()) {
277903
277957
  action.unsubscribe();
277904
277958
  }
277905
277959
  throw error;
@@ -277923,7 +277977,7 @@ __webpack_require__.r(__webpack_exports__);
277923
277977
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
277924
277978
  /* harmony export */ "AsapAction": () => (/* binding */ AsapAction)
277925
277979
  /* harmony export */ });
277926
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
277980
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
277927
277981
  /* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AsyncAction */ "./node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js");
277928
277982
  /* harmony import */ var _immediateProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./immediateProvider */ "./node_modules/rxjs/dist/esm5/internal/scheduler/immediateProvider.js");
277929
277983
 
@@ -277950,7 +278004,7 @@ var AsapAction = (function (_super) {
277950
278004
  if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {
277951
278005
  return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
277952
278006
  }
277953
- if (scheduler.actions.length === 0) {
278007
+ if (!scheduler.actions.some(function (action) { return action.id === id; })) {
277954
278008
  _immediateProvider__WEBPACK_IMPORTED_MODULE_1__.immediateProvider.clearImmediate(id);
277955
278009
  scheduler._scheduled = undefined;
277956
278010
  }
@@ -277974,7 +278028,7 @@ __webpack_require__.r(__webpack_exports__);
277974
278028
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
277975
278029
  /* harmony export */ "AsapScheduler": () => (/* binding */ AsapScheduler)
277976
278030
  /* harmony export */ });
277977
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
278031
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
277978
278032
  /* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsyncScheduler */ "./node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js");
277979
278033
 
277980
278034
 
@@ -277985,20 +278039,19 @@ var AsapScheduler = (function (_super) {
277985
278039
  }
277986
278040
  AsapScheduler.prototype.flush = function (action) {
277987
278041
  this._active = true;
278042
+ var flushId = this._scheduled;
277988
278043
  this._scheduled = undefined;
277989
278044
  var actions = this.actions;
277990
278045
  var error;
277991
- var index = -1;
277992
278046
  action = action || actions.shift();
277993
- var count = actions.length;
277994
278047
  do {
277995
278048
  if ((error = action.execute(action.state, action.delay))) {
277996
278049
  break;
277997
278050
  }
277998
- } while (++index < count && (action = actions.shift()));
278051
+ } while ((action = actions[0]) && action.id === flushId && actions.shift());
277999
278052
  this._active = false;
278000
278053
  if (error) {
278001
- while (++index < count && (action = actions.shift())) {
278054
+ while ((action = actions[0]) && action.id === flushId && actions.shift()) {
278002
278055
  action.unsubscribe();
278003
278056
  }
278004
278057
  throw error;
@@ -278022,7 +278075,7 @@ __webpack_require__.r(__webpack_exports__);
278022
278075
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
278023
278076
  /* harmony export */ "AsyncAction": () => (/* binding */ AsyncAction)
278024
278077
  /* harmony export */ });
278025
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
278078
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
278026
278079
  /* harmony import */ var _Action__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Action */ "./node_modules/rxjs/dist/esm5/internal/scheduler/Action.js");
278027
278080
  /* harmony import */ var _intervalProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./intervalProvider */ "./node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js");
278028
278081
  /* harmony import */ var _util_arrRemove__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/arrRemove */ "./node_modules/rxjs/dist/esm5/internal/util/arrRemove.js");
@@ -278127,7 +278180,7 @@ __webpack_require__.r(__webpack_exports__);
278127
278180
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
278128
278181
  /* harmony export */ "AsyncScheduler": () => (/* binding */ AsyncScheduler)
278129
278182
  /* harmony export */ });
278130
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
278183
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
278131
278184
  /* harmony import */ var _Scheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Scheduler */ "./node_modules/rxjs/dist/esm5/internal/Scheduler.js");
278132
278185
 
278133
278186
 
@@ -278202,7 +278255,7 @@ __webpack_require__.r(__webpack_exports__);
278202
278255
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
278203
278256
  /* harmony export */ "animationFrameProvider": () => (/* binding */ animationFrameProvider)
278204
278257
  /* harmony export */ });
278205
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
278258
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
278206
278259
  /* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Subscription */ "./node_modules/rxjs/dist/esm5/internal/Subscription.js");
278207
278260
 
278208
278261
 
@@ -278319,7 +278372,7 @@ __webpack_require__.r(__webpack_exports__);
278319
278372
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
278320
278373
  /* harmony export */ "immediateProvider": () => (/* binding */ immediateProvider)
278321
278374
  /* harmony export */ });
278322
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
278375
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
278323
278376
  /* harmony import */ var _util_Immediate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/Immediate */ "./node_modules/rxjs/dist/esm5/internal/util/Immediate.js");
278324
278377
 
278325
278378
 
@@ -278354,7 +278407,7 @@ __webpack_require__.r(__webpack_exports__);
278354
278407
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
278355
278408
  /* harmony export */ "intervalProvider": () => (/* binding */ intervalProvider)
278356
278409
  /* harmony export */ });
278357
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
278410
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
278358
278411
 
278359
278412
  var intervalProvider = {
278360
278413
  setInterval: function () {
@@ -278386,7 +278439,7 @@ __webpack_require__.r(__webpack_exports__);
278386
278439
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
278387
278440
  /* harmony export */ "timeoutProvider": () => (/* binding */ timeoutProvider)
278388
278441
  /* harmony export */ });
278389
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
278442
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
278390
278443
 
278391
278444
  var timeoutProvider = {
278392
278445
  setTimeout: function () {
@@ -278939,7 +278992,7 @@ __webpack_require__.r(__webpack_exports__);
278939
278992
  /* harmony export */ "readableStreamLikeToAsyncGenerator": () => (/* binding */ readableStreamLikeToAsyncGenerator),
278940
278993
  /* harmony export */ "isReadableStreamLike": () => (/* binding */ isReadableStreamLike)
278941
278994
  /* harmony export */ });
278942
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
278995
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
278943
278996
  /* harmony import */ var _isFunction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isFunction */ "./node_modules/rxjs/dist/esm5/internal/util/isFunction.js");
278944
278997
 
278945
278998
 
@@ -279050,7 +279103,7 @@ __webpack_require__.r(__webpack_exports__);
279050
279103
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
279051
279104
  /* harmony export */ "mapOneOrManyArgs": () => (/* binding */ mapOneOrManyArgs)
279052
279105
  /* harmony export */ });
279053
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js");
279106
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
279054
279107
  /* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../operators/map */ "./node_modules/rxjs/dist/esm5/internal/operators/map.js");
279055
279108
 
279056
279109
 
@@ -279163,281 +279216,6 @@ function createInvalidObservableTypeError(input) {
279163
279216
  }
279164
279217
  //# sourceMappingURL=throwUnobservableError.js.map
279165
279218
 
279166
- /***/ }),
279167
-
279168
- /***/ "./node_modules/rxjs/node_modules/tslib/tslib.es6.js":
279169
- /*!***********************************************************!*\
279170
- !*** ./node_modules/rxjs/node_modules/tslib/tslib.es6.js ***!
279171
- \***********************************************************/
279172
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
279173
-
279174
- "use strict";
279175
- __webpack_require__.r(__webpack_exports__);
279176
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
279177
- /* harmony export */ "__extends": () => (/* binding */ __extends),
279178
- /* harmony export */ "__assign": () => (/* binding */ __assign),
279179
- /* harmony export */ "__rest": () => (/* binding */ __rest),
279180
- /* harmony export */ "__decorate": () => (/* binding */ __decorate),
279181
- /* harmony export */ "__param": () => (/* binding */ __param),
279182
- /* harmony export */ "__metadata": () => (/* binding */ __metadata),
279183
- /* harmony export */ "__awaiter": () => (/* binding */ __awaiter),
279184
- /* harmony export */ "__generator": () => (/* binding */ __generator),
279185
- /* harmony export */ "__createBinding": () => (/* binding */ __createBinding),
279186
- /* harmony export */ "__exportStar": () => (/* binding */ __exportStar),
279187
- /* harmony export */ "__values": () => (/* binding */ __values),
279188
- /* harmony export */ "__read": () => (/* binding */ __read),
279189
- /* harmony export */ "__spread": () => (/* binding */ __spread),
279190
- /* harmony export */ "__spreadArrays": () => (/* binding */ __spreadArrays),
279191
- /* harmony export */ "__spreadArray": () => (/* binding */ __spreadArray),
279192
- /* harmony export */ "__await": () => (/* binding */ __await),
279193
- /* harmony export */ "__asyncGenerator": () => (/* binding */ __asyncGenerator),
279194
- /* harmony export */ "__asyncDelegator": () => (/* binding */ __asyncDelegator),
279195
- /* harmony export */ "__asyncValues": () => (/* binding */ __asyncValues),
279196
- /* harmony export */ "__makeTemplateObject": () => (/* binding */ __makeTemplateObject),
279197
- /* harmony export */ "__importStar": () => (/* binding */ __importStar),
279198
- /* harmony export */ "__importDefault": () => (/* binding */ __importDefault),
279199
- /* harmony export */ "__classPrivateFieldGet": () => (/* binding */ __classPrivateFieldGet),
279200
- /* harmony export */ "__classPrivateFieldSet": () => (/* binding */ __classPrivateFieldSet)
279201
- /* harmony export */ });
279202
- /*! *****************************************************************************
279203
- Copyright (c) Microsoft Corporation.
279204
-
279205
- Permission to use, copy, modify, and/or distribute this software for any
279206
- purpose with or without fee is hereby granted.
279207
-
279208
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
279209
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
279210
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
279211
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
279212
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
279213
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
279214
- PERFORMANCE OF THIS SOFTWARE.
279215
- ***************************************************************************** */
279216
- /* global Reflect, Promise */
279217
-
279218
- var extendStatics = function(d, b) {
279219
- extendStatics = Object.setPrototypeOf ||
279220
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
279221
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
279222
- return extendStatics(d, b);
279223
- };
279224
-
279225
- function __extends(d, b) {
279226
- if (typeof b !== "function" && b !== null)
279227
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
279228
- extendStatics(d, b);
279229
- function __() { this.constructor = d; }
279230
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
279231
- }
279232
-
279233
- var __assign = function() {
279234
- __assign = Object.assign || function __assign(t) {
279235
- for (var s, i = 1, n = arguments.length; i < n; i++) {
279236
- s = arguments[i];
279237
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
279238
- }
279239
- return t;
279240
- }
279241
- return __assign.apply(this, arguments);
279242
- }
279243
-
279244
- function __rest(s, e) {
279245
- var t = {};
279246
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
279247
- t[p] = s[p];
279248
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
279249
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
279250
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
279251
- t[p[i]] = s[p[i]];
279252
- }
279253
- return t;
279254
- }
279255
-
279256
- function __decorate(decorators, target, key, desc) {
279257
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
279258
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
279259
- 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;
279260
- return c > 3 && r && Object.defineProperty(target, key, r), r;
279261
- }
279262
-
279263
- function __param(paramIndex, decorator) {
279264
- return function (target, key) { decorator(target, key, paramIndex); }
279265
- }
279266
-
279267
- function __metadata(metadataKey, metadataValue) {
279268
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
279269
- }
279270
-
279271
- function __awaiter(thisArg, _arguments, P, generator) {
279272
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
279273
- return new (P || (P = Promise))(function (resolve, reject) {
279274
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
279275
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
279276
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
279277
- step((generator = generator.apply(thisArg, _arguments || [])).next());
279278
- });
279279
- }
279280
-
279281
- function __generator(thisArg, body) {
279282
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
279283
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
279284
- function verb(n) { return function (v) { return step([n, v]); }; }
279285
- function step(op) {
279286
- if (f) throw new TypeError("Generator is already executing.");
279287
- while (_) try {
279288
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
279289
- if (y = 0, t) op = [op[0] & 2, t.value];
279290
- switch (op[0]) {
279291
- case 0: case 1: t = op; break;
279292
- case 4: _.label++; return { value: op[1], done: false };
279293
- case 5: _.label++; y = op[1]; op = [0]; continue;
279294
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
279295
- default:
279296
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
279297
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
279298
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
279299
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
279300
- if (t[2]) _.ops.pop();
279301
- _.trys.pop(); continue;
279302
- }
279303
- op = body.call(thisArg, _);
279304
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
279305
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
279306
- }
279307
- }
279308
-
279309
- var __createBinding = Object.create ? (function(o, m, k, k2) {
279310
- if (k2 === undefined) k2 = k;
279311
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
279312
- }) : (function(o, m, k, k2) {
279313
- if (k2 === undefined) k2 = k;
279314
- o[k2] = m[k];
279315
- });
279316
-
279317
- function __exportStar(m, o) {
279318
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
279319
- }
279320
-
279321
- function __values(o) {
279322
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
279323
- if (m) return m.call(o);
279324
- if (o && typeof o.length === "number") return {
279325
- next: function () {
279326
- if (o && i >= o.length) o = void 0;
279327
- return { value: o && o[i++], done: !o };
279328
- }
279329
- };
279330
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
279331
- }
279332
-
279333
- function __read(o, n) {
279334
- var m = typeof Symbol === "function" && o[Symbol.iterator];
279335
- if (!m) return o;
279336
- var i = m.call(o), r, ar = [], e;
279337
- try {
279338
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
279339
- }
279340
- catch (error) { e = { error: error }; }
279341
- finally {
279342
- try {
279343
- if (r && !r.done && (m = i["return"])) m.call(i);
279344
- }
279345
- finally { if (e) throw e.error; }
279346
- }
279347
- return ar;
279348
- }
279349
-
279350
- /** @deprecated */
279351
- function __spread() {
279352
- for (var ar = [], i = 0; i < arguments.length; i++)
279353
- ar = ar.concat(__read(arguments[i]));
279354
- return ar;
279355
- }
279356
-
279357
- /** @deprecated */
279358
- function __spreadArrays() {
279359
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
279360
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
279361
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
279362
- r[k] = a[j];
279363
- return r;
279364
- }
279365
-
279366
- function __spreadArray(to, from) {
279367
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
279368
- to[j] = from[i];
279369
- return to;
279370
- }
279371
-
279372
- function __await(v) {
279373
- return this instanceof __await ? (this.v = v, this) : new __await(v);
279374
- }
279375
-
279376
- function __asyncGenerator(thisArg, _arguments, generator) {
279377
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
279378
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
279379
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
279380
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
279381
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
279382
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
279383
- function fulfill(value) { resume("next", value); }
279384
- function reject(value) { resume("throw", value); }
279385
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
279386
- }
279387
-
279388
- function __asyncDelegator(o) {
279389
- var i, p;
279390
- return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
279391
- function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
279392
- }
279393
-
279394
- function __asyncValues(o) {
279395
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
279396
- var m = o[Symbol.asyncIterator], i;
279397
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
279398
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
279399
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
279400
- }
279401
-
279402
- function __makeTemplateObject(cooked, raw) {
279403
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
279404
- return cooked;
279405
- };
279406
-
279407
- var __setModuleDefault = Object.create ? (function(o, v) {
279408
- Object.defineProperty(o, "default", { enumerable: true, value: v });
279409
- }) : function(o, v) {
279410
- o["default"] = v;
279411
- };
279412
-
279413
- function __importStar(mod) {
279414
- if (mod && mod.__esModule) return mod;
279415
- var result = {};
279416
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
279417
- __setModuleDefault(result, mod);
279418
- return result;
279419
- }
279420
-
279421
- function __importDefault(mod) {
279422
- return (mod && mod.__esModule) ? mod : { default: mod };
279423
- }
279424
-
279425
- function __classPrivateFieldGet(receiver, privateMap) {
279426
- if (!privateMap.has(receiver)) {
279427
- throw new TypeError("attempted to get private field on non-instance");
279428
- }
279429
- return privateMap.get(receiver);
279430
- }
279431
-
279432
- function __classPrivateFieldSet(receiver, privateMap, value) {
279433
- if (!privateMap.has(receiver)) {
279434
- throw new TypeError("attempted to set private field on non-instance");
279435
- }
279436
- privateMap.set(receiver, value);
279437
- return value;
279438
- }
279439
-
279440
-
279441
279219
  /***/ }),
279442
279220
 
279443
279221
  /***/ "./node_modules/stream-browserify/index.js":
@@ -281370,36 +281148,6 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
281370
281148
 
281371
281149
  /***/ }),
281372
281150
 
281373
- /***/ "./app/codeCharta/ui/unfocusButton/unfocusButton.component.scss":
281374
- /*!**********************************************************************!*\
281375
- !*** ./app/codeCharta/ui/unfocusButton/unfocusButton.component.scss ***!
281376
- \**********************************************************************/
281377
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
281378
-
281379
- "use strict";
281380
- __webpack_require__.r(__webpack_exports__);
281381
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
281382
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
281383
- /* harmony export */ });
281384
- /* 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");
281385
- /* 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__);
281386
- /* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_unfocusButton_component_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./unfocusButton.component.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./app/codeCharta/ui/unfocusButton/unfocusButton.component.scss");
281387
-
281388
-
281389
-
281390
- var options = {};
281391
-
281392
- options.insert = "head";
281393
- options.singleton = false;
281394
-
281395
- 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_unfocusButton_component_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options);
281396
-
281397
-
281398
-
281399
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_unfocusButton_component_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
281400
-
281401
- /***/ }),
281402
-
281403
281151
  /***/ "./app/codeCharta/ui/viewCube/viewCube.component.scss":
281404
281152
  /*!************************************************************!*\
281405
281153
  !*** ./app/codeCharta/ui/viewCube/viewCube.component.scss ***!
@@ -333455,6 +333203,283 @@ var CopyShader = {
333455
333203
 
333456
333204
 
333457
333205
 
333206
+ /***/ }),
333207
+
333208
+ /***/ "./node_modules/tslib/tslib.es6.js":
333209
+ /*!*****************************************!*\
333210
+ !*** ./node_modules/tslib/tslib.es6.js ***!
333211
+ \*****************************************/
333212
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
333213
+
333214
+ "use strict";
333215
+ __webpack_require__.r(__webpack_exports__);
333216
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
333217
+ /* harmony export */ "__extends": () => (/* binding */ __extends),
333218
+ /* harmony export */ "__assign": () => (/* binding */ __assign),
333219
+ /* harmony export */ "__rest": () => (/* binding */ __rest),
333220
+ /* harmony export */ "__decorate": () => (/* binding */ __decorate),
333221
+ /* harmony export */ "__param": () => (/* binding */ __param),
333222
+ /* harmony export */ "__metadata": () => (/* binding */ __metadata),
333223
+ /* harmony export */ "__awaiter": () => (/* binding */ __awaiter),
333224
+ /* harmony export */ "__generator": () => (/* binding */ __generator),
333225
+ /* harmony export */ "__createBinding": () => (/* binding */ __createBinding),
333226
+ /* harmony export */ "__exportStar": () => (/* binding */ __exportStar),
333227
+ /* harmony export */ "__values": () => (/* binding */ __values),
333228
+ /* harmony export */ "__read": () => (/* binding */ __read),
333229
+ /* harmony export */ "__spread": () => (/* binding */ __spread),
333230
+ /* harmony export */ "__spreadArrays": () => (/* binding */ __spreadArrays),
333231
+ /* harmony export */ "__spreadArray": () => (/* binding */ __spreadArray),
333232
+ /* harmony export */ "__await": () => (/* binding */ __await),
333233
+ /* harmony export */ "__asyncGenerator": () => (/* binding */ __asyncGenerator),
333234
+ /* harmony export */ "__asyncDelegator": () => (/* binding */ __asyncDelegator),
333235
+ /* harmony export */ "__asyncValues": () => (/* binding */ __asyncValues),
333236
+ /* harmony export */ "__makeTemplateObject": () => (/* binding */ __makeTemplateObject),
333237
+ /* harmony export */ "__importStar": () => (/* binding */ __importStar),
333238
+ /* harmony export */ "__importDefault": () => (/* binding */ __importDefault),
333239
+ /* harmony export */ "__classPrivateFieldGet": () => (/* binding */ __classPrivateFieldGet),
333240
+ /* harmony export */ "__classPrivateFieldSet": () => (/* binding */ __classPrivateFieldSet)
333241
+ /* harmony export */ });
333242
+ /*! *****************************************************************************
333243
+ Copyright (c) Microsoft Corporation.
333244
+
333245
+ Permission to use, copy, modify, and/or distribute this software for any
333246
+ purpose with or without fee is hereby granted.
333247
+
333248
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
333249
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
333250
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
333251
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
333252
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
333253
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
333254
+ PERFORMANCE OF THIS SOFTWARE.
333255
+ ***************************************************************************** */
333256
+ /* global Reflect, Promise */
333257
+
333258
+ var extendStatics = function(d, b) {
333259
+ extendStatics = Object.setPrototypeOf ||
333260
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
333261
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
333262
+ return extendStatics(d, b);
333263
+ };
333264
+
333265
+ function __extends(d, b) {
333266
+ if (typeof b !== "function" && b !== null)
333267
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
333268
+ extendStatics(d, b);
333269
+ function __() { this.constructor = d; }
333270
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
333271
+ }
333272
+
333273
+ var __assign = function() {
333274
+ __assign = Object.assign || function __assign(t) {
333275
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
333276
+ s = arguments[i];
333277
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
333278
+ }
333279
+ return t;
333280
+ }
333281
+ return __assign.apply(this, arguments);
333282
+ }
333283
+
333284
+ function __rest(s, e) {
333285
+ var t = {};
333286
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
333287
+ t[p] = s[p];
333288
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
333289
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
333290
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
333291
+ t[p[i]] = s[p[i]];
333292
+ }
333293
+ return t;
333294
+ }
333295
+
333296
+ function __decorate(decorators, target, key, desc) {
333297
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
333298
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
333299
+ 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;
333300
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
333301
+ }
333302
+
333303
+ function __param(paramIndex, decorator) {
333304
+ return function (target, key) { decorator(target, key, paramIndex); }
333305
+ }
333306
+
333307
+ function __metadata(metadataKey, metadataValue) {
333308
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
333309
+ }
333310
+
333311
+ function __awaiter(thisArg, _arguments, P, generator) {
333312
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
333313
+ return new (P || (P = Promise))(function (resolve, reject) {
333314
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
333315
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
333316
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
333317
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
333318
+ });
333319
+ }
333320
+
333321
+ function __generator(thisArg, body) {
333322
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
333323
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
333324
+ function verb(n) { return function (v) { return step([n, v]); }; }
333325
+ function step(op) {
333326
+ if (f) throw new TypeError("Generator is already executing.");
333327
+ while (_) try {
333328
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
333329
+ if (y = 0, t) op = [op[0] & 2, t.value];
333330
+ switch (op[0]) {
333331
+ case 0: case 1: t = op; break;
333332
+ case 4: _.label++; return { value: op[1], done: false };
333333
+ case 5: _.label++; y = op[1]; op = [0]; continue;
333334
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
333335
+ default:
333336
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
333337
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
333338
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
333339
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
333340
+ if (t[2]) _.ops.pop();
333341
+ _.trys.pop(); continue;
333342
+ }
333343
+ op = body.call(thisArg, _);
333344
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
333345
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
333346
+ }
333347
+ }
333348
+
333349
+ var __createBinding = Object.create ? (function(o, m, k, k2) {
333350
+ if (k2 === undefined) k2 = k;
333351
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
333352
+ }) : (function(o, m, k, k2) {
333353
+ if (k2 === undefined) k2 = k;
333354
+ o[k2] = m[k];
333355
+ });
333356
+
333357
+ function __exportStar(m, o) {
333358
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
333359
+ }
333360
+
333361
+ function __values(o) {
333362
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
333363
+ if (m) return m.call(o);
333364
+ if (o && typeof o.length === "number") return {
333365
+ next: function () {
333366
+ if (o && i >= o.length) o = void 0;
333367
+ return { value: o && o[i++], done: !o };
333368
+ }
333369
+ };
333370
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
333371
+ }
333372
+
333373
+ function __read(o, n) {
333374
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
333375
+ if (!m) return o;
333376
+ var i = m.call(o), r, ar = [], e;
333377
+ try {
333378
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
333379
+ }
333380
+ catch (error) { e = { error: error }; }
333381
+ finally {
333382
+ try {
333383
+ if (r && !r.done && (m = i["return"])) m.call(i);
333384
+ }
333385
+ finally { if (e) throw e.error; }
333386
+ }
333387
+ return ar;
333388
+ }
333389
+
333390
+ /** @deprecated */
333391
+ function __spread() {
333392
+ for (var ar = [], i = 0; i < arguments.length; i++)
333393
+ ar = ar.concat(__read(arguments[i]));
333394
+ return ar;
333395
+ }
333396
+
333397
+ /** @deprecated */
333398
+ function __spreadArrays() {
333399
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
333400
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
333401
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
333402
+ r[k] = a[j];
333403
+ return r;
333404
+ }
333405
+
333406
+ function __spreadArray(to, from, pack) {
333407
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
333408
+ if (ar || !(i in from)) {
333409
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
333410
+ ar[i] = from[i];
333411
+ }
333412
+ }
333413
+ return to.concat(ar || Array.prototype.slice.call(from));
333414
+ }
333415
+
333416
+ function __await(v) {
333417
+ return this instanceof __await ? (this.v = v, this) : new __await(v);
333418
+ }
333419
+
333420
+ function __asyncGenerator(thisArg, _arguments, generator) {
333421
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
333422
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
333423
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
333424
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
333425
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
333426
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
333427
+ function fulfill(value) { resume("next", value); }
333428
+ function reject(value) { resume("throw", value); }
333429
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
333430
+ }
333431
+
333432
+ function __asyncDelegator(o) {
333433
+ var i, p;
333434
+ return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
333435
+ function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
333436
+ }
333437
+
333438
+ function __asyncValues(o) {
333439
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
333440
+ var m = o[Symbol.asyncIterator], i;
333441
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
333442
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
333443
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
333444
+ }
333445
+
333446
+ function __makeTemplateObject(cooked, raw) {
333447
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
333448
+ return cooked;
333449
+ };
333450
+
333451
+ var __setModuleDefault = Object.create ? (function(o, v) {
333452
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
333453
+ }) : function(o, v) {
333454
+ o["default"] = v;
333455
+ };
333456
+
333457
+ function __importStar(mod) {
333458
+ if (mod && mod.__esModule) return mod;
333459
+ var result = {};
333460
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
333461
+ __setModuleDefault(result, mod);
333462
+ return result;
333463
+ }
333464
+
333465
+ function __importDefault(mod) {
333466
+ return (mod && mod.__esModule) ? mod : { default: mod };
333467
+ }
333468
+
333469
+ function __classPrivateFieldGet(receiver, state, kind, f) {
333470
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
333471
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
333472
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
333473
+ }
333474
+
333475
+ function __classPrivateFieldSet(receiver, state, value, kind, f) {
333476
+ if (kind === "m") throw new TypeError("Private method is not writable");
333477
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
333478
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
333479
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
333480
+ }
333481
+
333482
+
333458
333483
  /***/ }),
333459
333484
 
333460
333485
  /***/ "./node_modules/uri-js/dist/es5/uri.all.js":
@@ -341903,7 +341928,7 @@ module.exports = JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#
341903
341928
  /***/ ((module) => {
341904
341929
 
341905
341930
  "use strict";
341906
- 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.86.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","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":"^4.22.0","@typescript-eslint/parser":"^4.22.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":"^7.28.0","eslint-config-prettier":"^8.2.0","eslint-plugin-unicorn":"^36.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"}}');
341931
+ 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.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"}}');
341907
341932
 
341908
341933
  /***/ })
341909
341934
 
@@ -342224,10 +342249,10 @@ __webpack_require__.r(__webpack_exports__);
342224
342249
  /* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app */ "./app/app.ts");
342225
342250
  /* harmony import */ var zone_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zone.js */ "./node_modules/zone.js/fesm2015/zone.js");
342226
342251
  /* harmony import */ var zone_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(zone_js__WEBPACK_IMPORTED_MODULE_1__);
342227
- /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
342228
- /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/fesm2015/platform-browser.js");
342229
- /* harmony import */ var _angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @angular/platform-browser-dynamic */ "./node_modules/@angular/platform-browser-dynamic/fesm2015/platform-browser-dynamic.js");
342230
- /* harmony import */ var _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @angular/upgrade/static */ "./node_modules/@angular/upgrade/fesm2015/static.js");
342252
+ /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js");
342253
+ /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/fesm2015/platform-browser.js");
342254
+ /* 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");
342255
+ /* harmony import */ var _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @angular/upgrade/static */ "./node_modules/@angular/upgrade/fesm2015/static.js");
342231
342256
  /* 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");
342232
342257
  /* 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");
342233
342258
  /* 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");
@@ -342243,6 +342268,8 @@ __webpack_require__.r(__webpack_exports__);
342243
342268
  /* 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");
342244
342269
  /* 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");
342245
342270
  /* 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");
342271
+ /* 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");
342272
+ /* 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");
342246
342273
  var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
342247
342274
  var c = arguments.length,
342248
342275
  r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
@@ -342279,6 +342306,8 @@ var __param = undefined && undefined.__param || function (paramIndex, decorator)
342279
342306
 
342280
342307
 
342281
342308
 
342309
+
342310
+
342282
342311
 
342283
342312
 
342284
342313
 
@@ -342294,13 +342323,13 @@ let AppModule = class AppModule {
342294
342323
  }
342295
342324
 
342296
342325
  };
342297
- AppModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_17__.NgModule)({
342298
- imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_18__.BrowserModule, _angular_upgrade_static__WEBPACK_IMPORTED_MODULE_19__.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],
342326
+ AppModule = __decorate([(0,_angular_core__WEBPACK_IMPORTED_MODULE_19__.NgModule)({
342327
+ 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],
342299
342328
  declarations: [],
342300
- 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]
342301
- }), __param(0, (0,_angular_core__WEBPACK_IMPORTED_MODULE_17__.Inject)(_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_19__.UpgradeModule)), __metadata("design:paramtypes", [_angular_upgrade_static__WEBPACK_IMPORTED_MODULE_19__.UpgradeModule])], AppModule);
342329
+ 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]
342330
+ }), __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);
342302
342331
 
342303
- (0,_angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_20__.platformBrowserDynamic)().bootstrapModule(AppModule);
342332
+ (0,_angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_22__.platformBrowserDynamic)().bootstrapModule(AppModule);
342304
342333
  })();
342305
342334
 
342306
342335
  /******/ })()