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

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
+ /***/ 8510:
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-28c10d94]{height:100%;min-height:400px}.loading-container[data-v-28c10d94],.project-matrix[data-v-28c10d94]{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-28c10d94]{-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-28c10d94]{height:16px;background:#fff}.matrix-scroll-container[data-v-28c10d94]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;max-height:calc(80vh - 180px)}.no-matches-message[data-v-28c10d94]{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-28c10d94]{border-collapse:separate;border-spacing:0;table-layout:fixed}.header-row[data-v-28c10d94]{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-28c10d94]{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-28c10d94],.header-cell[data-v-28c10d94]{background:#fff;border-bottom:2px solid #5b5dff;height:130px}.header-cell[data-v-28c10d94]{position:relative;width:50px;overflow:visible;cursor:pointer}.header-cell:hover .header-text[data-v-28c10d94]{background:#fff6db;border-radius:2px}.header-cell.column-highlighted .header-text[data-v-28c10d94]{background:#fff0d9;border-radius:2px;font-weight:700;color:#000}.header-text[data-v-28c10d94]{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-28c10d94]{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-28c10d94]{background:#ffe8c5!important}.row-header.row-highlighted .system-id[data-v-28c10d94]{font-weight:700;color:#000}.system-id[data-v-28c10d94]{font-size:11px;font-family:monospace;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row-header[data-v-28c10d94]:hover{background:#fff0d9}.row-header:hover .system-id[data-v-28c10d94]{font-weight:600}td.matrix-cell[data-v-28c10d94]{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-28c10d94]{cursor:pointer;background:#fff}.matrix-cell.cell-selected[data-v-28c10d94],.matrix-cell.has-analyses[data-v-28c10d94]:hover{border-right-color:#5b5dff;border-bottom-color:#5b5dff;background:#f0f0ff}.matrix-cell.cell-highlighted[data-v-28c10d94]{background:#ffe8c5}.cell-stripes[data-v-28c10d94]{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-28c10d94]{-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-28c10d94]{width:100%;color:#fff;font-weight:600;text-shadow:0 0 2px rgba(0,0,0,.3)}.cell-count-badge[data-v-28c10d94],.empty-cell[data-v-28c10d94]{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-28c10d94]{color:#ccc}.native-tooltip[data-v-28c10d94]{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-28c10d94] .tooltip-header{padding:8px 12px;background:#f5f5f5;font-weight:500;font-size:13px;border-bottom:1px solid #e0e0e0}.native-tooltip[data-v-28c10d94] .tooltip-list{padding:4px 0}.native-tooltip[data-v-28c10d94] .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-28c10d94] .tooltip-item:hover{background:#e3f2fd}.native-tooltip[data-v-28c10d94] .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-28c10d94] .tooltip-item .analysis-pk{color:#1976d2;font-weight:500}.native-tooltip[data-v-28c10d94] .tooltip-item .sep{margin:0 6px;color:#999}.native-tooltip[data-v-28c10d94] .tooltip-item .version{color:#666}.native-tooltip[data-v-28c10d94] .tooltip-item .assembly{color:#999}.native-tooltip[data-v-28c10d94] .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-28c10d94] .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-28c10d94] .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
+ /***/ 82588:
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__(8510);
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("79f306ea", content, true, {"sourceMap":false,"shadowMode":false});
97342
97342
 
97343
97343
  /***/ }),
97344
97344
 
@@ -329939,10 +329939,10 @@ 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=28c10d94&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
- var hash = "6d5e6f72d2678492dbab470e36f9338523984f43";
329945
+ var hash = "a3c9c45073d167ae3a2510ad116feca13f8b05f9";
329946
329946
  var global = new Function("return this")();
329947
329947
  var gcv = "__coverage__";
329948
329948
  var coverageData = {
@@ -329985,7 +329985,7 @@ var cov_geimehe8j = function () {
329985
329985
  },
329986
329986
  end: {
329987
329987
  line: 5,
329988
- column: 1128
329988
+ column: 1131
329989
329989
  }
329990
329990
  },
329991
329991
  "4": {
@@ -330306,7 +330306,7 @@ var cov_geimehe8j = function () {
330306
330306
  },
330307
330307
  end: {
330308
330308
  line: 5,
330309
- column: 1124
330309
+ column: 1127
330310
330310
  }
330311
330311
  },
330312
330312
  type: "cond-expr",
@@ -330326,7 +330326,7 @@ var cov_geimehe8j = function () {
330326
330326
  },
330327
330327
  end: {
330328
330328
  line: 5,
330329
- column: 1124
330329
+ column: 1127
330330
330330
  }
330331
330331
  }],
330332
330332
  line: 1
@@ -330339,7 +330339,7 @@ var cov_geimehe8j = function () {
330339
330339
  },
330340
330340
  end: {
330341
330341
  line: 5,
330342
- column: 1124
330342
+ column: 1127
330343
330343
  }
330344
330344
  },
330345
330345
  type: "cond-expr",
@@ -330359,7 +330359,7 @@ var cov_geimehe8j = function () {
330359
330359
  },
330360
330360
  end: {
330361
330361
  line: 5,
330362
- column: 1124
330362
+ column: 1127
330363
330363
  }
330364
330364
  }],
330365
330365
  line: 1
@@ -330372,7 +330372,7 @@ var cov_geimehe8j = function () {
330372
330372
  },
330373
330373
  end: {
330374
330374
  line: 5,
330375
- column: 1124
330375
+ column: 1127
330376
330376
  }
330377
330377
  },
330378
330378
  type: "cond-expr",
@@ -330392,7 +330392,7 @@ var cov_geimehe8j = function () {
330392
330392
  },
330393
330393
  end: {
330394
330394
  line: 5,
330395
- column: 1124
330395
+ column: 1127
330396
330396
  }
330397
330397
  }],
330398
330398
  line: 1
@@ -330745,7 +330745,7 @@ var cov_geimehe8j = function () {
330745
330745
  "11": [0, 0]
330746
330746
  },
330747
330747
  _coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
330748
- hash: "6d5e6f72d2678492dbab470e36f9338523984f43"
330748
+ hash: "a3c9c45073d167ae3a2510ad116feca13f8b05f9"
330749
330749
  };
330750
330750
  var coverage = global[gcv] || (global[gcv] = {});
