@sfgrp/distinguish 0.0.3 → 0.0.6

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.
package/README.md CHANGED
@@ -56,12 +56,12 @@ Add `data-interactive-key="true"` attribute to input elements to initialize it.
56
56
  To pass the options you need to add the prefix `data-` and write the option in kebab-case, like the following example:
57
57
 
58
58
  ```html
59
- <input
59
+ <div
60
60
  data-interactive-key="true"
61
61
  data-observation-matrix-id="1"
62
62
  data-project-token="xQ9bKrhfQtHYfro9t6YY0A"
63
63
  data-base-url="https://sfg.taxonworks.org/api/v1"
64
- >
64
+ ></div>
65
65
  ```
66
66
 
67
67
  ### Imperative
@@ -6828,7 +6828,7 @@ const useRequest = (instanceConfiguration = {}) => {
6828
6828
  token: userToken
6829
6829
  }
6830
6830
  }, instanceConfiguration);
6831
- if (!projectToken || !(projectId && userToken)) {
6831
+ if (!projectToken || !(projectId && userToken) && csrfToken) {
6832
6832
  const headers = { "X-CSRF-Token": csrfToken };
6833
6833
  Object.assign(axiosConfiguration, { headers });
6834
6834
  }
@@ -7054,9 +7054,11 @@ const useSettingsStore = defineStore("settings", {
7054
7054
  refreshOnlyTaxa: false,
7055
7055
  rowFilter: true,
7056
7056
  shouldUpdate: true,
7057
- observationMatrixId: void 0
7057
+ observationMatrixId: void 0,
7058
+ errorMessage: ""
7058
7059
  }),
7059
7060
  getters: {
7061
+ getErrorMessage: (state2) => state2.errorMessage,
7060
7062
  getIsLoading: (state2) => state2.isLoading,
7061
7063
  getLayout: (state2) => state2.gridLayout,
7062
7064
  getRefreshOnlyTaxa: (state2) => state2.refreshOnlyTaxa,
@@ -7086,15 +7088,13 @@ const useSettingsStore = defineStore("settings", {
7086
7088
  opt: {
7087
7089
  refreshOnlyTaxa: this.refreshOnlyTaxa
7088
7090
  }
7089
- }).then((_) => {
7090
- this.isLoading = false;
7091
- });
7091
+ }).then((_) => this.errorMessage = "").catch((error) => this.errorMessage = error.message).finally(() => this.isLoading = false);
7092
7092
  }
7093
7093
  }
7094
7094
  }
7095
7095
  });
7096
- const _hoisted_1$v = /* @__PURE__ */ createTextVNode(" Eliminate unknowns ");
7097
- const _sfc_main$y = /* @__PURE__ */ defineComponent({
7096
+ const _hoisted_1$w = /* @__PURE__ */ createTextVNode(" Eliminate unknowns ");
7097
+ const _sfc_main$z = /* @__PURE__ */ defineComponent({
7098
7098
  __name: "FilterEliminateUnknowns",
7099
7099
  setup(__props) {
7100
7100
  const store = useFilterStore();
@@ -7112,18 +7112,18 @@ const _sfc_main$y = /* @__PURE__ */ defineComponent({
7112
7112
  }, null, 512), [
7113
7113
  [vModelCheckbox, unref(eliminateUknown)]
7114
7114
  ]),
7115
- _hoisted_1$v
7115
+ _hoisted_1$w
7116
7116
  ]);
7117
7117
  };
7118
7118
  }
7119
7119
  });
