@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.
@@ -14679,7 +14679,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, ".matrix-legend[data-v-4c88fa7c]{paddin
14679
14679
 
14680
14680
  /***/ }),
14681
14681
 
14682
- /***/ 78732:
14682
+ /***/ 31571:
14683
14683
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
14684
14684
 
14685
14685
  "use strict";
@@ -14693,7 +14693,7 @@ __webpack_require__.r(__webpack_exports__);
14693
14693
 
14694
14694
  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()));
14695
14695
  // Module
14696
- ___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}", ""]);
14696
+ ___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}", ""]);
14697
14697
  // Exports
14698
14698
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
14699
14699
 
@@ -97316,19 +97316,19 @@ var update = add("689c5232", content, true, {"sourceMap":false,"shadowMode":fals
97316
97316
 
97317
97317
  /***/ }),
97318
97318
 
97319
- /***/ 77611:
97319
+ /***/ 77240:
97320
97320
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
97321
97321
 
97322
97322
  // style-loader: Adds some css to the DOM by adding a <style> tag
97323
97323
 
97324
97324
  // load the styles
97325
- var content = __webpack_require__(78732);
97325
+ var content = __webpack_require__(31571);
97326
97326
  if(content.__esModule) content = content.default;
97327
97327
  if(typeof content === 'string') content = [[module.id, content, '']];
97328
97328
  if(content.locals) module.exports = content.locals;
97329
97329
  // add the styles to the DOM
97330
97330
  var add = (__webpack_require__(54402)/* ["default"] */ .Z)
97331
- var update = add("b7107812", content, true, {"sourceMap":false,"shadowMode":false});
97331
+ var update = add("909263a8", content, true, {"sourceMap":false,"shadowMode":false});
97332
97332
 
97333
97333
  /***/ }),
97334
97334
 
@@ -329929,10 +329929,10 @@ var ProjectMatrixModalvue_type_template_id_6865373b_scoped_true_staticRenderFns
329929
329929
 
329930
329930
  ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrixModal.vue?vue&type=template&id=6865373b&scoped=true&
329931
329931
 
329932
- ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.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&
329932
+ ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.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&
329933
329933
  var cov_geimehe8j = function () {
329934
329934
  var path = "/Users/havasove/Desktop/repos/isabl_matrix/isabl_web/src/components/projects/ProjectMatrix.vue";
329935
- var hash = "6d5e6f72d2678492dbab470e36f9338523984f43";
329935
+ var hash = "a3c9c45073d167ae3a2510ad116feca13f8b05f9";
329936
329936
  var global = new Function("return this")();
329937
329937
  var gcv = "__coverage__";
329938
329938
  var coverageData = {
@@ -329975,7 +329975,7 @@ var cov_geimehe8j = function () {
329975
329975
  },
329976
329976
  end: {
329977
329977
  line: 5,
329978
- column: 1128
329978
+ column: 1131
329979
329979
  }
329980
329980
  },
329981
329981
  "4": {
@@ -330296,7 +330296,7 @@ var cov_geimehe8j = function () {
330296
330296
  },
330297
330297
  end: {
330298
330298
  line: 5,
330299
- column: 1124
330299
+ column: 1127
330300
330300
  }
330301
330301
  },
330302
330302
  type: "cond-expr",
@@ -330316,7 +330316,7 @@ var cov_geimehe8j = function () {
330316
330316
  },
330317
330317
  end: {
330318
330318
  line: 5,
330319
- column: 1124
330319
+ column: 1127
330320
330320
  }
330321
330321
  }],
330322
330322
  line: 1
@@ -330329,7 +330329,7 @@ var cov_geimehe8j = function () {
330329
330329
  },
330330
330330
  end: {
330331
330331
  line: 5,
330332
- column: 1124
330332
+ column: 1127
330333
330333
  }
330334
330334
  },
330335
330335
  type: "cond-expr",
@@ -330349,7 +330349,7 @@ var cov_geimehe8j = function () {
330349
330349
  },
330350
330350
  end: {
330351
330351
  line: 5,
330352
- column: 1124
330352
+ column: 1127
330353
330353
  }
330354
330354
  }],
330355
330355
  line: 1
@@ -330362,7 +330362,7 @@ var cov_geimehe8j = function () {
330362
330362
  },
330363
330363
  end: {
330364
330364
  line: 5,
330365
- column: 1124
330365
+ column: 1127
330366
330366
  }
330367
330367
  },
330368
330368
  type: "cond-expr",
@@ -330382,7 +330382,7 @@ var cov_geimehe8j = function () {
330382
330382
  },
330383
330383
  end: {
330384
330384
  line: 5,
330385
- column: 1124
330385
+ column: 1127
330386
330386
  }
330387
330387
  }],
330388
330388
  line: 1
@@ -330735,7 +330735,7 @@ var cov_geimehe8j = function () {
330735
330735
  "11": [0, 0]
330736
330736
  },
330737
330737
  _coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
330738
- hash: "6d5e6f72d2678492dbab470e36f9338523984f43"
330738
+ hash: "a3c9c45073d167ae3a2510ad116feca13f8b05f9"
330739
330739
  };
330740
330740
  var coverage = global[gcv] || (global[gcv] = {});
330741
330741
  if (coverage[path] && coverage[path].hash === hash) {
@@ -330744,7 +330744,7 @@ var cov_geimehe8j = function () {
330744
330744
  return coverage[path] = coverageData;
330745
330745
  }();
330746
330746
  cov_geimehe8j.s[0]++;
330747
- var ProjectMatrixvue_type_template_id_68d9db25_scoped_true_render = function render() {
330747
+ var ProjectMatrixvue_type_template_id_28c10d94_scoped_true_render = function render() {
330748
330748
  cov_geimehe8j.f[0]++;
330749
330749
  var _vm = (cov_geimehe8j.s[1]++, this),
330750
330750
  _c = (cov_geimehe8j.s[2]++, _vm._self._c);
@@ -330924,8 +330924,8 @@ var ProjectMatrixvue_type_template_id_68d9db25_scoped_true_render = function ren
330924
330924
  }), _c('div', {
330925
330925
  ref: "tooltip",
330926
330926
  staticClass: "native-tooltip",
330927
- style: {
330928
- display: 'none'
330927
+ staticStyle: {
330928
+ "display": "none"
330929
330929
  },
330930
330930
  on: {
330931
330931
  "mouseenter": _vm.handleTooltipEnter,
@@ -330936,9 +330936,9 @@ var ProjectMatrixvue_type_template_id_68d9db25_scoped_true_render = function ren
330936
330936
  staticClass: "tooltip-content"
330937
330937
  })])])))], 2);
330938
330938
  };
330939
- var ProjectMatrixvue_type_template_id_68d9db25_scoped_true_staticRenderFns = (cov_geimehe8j.s[12]++, []);
330939
+ var ProjectMatrixvue_type_template_id_28c10d94_scoped_true_staticRenderFns = (cov_geimehe8j.s[12]++, []);
330940
330940
 
330941
- ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=template&id=68d9db25&scoped=true&
330941
+ ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=template&id=28c10d94&scoped=true&
330942
330942
 
330943
330943
  ;// CONCATENATED MODULE: ./src/utils/matrixHelpers.js
330944
330944
  var cov_17wz1apxpu = function () {
@@ -341920,7 +341920,7 @@ var MatrixLegend_component = normalizeComponent(
341920
341920
  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); }
341921
341921
  var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
341922
341922
  var path = "/Users/havasove/Desktop/repos/isabl_matrix/isabl_web/src/components/projects/ProjectMatrix.vue";
341923
- var hash = "fd7147f03f01b31d8c70b081a2f870d9b564dbff";
341923
+ var hash = "a0c0d0bf4b1dd7c7c1e69ed5b9fb98baf888abe6";
341924
341924
  var global = new Function("return this")();
341925
341925
  var gcv = "__coverage__";
