@papaemmelab/isabl-web 0.3.45-beta.0 → 0.3.45-beta.1

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.
@@ -14689,7 +14689,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, ".matrix-legend[data-v-4c88fa7c]{paddin
14689
14689
 
14690
14690
  /***/ }),
14691
14691
 
14692
- /***/ 66804:
14692
+ /***/ 58066:
14693
14693
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
14694
14694
 
14695
14695
  "use strict";
@@ -14703,7 +14703,7 @@ __webpack_require__.r(__webpack_exports__);
14703
14703
 
14704
14704
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
14705
14705
  // Module
14706
- ___CSS_LOADER_EXPORT___.push([module.id, ".project-matrix[data-v-68d9db25]{height:100%;min-height:400px}.loading-container[data-v-68d9db25],.project-matrix[data-v-68d9db25]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.loading-container[data-v-68d9db25]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:300px}.filter-spacer[data-v-68d9db25]{height:16px;background:#fff}.matrix-scroll-container[data-v-68d9db25]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;max-height:calc(80vh - 180px)}.no-matches-message[data-v-68d9db25]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:24px;color:#666;font-size:13px}.matrix-table[data-v-68d9db25]{border-collapse:separate;border-spacing:0;table-layout:fixed}.header-row[data-v-68d9db25]{display:grid;grid-template-columns:200px repeat(var(--col-count),50px);position:sticky;top:0;z-index:10;background:#fff;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.corner-cell[data-v-68d9db25]{position:sticky;left:0;z-index:11;border-right:2px solid #5b5dff;width:200px;-webkit-box-sizing:border-box;box-sizing:border-box}.corner-cell[data-v-68d9db25],.header-cell[data-v-68d9db25]{background:#fff;border-bottom:2px solid #5b5dff;height:130px}.header-cell[data-v-68d9db25]{position:relative;width:50px;overflow:visible;cursor:pointer}.header-cell:hover .header-text[data-v-68d9db25]{background:#fff6db;border-radius:2px}.header-cell.column-highlighted .header-text[data-v-68d9db25]{background:#fff0d9;border-radius:2px;font-weight:700;color:#000}.header-text[data-v-68d9db25]{position:absolute;bottom:8px;left:50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:bottom left;transform-origin:bottom left;white-space:nowrap;font-size:11px;font-weight:500;color:#333;z-index:1}td.row-header[data-v-68d9db25]{position:sticky;left:0;z-index:1;background:#fff;border-right:2px solid #5b5dff;padding:0 8px;width:200px;min-width:200px;max-width:200px;height:24px;border-bottom:1px solid #e0e0e0;cursor:pointer;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.row-header.row-highlighted[data-v-68d9db25]{background:#ffe8c5!important}.row-header.row-highlighted .system-id[data-v-68d9db25]{font-weight:700;color:#000}.system-id[data-v-68d9db25]{font-size:11px;font-family:monospace;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row-header[data-v-68d9db25]:hover{background:#fff0d9}.row-header:hover .system-id[data-v-68d9db25]{font-weight:600}td.matrix-cell[data-v-68d9db25]{width:50px;min-width:50px;max-width:50px;height:24px;border-right:1px solid #e0e0e0;border-bottom:1px solid #e0e0e0;cursor:default;background:#fafafa;padding:0;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.matrix-cell.has-analyses[data-v-68d9db25]{cursor:pointer;background:#fff}.matrix-cell.cell-selected[data-v-68d9db25],.matrix-cell.has-analyses[data-v-68d9db25]:hover{border-right-color:#5b5dff;border-bottom-color:#5b5dff;background:#f0f0ff}.matrix-cell.cell-highlighted[data-v-68d9db25]{background:#ffe8c5}.cell-stripes[data-v-68d9db25]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:1px;height:100%;width:100%;padding:2px 4px}.stripe[data-v-68d9db25]{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:3px;min-width:2px;max-width:5px;border-radius:1px}.cell-count-badge[data-v-68d9db25]{width:100%;color:#fff;font-weight:600;text-shadow:0 0 2px rgba(0,0,0,.3)}.cell-count-badge[data-v-68d9db25],.empty-cell[data-v-68d9db25]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;font-size:10px}.empty-cell[data-v-68d9db25]{color:#ccc}.native-tooltip[data-v-68d9db25]{position:fixed;-webkit-transform:translateX(-50%) translateY(-100%);transform:translateX(-50%) translateY(-100%);z-index:1000;background:#fff;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.2);box-shadow:0 2px 8px rgba(0,0,0,.2);min-width:280px;max-width:350px;max-height:300px;overflow-y:auto}.native-tooltip[data-v-68d9db25] .tooltip-header{padding:8px 12px;background:#f5f5f5;font-weight:500;font-size:13px;border-bottom:1px solid #e0e0e0}.native-tooltip[data-v-68d9db25] .tooltip-list{padding:4px 0}.native-tooltip[data-v-68d9db25] .tooltip-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:6px 12px;cursor:pointer;font-size:12px}.native-tooltip[data-v-68d9db25] .tooltip-item:hover{background:#e3f2fd}.native-tooltip[data-v-68d9db25] .tooltip-item .status-dot{width:8px;height:8px;border-radius:50%;margin-right:8px;-ms-flex-negative:0;flex-shrink:0}.native-tooltip[data-v-68d9db25] .tooltip-item .analysis-pk{color:#1976d2;font-weight:500}.native-tooltip[data-v-68d9db25] .tooltip-item .sep{margin:0 6px;color:#999}.native-tooltip[data-v-68d9db25] .tooltip-item .version{color:#666}.native-tooltip[data-v-68d9db25] .tooltip-item .assembly{color:#999}.native-tooltip[data-v-68d9db25] .tooltip-item .status-chip{margin-left:auto;padding:2px 6px;border-radius:3px;color:#fff;font-size:10px;font-weight:500}.native-tooltip[data-v-68d9db25] .experiment-group-header{padding:6px 12px 4px;font-size:11px;font-weight:600;color:#1976d2;background:#f8f9fa;border-top:1px solid #e0e0e0;font-family:monospace}.native-tooltip[data-v-68d9db25] .experiment-group-header:first-child{border-top:none}", ""]);
14706
+ ___CSS_LOADER_EXPORT___.push([module.id, ".project-matrix[data-v-2742f691]{height:100%;min-height:400px}.loading-container[data-v-2742f691],.project-matrix[data-v-2742f691]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.loading-container[data-v-2742f691]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:300px}.filter-spacer[data-v-2742f691]{height:16px;background:#fff}.matrix-scroll-container[data-v-2742f691]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;max-height:calc(80vh - 180px)}.no-matches-message[data-v-2742f691]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:24px;color:#666;font-size:13px}.matrix-table[data-v-2742f691]{border-collapse:separate;border-spacing:0;table-layout:fixed}.header-row[data-v-2742f691]{display:grid;grid-template-columns:200px repeat(var(--col-count),50px);position:sticky;top:0;z-index:10;background:#fff;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.corner-cell[data-v-2742f691]{position:sticky;left:0;z-index:11;border-right:2px solid #5b5dff;width:200px;-webkit-box-sizing:border-box;box-sizing:border-box}.corner-cell[data-v-2742f691],.header-cell[data-v-2742f691]{background:#fff;border-bottom:2px solid #5b5dff;height:130px}.header-cell[data-v-2742f691]{position:relative;width:50px;overflow:visible;cursor:pointer}.header-cell:hover .header-text[data-v-2742f691]{background:#fff6db;border-radius:2px}.header-cell.column-highlighted .header-text[data-v-2742f691]{background:#fff0d9;border-radius:2px;font-weight:700;color:#000}.header-text[data-v-2742f691]{position:absolute;bottom:8px;left:50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:bottom left;transform-origin:bottom left;white-space:nowrap;font-size:11px;font-weight:500;color:#333;z-index:1}td.row-header[data-v-2742f691]{position:sticky;left:0;z-index:1;background:#fff;border-right:2px solid #5b5dff;padding:0 8px;width:200px;min-width:200px;max-width:200px;height:24px;border-bottom:1px solid #e0e0e0;cursor:pointer;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.row-header.row-highlighted[data-v-2742f691]{background:#ffe8c5!important}.row-header.row-highlighted .system-id[data-v-2742f691]{font-weight:700;color:#000}.system-id[data-v-2742f691]{font-size:11px;font-family:monospace;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row-header[data-v-2742f691]:hover{background:#fff0d9}.row-header:hover .system-id[data-v-2742f691]{font-weight:600}td.matrix-cell[data-v-2742f691]{width:50px;min-width:50px;max-width:50px;height:24px;border-right:1px solid #e0e0e0;border-bottom:1px solid #e0e0e0;cursor:default;background:#fafafa;padding:0;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.matrix-cell.has-analyses[data-v-2742f691]{cursor:pointer;background:#fff}.matrix-cell.cell-selected[data-v-2742f691],.matrix-cell.has-analyses[data-v-2742f691]:hover{border-right-color:#5b5dff;border-bottom-color:#5b5dff;background:#f0f0ff}.matrix-cell.cell-highlighted[data-v-2742f691]{background:#ffe8c5}.cell-stripes[data-v-2742f691]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:1px;height:100%;width:100%;padding:2px 4px}.stripe[data-v-2742f691]{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:3px;min-width:2px;max-width:5px;border-radius:1px}.cell-count-badge[data-v-2742f691]{width:100%;color:#fff;font-weight:600;text-shadow:0 0 2px rgba(0,0,0,.3)}.cell-count-badge[data-v-2742f691],.empty-cell[data-v-2742f691]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;font-size:10px}.empty-cell[data-v-2742f691]{color:#ccc}.native-tooltip[data-v-2742f691]{position:fixed;-webkit-transform:translateX(-50%) translateY(-100%);transform:translateX(-50%) translateY(-100%);z-index:9999;background:#fff;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.2);box-shadow:0 2px 8px rgba(0,0,0,.2);min-width:280px;max-width:350px;max-height:300px;overflow-y:auto}.native-tooltip[data-v-2742f691] .tooltip-header{padding:8px 12px;background:#f5f5f5;font-weight:500;font-size:13px;border-bottom:1px solid #e0e0e0}.native-tooltip[data-v-2742f691] .tooltip-list{padding:4px 0}.native-tooltip[data-v-2742f691] .tooltip-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:6px 12px;cursor:pointer;font-size:12px}.native-tooltip[data-v-2742f691] .tooltip-item:hover{background:#e3f2fd}.native-tooltip[data-v-2742f691] .tooltip-item .status-dot{width:8px;height:8px;border-radius:50%;margin-right:8px;-ms-flex-negative:0;flex-shrink:0}.native-tooltip[data-v-2742f691] .tooltip-item .analysis-pk{color:#1976d2;font-weight:500}.native-tooltip[data-v-2742f691] .tooltip-item .sep{margin:0 6px;color:#999}.native-tooltip[data-v-2742f691] .tooltip-item .version{color:#666}.native-tooltip[data-v-2742f691] .tooltip-item .assembly{color:#999}.native-tooltip[data-v-2742f691] .tooltip-item .status-chip{margin-left:auto;padding:2px 6px;border-radius:3px;color:#fff;font-size:10px;font-weight:500}.native-tooltip[data-v-2742f691] .experiment-group-header{padding:6px 12px 4px;font-size:11px;font-weight:600;color:#1976d2;background:#f8f9fa;border-top:1px solid #e0e0e0;font-family:monospace}.native-tooltip[data-v-2742f691] .experiment-group-header:first-child{border-top:none}", ""]);
14707
14707
  // Exports
14708
14708
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
14709
14709
 
@@ -97326,19 +97326,19 @@ var update = add("f6fdb1b6", content, true, {"sourceMap":false,"shadowMode":fals
97326
97326
 
97327
97327
  /***/ }),
97328
97328
 
97329
- /***/ 20:
97329
+ /***/ 99570:
97330
97330
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
97331
97331
 
97332
97332
  // style-loader: Adds some css to the DOM by adding a <style> tag
97333
97333
 
97334
97334
  // load the styles
97335
- var content = __webpack_require__(66804);
97335
+ var content = __webpack_require__(58066);
97336
97336
  if(content.__esModule) content = content.default;
97337
97337
  if(typeof content === 'string') content = [[module.id, content, '']];
97338
97338
  if(content.locals) module.exports = content.locals;
97339
97339
  // add the styles to the DOM
97340
97340
  var add = (__webpack_require__(54402)/* ["default"] */ .Z)
97341
- var update = add("66b3fcb5", content, true, {"sourceMap":false,"shadowMode":false});
97341
+ var update = add("310bbf82", content, true, {"sourceMap":false,"shadowMode":false});
97342
97342
 
97343
97343
  /***/ }),
97344
97344
 
@@ -329939,7 +329939,7 @@ var ProjectMatrixModalvue_type_template_id_6865373b_scoped_true_staticRenderFns
329939
329939
 
329940
329940
  ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrixModal.vue?vue&type=template&id=6865373b&scoped=true&
329941
329941
 
329942
- ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/projects/ProjectMatrix.vue?vue&type=template&id=68d9db25&scoped=true&
329942
+ ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/projects/ProjectMatrix.vue?vue&type=template&id=2742f691&scoped=true&
329943
329943
  var cov_geimehe8j = function () {
329944
329944
  var path = "/Users/havasove/Desktop/repos/isabl_matrix/isabl_web/src/components/projects/ProjectMatrix.vue";
329945
329945
  var hash = "6d5e6f72d2678492dbab470e36f9338523984f43";
@@ -330754,7 +330754,7 @@ var cov_geimehe8j = function () {
330754
330754
  return coverage[path] = coverageData;
330755
330755
  }();
330756
330756
  cov_geimehe8j.s[0]++;
330757
- var ProjectMatrixvue_type_template_id_68d9db25_scoped_true_render = function render() {
330757
+ var ProjectMatrixvue_type_template_id_2742f691_scoped_true_render = function render() {
330758
330758
  cov_geimehe8j.f[0]++;
330759
330759
  var _vm = (cov_geimehe8j.s[1]++, this),
330760
330760
  _c = (cov_geimehe8j.s[2]++, _vm._self._c);
@@ -330946,9 +330946,9 @@ var ProjectMatrixvue_type_template_id_68d9db25_scoped_true_render = function ren
330946
330946
  staticClass: "tooltip-content"
330947
330947
  })])])))], 2);
330948
330948
  };
330949
- var ProjectMatrixvue_type_template_id_68d9db25_scoped_true_staticRenderFns = (cov_geimehe8j.s[12]++, []);
330949
+ var ProjectMatrixvue_type_template_id_2742f691_scoped_true_staticRenderFns = (cov_geimehe8j.s[12]++, []);
330950
330950
 
330951
- ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=template&id=68d9db25&scoped=true&
330951
+ ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=template&id=2742f691&scoped=true&
330952
330952
 
330953
330953
  ;// CONCATENATED MODULE: ./src/utils/matrixHelpers.js