330751
330751
  if (coverage[path] && coverage[path].hash === hash) {
@@ -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_28c10d94_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);
@@ -330934,8 +330934,8 @@ var ProjectMatrixvue_type_template_id_68d9db25_scoped_true_render = function ren
330934
330934
  }), _c('div', {
330935
330935
  ref: "tooltip",
330936
330936
  staticClass: "native-tooltip",
330937
- style: {
330938
- display: 'none'
330937
+ staticStyle: {
330938
+ "display": "none"
330939
330939
  },
330940
330940
  on: {
330941
330941
  "mouseenter": _vm.handleTooltipEnter,
@@ -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_28c10d94_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=28c10d94&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 = "a0c0d0bf4b1dd7c7c1e69ed5b9fb98baf888abe6";
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,723 @@ 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
343331
  line: 404,
343332
+ column: 6
343333
+ },
343334
+ end: {
343335
+ line: 410,
343336
+ column: 8
343337
+ }
343338
+ },
343339
+ "140": {
343340
+ start: {
343341
+ line: 414,
343302
343342
  column: 22
343303
343343
  },
343304
343344
  end: {
343305
- line: 404,
343345
+ line: 414,
343306
343346
  column: 40
343307
343347
  }
343308
343348
  },
343309
- "137": {
343349
+ "141": {
343310
343350
  start: {
343311
- line: 405,
343351
+ line: 415,
343312
343352
  column: 6
343313
343353
  },
343314
343354
  end: {
343315
- line: 407,
343355
+ line: 417,
343316
343356
  column: 7
343317
343357
  }
343318
343358
  },
343319
- "138": {
343359
+ "142": {
343320
343360
  start: {
343321
- line: 406,
343361
+ line: 416,
343322
343362
  column: 8
343323
343363
  },
343324
343364
  end: {
343325
- line: 406,
343365
+ line: 416,
343326
343366
  column: 38
343327
343367
  }
343328
343368
  },
343329
- "139": {
343369
+ "143": {
343330
343370
  start: {
343331
- line: 414,
343371
+ line: 424,
343332
343372
  column: 27
343333
343373
  },
343334
343374
  end: {
343335
- line: 414,
343375
+ line: 424,
343336
343376
  column: 29
343337
343377
  }
343338
343378
  },
343339
- "140": {
343379
+ "144": {
343340
343380
  start: {
343341
- line: 415,
343381
+ line: 425,
343342
343382
  column: 6
343343
343383
  },
343344
343384
  end: {
343345
- line: 417,
343385
+ line: 427,
343346
343386
  column: 8
343347
343387
  }
343348
343388
  },
343349
- "141": {
343389
+ "145": {
343350
343390
  start: {
343351
- line: 416,
343391
+ line: 426,
343352
343392
  column: 8
343353
343393
  },
343354
343394
  end: {
343355
- line: 416,
343395
+ line: 426,
343356
343396
  column: 66
343357
343397
  }
343358
343398
  },
343359
- "142": {
343399
+ "146": {
343360
343400
  start: {
343361
- line: 420,
343401
+ line: 430,
343362
343402
  column: 21
343363
343403
  },
343364
343404
  end: {
343365
- line: 420,
343405
+ line: 430,
343366
343406
  column: 22
343367
343407
  }
343368
343408
  },
343369
- "143": {
343409
+ "147": {
343370
343410
  start: {
343371
- line: 421,
343411
+ line: 431,
343372
343412
  column: 30
343373
343413
  },
343374
343414
  end: {
343375
- line: 421,
343415
+ line: 431,
343376
343416
  column: 41
343377
343417
  }
343378
343418
  },
343379
- "144": {
343419
+ "148": {
343380
343420
  start: {
343381
- line: 422,
343421
+ line: 432,
343382
343422
  column: 6
343383
343423
  },
343384
343424
  end: {
343385
- line: 427,
343425
+ line: 437,
343386
343426
  column: 8
343387
343427
  }
343388
343428
  },
343389
- "145": {
343429
+ "149": {
343390
343430
  start: {
343391
- line: 423,
343431
+ line: 433,
343392
343432
  column: 8
343393
343433
  },
343394
343434
  end: {
343395
- line: 426,
343435
+ line: 436,
343396
343436
  column: 9
343397
343437
  }
343398
343438
  },
343399
- "146": {
343439
+ "150": {
343400
343440
  start: {
343401
- line: 424,
343441
+ line: 434,
343402
343442
  column: 10
343403
343443
  },
343404
343444
  end: {
343405
- line: 424,
343445
+ line: 434,
343406
343446
  column: 26
343407
343447
  }
343408
343448
  },
343409
- "147": {
343449
+ "151": {
343410
343450
  start: {
343411
- line: 425,
343451
+ line: 435,
343412
343452
  column: 10
343413
343453
  },
343414
343454
  end: {
343415
- line: 425,
343455
+ line: 435,
343416
343456
  column: 36
343417
343457
  }
343418
343458
  },
343419
- "148": {
343459
+ "152": {
343420
343460
  start: {
343421
- line: 429,
343461
+ line: 439,
343422
343462
  column: 6
343423
343463
  },
343424
343464
  end: {
343425
- line: 429,
343465
+ line: 439,
343426
343466
  column: 46
343427
343467
  }
343428
343468
  },
343429
- "149": {
343469
+ "153": {
343430
343470
  start: {
343431
- line: 433,
343471
+ line: 443,
343432
343472
  column: 6
343433
343473
  },
343434
343474
  end: {
343435
- line: 433,
343475
+ line: 443,
343436
343476
  column: 31
343437
343477
  }
343438
343478
  },
343439
- "150": {
343479
+ "154": {
343440
343480
  start: {
343441
- line: 437,
343481
+ line: 447,
343442
343482
  column: 6
343443
343483
  },
343444
343484
  end: {
343445
- line: 437,
343485
+ line: 447,
343446
343486
  column: 32
343447
343487
  }
343448
343488
  },
343449
- "151": {
343489
+ "155": {
343450
343490
  start: {
343451
- line: 438,
343491
+ line: 448,
343452
343492
  column: 6
343453
343493
  },
343454
343494
  end: {
343455
- line: 438,
343495
+ line: 448,
343456
343496
  column: 30
343457
343497
  }
343458
343498
  },
343459
- "152": {
343499
+ "156": {
343460
343500
  start: {
343461
- line: 442,
343501
+ line: 452,
343462
343502
  column: 22
343463
343503
  },
343464
343504
  end: {
343465
- line: 442,
343505
+ line: 452,
343466
343506
  column: 40
343467
343507
  }
343468
343508
  },
343469
- "153": {
343509
+ "157": {
343470
343510
  start: {
343471
- line: 445,
343511
+ line: 455,
343472
343512
  column: 6
343473
343513
  },
343474
343514
  end: {
343475
- line: 445,
343515
+ line: 455,
343476
343516
  column: 59
343477
343517
  }
343478
343518
  },
343479
- "154": {
343519
+ "158": {
343480
343520
  start: {
343481
- line: 445,
343521
+ line: 455,
343482
343522
  column: 53
343483
343523
  },
343484
343524
  end: {
343485
- line: 445,
343525
+ line: 455,
343486
343526
  column: 59
343487
343527
  }
343488
343528
  },
343489
- "155": {
343529
+ "159": {
343490
343530
  start: {
343491
- line: 448,
343531
+ line: 458,
343492
343532
  column: 6
343493
343533
  },
343494
343534
  end: {
343495
- line: 448,
343535
+ line: 458,
343496
343536
  column: 67
343497
343537
  }
343498
343538
  },
343499
- "156": {
343539
+ "160": {
343500
343540
  start: {
343501
- line: 448,
343541
+ line: 458,
343502
343542
  column: 61
343503
343543
  },
343504
343544
  end: {
343505
- line: 448,
343545
+ line: 458,
343506
343546
  column: 67
343507
343547
  }
343508
343548
  },
343509
- "157": {
343549
+ "161": {
343510
343550
  start: {
343511
- line: 451,
343551
+ line: 461,
343512
343552
  column: 6
343513
343553
  },
343514
343554
  end: {
343515
- line: 451,
343555
+ line: 461,
343516
343556
  column: 30
343517
343557
  }
343518
343558
  },
343519
- "158": {
343559
+ "162": {
343520
343560
  start: {
343521
- line: 455,
343561
+ line: 465,
343522
343562
  column: 30
343523
343563
  },
343524
343564
  end: {
343525
- line: 455,
343565
+ line: 465,
343526
343566
  column: 56
343527
343567
  }
343528
343568
  },
343529
- "159": {
343569
+ "163": {
343530
343570
  start: {
343531
- line: 456,
343571
+ line: 466,
343532
343572
  column: 6
343533
343573
  },
343534
343574
  end: {
343535
- line: 458,
343575
+ line: 468,
343536
343576
  column: 7
343537
343577
  }
343538
343578
  },
343539
- "160": {
343579
+ "164": {
343540
343580
  start: {
343541
- line: 457,
343581
+ line: 467,
343542
343582
  column: 8
343543
343583
  },
343544
343584
  end: {
343545
- line: 457,
343585
+ line: 467,
343546
343586
  column: 32
343547
343587
  }
343548
343588
  }
@@ -344430,7 +344470,7 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
344430
344470
  column: 37
344431
344471
  },
344432
344472
  end: {
344433
- line: 401,
344473
+ line: 411,
344434
344474
  column: 5
344435
344475
  }
344436
344476
  },
@@ -344440,313 +344480,313 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
344440
344480
  name: "(anonymous_37)",
344441
344481
  decl: {
344442
344482
  start: {
344443
- line: 347,
344483
+ line: 350,
344444
344484
  column: 25
344445
344485
  },
344446
344486
  end: {
344447
- line: 347,
344487
+ line: 350,
344448
344488
  column: 26
344449
344489
  }
344450
344490
  },
344451
344491
  loc: {
344452
344492
  start: {
344453
- line: 347,
344493
+ line: 350,
344454
344494
  column: 30
344455
344495
  },
344456
344496
  end: {
344457
- line: 353,
344497
+ line: 356,
344458
344498
  column: 9
344459
344499
  }
344460
344500
  },
344461
- line: 347
344501
+ line: 350
344462
344502
  },
344463
344503
  "38": {
344464
344504
  name: "(anonymous_38)",
344465
344505
  decl: {
344466
344506
  start: {
344467
- line: 356,
344507
+ line: 359,
344468
344508
  column: 45
344469
344509
  },
344470
344510
  end: {
344471
- line: 356,
344511
+ line: 359,
344472
344512
  column: 46
344473
344513
  }
344474
344514
  },
344475
344515
  loc: {
344476
344516
  start: {
344477
- line: 356,
344517
+ line: 359,
344478
344518
  column: 71
344479
344519
  },
344480
344520
  end: {
344481
- line: 369,
344521
+ line: 372,
344482
344522
  column: 9
344483
344523
  }
344484
344524
  },
344485
- line: 356
344525
+ line: 359
344486
344526
  },
344487
344527
  "39": {
344488
344528
  name: "(anonymous_39)",
344489
344529
  decl: {
344490
344530
  start: {
344491
- line: 358,
344531
+ line: 361,
344492
344532
  column: 30
344493
344533
  },
344494
344534
  end: {
344495
- line: 358,
344535
+ line: 361,
344496
344536
  column: 31
344497
344537
  }
344498
344538
  },
344499
344539
  loc: {
344500
344540
  start: {
344501
- line: 358,
344541
+ line: 361,
344502
344542
  column: 35
344503
344543
  },
344504
344544
  end: {
344505
- line: 368,
344545
+ line: 371,
344506
344546
  column: 11
344507
344547
  }
344508
344548
  },
344509
- line: 358
344549
+ line: 361
344510
344550
  },
344511
344551
  "40": {
344512
344552
  name: "(anonymous_40)",
344513
344553
  decl: {
344514
344554
  start: {
344515
- line: 372,
344555
+ line: 375,
344516
344556
  column: 25
344517
344557
  },
344518
344558
  end: {
344519
- line: 372,
344559
+ line: 375,
344520
344560
  column: 26
344521
344561
  }
344522
344562
  },
344523
344563
  loc: {
344524
344564
  start: {
344525
- line: 372,
344565
+ line: 375,
344526
344566
  column: 30
344527
344567
  },
344528
344568
  end: {
344529
- line: 382,
344569
+ line: 385,
344530
344570
  column: 9
344531
344571
  }
344532
344572
  },
344533
- line: 372
344573
+ line: 375
344534
344574
  },
344535
344575
  "41": {
344536
344576
  name: "(anonymous_41)",
344537
344577
  decl: {
344538
344578
  start: {
344539
- line: 389,
344579
+ line: 392,
344540
344580
  column: 56
344541
344581
  },
344542
344582
  end: {
344543
- line: 389,
344583
+ line: 392,
344544
344584
  column: 57
344545
344585
  }
344546
344586
  },
344547
344587
  loc: {
344548
344588
  start: {
344549
- line: 389,
344589
+ line: 392,
344550
344590
  column: 64
344551
344591
  },
344552
344592
  end: {
344553
- line: 395,
344593
+ line: 398,
344554
344594
  column: 7
344555
344595
  }
344556
344596
  },
344557
- line: 389
344597
+ line: 392
344558
344598
  },
344559
344599
  "42": {
344560
344600
  name: "(anonymous_42)",
344561
344601
  decl: {
344562
344602
  start: {
344563
- line: 390,
344603
+ line: 393,
344564
344604
  column: 23
344565
344605
  },
344566
344606
  end: {
344567
- line: 390,
344607
+ line: 393,
344568
344608
  column: 24
344569
344609
  }
344570
344610
  },
344571
344611
  loc: {
344572
344612
  start: {
344573
- line: 390,
344613
+ line: 393,
344574
344614
  column: 29
344575
344615
  },
344576
344616
  end: {
344577
- line: 394,
344617
+ line: 397,
344578
344618
  column: 9
344579
344619
  }
344580
344620
  },
344581
- line: 390
344621
+ line: 393
344582
344622
  },
344583
344623
  "43": {
344584
344624
  name: "(anonymous_43)",
344585
344625
  decl: {
344586
344626
  start: {
344587
- line: 403,
344627
+ line: 413,
344588
344628
  column: 4
344589
344629
  },
344590
344630
  end: {
344591
- line: 403,
344631
+ line: 413,
344592
344632
  column: 5
344593
344633
  }
344594
344634
  },
344595
344635
  loc: {
344596
344636
  start: {
344597
- line: 403,
344637
+ line: 413,
344598
344638
  column: 24
344599
344639
  },
344600
344640
  end: {
344601
- line: 408,
344641
+ line: 418,
344602
344642
  column: 5
344603
344643
  }
344604
344644
  },
344605
- line: 403
344645
+ line: 413
344606
344646
  },
344607
344647
  "44": {
344608
344648
  name: "(anonymous_44)",
344609
344649
  decl: {
344610
344650
  start: {
344611
- line: 412,
344651
+ line: 422,
344612
344652
  column: 4
344613
344653
  },
344614
344654
  end: {
344615
- line: 412,
344655
+ line: 422,
344616
344656
  column: 5
344617
344657
  }
344618
344658
  },
344619
344659
  loc: {
344620
344660
  start: {
344621
- line: 412,
344661
+ line: 422,
344622
344662
  column: 34
344623
344663
  },
344624
344664
  end: {
344625
- line: 430,
344665
+ line: 440,
344626
344666
  column: 5
344627
344667
  }
344628
344668
  },
344629
- line: 412
344669
+ line: 422
344630
344670
  },
344631
344671
  "45": {
344632
344672
  name: "(anonymous_45)",
344633
344673
  decl: {
344634
344674
  start: {
344635
- line: 415,
344675
+ line: 425,
344636
344676
  column: 23
344637
344677
  },
344638
344678
  end: {
344639
- line: 415,
344679
+ line: 425,
344640
344680
  column: 24
344641
344681
  }
344642
344682
  },
344643
344683
  loc: {
344644
344684
  start: {
344645
- line: 415,
344685
+ line: 425,
344646
344686
  column: 28
344647
344687
  },
344648
344688
  end: {
344649
- line: 417,
344689
+ line: 427,
344650
344690
  column: 7
344651
344691
  }
344652
344692
  },
344653
- line: 415
344693
+ line: 425
344654
344694
  },
344655
344695
  "46": {
344656
344696
  name: "(anonymous_46)",
344657
344697
  decl: {
344658
344698
  start: {
344659
- line: 422,
344699
+ line: 432,
344660
344700
  column: 43
344661
344701
  },
344662
344702
  end: {
344663
- line: 422,
344703
+ line: 432,
344664
344704
  column: 44
344665
344705
  }
344666
344706
  },
344667
344707
  loc: {
344668
344708
  start: {
344669
- line: 422,
344709
+ line: 432,
344670
344710
  column: 64
344671
344711
  },
344672
344712
  end: {
344673
- line: 427,
344713
+ line: 437,
344674
344714
  column: 7
344675
344715
  }
344676
344716
  },
344677
- line: 422
344717
+ line: 432
344678
344718
  },
344679
344719
  "47": {
344680
344720
  name: "(anonymous_47)",
344681
344721
  decl: {
344682
344722
  start: {
344683
- line: 432,
344723
+ line: 442,
344684
344724
  column: 4
344685
344725
  },
344686
344726
  end: {
344687
- line: 432,
344727
+ line: 442,
344688
344728
  column: 5
344689
344729
  }
344690
344730
  },
344691
344731
  loc: {
344692
344732
  start: {
344693
- line: 432,
344733
+ line: 442,
344694
344734
  column: 25
344695
344735
  },
344696
344736
  end: {
344697
- line: 434,
344737
+ line: 444,
344698
344738
  column: 5
344699
344739
  }
344700
344740
  },
344701
- line: 432
344741
+ line: 442
344702
344742
  },
344703
344743
  "48": {
344704
344744
  name: "(anonymous_48)",
344705
344745
  decl: {
344706
344746
  start: {
344707
- line: 436,
344747
+ line: 446,
344708
344748
  column: 4
344709
344749
  },
344710
344750
  end: {
344711
- line: 436,
344751
+ line: 446,
344712
344752
  column: 5
344713
344753
  }
344714
344754
  },
344715
344755
  loc: {
344716
344756
  start: {
344717
- line: 436,
344757
+ line: 446,
344718
344758
  column: 25
344719
344759
  },
344720
344760
  end: {
344721
- line: 439,
344761
+ line: 449,
344722
344762
  column: 5
344723
344763
  }
344724
344764
  },
344725
- line: 436
344765
+ line: 446
344726
344766
  },
344727
344767
  "49": {
344728
344768
  name: "(anonymous_49)",
344729
344769
  decl: {
344730
344770
  start: {
344731
- line: 441,
344771
+ line: 451,
344732
344772
  column: 4
344733
344773
  },
344734
344774
  end: {
344735
- line: 441,
344775
+ line: 451,
344736
344776
  column: 5
344737
344777
  }
344738
344778
  },
344739
344779
  loc: {
344740
344780
  start: {
344741
- line: 441,
344781
+ line: 451,
344742
344782
  column: 31
344743
344783
  },
344744
344784
  end: {
344745
- line: 459,
344785
+ line: 469,
344746
344786
  column: 5
344747
344787
  }
344748
344788
  },
344749
- line: 441
344789
+ line: 451
344750
344790
  }
344751
344791
  },
344752
344792
  branchMap: {
@@ -345572,695 +345612,695 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
345572
345612
  "24": {
345573
345613
  loc: {
345574
345614
  start: {
345575
- line: 324,
345615
+ line: 325,
345576
345616
  column: 23
345577
345617
  },
345578
345618
  end: {
345579
- line: 324,
345619
+ line: 325,
345580
345620
  column: 64
345581
345621
  }
345582
345622
  },
345583
345623
  type: "binary-expr",
345584
345624
  locations: [{
345585
345625
  start: {
345586
- line: 324,
345626
+ line: 325,
345587
345627
  column: 23
345588
345628
  },
345589
345629
  end: {
345590
- line: 324,
345630
+ line: 325,
345591
345631
  column: 58
345592
345632
  }
345593
345633
  }, {
345594
345634
  start: {
345595
- line: 324,
345635
+ line: 325,
345596
345636
  column: 62
345597
345637
  },
345598
345638
  end: {
345599
- line: 324,
345639
+ line: 325,
345600
345640
  column: 64
345601
345641
  }
345602
345642
  }],
345603
- line: 324
345643
+ line: 325
345604
345644
  },
345605
345645
  "25": {
345606
345646
  loc: {
345607
345647
  start: {
345608
- line: 325,
345648
+ line: 327,
345609
345649
  column: 6
345610
345650
  },
345611
345651
  end: {
345612
- line: 325,
345652
+ line: 327,
345613
345653
  column: 39
345614
345654
  }
345615
345655
  },
345616
345656
  type: "if",
345617
345657
  locations: [{
345618
345658
  start: {
345619
- line: 325,
345659
+ line: 327,
345620
345660
  column: 6
345621
345661
  },
345622
345662
  end: {
345623
- line: 325,
345663
+ line: 327,
345624
345664
  column: 39
345625
345665
  }
345626
345666
  }, {
345627
345667
  start: {
345628
- line: 325,
345668
+ line: 327,
345629
345669
  column: 6
345630
345670
  },
345631
345671
  end: {
345632
- line: 325,
345672
+ line: 327,
345633
345673
  column: 39
345634
345674
  }
345635
345675
  }],
345636
- line: 325
345676
+ line: 327
345637
345677
  },
345638
345678
  "26": {
345639
345679
  loc: {
345640
345680
  start: {
345641
- line: 334,
345681
+ line: 337,
345642
345682
  column: 6
345643
345683
  },
345644
345684
  end: {
345645
- line: 334,
345685
+ line: 337,
345646
345686
  column: 38
345647
345687
  }
345648
345688
  },
345649
345689
  type: "if",
345650
345690
  locations: [{
345651
345691
  start: {
345652
- line: 334,
345692
+ line: 337,
345653
345693
  column: 6
345654
345694
  },
345655
345695
  end: {
345656
- line: 334,
345696
+ line: 337,
345657
345697
  column: 38
345658
345698
  }
345659
345699
  }, {
345660
345700
  start: {
345661
- line: 334,
345701
+ line: 337,
345662
345702
  column: 6
345663
345703
  },
345664
345704
  end: {
345665
- line: 334,
345705
+ line: 337,
345666
345706
  column: 38
345667
345707
  }
345668
345708
  }],
345669
- line: 334
345709
+ line: 337
345670
345710
  },
345671
345711
  "27": {
345672
345712
  loc: {
345673
345713
  start: {
345674
- line: 334,
345714
+ line: 337,
345675
345715
  column: 10
345676
345716
  },
345677
345717
  end: {
345678
- line: 334,
345718
+ line: 337,
345679
345719
  column: 30
345680
345720
  }
345681
345721
  },
345682
345722
  type: "binary-expr",
345683
345723
  locations: [{
345684
345724
  start: {
345685
- line: 334,
345725
+ line: 337,
345686
345726
  column: 10
345687
345727
  },
345688
345728
  end: {
345689
- line: 334,
345729
+ line: 337,
345690
345730
  column: 18
345691
345731
  }
345692
345732
  }, {
345693
345733
  start: {
345694
- line: 334,
345734
+ line: 337,
345695
345735
  column: 22
345696
345736
  },
345697
345737
  end: {
345698
- line: 334,
345738
+ line: 337,
345699
345739
  column: 30
345700
345740
  }
345701
345741
  }],
345702
- line: 334
345742
+ line: 337
345703
345743
  },
345704
345744
  "28": {
345705
345745
  loc: {
345706
345746
  start: {
345707
- line: 340,
345747
+ line: 343,
345708
345748
  column: 22
345709
345749
  },
345710
345750
  end: {
345711
- line: 340,
345751
+ line: 343,
345712
345752
  column: 65
345713
345753
  }
345714
345754
  },
345715
345755
  type: "binary-expr",
345716
345756
  locations: [{
345717
345757
  start: {
345718
- line: 340,
345758
+ line: 343,
345719
345759
  column: 22
345720
345760
  },
345721
345761
  end: {
345722
- line: 340,
345762
+ line: 343,
345723
345763
  column: 52
345724
345764
  }
345725
345765
  }, {
345726
345766
  start: {
345727
- line: 340,
345767
+ line: 343,
345728
345768
  column: 56
345729
345769
  },
345730
345770
  end: {
345731
- line: 340,
345771
+ line: 343,
345732
345772
  column: 65
345733
345773
  }
345734
345774
  }],
345735
- line: 340
345775
+ line: 343
345736
345776
  },
345737
345777
  "29": {
345738
345778
  loc: {
345739
345779
  start: {
345740
- line: 341,
345780
+ line: 344,
345741
345781
  column: 88
345742
345782
  },
345743
345783
  end: {
345744
- line: 341,
345784
+ line: 344,
345745
345785
  column: 121
345746
345786
  }
345747
345787
  },
345748
345788
  type: "cond-expr",
345749
345789
  locations: [{
345750
345790
  start: {
345751
- line: 341,
345791
+ line: 344,
345752
345792
  column: 112
345753
345793
  },
345754
345794
  end: {
345755
- line: 341,
345795
+ line: 344,
345756
345796
  column: 116
345757
345797
  }
345758
345798
  }, {
345759
345799
  start: {
345760
- line: 341,
345800
+ line: 344,
345761
345801
  column: 119
345762
345802
  },
345763
345803
  end: {
345764
- line: 341,
345804
+ line: 344,
345765
345805
  column: 121
345766
345806
  }
345767
345807
  }],
345768
- line: 341
345808
+ line: 344
345769
345809
  },
345770
345810
  "30": {
345771
345811
  loc: {
345772
345812
  start: {
345773
- line: 344,
345813
+ line: 347,
345774
345814
  column: 6
345775
345815
  },
345776
345816
  end: {
345777
- line: 383,
345817
+ line: 386,
345778
345818
  column: 7
345779
345819
  }
345780
345820
  },
345781
345821
  type: "if",
345782
345822
  locations: [{
345783
345823
  start: {
345784
- line: 344,
345824
+ line: 347,
345785
345825
  column: 6
345786
345826
  },
345787
345827
  end: {
345788
- line: 383,
345828
+ line: 386,
345789
345829
  column: 7
345790
345830
  }
345791
345831
  }, {
345792
345832
  start: {
345793
- line: 344,
345833
+ line: 347,
345794
345834
  column: 6
345795
345835
  },
345796
345836
  end: {
345797
- line: 383,
345837
+ line: 386,
345798
345838
  column: 7
345799
345839
  }
345800
345840
  }],
345801
- line: 344
345841
+ line: 347
345802
345842
  },
345803
345843
  "31": {
345804
345844
  loc: {
345805
345845
  start: {
345806
- line: 348,
345846
+ line: 351,
345807
345847
  column: 24
345808
345848
  },
345809
345849
  end: {
345810
- line: 348,
345850
+ line: 351,
345811
345851
  column: 57
345812
345852
  }
345813
345853
  },
345814
345854
  type: "binary-expr",
345815
345855
  locations: [{
345816
345856
  start: {
345817
- line: 348,
345857
+ line: 351,
345818
345858
  column: 24
345819
345859
  },
345820
345860
  end: {
345821
- line: 348,
345861
+ line: 351,
345822
345862
  column: 44
345823
345863
  }
345824
345864
  }, {
345825
345865
  start: {
345826
- line: 348,
345866
+ line: 351,
345827
345867
  column: 48
345828
345868
  },
345829
345869
  end: {
345830
- line: 348,
345870
+ line: 351,
345831
345871
  column: 57
345832
345872
  }
345833
345873
  }],
345834
- line: 348
345874
+ line: 351
345835
345875
  },
345836
345876
  "32": {
345837
345877
  loc: {
345838
345878
  start: {
345839
- line: 349,
345879
+ line: 352,
345840
345880
  column: 10
345841
345881
  },
345842
345882
  end: {
345843
- line: 351,
345883
+ line: 354,
345844
345884
  column: 11
345845
345885
  }
345846
345886
  },
345847
345887
  type: "if",
345848
345888
  locations: [{
345849
345889
  start: {
345850
- line: 349,
345890
+ line: 352,
345851
345891
  column: 10
345852
345892
  },
345853
345893
  end: {
345854
- line: 351,
345894
+ line: 354,
345855
345895
  column: 11
345856
345896
  }
345857
345897
  }, {
345858
345898
  start: {
345859
- line: 349,
345899
+ line: 352,
345860
345900
  column: 10
345861
345901
  },
345862
345902
  end: {
345863
- line: 351,
345903
+ line: 354,
345864
345904
  column: 11
345865
345905
  }
345866
345906
  }],
345867
- line: 349
345907
+ line: 352
345868
345908
  },
345869
345909
  "33": {
345870
345910
  loc: {
345871
345911
  start: {
345872
- line: 364,
345912
+ line: 367,
345873
345913
  column: 46
345874
345914
  },
345875
345915
  end: {
345876
- line: 364,
345916
+ line: 367,
345877
345917
  column: 64
345878
345918
  }
345879
345919
  },
345880
345920
  type: "binary-expr",
345881
345921
  locations: [{
345882
345922
  start: {
345883
- line: 364,
345923
+ line: 367,
345884
345924
  column: 46
345885
345925
  },
345886
345926
  end: {
345887
- line: 364,
345927
+ line: 367,
345888
345928
  column: 55
345889
345929
  }
345890
345930
  }, {
345891
345931
  start: {
345892
- line: 364,
345932
+ line: 367,
345893
345933
  column: 59
345894
345934
  },
345895
345935
  end: {
345896
- line: 364,
345936
+ line: 367,
345897
345937
  column: 64
345898
345938
  }
345899
345939
  }],
345900
- line: 364
345940
+ line: 367
345901
345941
  },
345902
345942
  "34": {
345903
345943
  loc: {
345904
345944
  start: {
345905
- line: 365,
345945
+ line: 368,
345906
345946
  column: 12
345907
345947
  },
345908
345948
  end: {
345909
- line: 365,
345949
+ line: 368,
345910
345950
  column: 84
345911
345951
  }
345912
345952
  },
345913
345953
  type: "if",
345914
345954
  locations: [{
345915
345955
  start: {
345916
- line: 365,
345956
+ line: 368,
345917
345957
  column: 12
345918
345958
  },
345919
345959
  end: {
345920
- line: 365,
345960
+ line: 368,
345921
345961
  column: 84
345922
345962
  }
345923
345963
  }, {
345924
345964
  start: {
345925
- line: 365,
345965
+ line: 368,
345926
345966
  column: 12
345927
345967
  },
345928
345968
  end: {
345929
- line: 365,
345969
+ line: 368,
345930
345970
  column: 84
345931
345971
  }
345932
345972
  }],
345933
- line: 365
345973
+ line: 368
345934
345974
  },
345935
345975
  "35": {
345936
345976
  loc: {
345937
345977
  start: {
345938
- line: 378,
345978
+ line: 381,
345939
345979
  column: 44
345940
345980
  },
345941
345981
  end: {
345942
- line: 378,
345982
+ line: 381,
345943
345983
  column: 62
345944
345984
  }
345945
345985
  },
345946
345986
  type: "binary-expr",
345947
345987
  locations: [{
345948
345988
  start: {
345949
- line: 378,
345989
+ line: 381,
345950
345990
  column: 44
345951
345991
  },
345952
345992
  end: {
345953
- line: 378,
345993
+ line: 381,
345954
345994
  column: 53
345955
345995
  }
345956
345996
  }, {
345957
345997
  start: {
345958
- line: 378,
345998
+ line: 381,
345959
345999
  column: 57
345960
346000
  },
345961
346001
  end: {
345962
- line: 378,
346002
+ line: 381,
345963
346003
  column: 62
345964
346004
  }
345965
346005
  }],
345966
- line: 378
346006
+ line: 381
345967
346007
  },
345968
346008
  "36": {
345969
346009
  loc: {
345970
346010
  start: {
345971
- line: 379,
346011
+ line: 382,
345972
346012
  column: 10
345973
346013
  },
345974
346014
  end: {
345975
- line: 379,
346015
+ line: 382,
345976
346016
  column: 82
345977
346017
  }
345978
346018
  },
345979
346019
  type: "if",
345980
346020
  locations: [{
345981
346021
  start: {
345982
- line: 379,
346022
+ line: 382,
345983
346023
  column: 10
345984
346024
  },
345985
346025
  end: {
345986
- line: 379,
346026
+ line: 382,
345987
346027
  column: 82
345988
346028
  }
345989
346029
  }, {
345990
346030
  start: {
345991
- line: 379,
346031
+ line: 382,
345992
346032
  column: 10
345993
346033
  },
345994
346034
  end: {
345995
- line: 379,
346035
+ line: 382,
345996
346036
  column: 82
345997
346037
  }
345998
346038
  }],
345999
- line: 379
346039
+ line: 382
346000
346040
  },
346001
346041
  "37": {
346002
346042
  loc: {
346003
346043
  start: {
346004
- line: 405,
346044
+ line: 415,
346005
346045
  column: 6
346006
346046
  },
346007
346047
  end: {
346008
- line: 407,
346048
+ line: 417,
346009
346049
  column: 7
346010
346050
  }
346011
346051
  },
346012
346052
  type: "if",
346013
346053
  locations: [{
346014
346054
  start: {
346015
- line: 405,
346055
+ line: 415,
346016
346056
  column: 6
346017
346057
  },
346018
346058
  end: {
346019
- line: 407,
346059
+ line: 417,
346020
346060
  column: 7
346021
346061
  }
346022
346062
  }, {
346023
346063
  start: {
346024
- line: 405,
346064
+ line: 415,
346025
346065
  column: 6
346026
346066
  },
346027
346067
  end: {
346028
- line: 407,
346068
+ line: 417,
346029
346069
  column: 7
346030
346070
  }
346031
346071
  }],
346032
- line: 405
346072
+ line: 415
346033
346073
  },
346034
346074
  "38": {
346035
346075
  loc: {
346036
346076
  start: {
346037
- line: 416,
346077
+ line: 426,
346038
346078
  column: 34
346039
346079
  },
346040
346080
  end: {
346041
- line: 416,
346081
+ line: 426,
346042
346082
  column: 61
346043
346083
  }
346044
346084
  },
346045
346085
  type: "binary-expr",
346046
346086
  locations: [{
346047
346087
  start: {
346048
- line: 416,
346088
+ line: 426,
346049
346089
  column: 34
346050
346090
  },
346051
346091
  end: {
346052
- line: 416,
346092
+ line: 426,
346053
346093
  column: 56
346054
346094
  }
346055
346095
  }, {
346056
346096
  start: {
346057
- line: 416,
346097
+ line: 426,
346058
346098
  column: 60
346059
346099
  },
346060
346100
  end: {
346061
- line: 416,
346101
+ line: 426,
346062
346102
  column: 61
346063
346103
  }
346064
346104
  }],
346065
- line: 416
346105
+ line: 426
346066
346106
  },
346067
346107
  "39": {
346068
346108
  loc: {
346069
346109
  start: {
346070
- line: 423,
346110
+ line: 433,
346071
346111
  column: 8
346072
346112
  },
346073
346113
  end: {
346074
- line: 426,
346114
+ line: 436,
346075
346115
  column: 9
346076
346116
  }
346077
346117
  },
346078
346118
  type: "if",
346079
346119
  locations: [{
346080
346120
  start: {
346081
- line: 423,
346121
+ line: 433,
346082
346122
  column: 8
346083
346123
  },
346084
346124
  end: {
346085
- line: 426,
346125
+ line: 436,
346086
346126
  column: 9
346087
346127
  }
346088
346128
  }, {
346089
346129
  start: {
346090
- line: 423,
346130
+ line: 433,
346091
346131
  column: 8
346092
346132
  },
346093
346133
  end: {
346094
- line: 426,
346134
+ line: 436,
346095
346135
  column: 9
346096
346136
  }
346097
346137
  }],
346098
- line: 423
346138
+ line: 433
346099
346139
  },
346100
346140
  "40": {
346101
346141
  loc: {
346102
346142
  start: {
346103
- line: 445,
346143
+ line: 455,
346104
346144
  column: 6
346105
346145
  },
346106
346146
  end: {
346107
- line: 445,
346147
+ line: 455,
346108
346148
  column: 59
346109
346149
  }
346110
346150
  },
346111
346151
  type: "if",
346112
346152
  locations: [{
346113
346153
  start: {
346114
- line: 445,
346154
+ line: 455,
346115
346155
  column: 6
346116
346156
  },
346117
346157
  end: {
346118
- line: 445,
346158
+ line: 455,
346119
346159
  column: 59
346120
346160
  }
346121
346161
  }, {
346122
346162
  start: {
346123
- line: 445,
346163
+ line: 455,
346124
346164
  column: 6
346125
346165
  },
346126
346166
  end: {
346127
- line: 445,
346167
+ line: 455,
346128
346168
  column: 59
346129
346169
  }
346130
346170
  }],
346131
- line: 445
346171
+ line: 455
346132
346172
  },
346133
346173
  "41": {
346134
346174
  loc: {
346135
346175
  start: {
346136
- line: 445,
346176
+ line: 455,
346137
346177
  column: 10
346138
346178
  },
346139
346179
  end: {
346140
- line: 445,
346180
+ line: 455,
346141
346181
  column: 51
346142
346182
  }
346143
346183
  },
346144
346184
  type: "binary-expr",
346145
346185
  locations: [{
346146
346186
  start: {
346147
- line: 445,
346187
+ line: 455,
346148
346188
  column: 10
346149
346189
  },
346150
346190
  end: {
346151
- line: 445,
346191
+ line: 455,
346152
346192
  column: 17
346153
346193
  }
346154
346194
  }, {
346155
346195
  start: {
346156
- line: 445,
346196
+ line: 455,
346157
346197
  column: 21
346158
346198
  },
346159
346199
  end: {
346160
- line: 445,
346200
+ line: 455,
346161
346201
  column: 51
346162
346202
  }
346163
346203
  }],
346164
- line: 445
346204
+ line: 455
346165
346205
  },
346166
346206
  "42": {
346167
346207
  loc: {
346168
346208
  start: {
346169
- line: 448,
346209
+ line: 458,
346170
346210
  column: 6
346171
346211
  },
346172
346212
  end: {
346173
- line: 448,
346213
+ line: 458,
346174
346214
  column: 67
346175
346215
  }
346176
346216
  },
346177
346217
  type: "if",
346178
346218
  locations: [{
346179
346219
  start: {
346180
- line: 448,
346220
+ line: 458,
346181
346221
  column: 6
346182
346222
  },
346183
346223
  end: {
346184
- line: 448,
346224
+ line: 458,
346185
346225
  column: 67
346186
346226
  }
346187
346227
  }, {
346188
346228
  start: {
346189
- line: 448,
346229
+ line: 458,
346190
346230
  column: 6
346191
346231
  },
346192
346232
  end: {
346193
- line: 448,
346233
+ line: 458,
346194
346234
  column: 67
346195
346235
  }
346196
346236
  }],
346197
- line: 448
346237
+ line: 458
346198
346238
  },
346199
346239
  "43": {
346200
346240
  loc: {
346201
346241
  start: {
346202
- line: 456,
346242
+ line: 466,
346203
346243
  column: 6
346204
346244
  },
346205
346245
  end: {
346206
- line: 458,
346246
+ line: 468,
346207
346247
  column: 7
346208
346248
  }
346209
346249
  },
346210
346250
  type: "if",
346211
346251
  locations: [{
346212
346252
  start: {
346213
- line: 456,
346253
+ line: 466,
346214
346254
  column: 6
346215
346255
  },
346216
346256
  end: {
346217
- line: 458,
346257
+ line: 468,
346218
346258
  column: 7
346219
346259
  }
346220
346260
  }, {
346221
346261
  start: {
346222
- line: 456,
346262
+ line: 466,
346223
346263
  column: 6
346224
346264
  },
346225
346265
  end: {
346226
- line: 458,
346266
+ line: 468,
346227
346267
  column: 7
346228
346268
  }
346229
346269
  }],
346230
- line: 456
346270
+ line: 466
346231
346271
  },
346232
346272
  "44": {
346233
346273
  loc: {
346234
346274
  start: {
346235
- line: 456,
346275
+ line: 466,
346236
346276
  column: 10
346237
346277
  },
346238
346278
  end: {
346239
- line: 456,
346279
+ line: 466,
346240
346280
  column: 67
346241
346281
  }
346242
346282
  },
346243
346283
  type: "binary-expr",
346244
346284
  locations: [{
346245
346285
  start: {
346246
- line: 456,
346286
+ line: 466,
346247
346287
  column: 10
346248
346288
  },
346249
346289
  end: {
346250
- line: 456,
346290
+ line: 466,
346251
346291
  column: 25
346252
346292
  }
346253
346293
  }, {
346254
346294
  start: {
346255
- line: 456,
346295
+ line: 466,
346256
346296
  column: 29
346257
346297
  },
346258
346298
  end: {
346259
- line: 456,
346299
+ line: 466,
346260
346300
  column: 67
346261
346301
  }
346262
346302
  }],
346263
- line: 456
346303
+ line: 466
346264
346304
  }
346265
346305
  },
346266
346306
  s: {
@@ -346424,7 +346464,11 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
346424
346464
  "157": 0,
346425
346465
  "158": 0,
346426
346466
  "159": 0,
346427
- "160": 0
346467
+ "160": 0,
346468
+ "161": 0,
346469
+ "162": 0,
346470
+ "163": 0,
346471
+ "164": 0
346428
346472
  },
346429
346473
  f: {
346430
346474
  "0": 0,
@@ -346529,13 +346573,13 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
346529
346573
  version: 3,
346530
346574
  sources: ["ProjectMatrix.vue"],
346531
346575
  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",
346576
+ 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;AACA;AACA;AACA;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
346577
  file: "ProjectMatrix.vue",
346534
346578
  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"]
346579
+ 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 console.log('tooltip positioned at:', {\n left: tooltip.style.left,\n top: tooltip.style.top,\n rectTop: rect.top,\n rectLeft: rect.left,\n display: tooltip.style.display\n })\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
346580
  },
346537
346581
  _coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
346538
- hash: "fd7147f03f01b31d8c70b081a2f870d9b564dbff"
346582
+ hash: "a0c0d0bf4b1dd7c7c1e69ed5b9fb98baf888abe6"
346539
346583
  };
346540
346584
  var coverage = global[gcv] || (global[gcv] = {});
346541
346585
  if (coverage[path] && coverage[path].hash === hash) {
@@ -347046,167 +347090,184 @@ function ProjectMatrixvue_type_script_lang_js_asyncToGenerator(fn) { return func
347046
347090
  _analyses$,
347047
347091
  _this4 = this;
347048
347092
  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]++;
347093
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[82]++;
347094
+ console.log('handleCellClick called:', {
347095
+ row: row,
347096
+ col: col
347097
+ });
347098
+ 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]++, []));
347099
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[84]++;
347100
+ console.log('analyses:', analyses.length);
347101
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[85]++;
347051
347102
  if (analyses.length === 0) {
347052
347103
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[25][0]++;
347053
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[84]++;
347104
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[86]++;
347054
347105
  return;
347055
347106
  } else {
347056
347107
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[25][1]++;
347057
347108
  }
347058
347109
 
347059
347110
  // Set selected cell
347060
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[85]++;
347111
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[87]++;
347061
347112
  this.selectedCell = {
347062
347113
  row: row,
347063
347114
  col: col
347064
347115
  };
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]++;
347116
+ var rect = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[88]++, event.currentTarget.getBoundingClientRect());
347117
+ var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[89]++, this.$refs.tooltip);
347118
+ var content = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[90]++, this.$refs.tooltipContent);
347119
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[91]++;
347120
+ console.log('tooltip ref:', !!tooltip, 'content ref:', !!content);
347121
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[92]++;
347069
347122
  if ((ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[27][0]++, !tooltip) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[27][1]++, !content)) {
347070
347123
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[26][0]++;
347071
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[90]++;
347124
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[93]++;
347072
347125
  return;
347073
347126
  } else {
347074
347127
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[26][1]++;
347075
347128
  }
347076
347129
 
347077
347130
  // Store analyses for later use
347078
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[91]++;
347131
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[94]++;
347079
347132
  this._currentAnalyses = analyses;
347080
347133
 
347081
347134
  // 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]++;
347135
+ 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'));
347136
+ 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>"));
347137
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[97]++;
347085
347138
  html += '<div class="tooltip-list">';
347086
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[95]++;
347139
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[98]++;
347087
347140
  if (this.viewMode === 'individual') {
347088
347141
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[30][0]++;
347089
347142
  // 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]++;
347143
+ var byExperiment = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[99]++, {});
347144
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[100]++;
347092
347145
  analyses.forEach(function (a) {
347093
347146
  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]++;
347147
+ 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'));
347148
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[102]++;
347096
347149
  if (!byExperiment[expId]) {
347097
347150
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[32][0]++;
347098
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[100]++;
347151
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[103]++;
347099
347152
  byExperiment[expId] = [];
347100
347153
  } else {
347101
347154
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[32][1]++;
347102
347155
  }
347103
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[101]++;
347156
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[104]++;
347104
347157
  byExperiment[expId].push(a);
347105
347158
  });
347106
347159
 
347107
347160
  // Render grouped by experiment
347108
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[102]++;
347161
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[105]++;
347109
347162
  Object.entries(byExperiment).forEach(function (_ref3) {
347110
347163
  var _ref4 = ProjectMatrixvue_type_script_lang_js_slicedToArray(_ref3, 2),
347111
347164
  expId = _ref4[0],
347112
347165
  expAnalyses = _ref4[1];
347113
347166
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[38]++;
347114
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[103]++;
347167
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[106]++;
347115
347168
  html += "<div class=\"experiment-group-header\">".concat(expId, "</div>");
347116
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[104]++;
347169
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[107]++;
347117
347170
  expAnalyses.forEach(function (a) {
347118
347171
  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]++;
347172
+ var color = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[108]++, _this4.getStatusColor(a.status));
347173
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[109]++;
347121
347174
  html += "<div class=\"tooltip-item\" data-pk=\"".concat(a.pk, "\">");
347122
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[107]++;
347175
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[110]++;
347123
347176
  html += "<span class=\"status-dot\" style=\"background:".concat(color, "\"></span>");
347124
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[108]++;
347177
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[111]++;
347125
347178
  html += "<span class=\"analysis-pk\">".concat(a.pk, "</span>");
347126
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[109]++;
347179
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[112]++;
347127
347180
  html += "<span class=\"sep\">|</span>";
347128
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[110]++;
347181
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[113]++;
347129
347182
  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]++;
347183
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[114]++;
347131
347184
  if (a.assembly) {
347132
347185
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[34][0]++;
347133
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[112]++;
347186
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[115]++;
347134
347187
  html += "<span class=\"assembly\"> \xB7 ".concat(a.assembly, "</span>");
347135
347188
  } else {
347136
347189
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[34][1]++;
347137
347190
  }
347138
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[113]++;
347191
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[116]++;
347139
347192
  html += "<span class=\"status-chip\" style=\"background:".concat(color, "\">").concat(a.status, "</span>");
347140
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[114]++;
347193
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[117]++;
347141
347194
  html += '</div>';
347142
347195
  });
347143
347196
  });
347144
347197
  } else {
347145
347198
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[30][1]++;
347146
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[115]++;
347199
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[118]++;
347147
347200
  // Flat list for experiment view
347148
347201
  analyses.forEach(function (a) {
347149
347202
  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]++;
347203
+ var color = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[119]++, _this4.getStatusColor(a.status));
347204
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[120]++;
347152
347205
  html += "<div class=\"tooltip-item\" data-pk=\"".concat(a.pk, "\">");
347153
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[118]++;
347206
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[121]++;
347154
347207
  html += "<span class=\"status-dot\" style=\"background:".concat(color, "\"></span>");
347155
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[119]++;
347208
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[122]++;
347156
347209
  html += "<span class=\"analysis-pk\">".concat(a.pk, "</span>");
347157
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[120]++;
347210
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[123]++;
347158
347211
  html += "<span class=\"sep\">|</span>";
347159
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[121]++;
347212
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[124]++;
347160
347213
  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]++;
347214
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[125]++;
347162
347215
  if (a.assembly) {
347163
347216
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[36][0]++;
347164
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[123]++;
347217
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[126]++;
347165
347218
  html += "<span class=\"assembly\"> \xB7 ".concat(a.assembly, "</span>");
347166
347219
  } else {
347167
347220
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[36][1]++;
347168
347221
  }
347169
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[124]++;
347222
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[127]++;
347170
347223
  html += "<span class=\"status-chip\" style=\"background:".concat(color, "\">").concat(a.status, "</span>");
347171
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[125]++;
347224
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[128]++;
347172
347225
  html += '</div>';
347173
347226
  });
347174
347227
  }
347175
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[126]++;
347228
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[129]++;
347176
347229
  html += '</div>';
347177
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[127]++;
347230
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[130]++;
347178
347231
  content.innerHTML = html;
347179
347232
 
347180
347233
  // Add click handlers to items
347181
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[128]++;
347234
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[131]++;
347182
347235
  content.querySelectorAll('.tooltip-item').forEach(function (item) {
347183
347236
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[41]++;
347184
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[129]++;
347237
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[132]++;
347185
347238
  item.onclick = function () {
347186
347239
  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]++;
347240
+ var pk = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[133]++, parseInt(item.dataset.pk));
347241
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[134]++;
347189
347242
  _this4.hideTooltipNative();
347190
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[132]++;
347243
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[135]++;
347191
347244
  _this4.handleOpenAnalysis(pk);
347192
347245
  };
347193
347246
  });
347194
347247
 
347195
347248
  // Position and show tooltip
347196
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[133]++;
347249
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[136]++;
347197
347250
  tooltip.style.display = 'block';
347198
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[134]++;
347251
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[137]++;
347199
347252
  tooltip.style.left = "".concat(rect.left + rect.width / 2, "px");
347200
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[135]++;
347253
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[138]++;
347201
347254
  tooltip.style.top = "".concat(rect.top - 8, "px");
347255
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[139]++;
347256
+ console.log('tooltip positioned at:', {
347257
+ left: tooltip.style.left,
347258
+ top: tooltip.style.top,
347259
+ rectTop: rect.top,
347260
+ rectLeft: rect.left,
347261
+ display: tooltip.style.display
347262
+ });
347202
347263
  },
347203
347264
  hideTooltipNative: function hideTooltipNative() {
347204
347265
  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]++;
347266
+ var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[140]++, this.$refs.tooltip);
347267
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[141]++;
347207
347268
  if (tooltip) {
347208
347269
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[37][0]++;
347209
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[138]++;
347270
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[142]++;
347210
347271
  tooltip.style.display = 'none';
347211
347272
  } else {
347212
347273
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[37][1]++;
@@ -347216,84 +347277,84 @@ function ProjectMatrixvue_type_script_lang_js_asyncToGenerator(fn) { return func
347216
347277
  getPredominantColor: function getPredominantColor(analyses) {
347217
347278
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[44]++;
347218
347279
  // 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]++;
347280
+ var statusCounts = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[143]++, {});
347281
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[144]++;
347221
347282
  analyses.forEach(function (a) {
347222
347283
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[45]++;
347223
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[141]++;
347284
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[145]++;
347224
347285
  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
347286
  });
347226
347287
 
347227
347288
  // 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]++;
347289
+ var maxCount = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[146]++, 0);
347290
+ var predominantStatus = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[147]++, 'SUCCEEDED'); // default
347291
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[148]++;
347231
347292
  Object.entries(statusCounts).forEach(function (_ref5) {
347232
347293
  var _ref6 = ProjectMatrixvue_type_script_lang_js_slicedToArray(_ref5, 2),
347233
347294
  status = _ref6[0],
347234
347295
  count = _ref6[1];
347235
347296
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[46]++;
347236
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[145]++;
347297
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[149]++;
347237
347298
  if (count > maxCount) {
347238
347299
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[39][0]++;
347239
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[146]++;
347300
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[150]++;
347240
347301
  maxCount = count;
347241
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[147]++;
347302
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[151]++;
347242
347303
  predominantStatus = status;
347243
347304
  } else {
347244
347305
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[39][1]++;
347245
347306
  }
347246
347307
  });
347247
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[148]++;
347308
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[152]++;
347248
347309
  return getStatusColor(predominantStatus);
347249
347310
  },
347250
347311
  handleTooltipEnter: function handleTooltipEnter() {
347251
347312
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[47]++;
347252
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[149]++;
347313
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[153]++;
347253
347314
  this.isOverTooltip = true;
347254
347315
  },
347255
347316
  handleTooltipLeave: function handleTooltipLeave() {
347256
347317
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[48]++;
347257
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[150]++;
347318
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[154]++;
347258
347319
  this.isOverTooltip = false;
347259
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[151]++;
347320
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[155]++;
347260
347321
  this.hideTooltipNative();
347261
347322
  },
347262
347323
  handleDocumentClick: function handleDocumentClick(event) {
347263
347324
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[49]++;
347264
- var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[152]++, this.$refs.tooltip);
347325
+ var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[156]++, this.$refs.tooltip);
347265
347326
 