7120
- const _hoisted_1$u = /* @__PURE__ */ createBaseVNode("label", {
7120
+ const _hoisted_1$v = /* @__PURE__ */ createBaseVNode("label", {
7121
7121
  for: "languages",
7122
7122
  class: "d-block"
7123
7123
  }, " Error tolerance ", -1);
7124
7124
  const _hoisted_2$g = /* @__PURE__ */ createBaseVNode("option", { value: "" }, null, -1);
7125
- const _hoisted_3$9 = ["value"];
7126
- const _sfc_main$x = /* @__PURE__ */ defineComponent({
7125
+ const _hoisted_3$8 = ["value"];
7126
+ const _sfc_main$y = /* @__PURE__ */ defineComponent({
7127
7127
  __name: "FilterErrorTolerance",
7128
7128
  setup(__props) {
7129
7129
  const ERROR_TOLERANCE_VALUES = [0, 1, 2];
@@ -7136,7 +7136,7 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
7136
7136
  });
7137
7137
  return (_ctx, _cache) => {
7138
7138
  return openBlock(), createElementBlock("div", null, [
7139
- _hoisted_1$u,
7139
+ _hoisted_1$v,
7140
7140
  withDirectives(createBaseVNode("select", {
7141
7141
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(errorTolerance) ? errorTolerance.value = $event : null),
7142
7142
  name: "languages",
@@ -7147,7 +7147,7 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
7147
7147
  return createBaseVNode("option", {
7148
7148
  key: value,
7149
7149
  value
7150
- }, toDisplayString(value), 9, _hoisted_3$9);
7150
+ }, toDisplayString(value), 9, _hoisted_3$8);
7151
7151
  }), 64))
7152
7152
  ], 512), [
7153
7153
  [vModelSelect, unref(errorTolerance)]
@@ -7167,9 +7167,9 @@ const RANK_TYPES = [
7167
7167
  "subfamily",
7168
7168
  "family"
7169
7169
  ];
7170
- const _hoisted_1$t = /* @__PURE__ */ createBaseVNode("label", { class: "d-block" }, "Identified to rank", -1);
7170
+ const _hoisted_1$u = /* @__PURE__ */ createBaseVNode("label", { class: "d-block" }, "Identified to rank", -1);
7171
7171
  const _hoisted_2$f = /* @__PURE__ */ createBaseVNode("option", { value: void 0 }, null, -1);
7172
- const _sfc_main$w = /* @__PURE__ */ defineComponent({
7172
+ const _sfc_main$x = /* @__PURE__ */ defineComponent({
7173
7173
  __name: "FilterRank",
7174
7174
  setup(__props) {
7175
7175
  const store = useFilterStore();
@@ -7183,7 +7183,7 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
7183
7183
  });
7184
7184
  return (_ctx, _cache) => {
7185
7185
  return openBlock(), createElementBlock("div", null, [
7186
- _hoisted_1$t,
7186
+ _hoisted_1$u,
7187
7187
  withDirectives(createBaseVNode("select", {
7188
7188
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(rankSelected) ? rankSelected.value = $event : null)
7189
7189
  }, [
@@ -7198,9 +7198,9 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
7198
7198
  };
7199
7199
  }
7200
7200
  });
7201
- const _hoisted_1$s = /* @__PURE__ */ createBaseVNode("label", { class: "d-block" }, "Descriptor sorting", -1);
7201
+ const _hoisted_1$t = /* @__PURE__ */ createBaseVNode("label", { class: "d-block" }, "Descriptor sorting", -1);
7202
7202
  const _hoisted_2$e = /* @__PURE__ */ createBaseVNode("option", { value: void 0 }, null, -1);
7203
- const _sfc_main$v = /* @__PURE__ */ defineComponent({
7203
+ const _sfc_main$w = /* @__PURE__ */ defineComponent({
7204
7204
  __name: "FilterSort",
7205
7205
  setup(__props) {
7206
7206
  const SORT_TYPES = [
@@ -7219,7 +7219,7 @@ const _sfc_main$v = /* @__PURE__ */ defineComponent({
7219
7219
  });
7220
7220
  return (_ctx, _cache) => {
7221
7221
  return openBlock(), createElementBlock("div", null, [
7222
- _hoisted_1$s,
7222
+ _hoisted_1$t,
7223
7223
  withDirectives(createBaseVNode("select", {
7224
7224
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(sortDescriptors) ? sortDescriptors.value = $event : null)
7225
7225
  }, [
@@ -7234,12 +7234,12 @@ const _sfc_main$v = /* @__PURE__ */ defineComponent({
7234
7234
  };
7235
7235
  }
7236
7236
  });
7237
- const _hoisted_1$r = /* @__PURE__ */ createBaseVNode("label", {
7237
+ const _hoisted_1$s = /* @__PURE__ */ createBaseVNode("label", {
7238
7238
  for: "languages",
7239
7239
  class: "d-block"
7240
7240
  }, " Languages ", -1);
7241
7241
  const _hoisted_2$d = ["value"];
7242
- const _sfc_main$u = /* @__PURE__ */ defineComponent({
7242
+ const _sfc_main$v = /* @__PURE__ */ defineComponent({
7243
7243
  __name: "FilterLanguage",
7244
7244
  setup(__props) {
7245
7245
  const filterStore = useFilterStore();
@@ -7252,7 +7252,7 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
7252
7252
  });
7253
7253
  return (_ctx, _cache) => {
7254
7254
  return openBlock(), createElementBlock("div", null, [
7255
- _hoisted_1$r,
7255
+ _hoisted_1$s,
7256
7256
  withDirectives(createBaseVNode("select", {
7257
7257
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(language) ? language.value = $event : null),
7258
7258
  name: "languages",
@@ -7272,7 +7272,7 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
7272
7272
  }
7273
7273
  });
7274
7274
  var VBtn_vue_vue_type_style_index_0_lang = /* @__PURE__ */ (() => ".btn{border-radius:8px;border:none}.btn-primary-color{background-color:var(--primary-color);color:#fff}.btn-medium-size{min-height:var(--btn-medium-size)}\n")();
7275
- const _sfc_main$t = /* @__PURE__ */ defineComponent({
7275
+ const _sfc_main$u = /* @__PURE__ */ defineComponent({
7276
7276
  __name: "VBtn",
7277
7277
  props: {
7278
7278
  color: { default: "primary" },
@@ -7295,11 +7295,11 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
7295
7295
  }
7296
7296
  });
7297
7297
  var VModal_vue_vue_type_style_index_0_lang = /* @__PURE__ */ (() => '.modal-mask{position:fixed;z-index:1099;top:0;left:0;width:100%;height:100%;background-color:#00000080;display:table;transition:opacity .3s ease}.modal-wrapper{display:table-cell;vertical-align:middle}.modal-container{position:relative;width:300px;margin:0 auto;padding:20px 30px;background-color:#fff;border-radius:2px;box-shadow:0 2px 8px #00000054;transition:all .3s ease;font-family:IBM Plex Sans,Helvetica,Arial,sans-serif;max-height:90vh;overflow-y:auto}.modal-close{position:absolute;cursor:pointer;top:26px;right:30px;width:10px;height:10px;background-image:image-url("close.svg");background-size:10px 10px;opacity:.4}.modal-close:hover{opacity:1}.modal-header h3{margin-top:0;color:#42b983}.modal-body{margin:20px 0}.modal-default-button{float:right}.modal-enter,.modal-leave-active{opacity:0}.modal-enter .modal-container,.modal-leave-active .modal-container{-webkit-transform:scale(1.1);transform:scale(1.1)}.transparent-modal{background-color:#000c!important}.transparent-modal .modal-header h3{margin:0 0 2em 2em;padding:6px 6px 6px 12px;border-radius:3px;background-color:#0000004d;color:#ffffff80}.transparent-modal .modal-close{right:42px;top:30px;color:#ffffff80;background-image:image-url("w_close.svg")}.transparent-modal .modal-container{width:70%;position:relative;background-color:transparent!important;box-shadow:none}.transparent-modal .modal-container .modal-body{overflow:auto;margin-right:1em;max-height:80vh}.transparent-modal .modal-container .modal-body::-webkit-scrollbar{position:absolute;right:40px;-webkit-appearance:none}.transparent-modal .modal-container .modal-body::-webkit-scrollbar:vertical{width:6px}.transparent-modal .modal-container .modal-body::-webkit-scrollbar:horizontal{height:6px}.transparent-modal .modal-container .modal-body::-webkit-scrollbar-thumb{border-radius:8px;width:11px;height:5px;border:rgba(255,255,255,.5);background-color:#ffffff80}.transparent-modal .modal-container .modal-body::-webkit-scrollbar-track{background-color:#0000004d;border-radius:8px}\n')();
7298
- const _hoisted_1$q = { class: "modal-wrapper" };
7298
+ const _hoisted_1$r = { class: "modal-wrapper" };
7299
7299
  const _hoisted_2$c = { class: "modal-header" };
7300
- const _hoisted_3$8 = { class: "modal-body" };
7301
- const _hoisted_4$5 = { class: "modal-footer" };
7302
- const _sfc_main$s = /* @__PURE__ */ defineComponent({
7300
+ const _hoisted_3$7 = { class: "modal-body" };
7301
+ const _hoisted_4$6 = { class: "modal-footer" };
7302
+ const _sfc_main$t = /* @__PURE__ */ defineComponent({
7303
7303
  __name: "VModal",
7304
7304
  props: {
7305
7305
  containerClass: null,
@@ -7323,7 +7323,7 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
7323
7323
  onClick: _cache[2] || (_cache[2] = ($event) => emit("close")),
7324
7324
  onKey: _cache[3] || (_cache[3] = ($event) => emit("close"))
7325
7325
  }, [
7326
- createBaseVNode("div", _hoisted_1$q, [
7326
+ createBaseVNode("div", _hoisted_1$r, [
7327
7327
  createBaseVNode("div", {
7328
7328
  class: normalizeClass(["modal-container", __props.containerClass]),
7329
7329
  style: normalizeStyle(__spreadValues({}, __props.containerStyle)),
@@ -7337,10 +7337,10 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
7337
7337
  }),
7338
7338
  renderSlot(_ctx.$slots, "header")
7339
7339
  ]),
7340
- createBaseVNode("div", _hoisted_3$8, [
7340
+ createBaseVNode("div", _hoisted_3$7, [
7341
7341
  renderSlot(_ctx.$slots, "body")
7342
7342
  ]),
7343
- createBaseVNode("div", _hoisted_4$5, [
7343
+ createBaseVNode("div", _hoisted_4$6, [
7344
7344
  renderSlot(_ctx.$slots, "footer")
7345
7345
  ])
7346
7346
  ], 6)
@@ -7352,11 +7352,11 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
7352
7352
  };
7353
7353
  }
7354
7354
  });
7355
- const _hoisted_1$p = /* @__PURE__ */ createTextVNode(" Keyword ");
7355
+ const _hoisted_1$q = /* @__PURE__ */ createTextVNode(" Keyword ");
7356
7356
  const _hoisted_2$b = /* @__PURE__ */ createBaseVNode("h3", null, "Keywords", -1);
7357
- const _hoisted_3$7 = { class: "list-none p-0" };
7358
- const _hoisted_4$4 = ["value"];
7359
- const _sfc_main$r = /* @__PURE__ */ defineComponent({
7357
+ const _hoisted_3$6 = { class: "list-none p-0" };
7358
+ const _hoisted_4$5 = ["value"];
7359
+ const _sfc_main$s = /* @__PURE__ */ defineComponent({
7360
7360
  __name: "FilterKeywords",
7361
7361
  setup(__props) {
7362
7362
  const store = useObservationMatrixStore();
@@ -7370,17 +7370,17 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
7370
7370
  });
7371
7371
  return (_ctx, _cache) => {
7372
7372
  return openBlock(), createElementBlock(Fragment, null, [
7373
- createVNode(_sfc_main$t, {
7373
+ createVNode(_sfc_main$u, {
7374
7374
  color: "primary",
7375
7375
  size: "medium",
7376
7376
  onClick: _cache[0] || (_cache[0] = ($event) => isModalVisible.value = true)
7377
7377
  }, {
7378
7378
  default: withCtx(() => [
7379
- _hoisted_1$p
7379
+ _hoisted_1$q
7380
7380
  ]),
7381
7381
  _: 1
7382
7382
  }),
7383
- isModalVisible.value ? (openBlock(), createBlock(_sfc_main$s, {
7383
+ isModalVisible.value ? (openBlock(), createBlock(_sfc_main$t, {
7384
7384
  key: 0,
7385
7385
  onClose: _cache[2] || (_cache[2] = ($event) => isModalVisible.value = false)
7386
7386
  }, {
@@ -7388,7 +7388,7 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
7388
7388
  _hoisted_2$b
7389
7389
  ]),
7390
7390
  body: withCtx(() => [
7391
- createBaseVNode("ul", _hoisted_3$7, [
7391
+ createBaseVNode("ul", _hoisted_3$6, [
7392
7392
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(store).getKeywords, ({ keywordId, name }) => {
7393
7393
  return openBlock(), createElementBlock("li", { key: keywordId }, [
7394
7394
  createBaseVNode("label", null, [
@@ -7396,7 +7396,7 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
7396
7396
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => isRef(keywordIds) ? keywordIds.value = $event : null),
7397
7397
  value: keywordId,
7398
7398
  type: "checkbox"
7399
- }, null, 8, _hoisted_4$4), [
7399
+ }, null, 8, _hoisted_4$5), [
7400
7400
  [vModelCheckbox, unref(keywordIds)]
7401
7401
  ]),
7402
7402
  createTextVNode(" " + toDisplayString(name), 1)
@@ -7411,8 +7411,8 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
7411
7411
  };
7412
7412
  }
7413
7413
  });
7414
- const _hoisted_1$o = /* @__PURE__ */ createTextVNode(" Refresh only taxa ");
7415
- const _sfc_main$q = /* @__PURE__ */ defineComponent({
7414
+ const _hoisted_1$p = /* @__PURE__ */ createTextVNode(" Refresh only taxa ");
7415
+ const _sfc_main$r = /* @__PURE__ */ defineComponent({
7416
7416
  __name: "SettingRefresh",
7417
7417
  setup(__props) {
7418
7418
  const store = useSettingsStore();
@@ -7430,7 +7430,7 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
7430
7430
  }, null, 512), [
7431
7431
  [vModelCheckbox, unref(refreshTaxa)]
7432
7432
  ]),
7433
- _hoisted_1$o
7433
+ _hoisted_1$p
7434
7434
  ]);
7435
7435
  };
7436
7436
  }
@@ -7443,41 +7443,41 @@ var _export_sfc = (sfc, props) => {
7443
7443
  }
7444
7444
  return target;
7445
7445
  };
7446
- const _sfc_main$p = {};
7447
- const _hoisted_1$n = { class: "menu-list" };
7446
+ const _sfc_main$q = {};
7447
+ const _hoisted_1$o = { class: "menu-list" };
7448
7448
  function _sfc_render$2(_ctx, _cache) {
7449
- return openBlock(), createElementBlock("ul", _hoisted_1$n, [
7449
+ return openBlock(), createElementBlock("ul", _hoisted_1$o, [
7450
7450
  renderSlot(_ctx.$slots, "default")
7451
7451
  ]);
7452
7452
  }
7453
- var MenuList = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["render", _sfc_render$2]]);
7453
+ var MenuList = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["render", _sfc_render$2]]);
7454
7454
  var MenuItem_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => ".list-item[data-v-3f00bdeb]{justify-content:center;padding-left:1em;padding-right:1em;border-right:1px solid #e5e5e5}\n")();
7455
- const _sfc_main$o = {};
7456
- const _hoisted_1$m = { class: "list-item" };
7455
+ const _sfc_main$p = {};
7456
+ const _hoisted_1$n = { class: "list-item" };
7457
7457
  function _sfc_render$1(_ctx, _cache) {
7458
- return openBlock(), createElementBlock("li", _hoisted_1$m, [
7458
+ return openBlock(), createElementBlock("li", _hoisted_1$n, [
7459
7459
  renderSlot(_ctx.$slots, "default", {}, void 0, true)
7460
7460
  ]);
7461
7461
  }
7462
- var MenuListItem = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["render", _sfc_render$1], ["__scopeId", "data-v-3f00bdeb"]]);
7462
+ var MenuListItem = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["render", _sfc_render$1], ["__scopeId", "data-v-3f00bdeb"]]);
7463
7463
  const LAYOUT_MODES = {
7464
7464
  "layout-mode-1": "layout-mode-2",
7465
7465
  "layout-mode-2": "layout-mode-1"
7466
7466
  };
7467
7467
  var VGrid_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => ".grid[data-v-203acd5e]{display:grid;grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,1fr);grid-column-gap:0px;grid-row-gap:0px;grid-gap:1px;background-color:var(--border-color);box-shadow:0 2px 2px #0003}\n")();
7468
- const _sfc_main$n = {};
7469
- const _hoisted_1$l = { class: "grid" };
7468
+ const _sfc_main$o = {};
7469
+ const _hoisted_1$m = { class: "grid" };
7470
7470
  function _sfc_render(_ctx, _cache) {
7471
- return openBlock(), createElementBlock("div", _hoisted_1$l, [
7471
+ return openBlock(), createElementBlock("div", _hoisted_1$m, [
7472
7472
  renderSlot(_ctx.$slots, "default", {}, void 0, true)
7473
7473
  ]);
7474
7474
  }
7475
- var VGrid = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["render", _sfc_render], ["__scopeId", "data-v-203acd5e"]]);
7475
+ var VGrid = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["render", _sfc_render], ["__scopeId", "data-v-203acd5e"]]);
7476
7476
  var GridToggle_vue_vue_type_style_index_0_lang = /* @__PURE__ */ (() => ".grid-icon{width:20px;height:12px;border:2px solid transparent;background-color:transparent;grid-gap:2px}.grid-icon>div{background-color:#fff}\n")();
7477
- const _hoisted_1$k = /* @__PURE__ */ createBaseVNode("div", { class: "panel-descriptors" }, null, -1);
7477
+ const _hoisted_1$l = /* @__PURE__ */ createBaseVNode("div", { class: "panel-descriptors" }, null, -1);
7478
7478
  const _hoisted_2$a = /* @__PURE__ */ createBaseVNode("div", { class: "panel-remaining" }, null, -1);
7479
- const _hoisted_3$6 = /* @__PURE__ */ createBaseVNode("div", { class: "panel-eliminated" }, null, -1);
7480
- const _sfc_main$m = /* @__PURE__ */ defineComponent({
7479
+ const _hoisted_3$5 = /* @__PURE__ */ createBaseVNode("div", { class: "panel-eliminated" }, null, -1);
7480
+ const _sfc_main$n = /* @__PURE__ */ defineComponent({
7481
7481
  __name: "GridToggle",
7482
7482
  setup(__props) {
7483
7483
  const store = useSettingsStore();
@@ -7488,16 +7488,16 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
7488
7488
  });
7489
7489
  };
7490
7490
  return (_ctx, _cache) => {
7491
- return openBlock(), createBlock(_sfc_main$t, {
7491
+ return openBlock(), createBlock(_sfc_main$u, {
7492
7492
  class: normalizeClass(unref(LAYOUT_MODES)[unref(gridLayout)]),
7493
7493
  onClick: setLayout
7494
7494
  }, {
7495
7495
  default: withCtx(() => [
7496
7496
  createVNode(VGrid, { class: "grid-icon" }, {
7497
7497
  default: withCtx(() => [
7498
- _hoisted_1$k,
7498
+ _hoisted_1$l,
7499
7499
  _hoisted_2$a,
7500
- _hoisted_3$6
7500
+ _hoisted_3$5
7501
7501
  ]),
7502
7502
  _: 1
7503
7503
  })
@@ -7507,92 +7507,100 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
7507
7507
  };
7508
7508
  }
7509
7509
  });
7510
- const _hoisted_1$j = /* @__PURE__ */ createTextVNode(" Reset ");
7511
- const _sfc_main$l = /* @__PURE__ */ defineComponent({
7510
+ const _hoisted_1$k = /* @__PURE__ */ createTextVNode(" Reset ");
7511
+ const _sfc_main$m = /* @__PURE__ */ defineComponent({
7512
7512
  __name: "ResetButton",
7513
7513
  setup(__props) {
7514
7514
  const store = useFilterStore();
7515
7515
  return (_ctx, _cache) => {
7516
- return openBlock(), createBlock(_sfc_main$t, {
7516
+ return openBlock(), createBlock(_sfc_main$u, {
7517
7517
  color: "primary",
7518
7518
  size: "medium",
7519
7519
  onClick: _cache[0] || (_cache[0] = ($event) => unref(store).$reset())
7520
7520
  }, {
7521
7521
  default: withCtx(() => [
7522
- _hoisted_1$j
7522
+ _hoisted_1$k
7523
7523
  ]),
7524
7524
  _: 1
7525
7525
  });
7526
7526
  };
7527
7527
  }
7528
7528
  });
7529
- var HeaderBar_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => ".header-bar[data-v-2f031624]{background-color:var(--bg-panel-color);padding:1em;box-shadow:#24252614 4px 4px 15px;border-radius:.9rem;display:flex;justify-content:space-between;align-items:center}.header-bar__buttons[data-v-2f031624]{display:flex;align-items:center}\n")();
7530
- const _withScopeId$1 = (n) => (pushScopeId("data-v-2f031624"), n = n(), popScopeId(), n);
7529
+ const _hoisted_1$j = { class: "error-message" };
7530
+ const _sfc_main$l = /* @__PURE__ */ defineComponent({
7531
+ __name: "ErrorMessage",
7532
+ setup(__props) {
7533
+ const store = useSettingsStore();
7534
+ return (_ctx, _cache) => {
7535
+ return openBlock(), createElementBlock("span", _hoisted_1$j, toDisplayString(unref(store).getErrorMessage), 1);
7536
+ };
7537
+ }
7538
+ });
7539
+ var HeaderBar_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => ".header-bar[data-v-1fab3a2c]{background-color:var(--bg-panel-color);padding:1em;box-shadow:#24252614 4px 4px 15px;border-radius:.9rem;display:flex;justify-content:space-between;align-items:center}.header-bar__buttons[data-v-1fab3a2c]{display:flex;align-items:center}\n")();
7531
7540
  const _hoisted_1$i = { class: "header-bar" };
7532
- const _hoisted_2$9 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("div", null, null, -1));
7533
- const _hoisted_3$5 = { class: "header-bar__buttons" };
7541
+ const _hoisted_2$9 = { class: "header-bar__buttons" };
7534
7542
  const _sfc_main$k = /* @__PURE__ */ defineComponent({
7535
7543
  __name: "HeaderBar",
7536
7544
  setup(__props) {
7537
7545
  return (_ctx, _cache) => {
7538
7546
  return openBlock(), createElementBlock("div", _hoisted_1$i, [
7539
- _hoisted_2$9,
7547
+ createVNode(_sfc_main$l),
7540
7548
  createVNode(MenuList, null, {
7541
7549
  default: withCtx(() => [
7542
7550
  createVNode(MenuListItem, null, {
7543
7551
  default: withCtx(() => [
7544
- createVNode(_sfc_main$q)
7552
+ createVNode(_sfc_main$r)
7545
7553
  ]),
7546
7554
  _: 1
7547
7555
  }),
7548
7556
  createVNode(MenuListItem, null, {
7549
7557
  default: withCtx(() => [
7550
- createVNode(_sfc_main$y)
7558
+ createVNode(_sfc_main$z)
7551
7559
  ]),
7552
7560
  _: 1
7553
7561
  }),
7554
7562
  createVNode(MenuListItem, null, {
7555
7563
  default: withCtx(() => [
7556
- createVNode(_sfc_main$x)
7564
+ createVNode(_sfc_main$y)
7557
7565
  ]),
7558
7566
  _: 1
7559
7567
  }),
7560
7568
  createVNode(MenuListItem, null, {
7561
7569
  default: withCtx(() => [
7562
- createVNode(_sfc_main$w)
7570
+ createVNode(_sfc_main$x)
7563
7571
  ]),
7564
7572
  _: 1
7565
7573
  }),
7566
7574
  createVNode(MenuListItem, null, {
7567
7575
  default: withCtx(() => [
7568
- createVNode(_sfc_main$u)
7576
+ createVNode(_sfc_main$v)
7569
7577
  ]),
7570
7578
  _: 1
7571
7579
  }),
7572
7580
  createVNode(MenuListItem, null, {
7573
7581
  default: withCtx(() => [
7574
- createVNode(_sfc_main$v)
7582
+ createVNode(_sfc_main$w)
7575
7583
  ]),
7576
7584
  _: 1
7577
7585
  }),
7578
7586
  createVNode(MenuListItem, null, {
7579
7587
  default: withCtx(() => [
7580
- createVNode(_sfc_main$r)
7588
+ createVNode(_sfc_main$s)
7581
7589
  ]),
7582
7590
  _: 1
7583
7591
  })
7584
7592
  ]),
7585
7593
  _: 1
7586
7594
  }),
7587
- createBaseVNode("div", _hoisted_3$5, [
7588
- createVNode(_sfc_main$l, { class: "margin-small-right" }),
7589
- createVNode(_sfc_main$m)
7595
+ createBaseVNode("div", _hoisted_2$9, [
7596
+ createVNode(_sfc_main$m, { class: "margin-small-right" }),
7597
+ createVNode(_sfc_main$n)
7590
7598
  ])
7591
7599
  ]);
7592
7600
  };
7593
7601
  }
7594
7602
  });
7595
- var HeaderBar = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-2f031624"]]);
7603
+ var HeaderBar = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-1fab3a2c"]]);
7596
7604
  const _hoisted_1$h = ["innerHTML"];
7597
7605
  const _sfc_main$j = /* @__PURE__ */ defineComponent({
7598
7606
  __name: "PanelRowItem",
@@ -7631,7 +7639,7 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
7631
7639
  const _hoisted_1$g = /* @__PURE__ */ createTextVNode(" Select ");
7632
7640
  const _hoisted_2$8 = /* @__PURE__ */ createBaseVNode("h3", null, "Filter row", -1);
7633
7641
  const _hoisted_3$4 = { class: "list-none p-0" };
7634
- const _hoisted_4$3 = ["value"];
7642
+ const _hoisted_4$4 = ["value"];
7635
7643
  const _sfc_main$h = /* @__PURE__ */ defineComponent({
7636
7644
  __name: "FilterRow",
7637
7645
  setup(__props) {
@@ -7660,7 +7668,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
7660
7668
  });
7661
7669
  return (_ctx, _cache) => {
7662
7670
  return openBlock(), createElementBlock(Fragment, null, [
7663
- createVNode(_sfc_main$t, {
7671
+ createVNode(_sfc_main$u, {
7664
7672
  color: "primary",
7665
7673
  size: "medium",
7666
7674
  onClick: _cache[0] || (_cache[0] = ($event) => isModalVisible.value = true)
@@ -7670,7 +7678,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
7670
7678
  ]),
7671
7679
  _: 1
7672
7680
  }),
7673
- isModalVisible.value ? (openBlock(), createBlock(_sfc_main$s, {
7681
+ isModalVisible.value ? (openBlock(), createBlock(_sfc_main$t, {
7674
7682
  key: 0,
7675
7683
  onClose: _cache[2] || (_cache[2] = ($event) => isModalVisible.value = false)
7676
7684
  }, {
@@ -7688,7 +7696,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
7688
7696
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => isRef(rowIds) ? rowIds.value = $event : null),
7689
7697
  value: row.rowId,
7690
7698
  type: "checkbox"
7691
- }, null, 8, _hoisted_4$3), [
7699
+ }, null, 8, _hoisted_4$4), [
7692
7700
  [vModelCheckbox, unref(rowIds)]
7693
7701
  ]),
7694
7702
  createTextVNode(" " + toDisplayString(row.objectLabel), 1)
@@ -7848,8 +7856,9 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
7848
7856
  });
7849
7857
  var DescriptorModal_vue_vue_type_style_index_0_lang = /* @__PURE__ */ (() => ".descriptor-modal{width:1000px;max-height:90vh;overflow-y:scroll}.descriptor-modal__depiction{display:flex;justify-content:center}\n")();
7850
7858
  const _hoisted_1$b = { key: 0 };
7851
- const _hoisted_2$5 = { class: "descriptor-modal__depiction" };
7852
- const _hoisted_3$3 = /* @__PURE__ */ createBaseVNode("hr", null, null, -1);
7859
+ const _hoisted_2$5 = { key: 1 };
7860
+ const _hoisted_3$3 = { class: "descriptor-modal__depiction" };
7861
+ const _hoisted_4$3 = /* @__PURE__ */ createBaseVNode("hr", null, null, -1);
7853
7862
  const _sfc_main$c = /* @__PURE__ */ defineComponent({
7854
7863
  __name: "DescriptorModal",
7855
7864
  props: {
@@ -7857,13 +7866,13 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
7857
7866
  },
7858
7867
  setup(__props) {
7859
7868
  return (_ctx, _cache) => {
7860
- return openBlock(), createBlock(_sfc_main$s, { "container-class": "descriptor-modal" }, {
7869
+ return openBlock(), createBlock(_sfc_main$t, { "container-class": "descriptor-modal" }, {
7861
7870
  header: withCtx(() => [
7862
7871
  createBaseVNode("h3", null, toDisplayString(__props.descriptor.name), 1),
7863
- __props.descriptor.description ? (openBlock(), createElementBlock("span", _hoisted_1$b, toDisplayString(__props.descriptor.description), 1)) : createCommentVNode("", true)
7872
+ __props.descriptor.description ? (openBlock(), createElementBlock("span", _hoisted_1$b, toDisplayString(__props.descriptor.description), 1)) : (openBlock(), createElementBlock("i", _hoisted_2$5, " No further description available. "))
7864
7873
  ]),
7865
7874
  body: withCtx(() => [
7866
- createBaseVNode("div", _hoisted_2$5, [
7875
+ createBaseVNode("div", _hoisted_3$3, [
7867
7876
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.descriptor.depictionIds, (depictionId) => {
7868
7877
  return openBlock(), createBlock(_sfc_main$f, {
7869
7878
  key: depictionId,
@@ -7871,7 +7880,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
7871
7880
  }, null, 8, ["depiction-id"]);
7872
7881
  }), 128))
7873
7882
  ]),
7874
- _hoisted_3$3,
7883
+ _hoisted_4$3,
7875
7884
  __props.descriptor.type === unref(descriptorTypes).Qualitative ? (openBlock(), createBlock(_sfc_main$d, {
7876
7885
  key: 0,
7877
7886
  descriptor: __props.descriptor
@@ -7928,10 +7937,16 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
7928
7937
  const useStore = useFilterStore();
7929
7938
  const fieldValue = ref(String(useStore.getDescriptorValueById(props.descriptor.descriptorId)));
7930
7939
  const setDescriptorValue = () => {
7931
- useStore.setDescriptor({
7932
- descriptorId: props.descriptor.descriptorId,
7933
- value: fieldValue.value
7934
- });
7940
+ const { descriptorId } = props.descriptor;
7941
+ const value = fieldValue.value.trim();
7942
+ if (value) {
7943
+ useStore.setDescriptor({
7944
+ descriptorId,
7945
+ value
7946
+ });
7947
+ } else {
7948
+ useStore.removeDescriptor(descriptorId);
7949
+ }
7935
7950
  };
7936
7951
  return (_ctx, _cache) => {
7937
7952
  return openBlock(), createBlock(_sfc_main$b, { descriptor: __props.descriptor }, {
@@ -8064,10 +8079,16 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
8064
8079
  const useStore = useFilterStore();
8065
8080
  const fieldValue = ref(String(useStore.getDescriptorValueById(props.descriptor.descriptorId)));
8066
8081
  const setDescriptorValue = () => {
8067
- useStore.setDescriptor({
8068
- descriptorId: props.descriptor.descriptorId,
8069
- value: fieldValue.value
8070
- });
8082
+ const { descriptorId } = props.descriptor;
8083
+ const value = fieldValue.value.trim();
8084
+ if (value) {
8085
+ useStore.setDescriptor({
8086
+ descriptorId,
8087
+ value
8088
+ });
8089
+ } else {
8090
+ useStore.removeDescriptor(descriptorId);
8091
+ }
8071
8092
  };
8072
8093
  return (_ctx, _cache) => {
8073
8094
  return openBlock(), createBlock(_sfc_main$b, { descriptor: __props.descriptor }, {
@@ -8351,14 +8372,13 @@ const __default__ = {
8351
8372
  };
8352
8373
  const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({}, __default__), {
8353
8374
  props: {
8354
- observationMatrixId: { default: 1 },
8375
+ observationMatrixId: null,
8355
8376
  apiConfig: null
8356
8377
  },
8357
8378
  setup(__props) {
8358
8379
  const props = __props;
8359
8380
  const settingStore = useSettingsStore();
8360
8381
  const filterStore = useFilterStore();
8361
- useObservationMatrixStore();
8362
8382
  const isLoading = computed(() => settingStore.getIsLoading);
8363
8383
  const gridLayout = computed(() => settingStore.getLayout);
8364
8384
  const initialize = () => {
@@ -8396,7 +8416,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
8396
8416
  };
8397
8417
  }
8398
8418
  }));
8399
- var main = /* @__PURE__ */ (() => ":root{--bg-color: #f7f8fc;--bg-panel-color: #FFFFFF;--primary-color: #5D9ECE;--border-color: #CCCCCC;--link-color: #5D9ECE;--btn-medium-size: 28px}.d-block{display:block}.d-flex{display:flex}.justify-between{justify-content:space-between}.align-center{align-items:center}.w-100{height:100%}.margin-medium-bottom{margin-bottom:1em}.margin-small-right{margin-right:.5em}.p-0{padding:0}.link{color:var(--link-color);cursor:pointer}.list-none{list-style:none}body{background-color:var(--bg-color)}.vue-interactive-keys{height:calc(100vh - 160px);max-height:calc(100vh - 160px);font-family:Arial,Helvetica,sans-serif;font-size:13px}.vue-interactive-keys .grid-panel{background-color:#fff;padding:1rem;overflow-y:scroll}.vue-interactive-keys .layout-mode-1 .panel-descriptors{grid-area:1/1/2/3}.vue-interactive-keys .layout-mode-1 .panel-remaining{grid-area:2/1/3/2}.vue-interactive-keys .layout-mode-1 .panel-eliminated{grid-area:2/2/3/3}.vue-interactive-keys .layout-mode-2 .panel-descriptors{grid-area:1/1/3/2}.vue-interactive-keys .layout-mode-2 .panel-remaining{grid-area:1/2/2/3}.vue-interactive-keys .layout-mode-2 .panel-eliminated{grid-area:2/2/3/3}.vue-interactive-keys input,.vue-interactive-keys select{padding:.5em 1em;border:1px solid;border-radius:2px;border-color:var(--border-color);background-color:#fff}\n")();
8419
+ var main = /* @__PURE__ */ (() => ":root{--bg-color: #f7f8fc;--bg-panel-color: #FFFFFF;--error-color: #FF0000;--primary-color: #5D9ECE;--border-color: #CCCCCC;--link-color: #5D9ECE;--btn-medium-size: 28px}.d-block{display:block}.d-flex{display:flex}.justify-between{justify-content:space-between}.align-center{align-items:center}.w-100{height:100%}.margin-medium-bottom{margin-bottom:1em}.margin-small-right{margin-right:.5em}.p-0{padding:0}.link{color:var(--link-color);cursor:pointer}.list-none{list-style:none}body{background-color:var(--bg-color)}.vue-interactive-keys{height:calc(100vh - 160px);max-height:calc(100vh - 160px);font-family:Arial,Helvetica,sans-serif;font-size:13px}.vue-interactive-keys .grid-panel{background-color:#fff;padding:1rem;overflow-y:scroll}.vue-interactive-keys .layout-mode-1 .panel-descriptors{grid-area:1/1/2/3}.vue-interactive-keys .layout-mode-1 .panel-remaining{grid-area:2/1/3/2}.vue-interactive-keys .layout-mode-1 .panel-eliminated{grid-area:2/2/3/3}.vue-interactive-keys .layout-mode-2 .panel-descriptors{grid-area:1/1/3/2}.vue-interactive-keys .layout-mode-2 .panel-remaining{grid-area:1/2/2/3}.vue-interactive-keys .layout-mode-2 .panel-eliminated{grid-area:2/2/3/3}.vue-interactive-keys input,.vue-interactive-keys select{padding:.5em 1em;border:1px solid;border-radius:2px;border-color:var(--border-color);background-color:#fff}.vue-interactive-keys .error-message{color:var(--error-color)}\n")();
8400
8420
  function discoverInteractiveKey(selector) {
8401
8421
  const tag = selector || '[data-interactive-key="true"]';
8402
8422
  const elements = document.querySelectorAll(tag);