341926
341926
  var coverageData = {
@@ -342749,94 +342749,104 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
342749
342749
  "82": {
342750
342750
  start: {
342751
342751
  line: 324,
342752
- column: 23
342752
+ column: 6
342753
342753
  },
342754
342754
  end: {
342755
342755
  line: 324,
342756
- column: 64
342756
+ column: 58
342757
342757
  }
342758
342758
  },
342759
342759
  "83": {
342760
342760
  start: {
342761
342761
  line: 325,
342762
- column: 6
342762
+ column: 23
342763
342763
  },
342764
342764
  end: {
342765
342765
  line: 325,
342766
- column: 39
342766
+ column: 64
342767
342767
  }
342768
342768
  },
342769
342769
  "84": {
342770
342770
  start: {
342771
- line: 325,
342772
- column: 33
342771
+ line: 326,
342772
+ column: 6
342773
342773
  },
342774
342774
  end: {
342775
- line: 325,
342776
- column: 39
342775
+ line: 326,
342776
+ column: 47
342777
342777
  }
342778
342778
  },
342779
342779
  "85": {
342780
342780
  start: {
342781
- line: 328,
342781
+ line: 327,
342782
342782
  column: 6
342783
342783
  },
342784
342784
  end: {
342785
- line: 328,
342786
- column: 38
342785
+ line: 327,
342786
+ column: 39
342787
342787
  }
342788
342788
  },
342789
342789
  "86": {
342790
342790
  start: {
342791
- line: 330,
342792
- column: 19
342791
+ line: 327,
342792
+ column: 33
342793
342793
  },
342794
342794
  end: {
342795
- line: 330,
342796
- column: 62
342795
+ line: 327,
342796
+ column: 39
342797
342797
  }
342798
342798
  },
342799
342799
  "87": {
342800
342800
  start: {
342801
- line: 331,
342802
- column: 22
342801
+ line: 330,
342802
+ column: 6
342803
342803
  },
342804
342804
  end: {
342805
- line: 331,
342806
- column: 40
342805
+ line: 330,
342806
+ column: 38
342807
342807
  }
342808
342808
  },
342809
342809
  "88": {
342810
342810
  start: {
342811
342811
  line: 332,
342812
- column: 22
342812
+ column: 19
342813
342813
  },
342814
342814
  end: {
342815
342815
  line: 332,
342816
- column: 47
342816
+ column: 62
342817
342817
  }
342818
342818
  },
342819
342819
  "89": {
342820
342820
  start: {
342821
- line: 334,
342822
- column: 6
342821
+ line: 333,
342822
+ column: 22
342823
342823
  },
342824
342824
  end: {
342825
- line: 334,
342826
- column: 38
342825
+ line: 333,
342826
+ column: 40
342827
342827
  }
342828
342828
  },
342829
342829
  "90": {
342830
342830
  start: {
342831
342831
  line: 334,
342832
- column: 32
342832
+ column: 22
342833
342833
  },
342834
342834
  end: {
342835
342835
  line: 334,
342836
- column: 38
342836
+ column: 47
342837
342837
  }
342838
342838
  },
342839
342839
  "91": {
342840
+ start: {
342841
+ line: 336,
342842
+ column: 6
342843
+ },
342844
+ end: {
342845
+ line: 336,
342846
+ column: 71
342847
+ }
342848
+ },
342849
+ "92": {
342840
342850
  start: {
342841
342851
  line: 337,
342842
342852
  column: 6
@@ -342846,693 +342856,723 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
342846
342856
  column: 38
342847
342857
  }
342848
342858
  },
342849
- "92": {
342859
+ "93": {
342860
+ start: {
342861
+ line: 337,
342862
+ column: 32
342863
+ },
342864
+ end: {
342865
+ line: 337,
342866
+ column: 38
342867
+ }
342868
+ },
342869
+ "94": {
342850
342870
  start: {
342851
342871
  line: 340,
342852
- column: 22
342872
+ column: 6
342853
342873
  },
342854
342874
  end: {
342855
342875
  line: 340,
342876
+ column: 38
342877
+ }
342878
+ },
342879
+ "95": {
342880
+ start: {
342881
+ line: 343,
342882
+ column: 22
342883
+ },
342884
+ end: {
342885
+ line: 343,
342856
342886
  column: 65
342857
342887
  }
342858
342888
  },
342859
- "93": {
342889
+ "96": {
342860
342890
  start: {
342861
- line: 341,
342891
+ line: 344,
342862
342892
  column: 17
342863
342893
  },
342864
342894
  end: {
342865
- line: 341,
342895
+ line: 344,
342866
342896
  column: 129
342867
342897
  }
342868
342898
  },
342869
- "94": {
342899
+ "97": {
342870
342900
  start: {
342871
- line: 342,
342901
+ line: 345,
342872
342902
  column: 6
342873
342903
  },
342874
342904
  end: {
342875
- line: 342,
342905
+ line: 345,
342876
342906
  column: 42
342877
342907
  }
342878
342908
  },
342879
- "95": {
342909
+ "98": {
342880
342910
  start: {
342881
- line: 344,
342911
+ line: 347,
342882
342912
  column: 6
342883
342913
  },
342884
342914
  end: {
342885
- line: 383,
342915
+ line: 386,
342886
342916
  column: 7
342887
342917
  }
342888
342918
  },
342889
- "96": {
342919
+ "99": {
342890
342920
  start: {
342891
- line: 346,
342921
+ line: 349,
342892
342922
  column: 29
342893
342923
  },
342894
342924
  end: {
342895
- line: 346,
342925
+ line: 349,
342896
342926
  column: 31
342897
342927
  }
342898
342928
  },
342899
- "97": {
342929
+ "100": {
342900
342930
  start: {
342901
- line: 347,
342931
+ line: 350,
342902
342932
  column: 8
342903
342933
  },
342904
342934
  end: {
342905
- line: 353,
342935
+ line: 356,
342906
342936
  column: 10
342907
342937
  }
342908
342938
  },
342909
- "98": {
342939
+ "101": {
342910
342940
  start: {
342911
- line: 348,
342941
+ line: 351,
342912
342942
  column: 24
342913
342943
  },
342914
342944
  end: {
342915
- line: 348,
342945
+ line: 351,
342916
342946
  column: 57
342917
342947
  }
342918
342948
  },
342919
- "99": {
342949
+ "102": {
342920
342950
  start: {
342921
- line: 349,
342951
+ line: 352,
342922
342952
  column: 10
342923
342953
  },
342924
342954
  end: {
342925
- line: 351,
342955
+ line: 354,
342926
342956
  column: 11
342927
342957
  }
342928
342958
  },
342929
- "100": {
342959
+ "103": {
342930
342960
  start: {
342931
- line: 350,
342961
+ line: 353,
342932
342962
  column: 12
342933
342963
  },
342934
342964
  end: {
342935
- line: 350,
342965
+ line: 353,
342936
342966
  column: 36
342937
342967
  }
342938
342968
  },
342939
- "101": {
342969
+ "104": {
342940
342970
  start: {
342941
- line: 352,
342971
+ line: 355,
342942
342972
  column: 10
342943
342973
  },
342944
342974
  end: {
342945
- line: 352,
342975
+ line: 355,
342946
342976
  column: 37
342947
342977
  }
342948
342978
  },
342949
- "102": {
342979
+ "105": {
342950
342980
  start: {
342951
- line: 356,
342981
+ line: 359,
342952
342982
  column: 8
342953
342983
  },
342954
342984
  end: {
342955
- line: 369,
342985
+ line: 372,
342956
342986
  column: 10
342957
342987
  }
342958
342988
  },
342959
- "103": {
342989
+ "106": {
342960
342990
  start: {
342961
- line: 357,
342991
+ line: 360,
342962
342992
  column: 10
342963
342993
  },
342964
342994
  end: {
342965
- line: 357,
342995
+ line: 360,
342966
342996
  column: 71
342967
342997
  }
342968
342998
  },
342969
- "104": {
342999
+ "107": {
342970
343000
  start: {
342971
- line: 358,
343001
+ line: 361,
342972
343002
  column: 10
342973
343003
  },
342974
343004
  end: {
342975
- line: 368,
343005
+ line: 371,
342976
343006
  column: 12
342977
343007
  }
342978
343008
  },
342979
- "105": {
343009
+ "108": {
342980
343010
  start: {
342981
- line: 359,
343011
+ line: 362,
342982
343012
  column: 26
342983
343013
  },
342984
343014
  end: {
342985
- line: 359,
343015
+ line: 362,
342986
343016
  column: 55
342987
343017
  }
342988
343018
  },
342989
- "106": {
343019
+ "109": {
342990
343020
  start: {
342991
- line: 360,
343021
+ line: 363,
342992
343022
  column: 12
342993
343023
  },
342994
343024
  end: {
342995
- line: 360,
343025
+ line: 363,
342996
343026
  column: 66
342997
343027
  }
342998
343028
  },
342999
- "107": {
343029
+ "110": {
343000
343030
  start: {
343001
- line: 361,
343031
+ line: 364,
343002
343032
  column: 12
343003
343033
  },
343004
343034
  end: {
343005
- line: 361,
343035
+ line: 364,
343006
343036
  column: 82
343007
343037
  }
343008
343038
  },
343009
- "108": {
343039
+ "111": {
343010
343040
  start: {
343011
- line: 362,
343041
+ line: 365,
343012
343042
  column: 12
343013
343043
  },
343014
343044
  end: {
343015
- line: 362,
343045
+ line: 365,
343016
343046
  column: 62
343017
343047
  }
343018
343048
  },
343019
- "109": {
343049
+ "112": {
343020
343050
  start: {
343021
- line: 363,
343051
+ line: 366,
343022
343052
  column: 12
343023
343053
  },
343024
343054
  end: {
343025
- line: 363,
343055
+ line: 366,
343026
343056
  column: 48
343027
343057
  }
343028
343058
  },
343029
- "110": {
343059
+ "113": {
343030
343060
  start: {
343031
- line: 364,
343061
+ line: 367,
343032
343062
  column: 12
343033
343063
  },
343034
343064
  end: {
343035
- line: 364,
343065
+ line: 367,
343036
343066
  column: 73
343037
343067
  }
343038
343068
  },
343039
- "111": {
343069
+ "114": {
343040
343070
  start: {
343041
- line: 365,
343071
+ line: 368,
343042
343072
  column: 12
343043
343073
  },
343044
343074
  end: {
343045
- line: 365,
343075
+ line: 368,
343046
343076
  column: 84
343047
343077
  }
343048
343078
  },
343049
- "112": {
343079
+ "115": {
343050
343080
  start: {
343051
- line: 365,
343081
+ line: 368,
343052
343082
  column: 28
343053
343083
  },
343054
343084
  end: {
343055
- line: 365,
343085
+ line: 368,
343056
343086
  column: 84
343057
343087
  }
343058
343088
  },
343059
- "113": {
343089
+ "116": {
343060
343090
  start: {
343061
- line: 366,
343091
+ line: 369,
343062
343092
  column: 12
343063
343093
  },
343064
343094
  end: {
343065
- line: 366,
343095
+ line: 369,
343066
343096
  column: 94
343067
343097
  }
343068
343098
  },
343069
- "114": {
343099
+ "117": {
343070
343100
  start: {
343071
- line: 367,
343101
+ line: 370,
343072
343102
  column: 12
343073
343103
  },
343074
343104
  end: {
343075
- line: 367,
343105
+ line: 370,
343076
343106
  column: 28
343077
343107
  }
343078
343108
  },
343079
- "115": {
343109
+ "118": {
343080
343110
  start: {
343081
- line: 372,
343111
+ line: 375,
343082
343112
  column: 8
343083
343113
  },
343084
343114
  end: {
343085
- line: 382,
343115
+ line: 385,
343086
343116
  column: 10
343087
343117
  }
343088
343118
  },
343089
- "116": {
343119
+ "119": {
343090
343120
  start: {
343091
- line: 373,
343121
+ line: 376,
343092
343122
  column: 24
343093
343123
  },
343094
343124
  end: {
343095
- line: 373,
343125
+ line: 376,
343096
343126
  column: 53
343097
343127
  }
343098
343128
  },
343099
- "117": {
343129
+ "120": {
343100
343130
  start: {
343101
- line: 374,
343131
+ line: 377,
343102
343132
  column: 10
343103
343133
  },
343104
343134
  end: {
343105
- line: 374,
343135
+ line: 377,
343106
343136
  column: 64
343107
343137
  }
343108
343138
  },
343109
- "118": {
343139
+ "121": {
343110
343140
  start: {
343111
- line: 375,
343141
+ line: 378,
343112
343142
  column: 10
343113
343143
  },
343114
343144
  end: {
343115
- line: 375,
343145
+ line: 378,
343116
343146
  column: 80
343117
343147
  }
343118
343148
  },
343119
- "119": {
343149
+ "122": {
343120
343150
  start: {
343121
- line: 376,
343151
+ line: 379,
343122
343152
  column: 10
343123
343153
  },
343124
343154
  end: {
343125
- line: 376,
343155
+ line: 379,
343126
343156
  column: 60
343127
343157
  }
343128
343158
  },
343129
- "120": {
343159
+ "123": {
343130
343160
  start: {
343131
- line: 377,
343161
+ line: 380,
343132
343162
  column: 10
343133
343163
  },
343134
343164
  end: {
343135
- line: 377,
343165
+ line: 380,
343136
343166
  column: 46
343137
343167
  }
343138
343168
  },
343139
- "121": {
343169
+ "124": {
343140
343170
  start: {
343141
- line: 378,
343171
+ line: 381,
343142
343172
  column: 10
343143
343173
  },
343144
343174
  end: {
343145
- line: 378,
343175
+ line: 381,
343146
343176
  column: 71
343147
343177
  }
343148
343178
  },
343149
- "122": {
343179
+ "125": {
343150
343180
  start: {
343151
- line: 379,
343181
+ line: 382,
343152
343182
  column: 10
343153
343183
  },
343154
343184
  end: {
343155
- line: 379,
343185
+ line: 382,
343156
343186
  column: 82
343157
343187
  }
343158
343188
  },
343159
- "123": {
343189
+ "126": {
343160
343190
  start: {
343161
- line: 379,
343191
+ line: 382,
343162
343192
  column: 26
343163
343193
  },
343164
343194
  end: {
343165
- line: 379,
343195
+ line: 382,
343166
343196
  column: 82
343167
343197
  }
343168
343198
  },
343169
- "124": {
343199
+ "127": {
343170
343200
  start: {
343171
- line: 380,
343201
+ line: 383,
343172
343202
  column: 10
343173
343203
  },
343174
343204
  end: {
343175
- line: 380,
343205
+ line: 383,
343176
343206
  column: 92
343177
343207
  }
343178
343208
  },
343179
- "125": {
343209
+ "128": {
343180
343210
  start: {
343181
- line: 381,
343211
+ line: 384,
343182
343212
  column: 10
343183
343213
  },
343184
343214
  end: {
343185
- line: 381,
343215
+ line: 384,
343186
343216
  column: 26
343187
343217
  }
343188
343218
  },
343189
- "126": {
343219
+ "129": {
343190
343220
  start: {
343191
- line: 385,
343221
+ line: 388,
343192
343222
  column: 6
343193
343223
  },
343194
343224
  end: {
343195
- line: 385,
343225
+ line: 388,
343196
343226
  column: 22
343197
343227
  }
343198
343228
  },
343199
- "127": {
343229
+ "130": {
343200
343230
  start: {
343201
- line: 386,
343231
+ line: 389,
343202
343232
  column: 6
343203
343233
  },
343204
343234
  end: {
343205
- line: 386,
343235
+ line: 389,
343206
343236
  column: 30
343207
343237
  }
343208
343238
  },
343209
- "128": {
343239
+ "131": {
343210
343240
  start: {
343211
- line: 389,
343241
+ line: 392,
343212
343242
  column: 6
343213
343243
  },
343214
343244
  end: {
343215
- line: 395,
343245
+ line: 398,
343216
343246
  column: 8
343217
343247
  }
343218
343248
  },
343219
- "129": {
343249
+ "132": {
343220
343250
  start: {
343221
- line: 390,
343251
+ line: 393,
343222
343252
  column: 8
343223
343253
  },
343224
343254
  end: {
343225
- line: 394,
343255
+ line: 397,
343226
343256
  column: 9
343227
343257
  }
343228
343258
  },
343229
- "130": {
343259
+ "133": {
343230
343260
  start: {
343231
- line: 391,
343261
+ line: 394,
343232
343262
  column: 21
343233
343263
  },
343234
343264
  end: {
343235
- line: 391,
343265
+ line: 394,
343236
343266
  column: 46
343237
343267
  }
343238
343268
  },
343239
- "131": {
343269
+ "134": {
343240
343270
  start: {
343241
- line: 392,
343271
+ line: 395,
343242
343272
  column: 10
343243
343273
  },
343244
343274
  end: {
343245
- line: 392,
343275
+ line: 395,
343246
343276
  column: 34
343247
343277
  }
343248
343278
  },
343249
- "132": {
343279
+ "135": {
343250
343280
  start: {
343251
- line: 393,
343281
+ line: 396,
343252
343282
  column: 10
343253
343283
  },
343254
343284
  end: {
343255
- line: 393,
343285
+ line: 396,
343256
343286
  column: 37
343257
343287
  }
343258
343288
  },
343259
- "133": {
343289
+ "136": {
343260
343290
  start: {
343261
- line: 398,
343291
+ line: 401,
343262
343292
  column: 6
343263
343293
  },
343264
343294
  end: {
343265
- line: 398,
343295
+ line: 401,
343266
343296
  column: 37
343267
343297
  }
343268
343298
  },
343269
- "134": {
343299
+ "137": {
343270
343300
  start: {
343271
- line: 399,
343301
+ line: 402,
343272
343302
  column: 6
343273
343303
  },
343274
343304
  end: {
343275
- line: 399,
343305
+ line: 402,
343276
343306
  column: 60
343277
343307
  }
343278
343308
  },
343279
- "135": {
343309
+ "138": {
343280
343310
  start: {
343281
- line: 400,
343311
+ line: 403,
343282
343312
  column: 6
343283
343313
  },
343284
343314
  end: {
343285
- line: 400,
343315
+ line: 403,
343286
343316
  column: 45
343287
343317
  }
343288
343318
  },
343289
- "136": {
343319
+ "139": {
343290
343320
  start: {
343291
343321
  line: 404,
343322
+ column: 6
343323
+ },
343324
+ end: {
343325
+ line: 410,
343326
+ column: 8
343327
+ }
343328
+ },
343329
+ "140": {
343330
+ start: {
343331
+ line: 414,
343292
343332
  column: 22
343293
343333
  },
343294
343334
  end: {
343295
- line: 404,
343335
+ line: 414,
343296
343336
  column: 40
343297
343337
  }
343298
343338
  },
343299
- "137": {
343339
+ "141": {
343300
343340
  start: {
343301
- line: 405,
343341
+ line: 415,
343302
343342
  column: 6
343303
343343
  },
343304
343344
  end: {
343305
- line: 407,
343345
+ line: 417,
343306
343346
  column: 7
343307
343347
  }
343308
343348
  },
343309
- "138": {
343349
+ "142": {
343310
343350
  start: {
343311
- line: 406,
343351
+ line: 416,
343312
343352
  column: 8
343313
343353
  },
343314
343354
  end: {
343315
- line: 406,
343355
+ line: 416,
343316
343356
  column: 38
343317
343357
  }
343318
343358
  },
343319
- "139": {
343359
+ "143": {
343320
343360
  start: {
343321
- line: 414,
343361
+ line: 424,
343322
343362
  column: 27
343323
343363
  },
343324
343364
  end: {
343325
- line: 414,
343365
+ line: 424,
343326
343366
  column: 29
343327
343367
  }
343328
343368
  },
343329
- "140": {
343369
+ "144": {
343330
343370
  start: {
343331
- line: 415,
343371
+ line: 425,
343332
343372
  column: 6
343333
343373
  },
343334
343374
  end: {
343335
- line: 417,
343375
+ line: 427,
343336
343376
  column: 8
343337
343377
  }
343338
343378
  },
343339
- "141": {
343379
+ "145": {
343340
343380
  start: {
343341
- line: 416,
343381
+ line: 426,
343342
343382
  column: 8
343343
343383
  },
343344
343384
  end: {
343345
- line: 416,
343385
+ line: 426,
343346
343386
  column: 66
343347
343387
  }
343348
343388
  },
343349
- "142": {
343389
+ "146": {
343350
343390
  start: {
343351
- line: 420,
343391
+ line: 430,
343352
343392
  column: 21
343353
343393
  },
343354
343394
  end: {
343355
- line: 420,
343395
+ line: 430,
343356
343396
  column: 22
343357
343397
  }
343358
343398
  },
343359
- "143": {
343399
+ "147": {
343360
343400
  start: {
343361
- line: 421,
343401
+ line: 431,
343362
343402
  column: 30
343363
343403
  },
343364
343404
  end: {
343365
- line: 421,
343405
+ line: 431,
343366
343406
  column: 41
343367
343407
  }
343368
343408
  },
343369
- "144": {
343409
+ "148": {
343370
343410
  start: {
343371
- line: 422,
343411
+ line: 432,
343372
343412
  column: 6
343373
343413
  },
343374
343414
  end: {
343375
- line: 427,
343415
+ line: 437,
343376
343416
  column: 8
343377
343417
  }
343378
343418
  },
343379
- "145": {
343419
+ "149": {
343380
343420
  start: {
343381
- line: 423,
343421
+ line: 433,
343382
343422
  column: 8
343383
343423
  },
343384
343424
  end: {
343385
- line: 426,
343425
+ line: 436,
343386
343426
  column: 9
343387
343427
  }
343388
343428
  },
343389
- "146": {
343429
+ "150": {
343390
343430
  start: {
343391
- line: 424,
343431
+ line: 434,
343392
343432
  column: 10
343393
343433
  },
343394
343434
  end: {
343395
- line: 424,
343435
+ line: 434,
343396
343436
  column: 26
343397
343437
  }
343398
343438
  },
343399
- "147": {
343439
+ "151": {
343400
343440
  start: {
343401
- line: 425,
343441
+ line: 435,
343402
343442
  column: 10
343403
343443
  },
343404
343444
  end: {
343405
- line: 425,
343445
+ line: 435,
343406
343446
  column: 36
343407
343447
  }
343408
343448
  },
343409
- "148": {
343449
+ "152": {
343410
343450
  start: {
343411
- line: 429,
343451
+ line: 439,
343412
343452
  column: 6
343413
343453
  },
343414
343454
  end: {
343415
- line: 429,
343455
+ line: 439,
343416
343456
  column: 46
343417
343457
  }
343418
343458
  },
343419
- "149": {
343459
+ "153": {
343420
343460
  start: {
343421
- line: 433,
343461
+ line: 443,
343422
343462
  column: 6
343423
343463
  },
343424
343464
  end: {
343425
- line: 433,
343465
+ line: 443,
343426
343466
  column: 31
343427
343467
  }
343428
343468
  },
343429
- "150": {
343469
+ "154": {
343430
343470
  start: {
343431
- line: 437,
343471
+ line: 447,
343432
343472
  column: 6
343433
343473
  },
343434
343474
  end: {
343435
- line: 437,
343475
+ line: 447,
343436
343476
  column: 32
343437
343477
  }
343438
343478
  },
343439
- "151": {
343479
+ "155": {
343440
343480
  start: {
343441
- line: 438,
343481
+ line: 448,
343442
343482
  column: 6
343443
343483
  },
343444
343484
  end: {
343445
- line: 438,
343485
+ line: 448,
343446
343486
  column: 30
343447
343487
  }
343448
343488
  },
343449
- "152": {
343489
+ "156": {
343450
343490
  start: {
343451
- line: 442,
343491
+ line: 452,
343452
343492
  column: 22
343453
343493
  },
343454
343494
  end: {
343455
- line: 442,
343495
+ line: 452,
343456
343496
  column: 40
343457
343497
  }
343458
343498
  },
343459
- "153": {
343499
+ "157": {
343460
343500
  start: {
343461
- line: 445,
343501
+ line: 455,
343462
343502
  column: 6
343463
343503
  },
343464
343504
  end: {
343465
- line: 445,
343505
+ line: 455,
343466
343506
  column: 59
343467
343507
  }
343468
343508
  },
343469
- "154": {
343509
+ "158": {
343470
343510
  start: {
343471
- line: 445,
343511
+ line: 455,
343472
343512
  column: 53
343473
343513
  },
343474
343514
  end: {
343475
- line: 445,
343515
+ line: 455,
343476
343516
  column: 59
343477
343517
  }
343478
343518
  },
343479
- "155": {
343519
+ "159": {
343480
343520
  start: {
343481
- line: 448,
343521
+ line: 458,
343482
343522
  column: 6
343483
343523
  },
343484
343524
  end: {
343485
- line: 448,
343525
+ line: 458,
343486
343526
  column: 67
343487
343527
  }
343488
343528
  },
343489
- "156": {
343529
+ "160": {
343490
343530
  start: {
343491
- line: 448,
343531
+ line: 458,
343492
343532
  column: 61
343493
343533
  },
343494
343534
  end: {
343495
- line: 448,
343535
+ line: 458,
343496
343536
  column: 67
343497
343537
  }
343498
343538
  },
343499
- "157": {
343539
+ "161": {
343500
343540
  start: {
343501
- line: 451,
343541
+ line: 461,
343502
343542
  column: 6
343503
343543
  },
343504
343544
  end: {
343505
- line: 451,
343545
+ line: 461,
343506
343546
  column: 30
343507
343547
  }
343508
343548
  },
343509
- "158": {
343549
+ "162": {
343510
343550
  start: {
343511
- line: 455,
343551
+ line: 465,
343512
343552
  column: 30
343513
343553
  },
343514
343554
  end: {
343515
- line: 455,
343555
+ line: 465,
343516
343556
  column: 56
343517
343557
  }
343518
343558
  },
343519
- "159": {
343559
+ "163": {
343520
343560
  start: {
343521
- line: 456,
343561
+ line: 466,
343522
343562
  column: 6
343523
343563
  },
343524
343564
  end: {
343525
- line: 458,
343565
+ line: 468,
343526
343566
  column: 7
343527
343567
  }
343528
343568
  },
343529
- "160": {
343569
+ "164": {
343530
343570
  start: {
343531
- line: 457,
343571
+ line: 467,
343532
343572
  column: 8
343533
343573
  },
343534
343574
  end: {
343535
- line: 457,
343575
+ line: 467,
343536
343576
  column: 32
343537
343577
  }
343538
343578
  }
@@ -344420,7 +344460,7 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
344420
344460
  column: 37
344421
344461
  },
344422
344462
  end: {
344423
- line: 401,
344463
+ line: 411,
344424
344464
  column: 5
344425
344465
  }
344426
344466
  },
@@ -344430,313 +344470,313 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
344430
344470
  name: "(anonymous_37)",
344431
344471
  decl: {
344432
344472
  start: {
344433
- line: 347,
344473
+ line: 350,
344434
344474
  column: 25
344435
344475
  },
344436
344476
  end: {
344437
- line: 347,
344477
+ line: 350,
344438
344478
  column: 26
344439
344479
  }
344440
344480
  },
344441
344481
  loc: {
344442
344482
  start: {
344443
- line: 347,
344483
+ line: 350,
344444
344484
  column: 30
344445
344485
  },
344446
344486
  end: {
344447
- line: 353,
344487
+ line: 356,
344448
344488
  column: 9
344449
344489
  }
344450
344490
  },
344451
- line: 347
344491
+ line: 350
344452
344492
  },
344453
344493
  "38": {
344454
344494
  name: "(anonymous_38)",
344455
344495
  decl: {
344456
344496
  start: {
344457
- line: 356,
344497
+ line: 359,
344458
344498
  column: 45
344459
344499
  },
344460
344500
  end: {
344461
- line: 356,
344501
+ line: 359,
344462
344502
  column: 46
344463
344503
  }
344464
344504
  },
344465
344505
  loc: {
344466
344506
  start: {
344467
- line: 356,
344507
+ line: 359,
344468
344508
  column: 71
344469
344509
  },
344470
344510
  end: {
344471
- line: 369,
344511
+ line: 372,
344472
344512
  column: 9
344473
344513
  }
344474
344514
  },
344475
- line: 356
344515
+ line: 359
344476
344516
  },
344477
344517
  "39": {
344478
344518
  name: "(anonymous_39)",
344479
344519
  decl: {
344480
344520
  start: {
344481
- line: 358,
344521
+ line: 361,
344482
344522
  column: 30
344483
344523
  },
344484
344524
  end: {
344485
- line: 358,
344525
+ line: 361,
344486
344526
  column: 31
344487
344527
  }
344488
344528
  },
344489
344529
  loc: {
344490
344530
  start: {
344491
- line: 358,
344531
+ line: 361,
344492
344532
  column: 35
344493
344533
  },
344494
344534
  end: {
344495
- line: 368,
344535
+ line: 371,
344496
344536
  column: 11
344497
344537
  }
344498
344538
  },
344499
- line: 358
344539
+ line: 361
344500
344540
  },
344501
344541
  "40": {
344502
344542
  name: "(anonymous_40)",
344503
344543
  decl: {
344504
344544
  start: {
344505
- line: 372,
344545
+ line: 375,
344506
344546
  column: 25
344507
344547
  },
344508
344548
  end: {
344509
- line: 372,
344549
+ line: 375,
344510
344550
  column: 26
344511
344551
  }
344512
344552
  },
344513
344553
  loc: {
344514
344554
  start: {
344515
- line: 372,
344555
+ line: 375,
344516
344556
  column: 30
344517
344557
  },
344518
344558
  end: {
344519
- line: 382,
344559
+ line: 385,
344520
344560
  column: 9
344521
344561
  }
344522
344562
  },
344523
- line: 372
344563
+ line: 375
344524
344564
  },
344525
344565
  "41": {
344526
344566
  name: "(anonymous_41)",
344527
344567
  decl: {
344528
344568
  start: {
344529
- line: 389,
344569
+ line: 392,
344530
344570
  column: 56
344531
344571
  },
344532
344572
  end: {
344533
- line: 389,
344573
+ line: 392,
344534
344574
  column: 57
344535
344575
  }
344536
344576
  },
344537
344577
  loc: {
344538
344578
  start: {
344539
- line: 389,
344579
+ line: 392,
344540
344580
  column: 64
344541
344581
  },
344542
344582
  end: {
344543
- line: 395,
344583
+ line: 398,
344544
344584
  column: 7
344545
344585
  }
344546
344586
  },
344547
- line: 389
344587
+ line: 392
344548
344588
  },
344549
344589
  "42": {
344550
344590
  name: "(anonymous_42)",
344551
344591
  decl: {
344552
344592
  start: {
344553
- line: 390,
344593
+ line: 393,
344554
344594
  column: 23
344555
344595
  },
344556
344596
  end: {
344557
- line: 390,
344597
+ line: 393,
344558
344598
  column: 24
344559
344599
  }
344560
344600
  },
344561
344601
  loc: {
344562
344602
  start: {
344563
- line: 390,
344603
+ line: 393,
344564
344604
  column: 29
344565
344605
  },
344566
344606
  end: {
344567
- line: 394,
344607
+ line: 397,
344568
344608
  column: 9
344569
344609
  }
344570
344610
  },
344571
- line: 390
344611
+ line: 393
344572
344612
  },
344573
344613
  "43": {
344574
344614
  name: "(anonymous_43)",
344575
344615
  decl: {
344576
344616
  start: {
344577
- line: 403,
344617
+ line: 413,
344578
344618
  column: 4
344579
344619
  },
344580
344620
  end: {
344581
- line: 403,
344621
+ line: 413,
344582
344622
  column: 5
344583
344623
  }
344584
344624
  },
344585
344625
  loc: {
344586
344626
  start: {
344587
- line: 403,
344627
+ line: 413,
344588
344628
  column: 24
344589
344629
  },
344590
344630
  end: {
344591
- line: 408,
344631
+ line: 418,
344592
344632
  column: 5
344593
344633
  }
344594
344634
  },
344595
- line: 403
344635
+ line: 413
344596
344636
  },
344597
344637
  "44": {
344598
344638
  name: "(anonymous_44)",
344599
344639
  decl: {
344600
344640
  start: {
344601
- line: 412,
344641
+ line: 422,
344602
344642
  column: 4
344603
344643
  },
344604
344644
  end: {
344605
- line: 412,
344645
+ line: 422,
344606
344646
  column: 5
344607
344647
  }
344608
344648
  },
344609
344649
  loc: {
344610
344650
  start: {
344611
- line: 412,
344651
+ line: 422,
344612
344652
  column: 34
344613
344653
  },
344614
344654
  end: {
344615
- line: 430,
344655
+ line: 440,
344616
344656
  column: 5
344617
344657
  }
344618
344658
  },
344619
- line: 412
344659
+ line: 422
344620
344660
  },
344621
344661
  "45": {
344622
344662
  name: "(anonymous_45)",
344623
344663
  decl: {
344624
344664
  start: {
344625
- line: 415,
344665
+ line: 425,
344626
344666
  column: 23
344627
344667
  },
344628
344668
  end: {
344629
- line: 415,
344669
+ line: 425,
344630
344670
  column: 24
344631
344671
  }
344632
344672
  },
344633
344673
  loc: {
344634
344674
  start: {
344635
- line: 415,
344675
+ line: 425,
344636
344676
  column: 28
344637
344677
  },
344638
344678
  end: {
344639
- line: 417,
344679
+ line: 427,
344640
344680
  column: 7
344641
344681
  }
344642
344682
  },
344643
- line: 415
344683
+ line: 425
344644
344684
  },
344645
344685
  "46": {
344646
344686
  name: "(anonymous_46)",
344647
344687
  decl: {
344648
344688
  start: {
344649
- line: 422,
344689
+ line: 432,
344650
344690
  column: 43
344651
344691
  },
344652
344692
  end: {
344653
- line: 422,
344693
+ line: 432,
344654
344694
  column: 44
344655
344695
  }
344656
344696
  },
344657
344697
  loc: {
344658
344698
  start: {
344659
- line: 422,
344699
+ line: 432,
344660
344700
  column: 64
344661
344701
  },
344662
344702
  end: {
344663
- line: 427,
344703
+ line: 437,
344664
344704
  column: 7
344665
344705
  }
344666
344706
  },
344667
- line: 422
344707
+ line: 432
344668
344708
  },
344669
344709
  "47": {
344670
344710
  name: "(anonymous_47)",
344671
344711
  decl: {
344672
344712
  start: {
344673
- line: 432,
344713
+ line: 442,
344674
344714
  column: 4
344675
344715
  },
344676
344716
  end: {
344677
- line: 432,
344717
+ line: 442,
344678
344718
  column: 5
344679
344719
  }
344680
344720
  },
344681
344721
  loc: {
344682
344722
  start: {
344683
- line: 432,
344723
+ line: 442,
344684
344724
  column: 25
344685
344725
  },
344686
344726
  end: {
344687
- line: 434,
344727
+ line: 444,
344688
344728
  column: 5
344689
344729
  }
344690
344730
  },
344691
- line: 432
344731
+ line: 442
344692
344732
  },
344693
344733
  "48": {
344694
344734
  name: "(anonymous_48)",
344695
344735
  decl: {
344696
344736
  start: {
344697
- line: 436,
344737
+ line: 446,
344698
344738
  column: 4
344699
344739
  },
344700
344740
  end: {
344701
- line: 436,
344741
+ line: 446,
344702
344742
  column: 5
344703
344743
  }
344704
344744
  },
344705
344745
  loc: {
344706
344746
  start: {
344707
- line: 436,
344747
+ line: 446,
344708
344748
  column: 25
344709
344749
  },
344710
344750
  end: {
344711
- line: 439,
344751
+ line: 449,
344712
344752
  column: 5
344713
344753
  }
344714
344754
  },
344715
- line: 436
344755
+ line: 446
344716
344756
  },
344717
344757
  "49": {
344718
344758
  name: "(anonymous_49)",
344719
344759
  decl: {
344720
344760
  start: {
344721
- line: 441,
344761
+ line: 451,
344722
344762
  column: 4
344723
344763
  },
344724
344764
  end: {
344725
- line: 441,
344765
+ line: 451,
344726
344766
  column: 5
344727
344767
  }
344728
344768
  },
344729
344769
  loc: {
344730
344770
  start: {
344731
- line: 441,
344771
+ line: 451,
344732
344772
  column: 31
344733
344773
  },
344734
344774
  end: {
344735
- line: 459,
344775
+ line: 469,
344736
344776
  column: 5
344737
344777
  }
344738
344778
  },
344739
- line: 441
344779
+ line: 451
344740
344780
  }
344741
344781
  },
344742
344782
  branchMap: {
@@ -345562,695 +345602,695 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
345562
345602
  "24": {
345563
345603
  loc: {
345564
345604
  start: {
345565
- line: 324,
345605
+ line: 325,
345566
345606
  column: 23
345567
345607
  },
345568
345608
  end: {
345569
- line: 324,
345609
+ line: 325,
345570
345610
  column: 64
345571
345611
  }
345572
345612
  },
345573
345613
  type: "binary-expr",
345574
345614
  locations: [{
345575
345615
  start: {
345576
- line: 324,
345616
+ line: 325,
345577
345617
  column: 23
345578
345618
  },
345579
345619
  end: {
345580
- line: 324,
345620
+ line: 325,
345581
345621
  column: 58
345582
345622
  }
345583
345623
  }, {
345584
345624
  start: {
345585
- line: 324,
345625
+ line: 325,
345586
345626
  column: 62
345587
345627
  },
345588
345628
  end: {
345589
- line: 324,
345629
+ line: 325,
345590
345630
  column: 64
345591
345631
  }
345592
345632
  }],
345593
- line: 324
345633
+ line: 325
345594
345634
  },
345595
345635
  "25": {
345596
345636
  loc: {
345597
345637
  start: {
345598
- line: 325,
345638
+ line: 327,
345599
345639
  column: 6
345600
345640
  },
345601
345641
  end: {
345602
- line: 325,
345642
+ line: 327,
345603
345643
  column: 39
345604
345644
  }
345605
345645
  },
345606
345646
  type: "if",
345607
345647
  locations: [{
345608
345648
  start: {
345609
- line: 325,
345649
+ line: 327,
345610
345650
  column: 6
345611
345651
  },
345612
345652
  end: {
345613
- line: 325,
345653
+ line: 327,
345614
345654
  column: 39
345615
345655
  }
345616
345656
  }, {
345617
345657
  start: {
345618
- line: 325,
345658
+ line: 327,
345619
345659
  column: 6
345620
345660
  },
345621
345661
  end: {
345622
- line: 325,
345662
+ line: 327,
345623
345663
  column: 39
345624
345664
  }
345625
345665
  }],
345626
- line: 325
345666
+ line: 327
345627
345667
  },
345628
345668
  "26": {
345629
345669
  loc: {
345630
345670
  start: {
345631
- line: 334,
345671
+ line: 337,
345632
345672
  column: 6
345633
345673
  },
345634
345674
  end: {
345635
- line: 334,
345675
+ line: 337,
345636
345676
  column: 38
345637
345677
  }
345638
345678
  },
345639
345679
  type: "if",
345640
345680
  locations: [{
345641
345681
  start: {
345642
- line: 334,
345682
+ line: 337,
345643
345683
  column: 6
345644
345684
  },
345645
345685
  end: {
345646
- line: 334,
345686
+ line: 337,
345647
345687
  column: 38
345648
345688
  }
345649
345689
  }, {
345650
345690
  start: {
345651
- line: 334,
345691
+ line: 337,
345652
345692
  column: 6
345653
345693
  },
345654
345694
  end: {
345655
- line: 334,
345695
+ line: 337,
345656
345696
  column: 38
345657
345697
  }
345658
345698
  }],
345659
- line: 334
345699
+ line: 337
345660
345700
  },
345661
345701
  "27": {
345662
345702
  loc: {
345663
345703
  start: {
345664
- line: 334,
345704
+ line: 337,
345665
345705
  column: 10
345666
345706
  },
345667
345707
  end: {
345668
- line: 334,
345708
+ line: 337,
345669
345709
  column: 30
345670
345710
  }
345671
345711
  },
345672
345712
  type: "binary-expr",
345673
345713
  locations: [{
345674
345714
  start: {
345675
- line: 334,
345715
+ line: 337,
345676
345716
  column: 10
345677
345717
  },
345678
345718
  end: {
345679
- line: 334,
345719
+ line: 337,
345680
345720
  column: 18
345681
345721
  }
345682
345722
  }, {
345683
345723
  start: {
345684
- line: 334,
345724
+ line: 337,
345685
345725
  column: 22
345686
345726
  },
345687
345727
  end: {
345688
- line: 334,
345728
+ line: 337,
345689
345729
  column: 30
345690
345730
  }
345691
345731
  }],
345692
- line: 334
345732
+ line: 337
345693
345733
  },
345694
345734
  "28": {
345695
345735
  loc: {
345696
345736
  start: {
345697
- line: 340,
345737
+ line: 343,
345698
345738
  column: 22
345699
345739
  },
345700
345740
  end: {
345701
- line: 340,
345741
+ line: 343,
345702
345742
  column: 65
345703
345743
  }
345704
345744
  },
345705
345745
  type: "binary-expr",
345706
345746
  locations: [{
345707
345747
  start: {
345708
- line: 340,
345748
+ line: 343,
345709
345749
  column: 22
345710
345750
  },
345711
345751
  end: {
345712
- line: 340,
345752
+ line: 343,
345713
345753
  column: 52
345714
345754
  }
345715
345755
  }, {
345716
345756
  start: {
345717
- line: 340,
345757
+ line: 343,
345718
345758
  column: 56
345719
345759
  },
345720
345760
  end: {
345721
- line: 340,
345761
+ line: 343,
345722
345762
  column: 65
345723
345763
  }
345724
345764
  }],
345725
- line: 340
345765
+ line: 343
345726
345766
  },
345727
345767
  "29": {
345728
345768
  loc: {
345729
345769
  start: {
345730
- line: 341,
345770
+ line: 344,
345731
345771
  column: 88
345732
345772
  },
345733
345773
  end: {
345734
- line: 341,
345774
+ line: 344,
345735
345775
  column: 121
345736
345776
  }
345737
345777
  },
345738
345778
  type: "cond-expr",
345739
345779
  locations: [{
345740
345780
  start: {
345741
- line: 341,
345781
+ line: 344,
345742
345782
  column: 112
345743
345783
  },
345744
345784
  end: {
345745
- line: 341,
345785
+ line: 344,
345746
345786
  column: 116
345747
345787
  }
345748
345788
  }, {
345749
345789
  start: {
345750
- line: 341,
345790
+ line: 344,
345751
345791
  column: 119
345752
345792
  },
345753
345793
  end: {
345754
- line: 341,
345794
+ line: 344,
345755
345795
  column: 121
345756
345796
  }
345757
345797
  }],
345758
- line: 341
345798
+ line: 344
345759
345799
  },
345760
345800
  "30": {
345761
345801
  loc: {
345762
345802
  start: {
345763
- line: 344,
345803
+ line: 347,
345764
345804
  column: 6
345765
345805
  },
345766
345806
  end: {
345767
- line: 383,
345807
+ line: 386,
345768
345808
  column: 7
345769
345809
  }
345770
345810
  },
345771
345811
  type: "if",
345772
345812
  locations: [{
345773
345813
  start: {
345774
- line: 344,
345814
+ line: 347,
345775
345815
  column: 6
345776
345816
  },
345777
345817
  end: {
345778
- line: 383,
345818
+ line: 386,
345779
345819
  column: 7
345780
345820
  }
345781
345821
  }, {
345782
345822
  start: {
345783
- line: 344,
345823
+ line: 347,
345784
345824
  column: 6
345785
345825
  },
345786
345826
  end: {
345787
- line: 383,
345827
+ line: 386,
345788
345828
  column: 7
345789
345829
  }
345790
345830
  }],
345791
- line: 344
345831
+ line: 347
345792
345832
  },
345793
345833
  "31": {
345794
345834
  loc: {
345795
345835
  start: {
345796
- line: 348,
345836
+ line: 351,
345797
345837
  column: 24
345798
345838
  },
345799
345839
  end: {
345800
- line: 348,
345840
+ line: 351,
345801
345841
  column: 57
345802
345842
  }
345803
345843
  },
345804
345844
  type: "binary-expr",
345805
345845
  locations: [{
345806
345846
  start: {
345807
- line: 348,
345847
+ line: 351,
345808
345848
  column: 24
345809
345849
  },
345810
345850
  end: {
345811
- line: 348,
345851
+ line: 351,
345812
345852
  column: 44
345813
345853
  }
345814
345854
  }, {
345815
345855
  start: {
345816
- line: 348,
345856
+ line: 351,
345817
345857
  column: 48
345818
345858
  },
345819
345859
  end: {
345820
- line: 348,
345860
+ line: 351,
345821
345861
  column: 57
345822
345862
  }
345823
345863
  }],
345824
- line: 348
345864
+ line: 351
345825
345865
  },
345826
345866
  "32": {
345827
345867
  loc: {
345828
345868
  start: {
345829
- line: 349,
345869
+ line: 352,
345830
345870
  column: 10
345831
345871
  },
345832
345872
  end: {
345833
- line: 351,
345873
+ line: 354,
345834
345874
  column: 11
345835
345875
  }
345836
345876
  },
345837
345877
  type: "if",
345838
345878
  locations: [{
345839
345879
  start: {
345840
- line: 349,
345880
+ line: 352,
345841
345881
  column: 10
345842
345882
  },
345843
345883
  end: {
345844
- line: 351,
345884
+ line: 354,
345845
345885
  column: 11
345846
345886
  }
345847
345887
  }, {
345848
345888
  start: {
345849
- line: 349,
345889
+ line: 352,
345850
345890
  column: 10
345851
345891
  },
345852
345892
  end: {
345853
- line: 351,
345893
+ line: 354,
345854
345894
  column: 11
345855
345895
  }
345856
345896
  }],
345857
- line: 349
345897
+ line: 352
345858
345898
  },
345859
345899
  "33": {
345860
345900
  loc: {
345861
345901
  start: {
345862
- line: 364,
345902
+ line: 367,
345863
345903
  column: 46
345864
345904
  },
345865
345905
  end: {
345866
- line: 364,
345906
+ line: 367,
345867
345907
  column: 64
345868
345908
  }
345869
345909
  },
345870
345910
  type: "binary-expr",
345871
345911
  locations: [{
345872
345912
  start: {
345873
- line: 364,
345913
+ line: 367,
345874
345914
  column: 46
345875
345915
  },
345876
345916
  end: {
345877
- line: 364,
345917
+ line: 367,
345878
345918
  column: 55
345879
345919
  }
345880
345920
  }, {
345881
345921
  start: {
345882
- line: 364,
345922
+ line: 367,
345883
345923
  column: 59
345884
345924
  },
345885
345925
  end: {
345886
- line: 364,
345926
+ line: 367,
345887
345927
  column: 64
345888
345928
  }
345889
345929
  }],
345890
- line: 364
345930
+ line: 367
345891
345931
  },
345892
345932
  "34": {
345893
345933
  loc: {
345894
345934
  start: {
345895
- line: 365,
345935
+ line: 368,
345896
345936
  column: 12
345897
345937
  },
345898
345938
  end: {
345899
- line: 365,
345939
+ line: 368,
345900
345940
  column: 84
345901
345941
  }
345902
345942
  },
345903
345943
  type: "if",
345904
345944
  locations: [{
345905
345945
  start: {
345906
- line: 365,
345946
+ line: 368,
345907
345947
  column: 12
345908
345948
  },
345909
345949
  end: {
345910
- line: 365,
345950
+ line: 368,
345911
345951
  column: 84
345912
345952
  }
345913
345953
  }, {
345914
345954
  start: {
345915
- line: 365,
345955
+ line: 368,
345916
345956
  column: 12
345917
345957
  },
345918
345958
  end: {
345919
- line: 365,
345959
+ line: 368,
345920
345960
  column: 84
345921
345961
  }
345922
345962
  }],
345923
- line: 365
345963
+ line: 368
345924
345964
  },
345925
345965
  "35": {
345926
345966
  loc: {
345927
345967
  start: {
345928
- line: 378,
345968
+ line: 381,
345929
345969
  column: 44
345930
345970
  },
345931
345971
  end: {
345932
- line: 378,
345972
+ line: 381,
345933
345973
  column: 62
345934
345974
  }
345935
345975
  },
345936
345976
  type: "binary-expr",
345937
345977
  locations: [{
345938
345978
  start: {
345939
- line: 378,
345979
+ line: 381,
345940
345980
  column: 44
345941
345981
  },
345942
345982
  end: {
345943
- line: 378,
345983
+ line: 381,
345944
345984
  column: 53
345945
345985
  }
345946
345986
  }, {
345947
345987
  start: {
345948
- line: 378,
345988
+ line: 381,
345949
345989
  column: 57
345950
345990
  },
345951
345991
  end: {
345952
- line: 378,
345992
+ line: 381,
345953
345993
  column: 62
345954
345994
  }
345955
345995
  }],
345956
- line: 378
345996
+ line: 381
345957
345997
  },
345958
345998
  "36": {
345959
345999
  loc: {
345960
346000
  start: {
345961
- line: 379,
346001
+ line: 382,
345962
346002
  column: 10
345963
346003
  },
345964
346004
  end: {
345965
- line: 379,
346005
+ line: 382,
345966
346006
  column: 82
345967
346007
  }
345968
346008
  },
345969
346009
  type: "if",
345970
346010
  locations: [{
345971
346011
  start: {
345972
- line: 379,
346012
+ line: 382,
345973
346013
  column: 10
345974
346014
  },
345975
346015
  end: {
345976
- line: 379,
346016
+ line: 382,
345977
346017
  column: 82
345978
346018
  }
345979
346019
  }, {
345980
346020
  start: {
345981
- line: 379,
346021
+ line: 382,
345982
346022
  column: 10
345983
346023
  },
345984
346024
  end: {
345985
- line: 379,
346025
+ line: 382,
345986
346026
  column: 82
345987
346027
  }
345988
346028
  }],
345989
- line: 379
346029
+ line: 382
345990
346030
  },
345991
346031
  "37": {
345992
346032
  loc: {
345993
346033
  start: {
345994
- line: 405,
346034
+ line: 415,
345995
346035
  column: 6
345996
346036
  },
345997
346037
  end: {
345998
- line: 407,
346038
+ line: 417,
345999
346039
  column: 7
346000
346040
  }
346001
346041
  },
346002
346042
  type: "if",
346003
346043
  locations: [{
346004
346044
  start: {
346005
- line: 405,
346045
+ line: 415,
346006
346046
  column: 6
346007
346047
  },
346008
346048
  end: {
346009
- line: 407,
346049
+ line: 417,
346010
346050
  column: 7
346011
346051
  }
346012
346052
  }, {
346013
346053
  start: {
346014
- line: 405,
346054
+ line: 415,
346015
346055
  column: 6
346016
346056
  },
346017
346057
  end: {
346018
- line: 407,
346058
+ line: 417,
346019
346059
  column: 7
346020
346060
  }
346021
346061
  }],
346022
- line: 405
346062
+ line: 415
346023
346063
  },
346024
346064
  "38": {
346025
346065
  loc: {
346026
346066
  start: {
346027
- line: 416,
346067
+ line: 426,
346028
346068
  column: 34
346029
346069
  },
346030
346070
  end: {
346031
- line: 416,
346071
+ line: 426,
346032
346072
  column: 61
346033
346073
  }
346034
346074
  },
346035
346075
  type: "binary-expr",
346036
346076
  locations: [{
346037
346077
  start: {
346038
- line: 416,
346078
+ line: 426,
346039
346079
  column: 34
346040
346080
  },
346041
346081
  end: {
346042
- line: 416,
346082
+ line: 426,
346043
346083
  column: 56
346044
346084
  }
346045
346085
  }, {
346046
346086
  start: {
346047
- line: 416,
346087
+ line: 426,
346048
346088
  column: 60
346049
346089
  },
346050
346090
  end: {
346051
- line: 416,
346091
+ line: 426,
346052
346092
  column: 61
346053
346093
  }
346054
346094
  }],
346055
- line: 416
346095
+ line: 426
346056
346096
  },
346057
346097
  "39": {
346058
346098
  loc: {
346059
346099
  start: {
346060
- line: 423,
346100
+ line: 433,
346061
346101
  column: 8
346062
346102
  },
346063
346103
  end: {
346064
- line: 426,
346104
+ line: 436,
346065
346105
  column: 9
346066
346106
  }
346067
346107
  },
346068
346108
  type: "if",
346069
346109
  locations: [{
346070
346110
  start: {
346071
- line: 423,
346111
+ line: 433,
346072
346112
  column: 8
346073
346113
  },
346074
346114
  end: {
346075
- line: 426,
346115
+ line: 436,
346076
346116
  column: 9
346077
346117
  }
346078
346118
  }, {
346079
346119
  start: {
346080
- line: 423,
346120
+ line: 433,
346081
346121
  column: 8
346082
346122
  },
346083
346123
  end: {
346084
- line: 426,
346124
+ line: 436,
346085
346125
  column: 9
346086
346126
  }
346087
346127
  }],
346088
- line: 423
346128
+ line: 433
346089
346129
  },
346090
346130
  "40": {
346091
346131
  loc: {
346092
346132
  start: {
346093
- line: 445,
346133
+ line: 455,
346094
346134
  column: 6
346095
346135
  },
346096
346136
  end: {
346097
- line: 445,
346137
+ line: 455,
346098
346138
  column: 59
346099
346139
  }
346100
346140
  },
346101
346141
  type: "if",
346102
346142
  locations: [{
346103
346143
  start: {
346104
- line: 445,
346144
+ line: 455,
346105
346145
  column: 6
346106
346146
  },
346107
346147
  end: {
346108
- line: 445,
346148
+ line: 455,
346109
346149
  column: 59
346110
346150
  }
346111
346151
  }, {
346112
346152
  start: {
346113
- line: 445,
346153
+ line: 455,
346114
346154
  column: 6
346115
346155
  },
346116
346156
  end: {
346117
- line: 445,
346157
+ line: 455,
346118
346158
  column: 59
346119
346159
  }
346120
346160
  }],
346121
- line: 445
346161
+ line: 455
346122
346162
  },
346123
346163
  "41": {
346124
346164
  loc: {
346125
346165
  start: {
346126
- line: 445,
346166
+ line: 455,
346127
346167
  column: 10
346128
346168
  },
346129
346169
  end: {
346130
- line: 445,
346170
+ line: 455,
346131
346171
  column: 51
346132
346172
  }
346133
346173
  },
346134
346174
  type: "binary-expr",
346135
346175
  locations: [{
346136
346176
  start: {
346137
- line: 445,
346177
+ line: 455,
346138
346178
  column: 10
346139
346179
  },
346140
346180
  end: {
346141
- line: 445,
346181
+ line: 455,
346142
346182
  column: 17
346143
346183
  }
346144
346184
  }, {
346145
346185
  start: {
346146
- line: 445,
346186
+ line: 455,
346147
346187
  column: 21
346148
346188
  },
346149
346189
  end: {
346150
- line: 445,
346190
+ line: 455,
346151
346191
  column: 51
346152
346192
  }
346153
346193
  }],
346154
- line: 445
346194
+ line: 455
346155
346195
  },
346156
346196
  "42": {
346157
346197
  loc: {
346158
346198
  start: {
346159
- line: 448,
346199
+ line: 458,
346160
346200
  column: 6
346161
346201
  },
346162
346202
  end: {
346163
- line: 448,
346203
+ line: 458,
346164
346204
  column: 67
346165
346205
  }
346166
346206
  },
346167
346207
  type: "if",
346168
346208
  locations: [{
346169
346209
  start: {
346170
- line: 448,
346210
+ line: 458,
346171
346211
  column: 6
346172
346212
  },
346173
346213
  end: {
346174
- line: 448,
346214
+ line: 458,
346175
346215
  column: 67
346176
346216
  }
346177
346217
  }, {
346178
346218
  start: {
346179
- line: 448,
346219
+ line: 458,
346180
346220
  column: 6
346181
346221
  },
346182
346222
  end: {
346183
- line: 448,
346223
+ line: 458,
346184
346224
  column: 67
346185
346225
  }
346186
346226
  }],
346187
- line: 448
346227
+ line: 458
346188
346228
  },
346189
346229
  "43": {
346190
346230
  loc: {
346191
346231
  start: {
346192
- line: 456,
346232
+ line: 466,
346193
346233
  column: 6
346194
346234
  },
346195
346235
  end: {
346196
- line: 458,
346236
+ line: 468,
346197
346237
  column: 7
346198
346238
  }
346199
346239
  },
346200
346240
  type: "if",
346201
346241
  locations: [{
346202
346242
  start: {
346203
- line: 456,
346243
+ line: 466,
346204
346244
  column: 6
346205
346245
  },
346206
346246
  end: {
346207
- line: 458,
346247
+ line: 468,
346208
346248
  column: 7
346209
346249
  }
346210
346250
  }, {
346211
346251
  start: {
346212
- line: 456,
346252
+ line: 466,
346213
346253
  column: 6
346214
346254
  },
346215
346255
  end: {
346216
- line: 458,
346256
+ line: 468,
346217
346257
  column: 7
346218
346258
  }
346219
346259
  }],
346220
- line: 456
346260
+ line: 466
346221
346261
  },
346222
346262
  "44": {
346223
346263
  loc: {
346224
346264
  start: {
346225
- line: 456,
346265
+ line: 466,
346226
346266
  column: 10
346227
346267
  },
346228
346268
  end: {
346229
- line: 456,
346269
+ line: 466,
346230
346270
  column: 67
346231
346271
  }
346232
346272
  },
346233
346273
  type: "binary-expr",
346234
346274
  locations: [{
346235
346275
  start: {
346236
- line: 456,
346276
+ line: 466,
346237
346277
  column: 10
346238
346278
  },
346239
346279
  end: {
346240
- line: 456,
346280
+ line: 466,
346241
346281
  column: 25
346242
346282
  }
346243
346283
  }, {
346244
346284
  start: {
346245
- line: 456,
346285
+ line: 466,
346246
346286
  column: 29
346247
346287
  },
346248
346288
  end: {
346249
- line: 456,
346289
+ line: 466,
346250
346290
  column: 67
346251
346291
  }
346252
346292
  }],
346253
- line: 456
346293
+ line: 466
346254
346294
  }
346255
346295
  },
346256
346296
  s: {
@@ -346414,7 +346454,11 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
346414
346454
  "157": 0,
346415
346455
  "158": 0,
346416
346456
  "159": 0,
346417
- "160": 0
346457
+ "160": 0,
346458
+ "161": 0,
346459
+ "162": 0,
346460
+ "163": 0,
346461
+ "164": 0
346418
346462
  },
346419
346463
  f: {
346420
346464
  "0": 0,
@@ -346519,13 +346563,13 @@ var ProjectMatrixvue_type_script_lang_js_cov_geimehe8j = function () {
346519
346563
  version: 3,
346520
346564
  sources: ["ProjectMatrix.vue"],
346521
346565
  names: [],
346522
- 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",
346566
+ 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",
346523
346567
  file: "ProjectMatrix.vue",
346524
346568
  sourceRoot: "src/components/projects",
346525
- 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"]
346569
+ 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"]
346526
346570
  },
346527
346571
  _coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
346528
- hash: "fd7147f03f01b31d8c70b081a2f870d9b564dbff"
346572
+ hash: "a0c0d0bf4b1dd7c7c1e69ed5b9fb98baf888abe6"
346529
346573
  };
346530
346574
  var coverage = global[gcv] || (global[gcv] = {});
346531
346575
  if (coverage[path] && coverage[path].hash === hash) {
@@ -347036,167 +347080,184 @@ function ProjectMatrixvue_type_script_lang_js_asyncToGenerator(fn) { return func
347036
347080
  _analyses$,
347037
347081
  _this4 = this;
347038
347082
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[36]++;
347039
- 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]++, []));
347040
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[83]++;
347083
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[82]++;
347084
+ console.log('handleCellClick called:', {
347085
+ row: row,
347086
+ col: col
347087
+ });
347088
+ 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]++, []));
347089
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[84]++;
347090
+ console.log('analyses:', analyses.length);
347091
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[85]++;
347041
347092
  if (analyses.length === 0) {
347042
347093
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[25][0]++;
347043
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[84]++;
347094
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[86]++;
347044
347095
  return;
347045
347096
  } else {
347046
347097
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[25][1]++;
347047
347098
  }
347048
347099
 
347049
347100
  // Set selected cell
347050
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[85]++;
347101
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[87]++;
347051
347102
  this.selectedCell = {
347052
347103
  row: row,
347053
347104
  col: col
347054
347105
  };
347055
- var rect = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[86]++, event.currentTarget.getBoundingClientRect());
347056
- var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[87]++, this.$refs.tooltip);
347057
- var content = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[88]++, this.$refs.tooltipContent);
347058
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[89]++;
347106
+ var rect = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[88]++, event.currentTarget.getBoundingClientRect());
347107
+ var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[89]++, this.$refs.tooltip);
347108
+ var content = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[90]++, this.$refs.tooltipContent);
347109
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[91]++;
347110
+ console.log('tooltip ref:', !!tooltip, 'content ref:', !!content);
347111
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[92]++;
347059
347112
  if ((ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[27][0]++, !tooltip) || (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[27][1]++, !content)) {
347060
347113
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[26][0]++;
347061
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[90]++;
347114
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[93]++;
347062
347115
  return;
347063
347116
  } else {
347064
347117
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[26][1]++;
347065
347118
  }
347066
347119
 
347067
347120
  // Store analyses for later use
347068
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[91]++;
347121
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[94]++;
347069
347122
  this._currentAnalyses = analyses;
347070
347123
 
347071
347124
  // Build tooltip HTML directly (no Vue reactivity)
347072
- 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'));
347073
- 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>"));
347074
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[94]++;
347125
+ 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'));
347126
+ 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>"));
347127
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[97]++;
347075
347128
  html += '<div class="tooltip-list">';
347076
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[95]++;
347129
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[98]++;
347077
347130
  if (this.viewMode === 'individual') {
347078
347131
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[30][0]++;
347079
347132
  // Group analyses by experiment for individual view
347080
- var byExperiment = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[96]++, {});
347081
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[97]++;
347133
+ var byExperiment = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[99]++, {});
347134
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[100]++;
347082
347135
  analyses.forEach(function (a) {
347083
347136
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[37]++;
347084
- 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'));
347085
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[99]++;
347137
+ 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'));
347138
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[102]++;
347086
347139
  if (!byExperiment[expId]) {
347087
347140
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[32][0]++;
347088
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[100]++;
347141
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[103]++;
347089
347142
  byExperiment[expId] = [];
347090
347143
  } else {
347091
347144
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[32][1]++;
347092
347145
  }
347093
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[101]++;
347146
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[104]++;
347094
347147
  byExperiment[expId].push(a);
347095
347148
  });
347096
347149
 
347097
347150
  // Render grouped by experiment
347098
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[102]++;
347151
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[105]++;
347099
347152
  Object.entries(byExperiment).forEach(function (_ref3) {
347100
347153
  var _ref4 = ProjectMatrixvue_type_script_lang_js_slicedToArray(_ref3, 2),
347101
347154
  expId = _ref4[0],
347102
347155
  expAnalyses = _ref4[1];
347103
347156
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[38]++;
347104
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[103]++;
347157
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[106]++;
347105
347158
  html += "<div class=\"experiment-group-header\">".concat(expId, "</div>");
347106
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[104]++;
347159
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[107]++;
347107
347160
  expAnalyses.forEach(function (a) {
347108
347161
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[39]++;
347109
- var color = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[105]++, _this4.getStatusColor(a.status));
347110
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[106]++;
347162
+ var color = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[108]++, _this4.getStatusColor(a.status));
347163
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[109]++;
347111
347164
  html += "<div class=\"tooltip-item\" data-pk=\"".concat(a.pk, "\">");
347112
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[107]++;
347165
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[110]++;
347113
347166
  html += "<span class=\"status-dot\" style=\"background:".concat(color, "\"></span>");
347114
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[108]++;
347167
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[111]++;
347115
347168
  html += "<span class=\"analysis-pk\">".concat(a.pk, "</span>");
347116
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[109]++;
347169
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[112]++;
347117
347170
  html += "<span class=\"sep\">|</span>";
347118
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[110]++;
347171
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[113]++;
347119
347172
  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>");
347120
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[111]++;
347173
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[114]++;
347121
347174
  if (a.assembly) {
347122
347175
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[34][0]++;
347123
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[112]++;
347176
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[115]++;
347124
347177
  html += "<span class=\"assembly\"> \xB7 ".concat(a.assembly, "</span>");
347125
347178
  } else {
347126
347179
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[34][1]++;
347127
347180
  }
347128
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[113]++;
347181
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[116]++;
347129
347182
  html += "<span class=\"status-chip\" style=\"background:".concat(color, "\">").concat(a.status, "</span>");
347130
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[114]++;
347183
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[117]++;
347131
347184
  html += '</div>';
347132
347185
  });
347133
347186
  });
347134
347187
  } else {
347135
347188
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[30][1]++;
347136
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[115]++;
347189
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[118]++;
347137
347190
  // Flat list for experiment view
347138
347191
  analyses.forEach(function (a) {
347139
347192
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[40]++;
347140
- var color = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[116]++, _this4.getStatusColor(a.status));
347141
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[117]++;
347193
+ var color = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[119]++, _this4.getStatusColor(a.status));
347194
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[120]++;
347142
347195
  html += "<div class=\"tooltip-item\" data-pk=\"".concat(a.pk, "\">");
347143
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[118]++;
347196
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[121]++;
347144
347197
  html += "<span class=\"status-dot\" style=\"background:".concat(color, "\"></span>");
347145
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[119]++;
347198
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[122]++;
347146
347199
  html += "<span class=\"analysis-pk\">".concat(a.pk, "</span>");
347147
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[120]++;
347200
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[123]++;
347148
347201
  html += "<span class=\"sep\">|</span>";
347149
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[121]++;
347202
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[124]++;
347150
347203
  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>");
347151
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[122]++;
347204
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[125]++;
347152
347205
  if (a.assembly) {
347153
347206
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[36][0]++;
347154
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[123]++;
347207
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[126]++;
347155
347208
  html += "<span class=\"assembly\"> \xB7 ".concat(a.assembly, "</span>");
347156
347209
  } else {
347157
347210
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[36][1]++;
347158
347211
  }
347159
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[124]++;
347212
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[127]++;
347160
347213
  html += "<span class=\"status-chip\" style=\"background:".concat(color, "\">").concat(a.status, "</span>");
347161
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[125]++;
347214
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[128]++;
347162
347215
  html += '</div>';
347163
347216
  });
347164
347217
  }
347165
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[126]++;
347218
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[129]++;
347166
347219
  html += '</div>';
347167
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[127]++;
347220
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[130]++;
347168
347221
  content.innerHTML = html;
347169
347222
 
347170
347223
  // Add click handlers to items
347171
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[128]++;
347224
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[131]++;
347172
347225
  content.querySelectorAll('.tooltip-item').forEach(function (item) {
347173
347226
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[41]++;
347174
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[129]++;
347227
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[132]++;
347175
347228
  item.onclick = function () {
347176
347229
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[42]++;
347177
- var pk = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[130]++, parseInt(item.dataset.pk));
347178
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[131]++;
347230
+ var pk = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[133]++, parseInt(item.dataset.pk));
347231
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[134]++;
347179
347232
  _this4.hideTooltipNative();
347180
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[132]++;
347233
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[135]++;
347181
347234
  _this4.handleOpenAnalysis(pk);
347182
347235
  };
347183
347236
  });
347184
347237
 
347185
347238
  // Position and show tooltip
347186
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[133]++;
347239
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[136]++;
347187
347240
  tooltip.style.display = 'block';
347188
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[134]++;
347241
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[137]++;
347189
347242
  tooltip.style.left = "".concat(rect.left + rect.width / 2, "px");
347190
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[135]++;
347243
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[138]++;
347191
347244
  tooltip.style.top = "".concat(rect.top - 8, "px");
347245
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[139]++;
347246
+ console.log('tooltip positioned at:', {
347247
+ left: tooltip.style.left,
347248
+ top: tooltip.style.top,
347249
+ rectTop: rect.top,
347250
+ rectLeft: rect.left,
347251
+ display: tooltip.style.display
347252
+ });
347192
347253
  },
347193
347254
  hideTooltipNative: function hideTooltipNative() {
347194
347255
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[43]++;
347195
- var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[136]++, this.$refs.tooltip);
347196
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[137]++;
347256
+ var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[140]++, this.$refs.tooltip);
347257
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[141]++;
347197
347258
  if (tooltip) {
347198
347259
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[37][0]++;
347199
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[138]++;
347260
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[142]++;
347200
347261
  tooltip.style.display = 'none';
347201
347262
  } else {
347202
347263
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[37][1]++;
@@ -347206,84 +347267,84 @@ function ProjectMatrixvue_type_script_lang_js_asyncToGenerator(fn) { return func
347206
347267
  getPredominantColor: function getPredominantColor(analyses) {
347207
347268
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[44]++;
347208
347269
  // Count occurrences of each status
347209
- var statusCounts = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[139]++, {});
347210
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[140]++;
347270
+ var statusCounts = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[143]++, {});
347271
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[144]++;
347211
347272
  analyses.forEach(function (a) {
347212
347273
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[45]++;
347213
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[141]++;
347274
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[145]++;
347214
347275
  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;
347215
347276
  });
347216
347277
 
347217
347278
  // Find the most common status
347218
- var maxCount = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[142]++, 0);
347219
- var predominantStatus = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[143]++, 'SUCCEEDED'); // default
347220
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[144]++;
347279
+ var maxCount = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[146]++, 0);
347280
+ var predominantStatus = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[147]++, 'SUCCEEDED'); // default
347281
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[148]++;
347221
347282
  Object.entries(statusCounts).forEach(function (_ref5) {
347222
347283
  var _ref6 = ProjectMatrixvue_type_script_lang_js_slicedToArray(_ref5, 2),
347223
347284
  status = _ref6[0],
347224
347285
  count = _ref6[1];
347225
347286
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[46]++;
347226
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[145]++;
347287
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[149]++;
347227
347288
  if (count > maxCount) {
347228
347289
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[39][0]++;
347229
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[146]++;
347290
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[150]++;
347230
347291
  maxCount = count;
347231
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[147]++;
347292
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[151]++;
347232
347293
  predominantStatus = status;
347233
347294
  } else {
347234
347295
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[39][1]++;
347235
347296
  }
347236
347297
  });
347237
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[148]++;
347298
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[152]++;
347238
347299
  return getStatusColor(predominantStatus);
347239
347300
  },
347240
347301
  handleTooltipEnter: function handleTooltipEnter() {
347241
347302
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[47]++;
347242
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[149]++;
347303
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[153]++;
347243
347304
  this.isOverTooltip = true;
347244
347305
  },
347245
347306
  handleTooltipLeave: function handleTooltipLeave() {
347246
347307
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[48]++;
347247
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[150]++;
347308
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[154]++;
347248
347309
  this.isOverTooltip = false;
347249
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[151]++;
347310
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[155]++;
347250
347311
  this.hideTooltipNative();
347251
347312
  },
347252
347313
  handleDocumentClick: function handleDocumentClick(event) {
347253
347314
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.f[49]++;
347254
- var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[152]++, this.$refs.tooltip);
347315
+ var tooltip = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[156]++, this.$refs.tooltip);
347255
347316
 
347256
347317
  // Check if click was inside tooltip
347257
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[153]++;
347318
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[157]++;
347258
347319
  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))) {
347259
347320
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[40][0]++;
347260
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[154]++;
347321
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[158]++;
347261
347322
  return;
347262
347323
  } else {
347263
347324
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[40][1]++;
347264
347325
  }
347265
347326
 
347266
347327
  // Check if click was on a matrix cell (this opens tooltip, don't close it)
347267
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[155]++;
347328
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[159]++;
347268
347329
  if (event.target.closest('.matrix-cell.has-analyses')) {
347269
347330
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[42][0]++;
347270
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[156]++;
347331
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[160]++;
347271
347332
  return;
347272
347333
  } else {
347273
347334
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[42][1]++;
347274
347335
  }
347275
347336
 
347276
347337
  // Hide tooltip if visible
347277
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[157]++;
347338
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[161]++;
347278
347339
  this.hideTooltipNative();
347279
347340
 
347280
347341
  // Only clear selection if clicking inside the matrix scroll container
347281
347342
  // (not when clicking tabs, filters, etc.)
347282
- var scrollContainer = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[158]++, this.$refs.scrollContainer);
347283
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[159]++;
347343
+ var scrollContainer = (ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[162]++, this.$refs.scrollContainer);
347344
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[163]++;
347284
347345
  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))) {
347285
347346
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[43][0]++;
347286
- ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[160]++;
347347
+ ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.s[164]++;
347287
347348
  this.selectedCell = null;
347288
347349
  } else {
347289
347350
  ProjectMatrixvue_type_script_lang_js_cov_geimehe8j.b[43][1]++;
@@ -347293,9 +347354,9 @@ function ProjectMatrixvue_type_script_lang_js_asyncToGenerator(fn) { return func
347293
347354
  });
347294
347355
  ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=script&lang=js&
347295
347356
  /* harmony default export */ var projects_ProjectMatrixvue_type_script_lang_js_ = (ProjectMatrixvue_type_script_lang_js_);
347296
- // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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&
347297
- var ProjectMatrixvue_type_style_index_0_id_68d9db25_prod_scoped_true_lang_css_ = __webpack_require__(77611);
347298
- ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=style&index=0&id=68d9db25&prod&scoped=true&lang=css&
347357
+ // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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&
347358
+ var ProjectMatrixvue_type_style_index_0_id_28c10d94_prod_scoped_true_lang_css_ = __webpack_require__(77240);
347359
+ ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue?vue&type=style&index=0&id=28c10d94&prod&scoped=true&lang=css&
347299
347360
 
347300
347361
  ;// CONCATENATED MODULE: ./src/components/projects/ProjectMatrix.vue
347301
347362
 
@@ -347308,11 +347369,11 @@ var ProjectMatrixvue_type_style_index_0_id_68d9db25_prod_scoped_true_lang_css_ =
347308
347369
 
347309
347370
  var ProjectMatrix_component = normalizeComponent(
347310
347371
  projects_ProjectMatrixvue_type_script_lang_js_,
347311
- ProjectMatrixvue_type_template_id_68d9db25_scoped_true_render,
347312
- ProjectMatrixvue_type_template_id_68d9db25_scoped_true_staticRenderFns,
347372
+ ProjectMatrixvue_type_template_id_28c10d94_scoped_true_render,
347373
+ ProjectMatrixvue_type_template_id_28c10d94_scoped_true_staticRenderFns,
347313
347374
  false,
347314
347375
  null,
347315
- "68d9db25",
347376
+ "28c10d94",
347316
347377
  null
347317
347378
 
347318
347379
  )