347266
347327
  // Check if click was inside tooltip
347267
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[153]++;
347328
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[157]++;
347268
347329
  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
347330
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[40][0]++;
347270
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[154]++;
347331
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[158]++;
347271
347332
  return;
347272
347333
  } else {
347273
347334
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[40][1]++;
347274
347335
  }
347275
347336
 
347276
347337
  // 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]++;
347338
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[159]++;
347278
347339
  if (event.target.closest('.matrix-cell.has-analyses')) {
347279
347340
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[42][0]++;
347280
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[156]++;
347341
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[160]++;
347281
347342
  return;
347282
347343
  } else {
347283
347344
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[42][1]++;
347284
347345
  }
347285
347346
 
347286
347347
  // Hide tooltip if visible
347287
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[157]++;
347348
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[161]++;
347288
347349
  this.hideTooltipNative();
347289
347350
 
347290
347351
  // Only clear selection if clicking inside the matrix scroll container
347291
347352
  // (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]++;
347353
+ var scrollContainer = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[162]++, this.$refs.scrollContainer);
347354
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[163]++;
347294
347355
  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
347356
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[43][0]++;
347296
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[160]++;
347357
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[164]++;
347297
347358
  this.selectedCell = null;
347298
347359
  } else {
347299
347360
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[43][1]++;
@@ -347303,9 +347364,9 @@ function ProjectMatrixvue_type_script_lang_js_asyncToGenerator(fn) { return func
347303
347364
  });