330954
330954
  var cov_17wz1apxpu = function () {
@@ -341930,7 +341930,7 @@ var MatrixLegend_component = normalizeComponent(
341930
341930
  function ProjectMatrixvue_type_script_lang_js_typeof(obj) { "@babel/helpers - typeof"; return ProjectMatrixvue_type_script_lang_js_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, ProjectMatrixvue_type_script_lang_js_typeof(obj); }
341931
341931
  var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
341932
341932
  var path = "/Users/havasove/Desktop/repos/isabl_matrix/isabl_web/src/components/projects/ProjectMatrix.vue";
341933
- var hash = "fd7147f03f01b31d8c70b081a2f870d9b564dbff";
341933
+ var hash = "4d6068187e3b09b0395493ca183ae0ed262ae00e";
341934
341934
  var global = new Function("return this")();
341935
341935
  var gcv = "__coverage__";
341936
341936
  var coverageData = {
@@ -342759,94 +342759,104 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
342759
342759
  "82": {
342760
342760
  start: {
342761
342761
  line: 324,
342762
- column: 23
342762
+ column: 6
342763
342763
  },
342764
342764
  end: {
342765
342765
  line: 324,
342766
- column: 64
342766
+ column: 58
342767
342767
  }
342768
342768
  },
342769
342769
  "83": {
342770
342770
  start: {
342771
342771
  line: 325,
342772
- column: 6
342772
+ column: 23
342773
342773
  },
342774
342774
  end: {
342775
342775
  line: 325,
342776
- column: 39
342776
+ column: 64
342777
342777
  }
342778
342778
  },
342779
342779
  "84": {
342780
342780
  start: {
342781
- line: 325,
342782
- column: 33
342781
+ line: 326,
342782
+ column: 6
342783
342783
  },
342784
342784
  end: {
342785
- line: 325,
342786
- column: 39
342785
+ line: 326,
342786
+ column: 47
342787
342787
  }
342788
342788
  },
342789
342789
  "85": {
342790
342790
  start: {
342791
- line: 328,
342791
+ line: 327,
342792
342792
  column: 6
342793
342793
  },
342794
342794
  end: {
342795
- line: 328,
342796
- column: 38
342795
+ line: 327,
342796
+ column: 39
342797
342797
  }
342798
342798
  },
342799
342799
  "86": {
342800
342800
  start: {
342801
- line: 330,
342802
- column: 19
342801
+ line: 327,
342802
+ column: 33
342803
342803
  },
342804
342804
  end: {
342805
- line: 330,
342806
- column: 62
342805
+ line: 327,
342806
+ column: 39
342807
342807
  }
342808
342808
  },
342809
342809
  "87": {
342810
342810
  start: {
342811
- line: 331,
342812
- column: 22
342811
+ line: 330,
342812
+ column: 6
342813
342813
  },
342814
342814
  end: {
342815
- line: 331,
342816
- column: 40
342815
+ line: 330,
342816
+ column: 38
342817
342817
  }
342818
342818
  },
342819
342819
  "88": {
342820
342820
  start: {
342821
342821
  line: 332,
342822
- column: 22
342822
+ column: 19
342823
342823
  },
342824
342824
  end: {
342825
342825
  line: 332,
342826
- column: 47
342826
+ column: 62
342827
342827
  }
342828
342828
  },
342829
342829
  "89": {
342830
342830
  start: {
342831
- line: 334,
342832
- column: 6
342831
+ line: 333,
342832
+ column: 22
342833
342833
  },
342834
342834
  end: {
342835
- line: 334,
342836
- column: 38
342835
+ line: 333,
342836
+ column: 40
342837
342837
  }
342838
342838
  },
342839
342839
  "90": {
342840
342840
  start: {
342841
342841
  line: 334,
342842
- column: 32
342842
+ column: 22
342843
342843
  },
342844
342844
  end: {
342845
342845
  line: 334,
342846
- column: 38
342846
+ column: 47
342847
342847
  }
342848
342848
  },
342849
342849
  "91": {
342850
+ start: {
342851
+ line: 336,
342852
+ column: 6
342853
+ },
342854
+ end: {
342855
+ line: 336,
342856
+ column: 71
342857
+ }
342858
+ },
342859
+ "92": {
342850
342860
  start: {
342851
342861
  line: 337,
342852
342862
  column: 6
@@ -342856,693 +342866,713 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
342856
342866
  column: 38
342857
342867
  }
342858
342868
  },
342859
- "92": {
342869
+ "93": {
342870
+ start: {
342871
+ line: 337,
342872
+ column: 32
342873
+ },
342874
+ end: {
342875
+ line: 337,
342876
+ column: 38
342877
+ }
342878
+ },
342879
+ "94": {
342860
342880
  start: {
342861
342881
  line: 340,
342862
- column: 22
342882
+ column: 6
342863
342883
  },
342864
342884
  end: {
342865
342885
  line: 340,
342886
+ column: 38
342887
+ }
342888
+ },
342889
+ "95": {
342890
+ start: {
342891
+ line: 343,
342892
+ column: 22
342893
+ },
342894
+ end: {
342895
+ line: 343,
342866
342896
  column: 65
342867
342897
  }
342868
342898
  },
342869
- "93": {
342899
+ "96": {
342870
342900
  start: {
342871
- line: 341,
342901
+ line: 344,
342872
342902
  column: 17
342873
342903
  },
342874
342904
  end: {
342875
- line: 341,
342905
+ line: 344,
342876
342906
  column: 129
342877
342907
  }
342878
342908
  },
342879
- "94": {
342909
+ "97": {
342880
342910
  start: {
342881
- line: 342,
342911
+ line: 345,
342882
342912
  column: 6
342883
342913
  },
342884
342914
  end: {
342885
- line: 342,
342915
+ line: 345,
342886
342916
  column: 42
342887
342917
  }
342888
342918
  },
342889
- "95": {
342919
+ "98": {
342890
342920
  start: {
342891
- line: 344,
342921
+ line: 347,
342892
342922
  column: 6
342893
342923
  },
342894
342924
  end: {
342895
- line: 383,
342925
+ line: 386,
342896
342926
  column: 7
342897
342927
  }
342898
342928
  },
342899
- "96": {
342929
+ "99": {
342900
342930
  start: {
342901
- line: 346,
342931
+ line: 349,
342902
342932
  column: 29
342903
342933
  },
342904
342934
  end: {
342905
- line: 346,
342935
+ line: 349,
342906
342936
  column: 31
342907
342937
  }
342908
342938
  },
342909
- "97": {
342939
+ "100": {
342910
342940
  start: {
342911
- line: 347,
342941
+ line: 350,
342912
342942
  column: 8
342913
342943
  },
342914
342944
  end: {
342915
- line: 353,
342945
+ line: 356,
342916
342946
  column: 10
342917
342947
  }
342918
342948
  },
342919
- "98": {
342949
+ "101": {
342920
342950
  start: {
342921
- line: 348,
342951
+ line: 351,
342922
342952
  column: 24
342923
342953
  },
342924
342954
  end: {
342925
- line: 348,
342955
+ line: 351,
342926
342956
  column: 57
342927
342957
  }
342928
342958
  },
342929
- "99": {
342959
+ "102": {
342930
342960
  start: {
342931
- line: 349,
342961
+ line: 352,
342932
342962
  column: 10
342933
342963
  },
342934
342964
  end: {
342935
- line: 351,
342965
+ line: 354,
342936
342966
  column: 11
342937
342967
  }
342938
342968
  },
342939
- "100": {
342969
+ "103": {
342940
342970
  start: {
342941
- line: 350,
342971
+ line: 353,
342942
342972
  column: 12
342943
342973
  },
342944
342974
  end: {
342945
- line: 350,
342975
+ line: 353,
342946
342976
  column: 36
342947
342977
  }
342948
342978
  },
342949
- "101": {
342979
+ "104": {
342950
342980
  start: {
342951
- line: 352,
342981
+ line: 355,
342952
342982
  column: 10
342953
342983
  },
342954
342984
  end: {
342955
- line: 352,
342985
+ line: 355,
342956
342986
  column: 37
342957
342987
  }
342958
342988
  },
342959
- "102": {
342989
+ "105": {
342960
342990
  start: {
342961
- line: 356,
342991
+ line: 359,
342962
342992
  column: 8
342963
342993
  },
342964
342994
  end: {
342965
- line: 369,
342995
+ line: 372,
342966
342996
  column: 10
342967
342997
  }
342968
342998
  },
342969
- "103": {
342999
+ "106": {
342970
343000
  start: {
342971
- line: 357,
343001
+ line: 360,
342972
343002
  column: 10
342973
343003
  },
342974
343004
  end: {
342975
- line: 357,
343005
+ line: 360,
342976
343006
  column: 71
342977
343007
  }
342978
343008
  },
342979
- "104": {
343009
+ "107": {
342980
343010
  start: {
342981
- line: 358,
343011
+ line: 361,
342982
343012
  column: 10
342983
343013
  },
342984
343014
  end: {
342985
- line: 368,
343015
+ line: 371,
342986
343016
  column: 12
342987
343017
  }
342988
343018
  },
342989
- "105": {
343019
+ "108": {
342990
343020
  start: {
342991
- line: 359,
343021
+ line: 362,
342992
343022
  column: 26
342993
343023
  },
342994
343024
  end: {
342995
- line: 359,
343025
+ line: 362,
342996
343026
  column: 55
342997
343027
  }
342998
343028
  },
342999
- "106": {
343029
+ "109": {
343000
343030
  start: {
343001
- line: 360,
343031
+ line: 363,
343002
343032
  column: 12
343003
343033
  },
343004
343034
  end: {
343005
- line: 360,
343035
+ line: 363,
343006
343036
  column: 66
343007
343037
  }
343008
343038
  },
343009
- "107": {
343039
+ "110": {
343010
343040
  start: {
343011
- line: 361,
343041
+ line: 364,
343012
343042
  column: 12
343013
343043
  },
343014
343044
  end: {
343015
- line: 361,
343045
+ line: 364,
343016
343046
  column: 82
343017
343047
  }
343018
343048
  },
343019
- "108": {
343049
+ "111": {
343020
343050
  start: {
343021
- line: 362,
343051
+ line: 365,
343022
343052
  column: 12
343023
343053
  },
343024
343054
  end: {
343025
- line: 362,
343055
+ line: 365,
343026
343056
  column: 62
343027
343057
  }
343028
343058
  },
343029
- "109": {
343059
+ "112": {
343030
343060
  start: {
343031
- line: 363,
343061
+ line: 366,
343032
343062
  column: 12
343033
343063
  },
343034
343064
  end: {
343035
- line: 363,
343065
+ line: 366,
343036
343066
  column: 48
343037
343067
  }
343038
343068
  },
343039
- "110": {
343069
+ "113": {
343040
343070
  start: {
343041
- line: 364,
343071
+ line: 367,
343042
343072
  column: 12
343043
343073
  },
343044
343074
  end: {
343045
- line: 364,
343075
+ line: 367,
343046
343076
  column: 73
343047
343077
  }
343048
343078
  },
343049
- "111": {
343079
+ "114": {
343050
343080
  start: {
343051
- line: 365,
343081
+ line: 368,
343052
343082
  column: 12
343053
343083
  },
343054
343084
  end: {
343055
- line: 365,
343085
+ line: 368,
343056
343086
  column: 84
343057
343087
  }
343058
343088
  },
343059
- "112": {
343089
+ "115": {
343060
343090
  start: {
343061
- line: 365,
343091
+ line: 368,
343062
343092
  column: 28
343063
343093
  },
343064
343094
  end: {
343065
- line: 365,
343095
+ line: 368,
343066
343096
  column: 84
343067
343097
  }
343068
343098
  },
343069
- "113": {
343099
+ "116": {
343070
343100
  start: {
343071
- line: 366,
343101
+ line: 369,
343072
343102
  column: 12
343073
343103
  },
343074
343104
  end: {
343075
- line: 366,
343105
+ line: 369,
343076
343106
  column: 94
343077
343107
  }
343078
343108
  },
343079
- "114": {
343109
+ "117": {
343080
343110
  start: {
343081
- line: 367,
343111
+ line: 370,
343082
343112
  column: 12
343083
343113
  },
343084
343114
  end: {
343085
- line: 367,
343115
+ line: 370,
343086
343116
  column: 28
343087
343117
  }
343088
343118
  },
343089
- "115": {
343119
+ "118": {
343090
343120
  start: {
343091
- line: 372,
343121
+ line: 375,
343092
343122
  column: 8
343093
343123
  },
343094
343124
  end: {
343095
- line: 382,
343125
+ line: 385,
343096
343126
  column: 10
343097
343127
  }
343098
343128
  },
343099
- "116": {
343129
+ "119": {
343100
343130
  start: {
343101
- line: 373,
343131
+ line: 376,
343102
343132
  column: 24
343103
343133
  },
343104
343134
  end: {
343105
- line: 373,
343135
+ line: 376,
343106
343136
  column: 53
343107
343137
  }
343108
343138
  },
343109
- "117": {
343139
+ "120": {
343110
343140
  start: {
343111
- line: 374,
343141
+ line: 377,
343112
343142
  column: 10
343113
343143
  },
343114
343144
  end: {
343115
- line: 374,
343145
+ line: 377,
343116
343146
  column: 64
343117
343147
  }
343118
343148
  },
343119
- "118": {
343149
+ "121": {
343120
343150
  start: {
343121
- line: 375,
343151
+ line: 378,
343122
343152
  column: 10
343123
343153
  },
343124
343154
  end: {
343125
- line: 375,
343155
+ line: 378,
343126
343156
  column: 80
343127
343157
  }
343128
343158
  },
343129
- "119": {
343159
+ "122": {
343130
343160
  start: {
343131
- line: 376,
343161
+ line: 379,
343132
343162
  column: 10
343133
343163
  },
343134
343164
  end: {
343135
- line: 376,
343165
+ line: 379,
343136
343166
  column: 60
343137
343167
  }
343138
343168
  },
343139
- "120": {
343169
+ "123": {
343140
343170
  start: {
343141
- line: 377,
343171
+ line: 380,
343142
343172
  column: 10
343143
343173
  },
343144
343174
  end: {
343145
- line: 377,
343175
+ line: 380,
343146
343176
  column: 46
343147
343177
  }
343148
343178
  },
343149
- "121": {
343179
+ "124": {
343150
343180
  start: {
343151
- line: 378,
343181
+ line: 381,
343152
343182
  column: 10
343153
343183
  },
343154
343184
  end: {
343155
- line: 378,
343185
+ line: 381,
343156
343186
  column: 71
343157
343187
  }
343158
343188
  },
343159
- "122": {
343189
+ "125": {
343160
343190
  start: {
343161
- line: 379,
343191
+ line: 382,
343162
343192
  column: 10
343163
343193
  },
343164
343194
  end: {
343165
- line: 379,
343195
+ line: 382,
343166
343196
  column: 82
343167
343197
  }
343168
343198
  },
343169
- "123": {
343199
+ "126": {
343170
343200
  start: {
343171
- line: 379,
343201
+ line: 382,
343172
343202
  column: 26
343173
343203
  },
343174
343204
  end: {
343175
- line: 379,
343205
+ line: 382,
343176
343206
  column: 82
343177
343207
  }
343178
343208
  },
343179
- "124": {
343209
+ "127": {
343180
343210
  start: {
343181
- line: 380,
343211
+ line: 383,
343182
343212
  column: 10
343183
343213
  },
343184
343214
  end: {
343185
- line: 380,
343215
+ line: 383,
343186
343216
  column: 92
343187
343217
  }
343188
343218
  },
343189
- "125": {
343219
+ "128": {
343190
343220
  start: {
343191
- line: 381,
343221
+ line: 384,
343192
343222
  column: 10
343193
343223
  },
343194
343224
  end: {
343195
- line: 381,
343225
+ line: 384,
343196
343226
  column: 26
343197
343227
  }
343198
343228
  },
343199
- "126": {
343229
+ "129": {
343200
343230
  start: {
343201
- line: 385,
343231
+ line: 388,
343202
343232
  column: 6
343203
343233
  },
343204
343234
  end: {
343205
- line: 385,
343235
+ line: 388,
343206
343236
  column: 22
343207
343237
  }
343208
343238
  },
343209
- "127": {
343239
+ "130": {
343210
343240
  start: {
343211
- line: 386,
343241
+ line: 389,
343212
343242
  column: 6
343213
343243
  },
343214
343244
  end: {
343215
- line: 386,
343245
+ line: 389,
343216
343246
  column: 30
343217
343247
  }
343218
343248
  },
343219
- "128": {
343249
+ "131": {
343220
343250
  start: {
343221
- line: 389,
343251
+ line: 392,
343222
343252
  column: 6
343223
343253
  },
343224
343254
  end: {
343225
- line: 395,
343255
+ line: 398,
343226
343256
  column: 8
343227
343257
  }
343228
343258
  },
343229
- "129": {
343259
+ "132": {
343230
343260
  start: {
343231
- line: 390,
343261
+ line: 393,
343232
343262
  column: 8
343233
343263
  },
343234
343264
  end: {
343235
- line: 394,
343265
+ line: 397,
343236
343266
  column: 9
343237
343267
  }
343238
343268
  },
343239
- "130": {
343269
+ "133": {
343240
343270
  start: {
343241
- line: 391,
343271
+ line: 394,
343242
343272
  column: 21
343243
343273
  },
343244
343274
  end: {
343245
- line: 391,
343275
+ line: 394,
343246
343276
  column: 46
343247
343277
  }
343248
343278
  },
343249
- "131": {
343279
+ "134": {
343250
343280
  start: {
343251
- line: 392,
343281
+ line: 395,
343252
343282
  column: 10
343253
343283
  },
343254
343284
  end: {
343255
- line: 392,
343285
+ line: 395,
343256
343286
  column: 34
343257
343287
  }
343258
343288
  },
343259
- "132": {
343289
+ "135": {
343260
343290
  start: {
343261
- line: 393,
343291
+ line: 396,
343262
343292
  column: 10
343263
343293
  },
343264
343294
  end: {
343265
- line: 393,
343295
+ line: 396,
343266
343296
  column: 37
343267
343297
  }
343268
343298
  },
343269
- "133": {
343299
+ "136": {
343270
343300
  start: {
343271
- line: 398,
343301
+ line: 401,
343272
343302
  column: 6
343273
343303
  },
343274
343304
  end: {
343275
- line: 398,
343305
+ line: 401,
343276
343306
  column: 37
343277
343307
  }
343278
343308
  },
343279
- "134": {
343309
+ "137": {
343280
343310
  start: {
343281
- line: 399,
343311
+ line: 402,
343282
343312
  column: 6
343283
343313
  },
343284
343314
  end: {
343285
- line: 399,
343315
+ line: 402,
343286
343316
  column: 60
343287
343317
  }
343288
343318
  },
343289
- "135": {
343319
+ "138": {
343290
343320
  start: {
343291
- line: 400,
343321
+ line: 403,
343292
343322
  column: 6
343293
343323
  },
343294
343324
  end: {
343295
- line: 400,
343325
+ line: 403,
343296
343326
  column: 45
343297
343327
  }
343298
343328
  },
343299
- "136": {
343329
+ "139": {
343300
343330
  start: {
343301
- line: 404,
343331
+ line: 407,
343302
343332
  column: 22
343303
343333
  },
343304
343334
  end: {
343305
- line: 404,
343335
+ line: 407,
343306
343336
  column: 40
343307
343337
  }
343308
343338
  },
343309
- "137": {
343339
+ "140": {
343310
343340
  start: {
343311
- line: 405,
343341
+ line: 408,
343312
343342
  column: 6
343313
343343
  },
343314
343344
  end: {
343315
- line: 407,
343345
+ line: 410,
343316
343346
  column: 7
343317
343347
  }
343318
343348
  },
343319
- "138": {
343349
+ "141": {
343320
343350
  start: {
343321
- line: 406,
343351
+ line: 409,
343322
343352
  column: 8
343323
343353
  },
343324
343354
  end: {
343325
- line: 406,
343355
+ line: 409,
343326
343356
  column: 38
343327
343357
  }
343328
343358
  },
343329
- "139": {
343359
+ "142": {
343330
343360
  start: {
343331
- line: 414,
343361
+ line: 417,
343332
343362
  column: 27
343333
343363
  },
343334
343364
  end: {
343335
- line: 414,
343365
+ line: 417,
343336
343366
  column: 29
343337
343367
  }
343338
343368
  },
343339
- "140": {
343369
+ "143": {
343340
343370
  start: {
343341
- line: 415,
343371
+ line: 418,
343342
343372
  column: 6
343343
343373
  },
343344
343374
  end: {
343345
- line: 417,
343375
+ line: 420,
343346
343376
  column: 8
343347
343377
  }
343348
343378
  },
343349
- "141": {
343379
+ "144": {
343350
343380
  start: {
343351
- line: 416,
343381
+ line: 419,
343352
343382
  column: 8
343353
343383
  },
343354
343384
  end: {
343355
- line: 416,
343385
+ line: 419,
343356
343386
  column: 66
343357
343387
  }
343358
343388
  },
343359
- "142": {
343389
+ "145": {
343360
343390
  start: {
343361
- line: 420,
343391
+ line: 423,
343362
343392
  column: 21
343363
343393
  },
343364
343394
  end: {
343365
- line: 420,
343395
+ line: 423,
343366
343396
  column: 22
343367
343397
  }
343368
343398
  },
343369
- "143": {
343399
+ "146": {
343370
343400
  start: {
343371
- line: 421,
343401
+ line: 424,
343372
343402
  column: 30
343373
343403
  },
343374
343404
  end: {
343375
- line: 421,
343405
+ line: 424,
343376
343406
  column: 41
343377
343407
  }
343378
343408
  },
343379
- "144": {
343409
+ "147": {
343380
343410
  start: {
343381
- line: 422,
343411
+ line: 425,
343382
343412
  column: 6
343383
343413
  },
343384
343414
  end: {
343385
- line: 427,
343415
+ line: 430,
343386
343416
  column: 8
343387
343417
  }
343388
343418
  },
343389
- "145": {
343419
+ "148": {
343390
343420
  start: {
343391
- line: 423,
343421
+ line: 426,
343392
343422
  column: 8
343393
343423
  },
343394
343424
  end: {
343395
- line: 426,
343425
+ line: 429,
343396
343426
  column: 9
343397
343427
  }
343398
343428
  },
343399
- "146": {
343429
+ "149": {
343400
343430
  start: {
343401
- line: 424,
343431
+ line: 427,
343402
343432
  column: 10
343403
343433
  },
343404
343434
  end: {
343405
- line: 424,
343435
+ line: 427,
343406
343436
  column: 26
343407
343437
  }
343408
343438
  },
343409
- "147": {
343439
+ "150": {
343410
343440
  start: {
343411
- line: 425,
343441
+ line: 428,
343412
343442
  column: 10
343413
343443
  },
343414
343444
  end: {
343415
- line: 425,
343445
+ line: 428,
343416
343446
  column: 36
343417
343447
  }
343418
343448
  },
343419
- "148": {
343449
+ "151": {
343420
343450
  start: {
343421
- line: 429,
343451
+ line: 432,
343422
343452
  column: 6
343423
343453
  },
343424
343454
  end: {
343425
- line: 429,
343455
+ line: 432,
343426
343456
  column: 46
343427
343457
  }
343428
343458
  },
343429
- "149": {
343459
+ "152": {
343430
343460
  start: {
343431
- line: 433,
343461
+ line: 436,
343432
343462
  column: 6
343433
343463
  },
343434
343464
  end: {
343435
- line: 433,
343465
+ line: 436,
343436
343466
  column: 31
343437
343467
  }
343438
343468
  },
343439
- "150": {
343469
+ "153": {
343440
343470
  start: {
343441
- line: 437,
343471
+ line: 440,
343442
343472
  column: 6
343443
343473
  },
343444
343474
  end: {
343445
- line: 437,
343475
+ line: 440,
343446
343476
  column: 32
343447
343477
  }
343448
343478
  },
343449
- "151": {
343479
+ "154": {
343450
343480
  start: {
343451
- line: 438,
343481
+ line: 441,
343452
343482
  column: 6
343453
343483
  },
343454
343484
  end: {
343455
- line: 438,
343485
+ line: 441,
343456
343486
  column: 30
343457
343487
  }
343458
343488
  },
343459
- "152": {
343489
+ "155": {
343460
343490
  start: {
343461
- line: 442,
343491
+ line: 445,
343462
343492
  column: 22
343463
343493
  },
343464
343494
  end: {
343465
- line: 442,
343495
+ line: 445,
343466
343496
  column: 40
343467
343497
  }
343468
343498
  },
343469
- "153": {
343499
+ "156": {
343470
343500
  start: {
343471
- line: 445,
343501
+ line: 448,
343472
343502
  column: 6
343473
343503
  },
343474
343504
  end: {
343475
- line: 445,
343505
+ line: 448,
343476
343506
  column: 59
343477
343507
  }
343478
343508
  },
343479
- "154": {
343509
+ "157": {
343480
343510
  start: {
343481
- line: 445,
343511
+ line: 448,
343482
343512
  column: 53
343483
343513
  },
343484
343514
  end: {
343485
- line: 445,
343515
+ line: 448,
343486
343516
  column: 59
343487
343517
  }
343488
343518
  },
343489
- "155": {
343519
+ "158": {
343490
343520
  start: {
343491
- line: 448,
343521
+ line: 451,
343492
343522
  column: 6
343493
343523
  },
343494
343524
  end: {
343495
- line: 448,
343525
+ line: 451,
343496
343526
  column: 67
343497
343527
  }
343498
343528
  },
343499
- "156": {
343529
+ "159": {
343500
343530
  start: {
343501
- line: 448,
343531
+ line: 451,
343502
343532
  column: 61
343503
343533
  },
343504
343534
  end: {
343505
- line: 448,
343535
+ line: 451,
343506
343536
  column: 67
343507
343537
  }
343508
343538
  },
343509
- "157": {
343539
+ "160": {
343510
343540
  start: {
343511
- line: 451,
343541
+ line: 454,
343512
343542
  column: 6
343513
343543
  },
343514
343544
  end: {
343515
- line: 451,
343545
+ line: 454,
343516
343546
  column: 30
343517
343547
  }
343518
343548
  },
343519
- "158": {
343549
+ "161": {
343520
343550
  start: {
343521
- line: 455,
343551
+ line: 458,
343522
343552
  column: 30
343523
343553
  },
343524
343554
  end: {
343525
- line: 455,
343555
+ line: 458,
343526
343556
  column: 56
343527
343557
  }
343528
343558
  },
343529
- "159": {
343559
+ "162": {
343530
343560
  start: {
343531
- line: 456,
343561
+ line: 459,
343532
343562
  column: 6
343533
343563
  },
343534
343564
  end: {
343535
- line: 458,
343565
+ line: 461,
343536
343566
  column: 7
343537
343567
  }
343538
343568
  },
343539
- "160": {
343569
+ "163": {
343540
343570
  start: {
343541
- line: 457,
343571
+ line: 460,
343542
343572
  column: 8
343543
343573
  },
343544
343574
  end: {
343545
- line: 457,
343575
+ line: 460,
343546
343576
  column: 32
343547
343577
  }
343548
343578
  }
@@ -344430,7 +344460,7 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
344430
344460
  column: 37
344431
344461
  },
344432
344462
  end: {
344433
- line: 401,
344463
+ line: 404,
344434
344464
  column: 5
344435
344465
  }
344436
344466
  },
@@ -344440,313 +344470,313 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
344440
344470
  name: "(anonymous_37)",
344441
344471
  decl: {
344442
344472
  start: {
344443
- line: 347,
344473
+ line: 350,
344444
344474
  column: 25
344445
344475
  },
344446
344476
  end: {
344447
- line: 347,
344477
+ line: 350,
344448
344478
  column: 26
344449
344479
  }
344450
344480
  },
344451
344481
  loc: {
344452
344482
  start: {
344453
- line: 347,
344483
+ line: 350,
344454
344484
  column: 30
344455
344485
  },
344456
344486
  end: {
344457
- line: 353,
344487
+ line: 356,
344458
344488
  column: 9
344459
344489
  }
344460
344490
  },
344461
- line: 347
344491
+ line: 350
344462
344492
  },
344463
344493
  "38": {
344464
344494
  name: "(anonymous_38)",
344465
344495
  decl: {
344466
344496
  start: {
344467
- line: 356,
344497
+ line: 359,
344468
344498
  column: 45
344469
344499
  },
344470
344500
  end: {
344471
- line: 356,
344501
+ line: 359,
344472
344502
  column: 46
344473
344503
  }
344474
344504
  },
344475
344505
  loc: {
344476
344506
  start: {
344477
- line: 356,
344507
+ line: 359,
344478
344508
  column: 71
344479
344509
  },
344480
344510
  end: {
344481
- line: 369,
344511
+ line: 372,
344482
344512
  column: 9
344483
344513
  }
344484
344514
  },
344485
- line: 356
344515
+ line: 359
344486
344516
  },
344487
344517
  "39": {
344488
344518
  name: "(anonymous_39)",
344489
344519
  decl: {
344490
344520
  start: {
344491
- line: 358,
344521
+ line: 361,
344492
344522
  column: 30
344493
344523
  },
344494
344524
  end: {
344495
- line: 358,
344525
+ line: 361,
344496
344526
  column: 31
344497
344527
  }
344498
344528
  },
344499
344529
  loc: {
344500
344530
  start: {
344501
- line: 358,
344531
+ line: 361,
344502
344532
  column: 35
344503
344533
  },
344504
344534
  end: {
344505
- line: 368,
344535
+ line: 371,
344506
344536
  column: 11
344507
344537
  }
344508
344538
  },
344509
- line: 358
344539
+ line: 361
344510
344540
  },
344511
344541
  "40": {
344512
344542
  name: "(anonymous_40)",
344513
344543
  decl: {
344514
344544
  start: {
344515
- line: 372,
344545
+ line: 375,
344516
344546
  column: 25
344517
344547
  },
344518
344548
  end: {
344519
- line: 372,
344549
+ line: 375,
344520
344550
  column: 26
344521
344551
  }
344522
344552
  },
344523
344553
  loc: {
344524
344554
  start: {
344525
- line: 372,
344555
+ line: 375,
344526
344556
  column: 30
344527
344557
  },
344528
344558
  end: {
344529
- line: 382,
344559
+ line: 385,
344530
344560
  column: 9
344531
344561
  }
344532
344562
  },
344533
- line: 372
344563
+ line: 375
344534
344564
  },
344535
344565
  "41": {
344536
344566
  name: "(anonymous_41)",
344537
344567
  decl: {
344538
344568
  start: {
344539
- line: 389,
344569
+ line: 392,
344540
344570
  column: 56
344541
344571
  },
344542
344572
  end: {
344543
- line: 389,
344573
+ line: 392,
344544
344574
  column: 57
344545
344575
  }
344546
344576
  },
344547
344577
  loc: {
344548
344578
  start: {
344549
- line: 389,
344579
+ line: 392,
344550
344580
  column: 64
344551
344581
  },
344552
344582
  end: {
344553
- line: 395,
344583
+ line: 398,
344554
344584
  column: 7
344555
344585
  }
344556
344586
  },
344557
- line: 389
344587
+ line: 392
344558
344588
  },
344559
344589
  "42": {
344560
344590
  name: "(anonymous_42)",
344561
344591
  decl: {
344562
344592
  start: {
344563
- line: 390,
344593
+ line: 393,
344564
344594
  column: 23
344565
344595
  },
344566
344596
  end: {
344567
- line: 390,
344597
+ line: 393,
344568
344598
  column: 24
344569
344599
  }
344570
344600
  },
344571
344601
  loc: {
344572
344602
  start: {
344573
- line: 390,
344603
+ line: 393,
344574
344604
  column: 29
344575
344605
  },
344576
344606
  end: {
344577
- line: 394,
344607
+ line: 397,
344578
344608
  column: 9
344579
344609
  }
344580
344610
  },
344581
- line: 390
344611
+ line: 393
344582
344612
  },
344583
344613
  "43": {
344584
344614
  name: "(anonymous_43)",
344585
344615
  decl: {
344586
344616
  start: {
344587
- line: 403,
344617
+ line: 406,
344588
344618
  column: 4
344589
344619
  },
344590
344620
  end: {
344591
- line: 403,
344621
+ line: 406,
344592
344622
  column: 5
344593
344623
  }
344594
344624
  },
344595
344625
  loc: {
344596
344626
  start: {
344597
- line: 403,
344627
+ line: 406,
344598
344628
  column: 24
344599
344629
  },
344600
344630
  end: {
344601
- line: 408,
344631
+ line: 411,
344602
344632
  column: 5
344603
344633
  }
344604
344634
  },
344605
- line: 403
344635
+ line: 406
344606
344636
  },
344607
344637
  "44": {
344608
344638
  name: "(anonymous_44)",
344609
344639
  decl: {
344610
344640
  start: {
344611
- line: 412,
344641
+ line: 415,
344612
344642
  column: 4
344613
344643
  },
344614
344644
  end: {
344615
- line: 412,
344645
+ line: 415,
344616
344646
  column: 5
344617
344647
  }
344618
344648
  },
344619
344649
  loc: {
344620
344650
  start: {
344621
- line: 412,
344651
+ line: 415,
344622
344652
  column: 34
344623
344653
  },
344624
344654
  end: {
344625
- line: 430,
344655
+ line: 433,
344626
344656
  column: 5
344627
344657
  }
344628
344658
  },
344629
- line: 412
344659
+ line: 415
344630
344660
  },
344631
344661
  "45": {
344632
344662
  name: "(anonymous_45)",
344633
344663
  decl: {
344634
344664
  start: {
344635
- line: 415,
344665
+ line: 418,
344636
344666
  column: 23
344637
344667
  },
344638
344668
  end: {
344639
- line: 415,
344669
+ line: 418,
344640
344670
  column: 24
344641
344671
  }
344642
344672
  },
344643
344673
  loc: {
344644
344674
  start: {
344645
- line: 415,
344675
+ line: 418,
344646
344676
  column: 28
344647
344677
  },
344648
344678
  end: {
344649
- line: 417,
344679
+ line: 420,
344650
344680
  column: 7
344651
344681
  }
344652
344682
  },
344653
- line: 415
344683
+ line: 418
344654
344684
  },
344655
344685
  "46": {
344656
344686
  name: "(anonymous_46)",
344657
344687
  decl: {
344658
344688
  start: {
344659
- line: 422,
344689
+ line: 425,
344660
344690
  column: 43
344661
344691
  },
344662
344692
  end: {
344663
- line: 422,
344693
+ line: 425,
344664
344694
  column: 44
344665
344695
  }
344666
344696
  },
344667
344697
  loc: {
344668
344698
  start: {
344669
- line: 422,
344699
+ line: 425,
344670
344700
  column: 64
344671
344701
  },
344672
344702
  end: {
344673
- line: 427,
344703
+ line: 430,
344674
344704
  column: 7
344675
344705
  }
344676
344706
  },
344677
- line: 422
344707
+ line: 425
344678
344708
  },
344679
344709
  "47": {
344680
344710
  name: "(anonymous_47)",
344681
344711
  decl: {
344682
344712
  start: {
344683
- line: 432,
344713
+ line: 435,
344684
344714
  column: 4
344685
344715
  },
344686
344716
  end: {
344687
- line: 432,
344717
+ line: 435,
344688
344718
  column: 5
344689
344719
  }
344690
344720
  },
344691
344721
  loc: {
344692
344722
  start: {
344693
- line: 432,
344723
+ line: 435,
344694
344724
  column: 25
344695
344725
  },
344696
344726
  end: {
344697
- line: 434,
344727
+ line: 437,
344698
344728
  column: 5
344699
344729
  }
344700
344730
  },
344701
- line: 432
344731
+ line: 435
344702
344732
  },
344703
344733
  "48": {
344704
344734
  name: "(anonymous_48)",
344705
344735
  decl: {
344706
344736
  start: {
344707
- line: 436,
344737
+ line: 439,
344708
344738
  column: 4
344709
344739
  },
344710
344740
  end: {
344711
- line: 436,
344741
+ line: 439,
344712
344742
  column: 5
344713
344743
  }
344714
344744
  },
344715
344745
  loc: {
344716
344746
  start: {
344717
- line: 436,
344747
+ line: 439,
344718
344748
  column: 25
344719
344749
  },
344720
344750
  end: {
344721
- line: 439,
344751
+ line: 442,
344722
344752
  column: 5
344723
344753
  }
344724
344754
  },
344725
- line: 436
344755
+ line: 439
344726
344756
  },
344727
344757
  "49": {
344728
344758
  name: "(anonymous_49)",
344729
344759
  decl: {
344730
344760
  start: {
344731
- line: 441,
344761
+ line: 444,
344732
344762
  column: 4
344733
344763
  },
344734
344764
  end: {
344735
- line: 441,
344765
+ line: 444,
344736
344766
  column: 5
344737
344767
  }
344738
344768
  },
344739
344769
  loc: {
344740
344770
  start: {
344741
- line: 441,
344771
+ line: 444,
344742
344772
  column: 31
344743
344773
  },
344744
344774
  end: {
344745
- line: 459,
344775
+ line: 462,
344746
344776
  column: 5
344747
344777
  }
344748
344778
  },
344749
- line: 441
344779
+ line: 444
344750
344780
  }
344751
344781
  },
344752
344782
  branchMap: {
@@ -345572,695 +345602,695 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
345572
345602
  "24": {
345573
345603
  loc: {
345574
345604
  start: {
345575
- line: 324,
345605
+ line: 325,
345576
345606
  column: 23
345577
345607
  },
345578
345608
  end: {
345579
- line: 324,
345609
+ line: 325,
345580
345610
  column: 64
345581
345611
  }
345582
345612
  },
345583
345613
  type: "binary-expr",
345584
345614
  locations: [{
345585
345615
  start: {
345586
- line: 324,
345616
+ line: 325,
345587
345617
  column: 23
345588
345618
  },
345589
345619
  end: {
345590
- line: 324,
345620
+ line: 325,
345591
345621
  column: 58
345592
345622
  }
345593
345623
  }, {
345594
345624
  start: {
345595
- line: 324,
345625
+ line: 325,
345596
345626
  column: 62
345597
345627
  },
345598
345628
  end: {
345599
- line: 324,
345629
+ line: 325,
345600
345630
  column: 64
345601
345631
  }
345602
345632
  }],
345603
- line: 324
345633
+ line: 325
345604
345634
  },
345605
345635
  "25": {
345606
345636
  loc: {
345607
345637
  start: {
345608
- line: 325,
345638
+ line: 327,
345609
345639
  column: 6
345610
345640
  },
345611
345641
  end: {
345612
- line: 325,
345642
+ line: 327,
345613
345643
  column: 39
345614
345644
  }
345615
345645
  },
345616
345646
  type: "if",
345617
345647
  locations: [{
345618
345648
  start: {
345619
- line: 325,
345649
+ line: 327,
345620
345650
  column: 6
345621
345651
  },
345622
345652
  end: {
345623
- line: 325,
345653
+ line: 327,
345624
345654
  column: 39
345625
345655
  }
345626
345656
  }, {
345627
345657
  start: {
345628
- line: 325,
345658
+ line: 327,
345629
345659
  column: 6
345630
345660
  },
345631
345661
  end: {
345632
- line: 325,
345662
+ line: 327,
345633
345663
  column: 39
345634
345664
  }
345635
345665
  }],
345636
- line: 325
345666
+ line: 327
345637
345667
  },
345638
345668
  "26": {
345639
345669
  loc: {
345640
345670
  start: {
345641
- line: 334,
345671
+ line: 337,
345642
345672
  column: 6
345643
345673
  },
345644
345674
  end: {
345645
- line: 334,
345675
+ line: 337,
345646
345676
  column: 38
345647
345677
  }
345648
345678
  },
345649
345679
  type: "if",
345650
345680
  locations: [{
345651
345681
  start: {
345652
- line: 334,
345682
+ line: 337,
345653
345683
  column: 6
345654
345684
  },
345655
345685
  end: {
345656
- line: 334,
345686
+ line: 337,
345657
345687
  column: 38
345658
345688
  }
345659
345689
  }, {
345660
345690
  start: {
345661
- line: 334,
345691
+ line: 337,
345662
345692
  column: 6
345663
345693
  },
345664
345694
  end: {
345665
- line: 334,
345695
+ line: 337,
345666
345696
  column: 38
345667
345697
  }
345668
345698
  }],
345669
- line: 334
345699
+ line: 337
345670
345700
  },
345671
345701
  "27": {
345672
345702
  loc: {
345673
345703
  start: {
345674
- line: 334,
345704
+ line: 337,
345675
345705
  column: 10
345676
345706
  },
345677
345707
  end: {
345678
- line: 334,
345708
+ line: 337,
345679
345709
  column: 30
345680
345710
  }
345681
345711
  },
345682
345712
  type: "binary-expr",
345683
345713
  locations: [{
345684
345714
  start: {
345685
- line: 334,
345715
+ line: 337,
345686
345716
  column: 10
345687
345717
  },
345688
345718
  end: {
345689
- line: 334,
345719
+ line: 337,
345690
345720
  column: 18
345691
345721
  }
345692
345722
  }, {
345693
345723
  start: {
345694
- line: 334,
345724
+ line: 337,
345695
345725
  column: 22
345696
345726
  },
345697
345727
  end: {
345698
- line: 334,
345728
+ line: 337,
345699
345729
  column: 30
345700
345730
  }
345701
345731
  }],
345702
- line: 334
345732
+ line: 337
345703
345733
  },
345704
345734
  "28": {
345705
345735
  loc: {
345706
345736
  start: {
345707
- line: 340,
345737
+ line: 343,
345708
345738
  column: 22
345709
345739
  },
345710
345740
  end: {
345711
- line: 340,
345741
+ line: 343,
345712
345742
  column: 65
345713
345743
  }
345714
345744
  },
345715
345745
  type: "binary-expr",
345716
345746
  locations: [{
345717
345747
  start: {
345718
- line: 340,
345748
+ line: 343,
345719
345749
  column: 22
345720
345750
  },
345721
345751
  end: {
345722
- line: 340,
345752
+ line: 343,
345723
345753
  column: 52
345724
345754
  }
345725
345755
  }, {
345726
345756
  start: {
345727
- line: 340,
345757
+ line: 343,
345728
345758
  column: 56
345729
345759
  },
345730
345760
  end: {
345731
- line: 340,
345761
+ line: 343,
345732
345762
  column: 65
345733
345763
  }
345734
345764
  }],
345735
- line: 340
345765
+ line: 343
345736
345766
  },
345737
345767
  "29": {
345738
345768
  loc: {
345739
345769
  start: {
345740
- line: 341,
345770
+ line: 344,
345741
345771
  column: 88
345742
345772
  },
345743
345773
  end: {
345744
- line: 341,
345774
+ line: 344,
345745
345775
  column: 121
345746
345776
  }
345747
345777
  },
345748
345778
  type: "cond-expr",
345749
345779
  locations: [{
345750
345780
  start: {
345751
- line: 341,
345781
+ line: 344,
345752
345782
  column: 112
345753
345783
  },
345754
345784
  end: {
345755
- line: 341,
345785
+ line: 344,
345756
345786
  column: 116
345757
345787
  }
345758
345788
  }, {
345759
345789
  start: {
345760
- line: 341,
345790
+ line: 344,
345761
345791
  column: 119
345762
345792
  },
345763
345793
  end: {
345764
- line: 341,
345794
+ line: 344,
345765
345795
  column: 121
345766
345796
  }
345767
345797
  }],
345768
- line: 341
345798
+ line: 344
345769
345799
  },
345770
345800
  "30": {
345771
345801
  loc: {
345772
345802
  start: {
345773
- line: 344,
345803
+ line: 347,
345774
345804
  column: 6
345775
345805
  },
345776
345806
  end: {
345777
- line: 383,
345807
+ line: 386,
345778
345808
  column: 7
345779
345809
  }
345780
345810
  },
345781
345811
  type: "if",
345782
345812
  locations: [{
345783
345813
  start: {
345784
- line: 344,
345814
+ line: 347,
345785
345815
  column: 6
345786
345816
  },
345787
345817
  end: {
345788
- line: 383,
345818
+ line: 386,
345789
345819
  column: 7
345790
345820
  }
345791
345821
  }, {
345792
345822
  start: {
345793
- line: 344,
345823
+ line: 347,
345794
345824
  column: 6
345795
345825
  },
345796
345826
  end: {
345797
- line: 383,
345827
+ line: 386,
345798
345828
  column: 7
345799
345829
  }
345800
345830
  }],
345801
- line: 344
345831
+ line: 347
345802
345832
  },
345803
345833
  "31": {
345804
345834
  loc: {
345805
345835
  start: {
345806
- line: 348,
345836
+ line: 351,
345807
345837
  column: 24
345808
345838
  },
345809
345839
  end: {
345810
- line: 348,
345840
+ line: 351,
345811
345841
  column: 57
345812
345842
  }
345813
345843
  },
345814
345844
  type: "binary-expr",
345815
345845
  locations: [{
345816
345846
  start: {
345817
- line: 348,
345847
+ line: 351,
345818
345848
  column: 24
345819
345849
  },
345820
345850
  end: {
345821
- line: 348,
345851
+ line: 351,
345822
345852
  column: 44
345823
345853
  }
345824
345854
  }, {
345825
345855
  start: {
345826
- line: 348,
345856
+ line: 351,
345827
345857
  column: 48
345828
345858
  },
345829
345859
  end: {
345830
- line: 348,
345860
+ line: 351,
345831
345861
  column: 57
345832
345862
  }
345833
345863
  }],
345834
- line: 348
345864
+ line: 351
345835
345865
  },
345836
345866
  "32": {
345837
345867
  loc: {
345838
345868
  start: {
345839
- line: 349,
345869
+ line: 352,
345840
345870
  column: 10
345841
345871
  },
345842
345872
  end: {
345843
- line: 351,
345873
+ line: 354,
345844
345874
  column: 11
345845
345875
  }
345846
345876
  },
345847
345877
  type: "if",
345848
345878
  locations: [{
345849
345879
  start: {
345850
- line: 349,
345880
+ line: 352,
345851
345881
  column: 10
345852
345882
  },
345853
345883
  end: {
345854
- line: 351,
345884
+ line: 354,
345855
345885
  column: 11
345856
345886
  }
345857
345887
  }, {
345858
345888
  start: {
345859
- line: 349,
345889
+ line: 352,
345860
345890
  column: 10
345861
345891
  },
345862
345892
  end: {
345863
- line: 351,
345893
+ line: 354,
345864
345894
  column: 11
345865
345895
  }
345866
345896
  }],
345867
- line: 349
345897
+ line: 352
345868
345898
  },
345869
345899
  "33": {
345870
345900
  loc: {
345871
345901
  start: {
345872
- line: 364,
345902
+ line: 367,
345873
345903
  column: 46
345874
345904
  },
345875
345905
  end: {
345876
- line: 364,
345906
+ line: 367,
345877
345907
  column: 64
345878
345908
  }
345879
345909
  },
345880
345910
  type: "binary-expr",
345881
345911
  locations: [{
345882
345912
  start: {
345883
- line: 364,
345913
+ line: 367,
345884
345914
  column: 46
345885
345915
  },
345886
345916
  end: {
345887
- line: 364,
345917
+ line: 367,
345888
345918
  column: 55
345889
345919
  }
345890
345920
  }, {
345891
345921
  start: {
345892
- line: 364,
345922
+ line: 367,
345893
345923
  column: 59
345894
345924
  },
345895
345925
  end: {
345896
- line: 364,
345926
+ line: 367,
345897
345927
  column: 64
345898
345928
  }
345899
345929
  }],
345900
- line: 364
345930
+ line: 367
345901
345931
  },
345902
345932
  "34": {
345903
345933
  loc: {
345904
345934
  start: {
345905
- line: 365,
345935
+ line: 368,
345906
345936
  column: 12
345907
345937
  },
345908
345938
  end: {
345909
- line: 365,
345939
+ line: 368,
345910
345940
  column: 84
345911
345941
  }
345912
345942
  },
345913
345943
  type: "if",
345914
345944
  locations: [{
345915
345945
  start: {
345916
- line: 365,
345946
+ line: 368,
345917
345947
  column: 12
345918
345948
  },
345919
345949
  end: {
345920
- line: 365,
345950
+ line: 368,
345921
345951
  column: 84
345922
345952
  }
345923
345953
  }, {
345924
345954
  start: {
345925
- line: 365,
345955
+ line: 368,
345926
345956
  column: 12
345927
345957
  },
345928
345958
  end: {
345929
- line: 365,
345959
+ line: 368,
345930
345960
  column: 84
345931
345961
  }
345932
345962
  }],
345933
- line: 365
345963
+ line: 368
345934
345964
  },
345935
345965
  "35": {
345936
345966
  loc: {
345937
345967
  start: {
345938
- line: 378,
345968
+ line: 381,
345939
345969
  column: 44
345940
345970
  },
345941
345971
  end: {
345942
- line: 378,
345972
+ line: 381,
345943
345973
  column: 62
345944
345974
  }
345945
345975
  },
345946
345976
  type: "binary-expr",
345947
345977
  locations: [{
345948
345978
  start: {
345949
- line: 378,
345979
+ line: 381,
345950
345980
  column: 44
345951
345981
  },
345952
345982
  end: {
345953
- line: 378,
345983
+ line: 381,
345954
345984
  column: 53
345955
345985
  }
345956
345986
  }, {
345957
345987
  start: {
345958
- line: 378,
345988
+ line: 381,
345959
345989
  column: 57
345960
345990
  },
345961
345991
  end: {
345962
- line: 378,
345992
+ line: 381,
345963
345993
  column: 62
345964
345994
  }
345965
345995
  }],
345966
- line: 378
345996
+ line: 381
345967
345997
  },
345968
345998
  "36": {
345969
345999
  loc: {
345970
346000
  start: {
345971
- line: 379,
346001
+ line: 382,
345972
346002
  column: 10
345973
346003
  },
345974
346004
  end: {
345975
- line: 379,
346005
+ line: 382,
345976
346006
  column: 82
345977
346007
  }
345978
346008
  },
345979
346009
  type: "if",
345980
346010
  locations: [{
345981
346011
  start: {
345982
- line: 379,
346012
+ line: 382,
345983
346013
  column: 10
345984
346014
  },
345985
346015
  end: {
345986
- line: 379,
346016
+ line: 382,
345987
346017
  column: 82
345988
346018
  }
345989
346019
  }, {
345990
346020
  start: {
345991
- line: 379,
346021
+ line: 382,
345992
346022
  column: 10
345993
346023
  },
345994
346024
  end: {
345995
- line: 379,
346025
+ line: 382,
345996
346026
  column: 82
345997
346027
  }
345998
346028
  }],
345999
- line: 379
346029
+ line: 382
346000
346030
  },
346001
346031
  "37": {
346002
346032
  loc: {
346003
346033
  start: {
346004
- line: 405,
346034
+ line: 408,
346005
346035
  column: 6
346006
346036
  },
346007
346037
  end: {
346008
- line: 407,
346038
+ line: 410,
346009
346039
  column: 7
346010
346040
  }
346011
346041
  },
346012
346042
  type: "if",
346013
346043
  locations: [{
346014
346044
  start: {
346015
- line: 405,
346045
+ line: 408,
346016
346046
  column: 6
346017
346047
  },
346018
346048
  end: {
346019
- line: 407,
346049
+ line: 410,
346020
346050
  column: 7
346021
346051
  }
346022
346052
  }, {
346023
346053
  start: {
346024
- line: 405,
346054
+ line: 408,
346025
346055
  column: 6
346026
346056
  },
346027
346057
  end: {
346028
- line: 407,
346058
+ line: 410,
346029
346059
  column: 7
346030
346060
  }
346031
346061
  }],
346032
- line: 405
346062
+ line: 408
346033
346063
  },
346034
346064
  "38": {
346035
346065
  loc: {
346036
346066
  start: {
346037
- line: 416,
346067
+ line: 419,
346038
346068
  column: 34
346039
346069
  },
346040
346070
  end: {
346041
- line: 416,
346071
+ line: 419,
346042
346072
  column: 61
346043
346073
  }
346044
346074
  },
346045
346075
  type: "binary-expr",
346046
346076
  locations: [{
346047
346077
  start: {
346048
- line: 416,
346078
+ line: 419,
346049
346079
  column: 34
346050
346080
  },
346051
346081
  end: {
346052
- line: 416,
346082
+ line: 419,
346053
346083
  column: 56
346054
346084
  }
346055
346085
  }, {
346056
346086
  start: {
346057
- line: 416,
346087
+ line: 419,
346058
346088
  column: 60
346059
346089
  },
346060
346090
  end: {
346061
- line: 416,
346091
+ line: 419,
346062
346092
  column: 61
346063
346093
  }
346064
346094
  }],
346065
- line: 416
346095
+ line: 419
346066
346096
  },
346067
346097
  "39": {
346068
346098
  loc: {
346069
346099
  start: {
346070
- line: 423,
346100
+ line: 426,
346071
346101
  column: 8
346072
346102
  },
346073
346103
  end: {
346074
- line: 426,
346104
+ line: 429,
346075
346105
  column: 9
346076
346106
  }
346077
346107
  },
346078
346108
  type: "if",
346079
346109
  locations: [{
346080
346110
  start: {
346081
- line: 423,
346111
+ line: 426,
346082
346112
  column: 8
346083
346113
  },
346084
346114
  end: {
346085
- line: 426,
346115
+ line: 429,
346086
346116
  column: 9
346087
346117
  }
346088
346118
  }, {
346089
346119
  start: {
346090
- line: 423,
346120
+ line: 426,
346091
346121
  column: 8
346092
346122
  },
346093
346123
  end: {
346094
- line: 426,
346124
+ line: 429,
346095
346125
  column: 9
346096
346126
  }
346097
346127
  }],
346098
- line: 423
346128
+ line: 426
346099
346129
  },
346100
346130
  "40": {
346101
346131
  loc: {
346102
346132
  start: {
346103
- line: 445,
346133
+ line: 448,
346104
346134
  column: 6
346105
346135
  },
346106
346136
  end: {
346107
- line: 445,
346137
+ line: 448,
346108
346138
  column: 59
346109
346139
  }
346110
346140
  },
346111
346141
  type: "if",
346112
346142
  locations: [{
346113
346143
  start: {
346114
- line: 445,
346144
+ line: 448,
346115
346145
  column: 6
346116
346146
  },
346117
346147
  end: {
346118
- line: 445,
346148
+ line: 448,
346119
346149
  column: 59
346120
346150
  }
346121
346151
  }, {
346122
346152
  start: {
346123
- line: 445,
346153
+ line: 448,
346124
346154
  column: 6
346125
346155
  },
346126
346156
  end: {
346127
- line: 445,
346157
+ line: 448,
346128
346158
  column: 59
346129
346159
  }
346130
346160
  }],
346131
- line: 445
346161
+ line: 448
346132
346162
  },
346133
346163
  "41": {
346134
346164
  loc: {
346135
346165
  start: {
346136
- line: 445,
346166
+ line: 448,
346137
346167
  column: 10
346138
346168
  },
346139
346169
  end: {
346140
- line: 445,
346170
+ line: 448,
346141
346171
  column: 51
346142
346172
  }
346143
346173
  },
346144
346174
  type: "binary-expr",
346145
346175
  locations: [{
346146
346176
  start: {
346147
- line: 445,
346177
+ line: 448,
346148
346178
  column: 10
346149
346179
  },
346150
346180
  end: {
346151
- line: 445,
346181
+ line: 448,
346152
346182
  column: 17
346153
346183
  }
346154
346184
  }, {
346155
346185
  start: {
346156
- line: 445,
346186
+ line: 448,
346157
346187
  column: 21
346158
346188
  },
346159
346189
  end: {
346160
- line: 445,
346190
+ line: 448,
346161
346191
  column: 51
346162
346192
  }
346163
346193
  }],
346164
- line: 445
346194
+ line: 448
346165
346195
  },
346166
346196
  "42": {
346167
346197
  loc: {
346168
346198
  start: {
346169
- line: 448,
346199
+ line: 451,
346170
346200
  column: 6
346171
346201
  },
346172
346202
  end: {
346173
- line: 448,
346203
+ line: 451,
346174
346204
  column: 67
346175
346205
  }
346176
346206
  },
346177
346207
  type: "if",
346178
346208
  locations: [{
346179
346209
  start: {
346180
- line: 448,
346210
+ line: 451,
346181
346211
  column: 6
346182
346212
  },
346183
346213
  end: {
346184
- line: 448,
346214
+ line: 451,
346185
346215
  column: 67
346186
346216
  }
346187
346217
  }, {
346188
346218
  start: {
346189
- line: 448,
346219
+ line: 451,
346190
346220
  column: 6
346191
346221
  },
346192
346222
  end: {
346193
- line: 448,
346223
+ line: 451,
346194
346224
  column: 67
346195
346225
  }
346196
346226
  }],
346197
- line: 448
346227
+ line: 451
346198
346228
  },
346199
346229
  "43": {
346200
346230
  loc: {
346201
346231
  start: {
346202
- line: 456,
346232
+ line: 459,
346203
346233
  column: 6
346204
346234
  },
346205
346235
  end: {
346206
- line: 458,
346236
+ line: 461,
346207
346237
  column: 7
346208
346238
  }
346209
346239
  },
346210
346240
  type: "if",
346211
346241
  locations: [{
346212
346242
  start: {
346213
- line: 456,
346243
+ line: 459,
346214
346244
  column: 6
346215
346245
  },
346216
346246
  end: {
346217
- line: 458,
346247
+ line: 461,
346218
346248
  column: 7
346219
346249
  }
346220
346250
  }, {
346221
346251
  start: {
346222
- line: 456,
346252
+ line: 459,
346223
346253
  column: 6
346224
346254
  },
346225
346255
  end: {
346226
- line: 458,
346256
+ line: 461,
346227
346257
  column: 7
346228
346258
  }
346229
346259
  }],
346230
- line: 456
346260
+ line: 459
346231
346261
  },
346232
346262
  "44": {
346233
346263
  loc: {
346234
346264
  start: {
346235
- line: 456,
346265
+ line: 459,
346236
346266
  column: 10
346237
346267
  },
346238
346268
  end: {
346239
- line: 456,
346269
+ line: 459,
346240
346270
  column: 67
346241
346271
  }
346242
346272
  },
346243
346273
  type: "binary-expr",
346244
346274
  locations: [{
346245
346275
  start: {
346246
- line: 456,
346276
+ line: 459,
346247
346277
  column: 10
346248
346278
  },
346249
346279
  end: {
346250
- line: 456,
346280
+ line: 459,
346251
346281
  column: 25
346252
346282
  }
346253
346283
  }, {
346254
346284
  start: {
346255
- line: 456,
346285
+ line: 459,
346256
346286
  column: 29
346257
346287
  },
346258
346288
  end: {
346259
- line: 456,
346289
+ line: 459,
346260
346290
  column: 67
346261
346291
  }
346262
346292
  }],
346263
- line: 456
346293
+ line: 459
346264
346294
  }
346265
346295
  },
346266
346296
  s: {
@@ -346424,7 +346454,10 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
346424
346454
  "157": 0,
346425
346455
  "158": 0,
346426
346456
  "159": 0,
346427
- "160": 0
346457
+ "160": 0,
346458
+ "161": 0,
346459
+ "162": 0,
346460
+ "163": 0
346428
346461
  },
346429
346462
  f: {
346430
346463
  "0": 0,
@@ -346529,13 +346562,13 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
346529
346562
  version: 3,
346530
346563
  sources: ["ProjectMatrix.vue"],
346531
346564
  names: [],
346532
- mappings: ";AAmJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
346565
+ mappings: ";AAmJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
346533
346566
  file: "ProjectMatrix.vue",
346534
346567
  sourceRoot: "src/components/projects",
346535
- sourcesContent: ["<template>\n <div class=\"project-matrix\">\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"loading-container\">\n <v-progress-circular indeterminate color=\"primary\" size=\"48\" />\n <div class=\"text-body-2 grey--text mt-3\">Loading matrix data...</div>\n </div>\n\n <!-- Error State -->\n <v-alert v-else-if=\"error\" type=\"error\" class=\"ma-4\">\n {{ error }}\n </v-alert>\n\n <!-- Empty State (only when no data at all, not due to filters) -->\n <v-alert v-else-if=\"!loading && matrixData.rows.length === 0\" type=\"info\" class=\"ma-4\">\n No {{ viewMode === 'individual' ? 'individuals' : 'experiments' }} or analyses found for this project.\n </v-alert>\n\n <!-- Matrix Content (always show when we have data) -->\n <template v-else>\n <!-- Filters -->\n <matrix-filters\n :view-mode=\"viewMode\"\n :statuses=\"filters.statuses\"\n :selected-columns=\"filters.selectedColumns\"\n :experiment-search=\"filters.experimentSearch\"\n :assemblies=\"filters.assemblies\"\n :techniques=\"filters.techniques\"\n :identifier-list=\"filters.identifierList\"\n :matched-identifier-count=\"matchedIdentifierCount\"\n :available-statuses=\"availableStatuses\"\n :available-columns=\"matrixData.columns\"\n :available-assemblies=\"availableAssemblies\"\n :available-techniques=\"availableTechniques\"\n :available-rows=\"matrixData.rows\"\n :hide-empty-rows=\"hideEmptyRows\"\n :has-active-filters=\"hasActiveFilters\"\n :has-highlights=\"hasHighlights\"\n :is-refreshing=\"refreshing\"\n @update:viewMode=\"handleViewModeChange\"\n @update:filters=\"updateFilters\"\n @update:hideEmptyRows=\"hideEmptyRows = $event\"\n @update-identifier-list=\"updateIdentifierList\"\n @clear-identifier-list=\"clearIdentifierList\"\n @clear-filters=\"clearFilters\"\n @clear-highlights=\"clearHighlights\"\n @refresh=\"refreshData\"\n />\n\n <!-- Spacer for visual separation -->\n <div class=\"filter-spacer\"></div>\n\n <!-- Matrix Grid -->\n <div\n class=\"matrix-scroll-container\"\n ref=\"scrollContainer\"\n >\n <!-- No matches message (inline, when filters exclude all results) -->\n <div v-if=\"filteredData.rows.length === 0 && hasActiveFilters\" class=\"no-matches-message\">\n <v-icon small color=\"grey\" class=\"mr-1\">mdi-filter-off</v-icon>\n No results match your filters\n </div>\n\n <template v-else>\n <!-- Header Row (CSS Grid for proper overflow of angled text) -->\n <div class=\"header-row\" :style=\"{ '--col-count': filteredData.columns.length }\">\n <div class=\"corner-cell\"></div>\n <div\n v-for=\"col in filteredData.columns\"\n :key=\"`header-${col}`\"\n class=\"header-cell\"\n :class=\"{ 'column-highlighted': highlightedColumnsMap[col] }\"\n @click=\"toggleColumnHighlight(col)\"\n >\n <span class=\"header-text\" :title=\"col\">{{ col }}</span>\n </div>\n </div>\n\n <!-- Data Table (same column widths as header) -->\n <table class=\"matrix-table\">\n <tbody>\n <tr v-for=\"row in filteredData.rows\" :key=\"row\">\n <td\n class=\"row-header\"\n :class=\"{ 'row-highlighted': highlightedRowsMap[row] }\"\n @click=\"toggleRowHighlight(row)\"\n >\n <span class=\"system-id\" :title=\"row\">{{ row }}</span>\n </td>\n <td\n v-for=\"col in filteredData.columns\"\n :key=\"col\"\n class=\"matrix-cell\"\n :class=\"{\n 'has-analyses': filteredData.cells[row]?.[col]?.length > 0,\n 'cell-highlighted': highlightedRowsMap[row] || highlightedColumnsMap[col],\n 'cell-selected': selectedCell && selectedCell.row === row && selectedCell.col === col\n }\"\n :data-row=\"row\"\n :data-col=\"col\"\n @click=\"handleCellClick($event, row, col)\"\n >\n <template v-if=\"filteredData.cells[row]?.[col]?.length\">\n <!-- Show stripes for small counts (\u2264 8) -->\n <div v-if=\"filteredData.cells[row][col].length <= 8\" class=\"cell-stripes\">\n <div\n v-for=\"(analysis, index) in filteredData.cells[row][col]\"\n :key=\"`${analysis.pk}-${analysis.experimentSystemId || ''}-${index}`\"\n class=\"stripe\"\n :style=\"{ backgroundColor: getStatusColor(analysis.status) }\"\n />\n </div>\n <!-- Show count badge for large counts (> 8) -->\n <div v-else class=\"cell-count-badge\" :style=\"{ backgroundColor: getPredominantColor(filteredData.cells[row][col]) }\">\n {{ filteredData.cells[row][col].length }}\n </div>\n </template>\n <span v-else class=\"empty-cell\">-</span>\n </td>\n </tr>\n </tbody>\n </table>\n </template>\n </div>\n\n <!-- Legend -->\n <matrix-legend\n :active-statuses=\"availableStatuses\"\n :view-mode=\"viewMode\"\n :stats=\"matrixStats\"\n />\n\n <!-- Native DOM Tooltip (bypasses Vue reactivity) -->\n <div\n ref=\"tooltip\"\n class=\"native-tooltip\"\n :style=\"{ display: 'none' }\"\n @mouseenter=\"handleTooltipEnter\"\n @mouseleave=\"handleTooltipLeave\"\n >\n <div class=\"tooltip-content\" ref=\"tooltipContent\"></div>\n </div>\n </template>\n </div>\n</template>\n\n<script>\nimport { fetchAllRecords } from '@/utils/api'\nimport {\n buildMatrixData,\n filterMatrixData,\n getStatusColor\n} from '@/utils/matrixHelpers'\nimport MatrixFilters from './MatrixFilters.vue'\nimport MatrixLegend from './MatrixLegend.vue'\n\nexport default {\n name: 'ProjectMatrix',\n components: {\n MatrixFilters,\n MatrixLegend\n },\n props: {\n projectId: {\n type: [String, Number],\n required: true\n }\n },\n data() {\n return {\n loading: false,\n refreshing: false,\n filtering: false,\n error: null,\n experiments: [],\n analyses: [],\n viewMode: 'experiment', // 'experiment' | 'individual'\n lockedProjectId: this.projectId, // Lock to initial project ID to prevent changes while modal is open\n matrixData: {\n rows: [],\n columns: [],\n cells: {},\n appVersions: {},\n viewMode: 'experiment',\n stats: {\n totalRows: 0,\n totalApps: 0,\n totalAnalyses: 0,\n byStatus: {},\n uniqueStatuses: [],\n uniqueAssemblies: [],\n uniqueTechniques: []\n }\n },\n filteredData: {\n rows: [],\n columns: [],\n cells: {},\n appVersions: {}\n },\n filters: {\n statuses: [],\n selectedColumns: [],\n experimentSearch: '',\n assemblies: [],\n techniques: [],\n identifierList: []\n },\n hideEmptyRows: false,\n highlightedRows: new Set(),\n highlightedColumns: new Set(),\n // Tooltip state (for native DOM tooltip)\n isOverTooltip: false,\n // Selected cell state\n selectedCell: null // { row, col }\n }\n },\n computed: {\n availableStatuses() {\n // Use pre-calculated stats from matrixData (avoids expensive iteration)\n return this.matrixData.stats?.uniqueStatuses || []\n },\n availableAssemblies() {\n // Use pre-calculated stats from matrixData\n return this.matrixData.stats?.uniqueAssemblies || []\n },\n availableTechniques() {\n // Use pre-calculated stats from matrixData\n return this.matrixData.stats?.uniqueTechniques || []\n },\n matrixStats() {\n // Use pre-calculated stats from matrixData (avoids expensive iteration on filter changes)\n // Note: Shows total stats, not filtered stats (for performance)\n const stats = this.matrixData.stats || {}\n return {\n totalRows: stats.totalRows || 0,\n totalApps: stats.totalApps || 0,\n totalAnalyses: stats.totalAnalyses || 0\n }\n },\n hasActiveFilters() {\n const columnsFiltered = this.filters.selectedColumns.length > 0 &&\n this.filters.selectedColumns.length < this.matrixData.columns.length\n return (\n this.filters.statuses.length > 0 ||\n columnsFiltered ||\n this.filters.experimentSearch ||\n this.filters.assemblies.length > 0 ||\n this.filters.techniques.length > 0 ||\n this.filters.identifierList.length > 0\n )\n },\n // Memoized highlight maps for O(1) lookup\n highlightedRowsMap() {\n const map = {}\n this.highlightedRows.forEach(r => { map[r] = true })\n return map\n },\n highlightedColumnsMap() {\n const map = {}\n this.highlightedColumns.forEach(c => { map[c] = true })\n return map\n },\n hasHighlights() {\n return this.highlightedRows.size > 0 || this.highlightedColumns.size > 0\n },\n // Count how many identifiers from the list actually exist in the data\n matchedIdentifierCount() {\n if (this.filters.identifierList.length === 0) return 0\n\n // Build case-insensitive set of all row IDs in the matrix\n const rowSet = new Set(\n this.matrixData.rows.map(row => row.toLowerCase())\n )\n\n // Count how many identifiers from the list exist in the data\n return this.filters.identifierList.filter(id =>\n rowSet.has(id.toLowerCase())\n ).length\n }\n },\n watch: {\n projectId: {\n immediate: true,\n handler(newId, oldId) {\n // Only fetch data on initial load (when oldId is undefined)\n // Ignore subsequent changes to keep matrix locked to original project\n if (oldId === undefined) {\n this.fetchData()\n }\n }\n },\n filters: {\n deep: true,\n handler() {\n this.applyFilters()\n }\n },\n hideEmptyRows() {\n this.applyFilters()\n },\n matrixData() {\n this.applyFilters()\n },\n 'filteredData.rows'() {\n // Reset scroll when data changes\n if (this.$refs.scrollContainer) {\n this.$refs.scrollContainer.scrollTop = 0\n }\n }\n },\n mounted() {\n // Close tooltip when clicking outside\n document.addEventListener('click', this.handleDocumentClick)\n },\n beforeDestroy() {\n document.removeEventListener('click', this.handleDocumentClick)\n },\n methods: {\n async fetchData(isRefresh = false) {\n // Set appropriate loading state\n if (isRefresh) {\n this.refreshing = true\n } else {\n this.loading = true\n }\n this.error = null\n\n // Store current filters before fetch (for refresh)\n const currentFilters = isRefresh ? { ...this.filters } : null\n\n try {\n // Fetch all experiments and analyses (with pagination)\n // Use lockedProjectId to prevent refetching if prop changes while modal is open\n const [experimentsRes, analysesRes] = await Promise.all([\n fetchAllRecords('experiments', {\n projects__pk: this.lockedProjectId,\n 'fields!': 'results,analytics,raw_data,bam_files'\n }),\n fetchAllRecords('analyses', {\n targets__projects__pk: this.lockedProjectId,\n 'fields!': 'targets,references,analytics,results'\n })\n ])\n\n this.experiments = experimentsRes.results || []\n this.analyses = analysesRes.results || []\n\n // Build matrix data and freeze it to prevent Vue reactivity overhead\n this.rebuildMatrixData()\n\n // Initialize selected columns to all columns (show all by default on initial load)\n // On refresh, restore previous filters\n if (isRefresh && currentFilters) {\n // Restore filters but ensure selectedColumns are still valid\n this.filters = {\n ...currentFilters,\n // Keep only columns that still exist after refresh\n selectedColumns: currentFilters.selectedColumns.filter(col =>\n this.matrixData.columns.includes(col)\n )\n }\n // If all selected columns were removed, default to all\n if (this.filters.selectedColumns.length === 0) {\n this.filters.selectedColumns = [...this.matrixData.columns]\n }\n } else {\n this.filters.selectedColumns = [...this.matrixData.columns]\n }\n } catch (err) {\n this.error = `Failed to load data: ${err.message}`\n console.error('Error loading matrix data:', err)\n } finally {\n if (isRefresh) {\n this.refreshing = false\n } else {\n this.loading = false\n }\n }\n },\n\n async refreshData() {\n await this.fetchData(true)\n },\n\n async applyFilters() {\n // Use requestAnimationFrame to yield to browser and prevent UI blocking\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n // Filter matrix data (already frozen internally)\n // Include hideEmptyRows from component state\n this.filteredData = filterMatrixData(this.matrixData, {\n ...this.filters,\n hideEmptyRows: this.hideEmptyRows\n })\n },\n\n updateFilters(newFilters) {\n this.filters = { ...newFilters }\n },\n\n updateIdentifierList(identifiers) {\n this.filters.identifierList = identifiers\n },\n\n clearIdentifierList() {\n this.filters.identifierList = []\n },\n\n handleViewModeChange(newMode) {\n this.viewMode = newMode\n // Clear highlights and selection when switching views\n this.highlightedRows = new Set()\n this.highlightedColumns = new Set()\n this.selectedCell = null\n this.hideTooltipNative()\n // Rebuild matrix data with new view mode\n this.rebuildMatrixData()\n },\n\n rebuildMatrixData() {\n // buildMatrixData already freezes everything internally for performance\n this.matrixData = buildMatrixData(this.experiments, this.analyses, this.viewMode)\n // The watcher on matrixData will automatically call applyFilters()\n },\n\n handleOpenAnalysis(analysisId) {\n this.hideTooltipNative()\n this.$emit('open-analysis', analysisId)\n },\n\n toggleRowHighlight(row) {\n const newSet = new Set(this.highlightedRows)\n if (newSet.has(row)) {\n newSet.delete(row)\n } else {\n newSet.add(row)\n }\n this.highlightedRows = newSet\n },\n\n toggleColumnHighlight(col) {\n const newSet = new Set(this.highlightedColumns)\n if (newSet.has(col)) {\n newSet.delete(col)\n } else {\n newSet.add(col)\n }\n this.highlightedColumns = newSet\n },\n\n clearHighlights() {\n this.highlightedRows = new Set()\n this.highlightedColumns = new Set()\n },\n\n clearFilters() {\n this.filters = {\n statuses: [],\n selectedColumns: [],\n experimentSearch: '',\n assemblies: [],\n techniques: [],\n identifierList: []\n }\n },\n\n // Cell click handler - uses native DOM to avoid Vue re-renders\n handleCellClick(event, row, col) {\n const analyses = this.filteredData.cells[row]?.[col] || []\n if (analyses.length === 0) return\n\n // Set selected cell\n this.selectedCell = { row, col }\n\n const rect = event.currentTarget.getBoundingClientRect()\n const tooltip = this.$refs.tooltip\n const content = this.$refs.tooltipContent\n\n if (!tooltip || !content) return\n\n // Store analyses for later use\n this._currentAnalyses = analyses\n\n // Build tooltip HTML directly (no Vue reactivity)\n const appName = analyses[0]?.application?.name || 'Unknown'\n let html = `<div class=\"tooltip-header\">${appName} - ${analyses.length} analysis${analyses.length !== 1 ? 'es' : ''}</div>`\n html += '<div class=\"tooltip-list\">'\n\n if (this.viewMode === 'individual') {\n // Group analyses by experiment for individual view\n const byExperiment = {}\n analyses.forEach(a => {\n const expId = a.experimentSystemId || 'Unknown'\n if (!byExperiment[expId]) {\n byExperiment[expId] = []\n }\n byExperiment[expId].push(a)\n })\n\n // Render grouped by experiment\n Object.entries(byExperiment).forEach(([expId, expAnalyses]) => {\n html += `<div class=\"experiment-group-header\">${expId}</div>`\n expAnalyses.forEach(a => {\n const color = this.getStatusColor(a.status)\n html += `<div class=\"tooltip-item\" data-pk=\"${a.pk}\">`\n html += `<span class=\"status-dot\" style=\"background:${color}\"></span>`\n html += `<span class=\"analysis-pk\">${a.pk}</span>`\n html += `<span class=\"sep\">|</span>`\n html += `<span class=\"version\">v${a.version || 'N/A'}</span>`\n if (a.assembly) html += `<span class=\"assembly\"> \xB7 ${a.assembly}</span>`\n html += `<span class=\"status-chip\" style=\"background:${color}\">${a.status}</span>`\n html += '</div>'\n })\n })\n } else {\n // Flat list for experiment view\n analyses.forEach(a => {\n const color = this.getStatusColor(a.status)\n html += `<div class=\"tooltip-item\" data-pk=\"${a.pk}\">`\n html += `<span class=\"status-dot\" style=\"background:${color}\"></span>`\n html += `<span class=\"analysis-pk\">${a.pk}</span>`\n html += `<span class=\"sep\">|</span>`\n html += `<span class=\"version\">v${a.version || 'N/A'}</span>`\n if (a.assembly) html += `<span class=\"assembly\"> \xB7 ${a.assembly}</span>`\n html += `<span class=\"status-chip\" style=\"background:${color}\">${a.status}</span>`\n html += '</div>'\n })\n }\n\n html += '</div>'\n content.innerHTML = html\n\n // Add click handlers to items\n content.querySelectorAll('.tooltip-item').forEach(item => {\n item.onclick = () => {\n const pk = parseInt(item.dataset.pk)\n this.hideTooltipNative()\n this.handleOpenAnalysis(pk)\n }\n })\n\n // Position and show tooltip\n tooltip.style.display = 'block'\n tooltip.style.left = `${rect.left + rect.width / 2}px`\n tooltip.style.top = `${rect.top - 8}px`\n },\n\n hideTooltipNative() {\n const tooltip = this.$refs.tooltip\n if (tooltip) {\n tooltip.style.display = 'none'\n }\n },\n\n getStatusColor,\n\n getPredominantColor(analyses) {\n // Count occurrences of each status\n const statusCounts = {}\n analyses.forEach(a => {\n statusCounts[a.status] = (statusCounts[a.status] || 0) + 1\n })\n\n // Find the most common status\n let maxCount = 0\n let predominantStatus = 'SUCCEEDED' // default\n Object.entries(statusCounts).forEach(([status, count]) => {\n if (count > maxCount) {\n maxCount = count\n predominantStatus = status\n }\n })\n\n return getStatusColor(predominantStatus)\n },\n\n handleTooltipEnter() {\n this.isOverTooltip = true\n },\n\n handleTooltipLeave() {\n this.isOverTooltip = false\n this.hideTooltipNative()\n },\n\n handleDocumentClick(event) {\n const tooltip = this.$refs.tooltip\n\n // Check if click was inside tooltip\n if (tooltip && tooltip.contains(event.target)) return\n\n // Check if click was on a matrix cell (this opens tooltip, don't close it)\n if (event.target.closest('.matrix-cell.has-analyses')) return\n\n // Hide tooltip if visible\n this.hideTooltipNative()\n\n // Only clear selection if clicking inside the matrix scroll container\n // (not when clicking tabs, filters, etc.)\n const scrollContainer = this.$refs.scrollContainer\n if (scrollContainer && scrollContainer.contains(event.target)) {\n this.selectedCell = null\n }\n }\n }\n}\n</script>\n\n<style scoped>\n.project-matrix {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 400px;\n}\n\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 300px;\n}\n\n.filter-spacer {\n height: 16px;\n background: white;\n}\n\n.matrix-scroll-container {\n flex: 1;\n overflow: auto;\n max-height: calc(80vh - 180px);\n}\n\n.no-matches-message {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n color: #666;\n font-size: 13px;\n}\n\n.matrix-table {\n border-collapse: separate;\n border-spacing: 0;\n table-layout: fixed;\n}\n\n/* Header row - CSS Grid for proper text overflow */\n.header-row {\n display: grid;\n grid-template-columns: 200px repeat(var(--col-count), 50px);\n position: sticky;\n top: 0;\n z-index: 10;\n background: white;\n min-width: fit-content;\n}\n\n/* Corner cell - top-left */\n.corner-cell {\n position: sticky;\n left: 0;\n z-index: 11;\n background: white;\n border-bottom: 2px solid #5b5dff;\n border-right: 2px solid #5b5dff;\n height: 130px;\n width: 200px;\n box-sizing: border-box;\n}\n\n/* Column headers - angled text */\n.header-cell {\n position: relative;\n height: 130px;\n width: 50px;\n border-bottom: 2px solid #5b5dff;\n background: white;\n overflow: visible;\n cursor: pointer;\n}\n\n.header-cell:hover .header-text {\n background: #FFF6DB;\n border-radius: 2px;\n}\n\n.header-cell.column-highlighted .header-text {\n background: #FFF0D9;\n border-radius: 2px;\n font-weight: 700;\n color: #000;\n}\n\n.header-text {\n position: absolute;\n bottom: 8px;\n left: 50%;\n transform: rotate(-45deg);\n transform-origin: bottom left;\n white-space: nowrap;\n font-size: 11px;\n font-weight: 500;\n color: #333;\n z-index: 1;\n}\n\n/* Row headers - width must match corner-cell (200px) */\ntd.row-header {\n position: sticky;\n left: 0;\n z-index: 1;\n background: white;\n border-right: 2px solid #5b5dff;\n padding: 0 8px;\n width: 200px;\n min-width: 200px;\n max-width: 200px;\n height: 24px;\n border-bottom: 1px solid #e0e0e0;\n cursor: pointer;\n vertical-align: middle;\n box-sizing: border-box;\n}\n\n.row-header.row-highlighted {\n background: #FFE8C5 !important;\n}\n\n.row-header.row-highlighted .system-id {\n font-weight: 700;\n color: #000;\n}\n\n.system-id {\n font-size: 11px;\n font-family: monospace;\n color: #333;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Hover highlight for row header */\n.row-header:hover {\n background: #FFF0D9;\n}\n\n.row-header:hover .system-id {\n font-weight: 600;\n}\n\n/* Table cell styles - width must match header-cell (50px) */\ntd.matrix-cell {\n width: 50px;\n min-width: 50px;\n max-width: 50px;\n height: 24px;\n border-right: 1px solid #e0e0e0;\n border-bottom: 1px solid #e0e0e0;\n cursor: default;\n background: #fafafa;\n padding: 0;\n vertical-align: middle;\n box-sizing: border-box;\n}\n\n.matrix-cell.has-analyses {\n cursor: pointer;\n background: white;\n}\n\n.matrix-cell.has-analyses:hover,\n.matrix-cell.cell-selected {\n border-right-color: #5b5dff;\n border-bottom-color: #5b5dff;\n background: #f0f0ff;\n}\n\n.matrix-cell.cell-highlighted {\n background: #FFE8C5;\n}\n\n.cell-stripes {\n display: flex;\n align-items: stretch;\n justify-content: center;\n gap: 1px;\n height: 100%;\n width: 100%;\n padding: 2px 4px;\n}\n\n.stripe {\n flex: 0 0 auto;\n width: 3px;\n min-width: 2px;\n max-width: 5px;\n border-radius: 1px;\n}\n\n.cell-count-badge {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n color: white;\n font-size: 10px;\n font-weight: 600;\n text-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\n}\n\n.empty-cell {\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ccc;\n font-size: 10px;\n height: 100%;\n}\n\n/* Native tooltip styles - use ::v-deep for dynamically generated content */\n.native-tooltip {\n position: fixed;\n transform: translateX(-50%) translateY(-100%);\n z-index: 1000;\n background: white;\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n min-width: 280px;\n max-width: 350px;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.native-tooltip ::v-deep .tooltip-header {\n padding: 8px 12px;\n background: #f5f5f5;\n font-weight: 500;\n font-size: 13px;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.native-tooltip ::v-deep .tooltip-list {\n padding: 4px 0;\n}\n\n.native-tooltip ::v-deep .tooltip-item {\n display: flex;\n align-items: center;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.native-tooltip ::v-deep .tooltip-item:hover {\n background: #e3f2fd;\n}\n\n.native-tooltip ::v-deep .tooltip-item .status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-right: 8px;\n flex-shrink: 0;\n}\n\n.native-tooltip ::v-deep .tooltip-item .analysis-pk {\n color: #1976d2;\n font-weight: 500;\n}\n\n.native-tooltip ::v-deep .tooltip-item .sep {\n margin: 0 6px;\n color: #999;\n}\n\n.native-tooltip ::v-deep .tooltip-item .version {\n color: #666;\n}\n\n.native-tooltip ::v-deep .tooltip-item .assembly {\n color: #999;\n}\n\n.native-tooltip ::v-deep .tooltip-item .status-chip {\n margin-left: auto;\n padding: 2px 6px;\n border-radius: 3px;\n color: white;\n font-size: 10px;\n font-weight: 500;\n}\n\n.native-tooltip ::v-deep .experiment-group-header {\n padding: 6px 12px 4px;\n font-size: 11px;\n font-weight: 600;\n color: #1976d2;\n background: #f8f9fa;\n border-top: 1px solid #e0e0e0;\n font-family: monospace;\n}\n\n.native-tooltip ::v-deep .experiment-group-header:first-child {\n border-top: none;\n}\n</style>\n"]
346568
+ sourcesContent: ["<template>\n <div class=\"project-matrix\">\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"loading-container\">\n <v-progress-circular indeterminate color=\"primary\" size=\"48\" />\n <div class=\"text-body-2 grey--text mt-3\">Loading matrix data...</div>\n </div>\n\n <!-- Error State -->\n <v-alert v-else-if=\"error\" type=\"error\" class=\"ma-4\">\n {{ error }}\n </v-alert>\n\n <!-- Empty State (only when no data at all, not due to filters) -->\n <v-alert v-else-if=\"!loading && matrixData.rows.length === 0\" type=\"info\" class=\"ma-4\">\n No {{ viewMode === 'individual' ? 'individuals' : 'experiments' }} or analyses found for this project.\n </v-alert>\n\n <!-- Matrix Content (always show when we have data) -->\n <template v-else>\n <!-- Filters -->\n <matrix-filters\n :view-mode=\"viewMode\"\n :statuses=\"filters.statuses\"\n :selected-columns=\"filters.selectedColumns\"\n :experiment-search=\"filters.experimentSearch\"\n :assemblies=\"filters.assemblies\"\n :techniques=\"filters.techniques\"\n :identifier-list=\"filters.identifierList\"\n :matched-identifier-count=\"matchedIdentifierCount\"\n :available-statuses=\"availableStatuses\"\n :available-columns=\"matrixData.columns\"\n :available-assemblies=\"availableAssemblies\"\n :available-techniques=\"availableTechniques\"\n :available-rows=\"matrixData.rows\"\n :hide-empty-rows=\"hideEmptyRows\"\n :has-active-filters=\"hasActiveFilters\"\n :has-highlights=\"hasHighlights\"\n :is-refreshing=\"refreshing\"\n @update:viewMode=\"handleViewModeChange\"\n @update:filters=\"updateFilters\"\n @update:hideEmptyRows=\"hideEmptyRows = $event\"\n @update-identifier-list=\"updateIdentifierList\"\n @clear-identifier-list=\"clearIdentifierList\"\n @clear-filters=\"clearFilters\"\n @clear-highlights=\"clearHighlights\"\n @refresh=\"refreshData\"\n />\n\n <!-- Spacer for visual separation -->\n <div class=\"filter-spacer\"></div>\n\n <!-- Matrix Grid -->\n <div\n class=\"matrix-scroll-container\"\n ref=\"scrollContainer\"\n >\n <!-- No matches message (inline, when filters exclude all results) -->\n <div v-if=\"filteredData.rows.length === 0 && hasActiveFilters\" class=\"no-matches-message\">\n <v-icon small color=\"grey\" class=\"mr-1\">mdi-filter-off</v-icon>\n No results match your filters\n </div>\n\n <template v-else>\n <!-- Header Row (CSS Grid for proper overflow of angled text) -->\n <div class=\"header-row\" :style=\"{ '--col-count': filteredData.columns.length }\">\n <div class=\"corner-cell\"></div>\n <div\n v-for=\"col in filteredData.columns\"\n :key=\"`header-${col}`\"\n class=\"header-cell\"\n :class=\"{ 'column-highlighted': highlightedColumnsMap[col] }\"\n @click=\"toggleColumnHighlight(col)\"\n >\n <span class=\"header-text\" :title=\"col\">{{ col }}</span>\n </div>\n </div>\n\n <!-- Data Table (same column widths as header) -->\n <table class=\"matrix-table\">\n <tbody>\n <tr v-for=\"row in filteredData.rows\" :key=\"row\">\n <td\n class=\"row-header\"\n :class=\"{ 'row-highlighted': highlightedRowsMap[row] }\"\n @click=\"toggleRowHighlight(row)\"\n >\n <span class=\"system-id\" :title=\"row\">{{ row }}</span>\n </td>\n <td\n v-for=\"col in filteredData.columns\"\n :key=\"col\"\n class=\"matrix-cell\"\n :class=\"{\n 'has-analyses': filteredData.cells[row]?.[col]?.length > 0,\n 'cell-highlighted': highlightedRowsMap[row] || highlightedColumnsMap[col],\n 'cell-selected': selectedCell && selectedCell.row === row && selectedCell.col === col\n }\"\n :data-row=\"row\"\n :data-col=\"col\"\n @click=\"handleCellClick($event, row, col)\"\n >\n <template v-if=\"filteredData.cells[row]?.[col]?.length\">\n <!-- Show stripes for small counts (\u2264 8) -->\n <div v-if=\"filteredData.cells[row][col].length <= 8\" class=\"cell-stripes\">\n <div\n v-for=\"(analysis, index) in filteredData.cells[row][col]\"\n :key=\"`${analysis.pk}-${analysis.experimentSystemId || ''}-${index}`\"\n class=\"stripe\"\n :style=\"{ backgroundColor: getStatusColor(analysis.status) }\"\n />\n </div>\n <!-- Show count badge for large counts (> 8) -->\n <div v-else class=\"cell-count-badge\" :style=\"{ backgroundColor: getPredominantColor(filteredData.cells[row][col]) }\">\n {{ filteredData.cells[row][col].length }}\n </div>\n </template>\n <span v-else class=\"empty-cell\">-</span>\n </td>\n </tr>\n </tbody>\n </table>\n </template>\n </div>\n\n <!-- Legend -->\n <matrix-legend\n :active-statuses=\"availableStatuses\"\n :view-mode=\"viewMode\"\n :stats=\"matrixStats\"\n />\n\n <!-- Native DOM Tooltip (bypasses Vue reactivity) -->\n <div\n ref=\"tooltip\"\n class=\"native-tooltip\"\n :style=\"{ display: 'none' }\"\n @mouseenter=\"handleTooltipEnter\"\n @mouseleave=\"handleTooltipLeave\"\n >\n <div class=\"tooltip-content\" ref=\"tooltipContent\"></div>\n </div>\n </template>\n </div>\n</template>\n\n<script>\nimport { fetchAllRecords } from '@/utils/api'\nimport {\n buildMatrixData,\n filterMatrixData,\n getStatusColor\n} from '@/utils/matrixHelpers'\nimport MatrixFilters from './MatrixFilters.vue'\nimport MatrixLegend from './MatrixLegend.vue'\n\nexport default {\n name: 'ProjectMatrix',\n components: {\n MatrixFilters,\n MatrixLegend\n },\n props: {\n projectId: {\n type: [String, Number],\n required: true\n }\n },\n data() {\n return {\n loading: false,\n refreshing: false,\n filtering: false,\n error: null,\n experiments: [],\n analyses: [],\n viewMode: 'experiment', // 'experiment' | 'individual'\n lockedProjectId: this.projectId, // Lock to initial project ID to prevent changes while modal is open\n matrixData: {\n rows: [],\n columns: [],\n cells: {},\n appVersions: {},\n viewMode: 'experiment',\n stats: {\n totalRows: 0,\n totalApps: 0,\n totalAnalyses: 0,\n byStatus: {},\n uniqueStatuses: [],\n uniqueAssemblies: [],\n uniqueTechniques: []\n }\n },\n filteredData: {\n rows: [],\n columns: [],\n cells: {},\n appVersions: {}\n },\n filters: {\n statuses: [],\n selectedColumns: [],\n experimentSearch: '',\n assemblies: [],\n techniques: [],\n identifierList: []\n },\n hideEmptyRows: false,\n highlightedRows: new Set(),\n highlightedColumns: new Set(),\n // Tooltip state (for native DOM tooltip)\n isOverTooltip: false,\n // Selected cell state\n selectedCell: null // { row, col }\n }\n },\n computed: {\n availableStatuses() {\n // Use pre-calculated stats from matrixData (avoids expensive iteration)\n return this.matrixData.stats?.uniqueStatuses || []\n },\n availableAssemblies() {\n // Use pre-calculated stats from matrixData\n return this.matrixData.stats?.uniqueAssemblies || []\n },\n availableTechniques() {\n // Use pre-calculated stats from matrixData\n return this.matrixData.stats?.uniqueTechniques || []\n },\n matrixStats() {\n // Use pre-calculated stats from matrixData (avoids expensive iteration on filter changes)\n // Note: Shows total stats, not filtered stats (for performance)\n const stats = this.matrixData.stats || {}\n return {\n totalRows: stats.totalRows || 0,\n totalApps: stats.totalApps || 0,\n totalAnalyses: stats.totalAnalyses || 0\n }\n },\n hasActiveFilters() {\n const columnsFiltered = this.filters.selectedColumns.length > 0 &&\n this.filters.selectedColumns.length < this.matrixData.columns.length\n return (\n this.filters.statuses.length > 0 ||\n columnsFiltered ||\n this.filters.experimentSearch ||\n this.filters.assemblies.length > 0 ||\n this.filters.techniques.length > 0 ||\n this.filters.identifierList.length > 0\n )\n },\n // Memoized highlight maps for O(1) lookup\n highlightedRowsMap() {\n const map = {}\n this.highlightedRows.forEach(r => { map[r] = true })\n return map\n },\n highlightedColumnsMap() {\n const map = {}\n this.highlightedColumns.forEach(c => { map[c] = true })\n return map\n },\n hasHighlights() {\n return this.highlightedRows.size > 0 || this.highlightedColumns.size > 0\n },\n // Count how many identifiers from the list actually exist in the data\n matchedIdentifierCount() {\n if (this.filters.identifierList.length === 0) return 0\n\n // Build case-insensitive set of all row IDs in the matrix\n const rowSet = new Set(\n this.matrixData.rows.map(row => row.toLowerCase())\n )\n\n // Count how many identifiers from the list exist in the data\n return this.filters.identifierList.filter(id =>\n rowSet.has(id.toLowerCase())\n ).length\n }\n },\n watch: {\n projectId: {\n immediate: true,\n handler(newId, oldId) {\n // Only fetch data on initial load (when oldId is undefined)\n // Ignore subsequent changes to keep matrix locked to original project\n if (oldId === undefined) {\n this.fetchData()\n }\n }\n },\n filters: {\n deep: true,\n handler() {\n this.applyFilters()\n }\n },\n hideEmptyRows() {\n this.applyFilters()\n },\n matrixData() {\n this.applyFilters()\n },\n 'filteredData.rows'() {\n // Reset scroll when data changes\n if (this.$refs.scrollContainer) {\n this.$refs.scrollContainer.scrollTop = 0\n }\n }\n },\n mounted() {\n // Close tooltip when clicking outside\n document.addEventListener('click', this.handleDocumentClick)\n },\n beforeDestroy() {\n document.removeEventListener('click', this.handleDocumentClick)\n },\n methods: {\n async fetchData(isRefresh = false) {\n // Set appropriate loading state\n if (isRefresh) {\n this.refreshing = true\n } else {\n this.loading = true\n }\n this.error = null\n\n // Store current filters before fetch (for refresh)\n const currentFilters = isRefresh ? { ...this.filters } : null\n\n try {\n // Fetch all experiments and analyses (with pagination)\n // Use lockedProjectId to prevent refetching if prop changes while modal is open\n const [experimentsRes, analysesRes] = await Promise.all([\n fetchAllRecords('experiments', {\n projects__pk: this.lockedProjectId,\n 'fields!': 'results,analytics,raw_data,bam_files'\n }),\n fetchAllRecords('analyses', {\n targets__projects__pk: this.lockedProjectId,\n 'fields!': 'targets,references,analytics,results'\n })\n ])\n\n this.experiments = experimentsRes.results || []\n this.analyses = analysesRes.results || []\n\n // Build matrix data and freeze it to prevent Vue reactivity overhead\n this.rebuildMatrixData()\n\n // Initialize selected columns to all columns (show all by default on initial load)\n // On refresh, restore previous filters\n if (isRefresh && currentFilters) {\n // Restore filters but ensure selectedColumns are still valid\n this.filters = {\n ...currentFilters,\n // Keep only columns that still exist after refresh\n selectedColumns: currentFilters.selectedColumns.filter(col =>\n this.matrixData.columns.includes(col)\n )\n }\n // If all selected columns were removed, default to all\n if (this.filters.selectedColumns.length === 0) {\n this.filters.selectedColumns = [...this.matrixData.columns]\n }\n } else {\n this.filters.selectedColumns = [...this.matrixData.columns]\n }\n } catch (err) {\n this.error = `Failed to load data: ${err.message}`\n console.error('Error loading matrix data:', err)\n } finally {\n if (isRefresh) {\n this.refreshing = false\n } else {\n this.loading = false\n }\n }\n },\n\n async refreshData() {\n await this.fetchData(true)\n },\n\n async applyFilters() {\n // Use requestAnimationFrame to yield to browser and prevent UI blocking\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n // Filter matrix data (already frozen internally)\n // Include hideEmptyRows from component state\n this.filteredData = filterMatrixData(this.matrixData, {\n ...this.filters,\n hideEmptyRows: this.hideEmptyRows\n })\n },\n\n updateFilters(newFilters) {\n this.filters = { ...newFilters }\n },\n\n updateIdentifierList(identifiers) {\n this.filters.identifierList = identifiers\n },\n\n clearIdentifierList() {\n this.filters.identifierList = []\n },\n\n handleViewModeChange(newMode) {\n this.viewMode = newMode\n // Clear highlights and selection when switching views\n this.highlightedRows = new Set()\n this.highlightedColumns = new Set()\n this.selectedCell = null\n this.hideTooltipNative()\n // Rebuild matrix data with new view mode\n this.rebuildMatrixData()\n },\n\n rebuildMatrixData() {\n // buildMatrixData already freezes everything internally for performance\n this.matrixData = buildMatrixData(this.experiments, this.analyses, this.viewMode)\n // The watcher on matrixData will automatically call applyFilters()\n },\n\n handleOpenAnalysis(analysisId) {\n this.hideTooltipNative()\n this.$emit('open-analysis', analysisId)\n },\n\n toggleRowHighlight(row) {\n const newSet = new Set(this.highlightedRows)\n if (newSet.has(row)) {\n newSet.delete(row)\n } else {\n newSet.add(row)\n }\n this.highlightedRows = newSet\n },\n\n toggleColumnHighlight(col) {\n const newSet = new Set(this.highlightedColumns)\n if (newSet.has(col)) {\n newSet.delete(col)\n } else {\n newSet.add(col)\n }\n this.highlightedColumns = newSet\n },\n\n clearHighlights() {\n this.highlightedRows = new Set()\n this.highlightedColumns = new Set()\n },\n\n clearFilters() {\n this.filters = {\n statuses: [],\n selectedColumns: [],\n experimentSearch: '',\n assemblies: [],\n techniques: [],\n identifierList: []\n }\n },\n\n // Cell click handler - uses native DOM to avoid Vue re-renders\n handleCellClick(event, row, col) {\n console.log('handleCellClick called:', { row, col })\n const analyses = this.filteredData.cells[row]?.[col] || []\n console.log('analyses:', analyses.length)\n if (analyses.length === 0) return\n\n // Set selected cell\n this.selectedCell = { row, col }\n\n const rect = event.currentTarget.getBoundingClientRect()\n const tooltip = this.$refs.tooltip\n const content = this.$refs.tooltipContent\n\n console.log('tooltip ref:', !!tooltip, 'content ref:', !!content)\n if (!tooltip || !content) return\n\n // Store analyses for later use\n this._currentAnalyses = analyses\n\n // Build tooltip HTML directly (no Vue reactivity)\n const appName = analyses[0]?.application?.name || 'Unknown'\n let html = `<div class=\"tooltip-header\">${appName} - ${analyses.length} analysis${analyses.length !== 1 ? 'es' : ''}</div>`\n html += '<div class=\"tooltip-list\">'\n\n if (this.viewMode === 'individual') {\n // Group analyses by experiment for individual view\n const byExperiment = {}\n analyses.forEach(a => {\n const expId = a.experimentSystemId || 'Unknown'\n if (!byExperiment[expId]) {\n byExperiment[expId] = []\n }\n byExperiment[expId].push(a)\n })\n\n // Render grouped by experiment\n Object.entries(byExperiment).forEach(([expId, expAnalyses]) => {\n html += `<div class=\"experiment-group-header\">${expId}</div>`\n expAnalyses.forEach(a => {\n const color = this.getStatusColor(a.status)\n html += `<div class=\"tooltip-item\" data-pk=\"${a.pk}\">`\n html += `<span class=\"status-dot\" style=\"background:${color}\"></span>`\n html += `<span class=\"analysis-pk\">${a.pk}</span>`\n html += `<span class=\"sep\">|</span>`\n html += `<span class=\"version\">v${a.version || 'N/A'}</span>`\n if (a.assembly) html += `<span class=\"assembly\"> \xB7 ${a.assembly}</span>`\n html += `<span class=\"status-chip\" style=\"background:${color}\">${a.status}</span>`\n html += '</div>'\n })\n })\n } else {\n // Flat list for experiment view\n analyses.forEach(a => {\n const color = this.getStatusColor(a.status)\n html += `<div class=\"tooltip-item\" data-pk=\"${a.pk}\">`\n html += `<span class=\"status-dot\" style=\"background:${color}\"></span>`\n html += `<span class=\"analysis-pk\">${a.pk}</span>`\n html += `<span class=\"sep\">|</span>`\n html += `<span class=\"version\">v${a.version || 'N/A'}</span>`\n if (a.assembly) html += `<span class=\"assembly\"> \xB7 ${a.assembly}</span>`\n html += `<span class=\"status-chip\" style=\"background:${color}\">${a.status}</span>`\n html += '</div>'\n })\n }\n\n html += '</div>'\n content.innerHTML = html\n\n // Add click handlers to items\n content.querySelectorAll('.tooltip-item').forEach(item => {\n item.onclick = () => {\n const pk = parseInt(item.dataset.pk)\n this.hideTooltipNative()\n this.handleOpenAnalysis(pk)\n }\n })\n\n // Position and show tooltip\n tooltip.style.display = 'block'\n tooltip.style.left = `${rect.left + rect.width / 2}px`\n tooltip.style.top = `${rect.top - 8}px`\n },\n\n hideTooltipNative() {\n const tooltip = this.$refs.tooltip\n if (tooltip) {\n tooltip.style.display = 'none'\n }\n },\n\n getStatusColor,\n\n getPredominantColor(analyses) {\n // Count occurrences of each status\n const statusCounts = {}\n analyses.forEach(a => {\n statusCounts[a.status] = (statusCounts[a.status] || 0) + 1\n })\n\n // Find the most common status\n let maxCount = 0\n let predominantStatus = 'SUCCEEDED' // default\n Object.entries(statusCounts).forEach(([status, count]) => {\n if (count > maxCount) {\n maxCount = count\n predominantStatus = status\n }\n })\n\n return getStatusColor(predominantStatus)\n },\n\n handleTooltipEnter() {\n this.isOverTooltip = true\n },\n\n handleTooltipLeave() {\n this.isOverTooltip = false\n this.hideTooltipNative()\n },\n\n handleDocumentClick(event) {\n const tooltip = this.$refs.tooltip\n\n // Check if click was inside tooltip\n if (tooltip && tooltip.contains(event.target)) return\n\n // Check if click was on a matrix cell (this opens tooltip, don't close it)\n if (event.target.closest('.matrix-cell.has-analyses')) return\n\n // Hide tooltip if visible\n this.hideTooltipNative()\n\n // Only clear selection if clicking inside the matrix scroll container\n // (not when clicking tabs, filters, etc.)\n const scrollContainer = this.$refs.scrollContainer\n if (scrollContainer && scrollContainer.contains(event.target)) {\n this.selectedCell = null\n }\n }\n }\n}\n</script>\n\n<style scoped>\n.project-matrix {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 400px;\n}\n\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 300px;\n}\n\n.filter-spacer {\n height: 16px;\n background: white;\n}\n\n.matrix-scroll-container {\n flex: 1;\n overflow: auto;\n max-height: calc(80vh - 180px);\n}\n\n.no-matches-message {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n color: #666;\n font-size: 13px;\n}\n\n.matrix-table {\n border-collapse: separate;\n border-spacing: 0;\n table-layout: fixed;\n}\n\n/* Header row - CSS Grid for proper text overflow */\n.header-row {\n display: grid;\n grid-template-columns: 200px repeat(var(--col-count), 50px);\n position: sticky;\n top: 0;\n z-index: 10;\n background: white;\n min-width: fit-content;\n}\n\n/* Corner cell - top-left */\n.corner-cell {\n position: sticky;\n left: 0;\n z-index: 11;\n background: white;\n border-bottom: 2px solid #5b5dff;\n border-right: 2px solid #5b5dff;\n height: 130px;\n width: 200px;\n box-sizing: border-box;\n}\n\n/* Column headers - angled text */\n.header-cell {\n position: relative;\n height: 130px;\n width: 50px;\n border-bottom: 2px solid #5b5dff;\n background: white;\n overflow: visible;\n cursor: pointer;\n}\n\n.header-cell:hover .header-text {\n background: #FFF6DB;\n border-radius: 2px;\n}\n\n.header-cell.column-highlighted .header-text {\n background: #FFF0D9;\n border-radius: 2px;\n font-weight: 700;\n color: #000;\n}\n\n.header-text {\n position: absolute;\n bottom: 8px;\n left: 50%;\n transform: rotate(-45deg);\n transform-origin: bottom left;\n white-space: nowrap;\n font-size: 11px;\n font-weight: 500;\n color: #333;\n z-index: 1;\n}\n\n/* Row headers - width must match corner-cell (200px) */\ntd.row-header {\n position: sticky;\n left: 0;\n z-index: 1;\n background: white;\n border-right: 2px solid #5b5dff;\n padding: 0 8px;\n width: 200px;\n min-width: 200px;\n max-width: 200px;\n height: 24px;\n border-bottom: 1px solid #e0e0e0;\n cursor: pointer;\n vertical-align: middle;\n box-sizing: border-box;\n}\n\n.row-header.row-highlighted {\n background: #FFE8C5 !important;\n}\n\n.row-header.row-highlighted .system-id {\n font-weight: 700;\n color: #000;\n}\n\n.system-id {\n font-size: 11px;\n font-family: monospace;\n color: #333;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Hover highlight for row header */\n.row-header:hover {\n background: #FFF0D9;\n}\n\n.row-header:hover .system-id {\n font-weight: 600;\n}\n\n/* Table cell styles - width must match header-cell (50px) */\ntd.matrix-cell {\n width: 50px;\n min-width: 50px;\n max-width: 50px;\n height: 24px;\n border-right: 1px solid #e0e0e0;\n border-bottom: 1px solid #e0e0e0;\n cursor: default;\n background: #fafafa;\n padding: 0;\n vertical-align: middle;\n box-sizing: border-box;\n}\n\n.matrix-cell.has-analyses {\n cursor: pointer;\n background: white;\n}\n\n.matrix-cell.has-analyses:hover,\n.matrix-cell.cell-selected {\n border-right-color: #5b5dff;\n border-bottom-color: #5b5dff;\n background: #f0f0ff;\n}\n\n.matrix-cell.cell-highlighted {\n background: #FFE8C5;\n}\n\n.cell-stripes {\n display: flex;\n align-items: stretch;\n justify-content: center;\n gap: 1px;\n height: 100%;\n width: 100%;\n padding: 2px 4px;\n}\n\n.stripe {\n flex: 0 0 auto;\n width: 3px;\n min-width: 2px;\n max-width: 5px;\n border-radius: 1px;\n}\n\n.cell-count-badge {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n color: white;\n font-size: 10px;\n font-weight: 600;\n text-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\n}\n\n.empty-cell {\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ccc;\n font-size: 10px;\n height: 100%;\n}\n\n/* Native tooltip styles - use ::v-deep for dynamically generated content */\n.native-tooltip {\n position: fixed;\n transform: translateX(-50%) translateY(-100%);\n z-index: 9999;\n background: white;\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n min-width: 280px;\n max-width: 350px;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.native-tooltip ::v-deep .tooltip-header {\n padding: 8px 12px;\n background: #f5f5f5;\n font-weight: 500;\n font-size: 13px;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.native-tooltip ::v-deep .tooltip-list {\n padding: 4px 0;\n}\n\n.native-tooltip ::v-deep .tooltip-item {\n display: flex;\n align-items: center;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.native-tooltip ::v-deep .tooltip-item:hover {\n background: #e3f2fd;\n}\n\n.native-tooltip ::v-deep .tooltip-item .status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-right: 8px;\n flex-shrink: 0;\n}\n\n.native-tooltip ::v-deep .tooltip-item .analysis-pk {\n color: #1976d2;\n font-weight: 500;\n}\n\n.native-tooltip ::v-deep .tooltip-item .sep {\n margin: 0 6px;\n color: #999;\n}\n\n.native-tooltip ::v-deep .tooltip-item .version {\n color: #666;\n}\n\n.native-tooltip ::v-deep .tooltip-item .assembly {\n color: #999;\n}\n\n.native-tooltip ::v-deep .tooltip-item .status-chip {\n margin-left: auto;\n padding: 2px 6px;\n border-radius: 3px;\n color: white;\n font-size: 10px;\n font-weight: 500;\n}\n\n.native-tooltip ::v-deep .experiment-group-header {\n padding: 6px 12px 4px;\n font-size: 11px;\n font-weight: 600;\n color: #1976d2;\n background: #f8f9fa;\n border-top: 1px solid #e0e0e0;\n font-family: monospace;\n}\n\n.native-tooltip ::v-deep .experiment-group-header:first-child {\n border-top: none;\n}\n</style>\n"]
346536
346569
  },
346537
346570
  _coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
346538
- hash: "fd7147f03f01b31d8c70b081a2f870d9b564dbff"
346571
+ hash: "4d6068187e3b09b0395493ca183ae0ed262ae00e"
346539
346572
  };
346540
346573
  var coverage = global[gcv] || (global[gcv] = {});
346541
346574
  if (coverage[path] && coverage[path].hash === hash) {
@@ -347046,167 +347079,176 @@ function ProjectMatrixvue_type_script_lang_js_asyncToGenerator(fn) { return func
347046
347079
  _analyses$,
347047
347080
  _this4 = this;
347048
347081
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[36]++;
347049
- var analyses = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[82]++, (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[24][0]++, (_this$filteredData$ce = this.filteredData.cells[row]) === null || _this$filteredData$ce === void 0 ? void 0 : _this$filteredData$ce[col]) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[24][1]++, []));
347050
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[83]++;
347082
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[82]++;
347083
+ console.log('handleCellClick called:', {
347084
+ row: row,
347085
+ col: col
347086
+ });
347087
+ var analyses = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[83]++, (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[24][0]++, (_this$filteredData$ce = this.filteredData.cells[row]) === null || _this$filteredData$ce === void 0 ? void 0 : _this$filteredData$ce[col]) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[24][1]++, []));
347088
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[84]++;
347089
+ console.log('analyses:', analyses.length);
347090
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[85]++;
347051
347091
  if (analyses.length === 0) {
347052
347092
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[25][0]++;
347053
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[84]++;
347093
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[86]++;
347054
347094
  return;
347055
347095
  } else {
347056
347096
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[25][1]++;
347057
347097
  }
347058
347098
 
347059
347099
  // Set selected cell
347060
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[85]++;
347100
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[87]++;
347061
347101
  this.selectedCell = {
347062
347102
  row: row,
347063
347103
  col: col
347064
347104
  };
347065
- var rect = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[86]++, event.currentTarget.getBoundingClientRect());
347066
- var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[87]++, this.$refs.tooltip);
347067
- var content = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[88]++, this.$refs.tooltipContent);
347068
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[89]++;
347105
+ var rect = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[88]++, event.currentTarget.getBoundingClientRect());
347106
+ var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[89]++, this.$refs.tooltip);
347107
+ var content = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[90]++, this.$refs.tooltipContent);
347108
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[91]++;
347109
+ console.log('tooltip ref:', !!tooltip, 'content ref:', !!content);
347110
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[92]++;
347069
347111
  if ((ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[27][0]++, !tooltip) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[27][1]++, !content)) {
347070
347112
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[26][0]++;
347071
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[90]++;
347113
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[93]++;
347072
347114
  return;
347073
347115
  } else {
347074
347116
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[26][1]++;
347075
347117
  }
347076
347118
 
347077
347119
  // Store analyses for later use
347078
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[91]++;
347120
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[94]++;
347079
347121
  this._currentAnalyses = analyses;
347080
347122
 
347081
347123
  // Build tooltip HTML directly (no Vue reactivity)
347082
- var appName = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[92]++, (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[28][0]++, (_analyses$ = analyses[0]) === null || _analyses$ === void 0 || (_analyses$ = _analyses$.application) === null || _analyses$ === void 0 ? void 0 : _analyses$.name) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[28][1]++, 'Unknown'));
347083
- var html = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[93]++, "<div class=\"tooltip-header\">".concat(appName, " - ").concat(analyses.length, " analysis").concat(analyses.length !== 1 ? (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[29][0]++, 'es') : (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[29][1]++, ''), "</div>"));
347084
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[94]++;
347124
+ var appName = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[95]++, (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[28][0]++, (_analyses$ = analyses[0]) === null || _analyses$ === void 0 || (_analyses$ = _analyses$.application) === null || _analyses$ === void 0 ? void 0 : _analyses$.name) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[28][1]++, 'Unknown'));
347125
+ var html = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[96]++, "<div class=\"tooltip-header\">".concat(appName, " - ").concat(analyses.length, " analysis").concat(analyses.length !== 1 ? (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[29][0]++, 'es') : (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[29][1]++, ''), "</div>"));
347126
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[97]++;
347085
347127
  html += '<div class="tooltip-list">';
347086
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[95]++;
347128
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[98]++;
347087
347129
  if (this.viewMode === 'individual') {
347088
347130
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[30][0]++;
347089
347131
  // Group analyses by experiment for individual view
347090
- var byExperiment = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[96]++, {});
347091
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[97]++;
347132
+ var byExperiment = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[99]++, {});
347133
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[100]++;
347092
347134
  analyses.forEach(function (a) {
347093
347135
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[37]++;
347094
- var expId = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[98]++, (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[31][0]++, a.experimentSystemId) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[31][1]++, 'Unknown'));
347095
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[99]++;
347136
+ var expId = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[101]++, (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[31][0]++, a.experimentSystemId) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[31][1]++, 'Unknown'));
347137
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[102]++;
347096
347138
  if (!byExperiment[expId]) {
347097
347139
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[32][0]++;
347098
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[100]++;
347140
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[103]++;
347099
347141
  byExperiment[expId] = [];
347100
347142
  } else {
347101
347143
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[32][1]++;
347102
347144
  }
347103
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[101]++;
347145
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[104]++;
347104
347146
  byExperiment[expId].push(a);
347105
347147
  });
347106
347148
 
347107
347149
  // Render grouped by experiment
347108
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[102]++;
347150
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[105]++;
347109
347151
  Object.entries(byExperiment).forEach(function (_ref3) {
347110
347152
  var _ref4 = ProjectMatrixvue_type_script_lang_js_slicedToArray(_ref3, 2),
347111
347153
  expId = _ref4[0],
347112
347154
  expAnalyses = _ref4[1];
347113
347155
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[38]++;
347114
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[103]++;
347156
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[106]++;
347115
347157
  html += "<div class=\"experiment-group-header\">".concat(expId, "</div>");
347116
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[104]++;
347158
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[107]++;
347117
347159
  expAnalyses.forEach(function (a) {
347118
347160
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[39]++;
347119
- var color = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[105]++, _this4.getStatusColor(a.status));
347120
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[106]++;
347161
+ var color = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[108]++, _this4.getStatusColor(a.status));
347162
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[109]++;
347121
347163
  html += "<div class=\"tooltip-item\" data-pk=\"".concat(a.pk, "\">");
347122
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[107]++;
347164
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[110]++;
347123
347165
  html += "<span class=\"status-dot\" style=\"background:".concat(color, "\"></span>");
347124
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[108]++;
347166
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[111]++;
347125
347167
  html += "<span class=\"analysis-pk\">".concat(a.pk, "</span>");
347126
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[109]++;
347168
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[112]++;
347127
347169
  html += "<span class=\"sep\">|</span>";
347128
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[110]++;
347170
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[113]++;
347129
347171
  html += "<span class=\"version\">v".concat((ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[33][0]++, a.version) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[33][1]++, 'N/A'), "</span>");
347130
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[111]++;
347172
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[114]++;
347131
347173
  if (a.assembly) {
347132
347174
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[34][0]++;
347133
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[112]++;
347175
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[115]++;
347134
347176
  html += "<span class=\"assembly\"> \xB7 ".concat(a.assembly, "</span>");
347135
347177
  } else {
347136
347178
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[34][1]++;
347137
347179
  }
347138
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[113]++;
347180
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[116]++;
347139
347181
  html += "<span class=\"status-chip\" style=\"background:".concat(color, "\">").concat(a.status, "</span>");
347140
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[114]++;
347182
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[117]++;
347141
347183
  html += '</div>';
347142
347184
  });
347143
347185
  });
347144
347186
  } else {
347145
347187
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[30][1]++;
347146
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[115]++;
347188
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[118]++;
347147
347189
  // Flat list for experiment view
347148
347190
  analyses.forEach(function (a) {
347149
347191
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[40]++;
347150
- var color = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[116]++, _this4.getStatusColor(a.status));
347151
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[117]++;
347192
+ var color = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[119]++, _this4.getStatusColor(a.status));
347193
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[120]++;
347152
347194
  html += "<div class=\"tooltip-item\" data-pk=\"".concat(a.pk, "\">");
347153
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[118]++;
347195
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[121]++;
347154
347196
  html += "<span class=\"status-dot\" style=\"background:".concat(color, "\"></span>");
347155
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[119]++;
347197
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[122]++;
347156
347198
  html += "<span class=\"analysis-pk\">".concat(a.pk, "</span>");
347157
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[120]++;
347199
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[123]++;
347158
347200
  html += "<span class=\"sep\">|</span>";
347159
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[121]++;
347201
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[124]++;
347160
347202
  html += "<span class=\"version\">v".concat((ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[35][0]++, a.version) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[35][1]++, 'N/A'), "</span>");
347161
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[122]++;
347203
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[125]++;
347162
347204
  if (a.assembly) {
347163
347205
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[36][0]++;
347164
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[123]++;
347206
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[126]++;
347165
347207
  html += "<span class=\"assembly\"> \xB7 ".concat(a.assembly, "</span>");
347166
347208
  } else {
347167
347209
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[36][1]++;
347168
347210
  }
347169
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[124]++;
347211
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[127]++;
347170
347212
  html += "<span class=\"status-chip\" style=\"background:".concat(color, "\">").concat(a.status, "</span>");
347171
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[125]++;
347213
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[128]++;
347172
347214
  html += '</div>';
347173
347215
  });
347174
347216
  }
347175
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[126]++;
347217
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[129]++;
347176
347218
  html += '</div>';
347177
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[127]++;
347219
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[130]++;
347178
347220
  content.innerHTML = html;
347179
347221
 
347180
347222
  // Add click handlers to items
347181
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[128]++;
347223
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[131]++;
347182
347224
  content.querySelectorAll('.tooltip-item').forEach(function (item) {
347183
347225
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[41]++;
347184
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[129]++;
347226
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[132]++;
347185
347227
  item.onclick = function () {
347186
347228
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[42]++;
347187
- var pk = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[130]++, parseInt(item.dataset.pk));
347188
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[131]++;
347229
+ var pk = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[133]++, parseInt(item.dataset.pk));
347230
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[134]++;
347189
347231
  _this4.hideTooltipNative();
347190
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[132]++;
347232
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[135]++;
347191
347233
  _this4.handleOpenAnalysis(pk);
347192
347234
  };
347193
347235
  });
347194
347236
 
347195
347237
  // Position and show tooltip
347196
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[133]++;
347238
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[136]++;
347197
347239
  tooltip.style.display = 'block';
347198
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[134]++;
347240
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[137]++;
347199
347241
  tooltip.style.left = "".concat(rect.left + rect.width / 2, "px");
347200
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[135]++;
347242
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[138]++;
347201
347243
  tooltip.style.top = "".concat(rect.top - 8, "px");
347202
347244
  },
347203
347245
  hideTooltipNative: function hideTooltipNative() {
347204
347246
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[43]++;
347205
- var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[136]++, this.$refs.tooltip);
347206
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[137]++;
347247
+ var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[139]++, this.$refs.tooltip);
347248
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[140]++;
347207
347249
  if (tooltip) {
347208
347250
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[37][0]++;
347209
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[138]++;
347251
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[141]++;
347210
347252
  tooltip.style.display = 'none';
347211
347253
  } else {
347212
347254
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[37][1]++;
@@ -347216,84 +347258,84 @@ function ProjectMatrixvue_type_script_lang_js_asyncToGenerator(fn) { return func
347216
347258
  getPredominantColor: function getPredominantColor(analyses) {
347217
347259
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[44]++;
347218
347260
  // Count occurrences of each status
347219
- var statusCounts = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[139]++, {});
347220
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[140]++;
347261
+ var statusCounts = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[142]++, {});
347262
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[143]++;
347221
347263
  analyses.forEach(function (a) {
347222
347264
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[45]++;
347223
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[141]++;
347265
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[144]++;
347224
347266
  statusCounts[a.status] = ((ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[38][0]++, statusCounts[a.status]) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[38][1]++, 0)) + 1;
347225
347267
  });
347226
347268
 
347227
347269
  // Find the most common status
347228
- var maxCount = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[142]++, 0);
347229
- var predominantStatus = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[143]++, 'SUCCEEDED'); // default
347230
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[144]++;
347270
+ var maxCount = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[145]++, 0);
347271
+ var predominantStatus = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[146]++, 'SUCCEEDED'); // default
347272
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[147]++;
347231
347273
  Object.entries(statusCounts).forEach(function (_ref5) {
347232
347274
  var _ref6 = ProjectMatrixvue_type_script_lang_js_slicedToArray(_ref5, 2),
347233
347275
  status = _ref6[0],
347234
347276
  count = _ref6[1];
347235
347277
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[46]++;
347236
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[145]++;
347278
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[148]++;
347237
347279
  if (count > maxCount) {
347238
347280
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[39][0]++;
347239
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[146]++;
347281
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[149]++;
347240
347282
  maxCount = count;
347241
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[147]++;
347283
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[150]++;
347242
347284
  predominantStatus = status;
347243
347285
  } else {
347244
347286
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[39][1]++;
347245
347287
  }
347246
347288
  });
347247
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[148]++;
347289
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[151]++;
347248
347290
  return getStatusColor(predominantStatus);
347249
347291
  },
347250
347292
  handleTooltipEnter: function handleTooltipEnter() {
347251
347293
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[47]++;
347252
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[149]++;
347294
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[152]++;
347253
347295
  this.isOverTooltip = true;
347254
347296
  },
347255
347297
  handleTooltipLeave: function handleTooltipLeave() {
347256
347298
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[48]++;
347257
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[150]++;
347299
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[153]++;
347258
347300
  this.isOverTooltip = false;
347259
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[151]++;
347301
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[154]++;
347260
347302
  this.hideTooltipNative();
347261
347303
  },
347262
347304
  handleDocumentClick: function handleDocumentClick(event) {
347263
347305
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[49]++;
347264
- var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[152]++, this.$refs.tooltip);
347306
+ var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[155]++, this.$refs.tooltip);
347265
347307
 
347266
347308
  // Check if click was inside tooltip
347267
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[153]++;
347309
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[156]++;
347268
347310
  if ((ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[41][0]++, tooltip) && (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[41][1]++, tooltip.contains(event.target))) {
347269
347311
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[40][0]++;
347270
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[154]++;
347312
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[157]++;
347271
347313
  return;
347272
347314
  } else {
347273
347315
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[40][1]++;
347274
347316
  }
347275
347317
 
347276
347318
  // Check if click was on a matrix cell (this opens tooltip, don't close it)
347277
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[155]++;
347319
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[158]++;
347278
347320
  if (event.target.closest('.matrix-cell.has-analyses')) {
347279
347321
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[42][0]++;
347280
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[156]++;
347322
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[159]++;
347281
347323
  return;
347282
347324
  } else {
347283
347325
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[42][1]++;
347284
347326
  }
347285
347327
 
347286
347328
  // Hide tooltip if visible
347287
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[157]++;
347329
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[160]++;
347288
347330
  this.hideTooltipNative();
347289
347331
 
347290
347332
  // Only clear selection if clicking inside the matrix scroll container
347291
347333
  // (not when clicking tabs, filters, etc.)
347292
- var scrollContainer = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[158]++, this.$refs.scrollContainer);
347293
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[159]++;
347334
+ var scrollContainer = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[161]++, this.$refs.scrollContainer);
347335
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[162]++;
347294
347336
  if ((ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[44][0]++, scrollContainer) && (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[44][1]++, scrollContainer.contains(event.target))) {
347295
347337
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[43][0]++;
347296
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[160]++;
347338
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[163]++;
347297
347339
  this.selectedCell = null;
347298
347340
  } else {
347299
347341
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[43][1]++;
@@ -347303,9 +347345,9 @@ function ProjectMatrixvue_type_script_lang_js_asyncToGenerator(fn) { return func
347303
347345
  });
347304
347346
  ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=script&lang=js&
347305
347347
  /* harmony default export */ var projects_ProjectMatrixvue_type_script_lang_js_ = (ProjectMatrixvue_type_script_lang_js_);
347306
- // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-54.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-54.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-54.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-54.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/projects/ProjectMatrix.vue?vue&type=style&index=0&id=68d9db25&prod&scoped=true&lang=css&
347307
- var ProjectMatrixvue_type_style_index_0_id_68d9db25_prod_scoped_true_lang_css_ = __webpack_require__(20);
347308
- ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=style&index=0&id=68d9db25&prod&scoped=true&lang=css&
347348
+ // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-54.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-54.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-54.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-54.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/projects/ProjectMatrix.vue?vue&type=style&index=0&id=2742f691&prod&scoped=true&lang=css&
347349
+ var ProjectMatrixvue_type_style_index_0_id_2742f691_prod_scoped_true_lang_css_ = __webpack_require__(99570);
347350
+ ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=style&index=0&id=2742f691&prod&scoped=true&lang=css&
347309
347351
 
347310
347352
  ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue
347311
347353
 
@@ -347318,11 +347360,11 @@ var ProjectMatrixvue_type_style_index_0_id_68d9db25_prod_scoped_true_lang_css_ =
347318
347360
 
347319
347361
  var ProjectMatrix_component = normalizeComponent(
347320
347362
  projects_ProjectMatrixvue_type_script_lang_js_,
347321
- ProjectMatrixvue_type_template_id_68d9db25_scoped_true_render,
347322
- ProjectMatrixvue_type_template_id_68d9db25_scoped_true_staticRenderFns,
347363
+ ProjectMatrixvue_type_template_id_2742f691_scoped_true_render,
347364
+ ProjectMatrixvue_type_template_id_2742f691_scoped_true_staticRenderFns,
347323
347365
  false,
347324
347366
  null,
347325
- "68d9db25",
347367
+ "2742f691",
347326
347368
  null
347327
347369
 
347328
347370
  )