347304
347365
  ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=script&lang=js&
347305
347366
  /* 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&
347367
+ // 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=28c10d94&prod&scoped=true&lang=css&
347368
+ var ProjectMatrixvue_type_style_index_0_id_28c10d94_prod_scoped_true_lang_css_ = __webpack_require__(82588);
347369
+ ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=style&index=0&id=28c10d94&prod&scoped=true&lang=css&
347309
347370
 
347310
347371
  ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue
347311
347372
 
@@ -347318,11 +347379,11 @@ var ProjectMatrixvue_type_style_index_0_id_68d9db25_prod_scoped_true_lang_css_ =
347318
347379
 
347319
347380
  var ProjectMatrix_component = normalizeComponent(
347320
347381
  projects_ProjectMatrixvue_type_script_lang_js_,
347321
- ProjectMatrixvue_type_template_id_68d9db25_scoped_true_render,
347322
- ProjectMatrixvue_type_template_id_68d9db25_scoped_true_staticRenderFns,
347382
+ ProjectMatrixvue_type_template_id_28c10d94_scoped_true_render,
347383
+ ProjectMatrixvue_type_template_id_28c10d94_scoped_true_staticRenderFns,
347323
347384
  false,
347324
347385
  null,
347325
- "68d9db25",
347386
+ "28c10d94",
347326
347387
  null
347327
347388
 
347328
347389
  )