@milaboratories/graph-maker 1.1.207 → 1.1.209

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/components/Chart.vue.d.ts +1 -0
  2. package/dist/components/Chart.vue.d.ts.map +1 -1
  3. package/dist/components/Chart.vue.js +164 -196
  4. package/dist/components/Chart.vue.js.map +1 -1
  5. package/dist/components/{Loading.vue.d.ts → GraphStatusScreen.vue.d.ts} +8 -6
  6. package/dist/components/GraphStatusScreen.vue.d.ts.map +1 -0
  7. package/dist/components/GraphStatusScreen.vue.js +10 -0
  8. package/dist/components/GraphStatusScreen.vue.js.map +1 -0
  9. package/dist/components/GraphStatusScreen.vue2.js +68 -0
  10. package/dist/components/GraphStatusScreen.vue2.js.map +1 -0
  11. package/dist/components/GraphStatusScreen.vue3.js +11 -0
  12. package/dist/components/GraphStatusScreen.vue3.js.map +1 -0
  13. package/dist/components/LassoControls/index.vue.d.ts +1 -0
  14. package/dist/components/LassoControls/index.vue.d.ts.map +1 -1
  15. package/dist/components/LassoControls/index.vue.js +7 -91
  16. package/dist/components/LassoControls/index.vue.js.map +1 -1
  17. package/dist/components/LassoControls/index.vue2.js +136 -2
  18. package/dist/components/LassoControls/index.vue2.js.map +1 -1
  19. package/dist/components/LassoControls/index.vue3.js +27 -0
  20. package/dist/components/LassoControls/index.vue3.js.map +1 -0
  21. package/dist/components/SettingsTabs/index.vue.d.ts +1 -1
  22. package/dist/components/SettingsTabs/index.vue.d.ts.map +1 -1
  23. package/dist/components/SettingsTabs/index.vue.js +77 -32
  24. package/dist/components/SettingsTabs/index.vue.js.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/index.vue.d.ts.map +1 -1
  27. package/dist/index.vue.js +152 -143
  28. package/dist/index.vue.js.map +1 -1
  29. package/dist/store.d.ts.map +1 -1
  30. package/dist/store.js +61 -61
  31. package/dist/store.js.map +1 -1
  32. package/package.json +2 -2
  33. package/dist/components/Loading.vue.d.ts.map +0 -1
  34. package/dist/components/Loading.vue.js +0 -37
  35. package/dist/components/Loading.vue.js.map +0 -1
  36. package/dist/components/Loading.vue2.js +0 -5
  37. package/dist/components/Loading.vue2.js.map +0 -1
@@ -9,6 +9,7 @@ type __VLS_Props = {
9
9
  errorInfo: ErrorInfo | null;
10
10
  customStatusText?: Partial<StatusTextData>;
11
11
  allowTitleEditing?: boolean;
12
+ isScatterplotZoomChanged?: boolean;
12
13
  };
13
14
  declare function __VLS_template(): {
14
15
  attrs: Partial<{}>;
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.vue.d.ts","sourceRoot":"","sources":["../../src/components/Chart.vue"],"names":[],"mappings":"AA0SA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAa1E,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAM/D,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1C,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAiMF,iBAAS,cAAc;WAmST,OAAO,IAA6B;;yBAXrB,GAAG;;;;;;EAgB/B;AAsCD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;;kBASnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAQpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"Chart.vue.d.ts","sourceRoot":"","sources":["../../src/components/Chart.vue"],"names":[],"mappings":"AAqQA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAY1E,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO/D,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1C,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAiKF,iBAAS,cAAc;WAyQT,OAAO,IAA6B;;yBAXrB,GAAG;;;;;;EAgB/B;AAiCD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;;kBASnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAQpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,28 +1,20 @@
1
- import { defineComponent as Z, ref as g, watch as T, computed as d, createElementBlock as S, openBlock as s, createElementVNode as h, createVNode as x, createCommentVNode as v, createBlock as m, withKeys as ee, resolveDynamicComponent as te, renderSlot as oe, unref as l, withCtx as C, createTextVNode as B, normalizeClass as H, withModifiers as N } from "vue";
2
- import { PlNotificationAlert as ae, PlDropdown as re, PlAutocomplete as ne, PlAgOverlayLoading as le, PlAgOverlayNoRows as ie, PlBtnGhost as O } from "@platforma-sdk/ui-vue";
3
- import se from "./DendroTable.vue.js";
4
- import ue from "./DendroTooltip.vue.js";
5
- import ce from "./LassoControls/index.vue.js";
6
- import de from "./Loading.vue.js";
7
- import ve from "./Zoom/index.vue.js";
8
- import { MAX_SEARCH_OPTIONS_LIST_LENGTH as A, DEFAULT_STATUS_TEXT as me } from "../constantsCommon.js";
9
- import fe from "../icons/EditIcon.vue.js";
10
- import { useStore as pe } from "../store.js";
11
- const ye = { class: "chart_container" }, Se = { class: "chart_header" }, he = ["value", "disabled"], ge = { class: "chart_titleLineSlot" }, Te = {
1
+ import { defineComponent as X, ref as h, watch as y, computed as p, createElementBlock as w, openBlock as s, createElementVNode as S, createVNode as C, createCommentVNode as c, createBlock as d, withKeys as J, resolveDynamicComponent as Q, renderSlot as Y, unref as r, withCtx as k, createTextVNode as B, normalizeClass as R, withModifiers as U } from "vue";
2
+ import { PlNotificationAlert as _, PlDropdown as ee, PlAutocomplete as te, PlBtnGhost as $ } from "@platforma-sdk/ui-vue";
3
+ import ae from "./DendroTable.vue.js";
4
+ import oe from "./DendroTooltip.vue.js";
5
+ import le from "./LassoControls/index.vue.js";
6
+ import re from "./Zoom/index.vue.js";
7
+ import { MAX_SEARCH_OPTIONS_LIST_LENGTH as A } from "../constantsCommon.js";
8
+ import ne from "../icons/EditIcon.vue.js";
9
+ import { useStore as ie } from "../store.js";
10
+ import se from "./GraphStatusScreen.vue.js";
11
+ const ue = { class: "chart_container" }, ce = { class: "chart_header" }, de = ["value", "disabled"], ve = { class: "chart_titleLineSlot" }, me = {
12
12
  key: 0,
13
13
  class: "chart_tabBy"
14
- }, xe = {
15
- key: 1,
16
- class: "graph-maker__loading",
17
- style: { top: "0px", bottom: "11px", border: "1px solid #E1E3EB", "border-radius": "8px", overflow: "hidden" }
18
- }, be = {
19
- key: 2,
20
- class: "graph-maker__loading",
21
- style: { top: "0px", bottom: "11px", border: "1px solid #E1E3EB", "border-radius": "8px", overflow: "hidden" }
22
- }, we = {
14
+ }, pe = {
23
15
  key: 1,
24
16
  class: "chart_controls"
25
- }, Me = /* @__PURE__ */ Z({
17
+ }, ke = /* @__PURE__ */ X({
26
18
  __name: "Chart",
27
19
  props: {
28
20
  graphStatus: {},
@@ -32,283 +24,259 @@ const ye = { class: "chart_container" }, Se = { class: "chart_header" }, he = ["
32
24
  chartRef: {},
33
25
  errorInfo: {},
34
26
  customStatusText: {},
35
- allowTitleEditing: { type: Boolean }
27
+ allowTitleEditing: { type: Boolean },
28
+ isScatterplotZoomChanged: { type: Boolean }
36
29
  },
37
30
  emits: ["graph-title-update", "dendro-node-select", "dendro-tooltip-btn-click"],
38
- setup(u, { emit: _ }) {
39
- const I = _, a = pe(), r = u, b = g(r.graphTitle);
40
- T(() => r.graphTitle, (t) => {
41
- b.value = t;
31
+ setup(n, { emit: I }) {
32
+ const D = I, o = ie(), x = n, g = h(x.graphTitle);
33
+ y(() => x.graphTitle, (t) => {
34
+ g.value = t;
42
35
  });
43
- const $ = d(() => {
36
+ const P = p(() => {
44
37
  var t;
45
- return (t = a.value.reactive.optionsState.components.tabBy) == null ? void 0 : t.selectorStates[0];
46
- }), p = d(() => {
38
+ return (t = o.value.reactive.optionsState.components.tabBy) == null ? void 0 : t.selectorStates[0];
39
+ }), m = p(() => {
47
40
  var t;
48
- return (t = $.value) == null ? void 0 : t.selectedSource;
49
- }), E = d(() => {
41
+ return (t = P.value) == null ? void 0 : t.selectedSource;
42
+ }), G = p(() => {
50
43
  var t, e;
51
- return (e = (t = $.value) == null ? void 0 : t.selectedFilterValues) == null ? void 0 : e[0];
52
- }), D = d(() => {
44
+ return (e = (t = P.value) == null ? void 0 : t.selectedFilterValues) == null ? void 0 : e[0];
45
+ }), L = p(() => {
53
46
  var t;
54
- return (t = a.value.reactive.optionsState.components.filters) == null ? void 0 : t.selectorStates;
55
- }), f = g(E.value);
56
- T(() => p.value, (t, e) => {
57
- t !== e && (f.value = E.value);
47
+ return (t = o.value.reactive.optionsState.components.filters) == null ? void 0 : t.selectorStates;
48
+ }), v = h(G.value);
49
+ y(() => m.value, (t, e) => {
50
+ t !== e && (v.value = G.value);
58
51
  }, { immediate: !0 });
59
- async function U(t) {
60
- var o;
61
- if (!a.value.columnsDataStore.value)
52
+ async function W(t) {
53
+ var a;
54
+ if (!o.value.columnsDataStore.value)
62
55
  return Promise.resolve([]);
63
- const e = D.value.find((i) => i.selectedSource === t);
64
- if (e && (((o = e.selectedFilterValues) == null ? void 0 : o.length) ?? 0) > 0) {
56
+ const e = L.value.find((i) => i.selectedSource === t);
57
+ if (e && (((a = e.selectedFilterValues) == null ? void 0 : a.length) ?? 0) > 0) {
65
58
  const i = e.selectedFilterValues ?? [];
66
- return Promise.all(i.map((c) => G(t, c)));
59
+ return Promise.all(i.map((u) => H(t, u)));
67
60
  }
68
- const n = await a.value.controller.getUniqueSourceValuesWithLabels(
69
- a.value.columnsDataStore.value,
70
- a.value.inputGuide.value,
61
+ const l = await o.value.controller.getUniqueSourceValuesWithLabels(
62
+ o.value.columnsDataStore.value,
63
+ o.value.inputGuide.value,
71
64
  t,
72
65
  A
73
66
  );
74
- return n.overflow ? null : n.values;
67
+ return l.overflow ? null : l.values;
75
68
  }
76
- const y = g();
77
- T([
78
- () => p.value,
79
- () => a.value.loading.inputGuide
69
+ const f = h();
70
+ y([
71
+ () => m.value,
72
+ () => o.value.loading.inputGuide
80
73
  ], async ([t, e]) => {
81
- t === void 0 || e || !a.value.columnsDataStore.value || (y.value = await U(t));
82
- }, { immediate: !0 }), T(() => y.value, async (t) => {
83
- if (p.value === void 0 || f.value !== void 0 || t === void 0)
74
+ t === void 0 || e || !o.value.columnsDataStore.value || (f.value = await W(t));
75
+ }, { immediate: !0 }), y(() => f.value, async (t) => {
76
+ if (m.value === void 0 || v.value !== void 0 || t === void 0)
84
77
  return;
85
78
  let e = t;
86
- if (t === null && (e = await P(p.value, "")), e != null && e.length) {
87
- const n = e[0].value;
88
- f.value = n, w(n);
79
+ if (t === null && (e = await F(m.value, "")), e != null && e.length) {
80
+ const l = e[0].value;
81
+ v.value = l, b(l);
89
82
  }
90
83
  }, { immediate: !0 });
91
- function w(t) {
92
- const e = a.value.reactive.optionsState.components.tabBy.selectorStates;
93
- e.length && (a.value.reactive.optionsState.components.tabBy.selectorStates = [{
84
+ function b(t) {
85
+ const e = o.value.reactive.optionsState.components.tabBy.selectorStates;
86
+ e.length && (o.value.reactive.optionsState.components.tabBy.selectorStates = [{
94
87
  ...e[0],
95
88
  type: "equals",
96
89
  selectedFilterValues: [t]
97
90
  }]);
98
91
  }
99
- function W(t) {
92
+ function q(t) {
100
93
  const e = t.currentTarget;
101
- b.value = e.value, I("graph-title-update", e.value);
94
+ g.value = e.value, D("graph-title-update", e.value);
102
95
  }
103
- function q(t) {
104
- I("dendro-node-select", t);
96
+ function Z(t) {
97
+ D("dendro-node-select", t);
105
98
  }
106
- async function P(t, e, n = "label") {
107
- var L;
108
- if (!a.value.columnsDataStore.value)
99
+ async function F(t, e, l = "label") {
100
+ var N;
101
+ if (!o.value.columnsDataStore.value)
109
102
  return Promise.resolve([]);
110
- const o = D.value.find((k) => k.selectedSource === t);
111
- if (o && (((L = o.selectedFilterValues) == null ? void 0 : L.length) ?? 0) > 0) {
112
- const k = o.selectedFilterValues ?? [], R = await Promise.all(k.map((V) => G(t, V)));
113
- return e ? R.filter((V) => V.label.toLowerCase().includes(e.toLowerCase())) : R;
103
+ const a = L.value.find((T) => T.selectedSource === t);
104
+ if (a && (((N = a.selectedFilterValues) == null ? void 0 : N.length) ?? 0) > 0) {
105
+ const T = a.selectedFilterValues ?? [], O = await Promise.all(T.map((V) => H(t, V)));
106
+ return e ? O.filter((V) => V.label.toLowerCase().includes(e.toLowerCase())) : O;
114
107
  }
115
- const i = n === "label" ? e : void 0, c = n === "value" ? e : void 0;
116
- return (await a.value.controller.getUniqueSourceValuesWithLabels(a.value.columnsDataStore.value, a.value.inputGuide.value, t, A, i, c)).values;
108
+ const i = l === "label" ? e : void 0, u = l === "value" ? e : void 0;
109
+ return (await o.value.controller.getUniqueSourceValuesWithLabels(o.value.columnsDataStore.value, o.value.inputGuide.value, t, A, i, u)).values;
117
110
  }
118
- async function G(t, e) {
119
- return a.value.columnsDataStore.value ? await a.value.controller.getUniqueSourceValuesWithLabels(
120
- a.value.columnsDataStore.value,
121
- a.value.inputGuide.value,
111
+ async function H(t, e) {
112
+ return o.value.columnsDataStore.value ? await o.value.controller.getUniqueSourceValuesWithLabels(
113
+ o.value.columnsDataStore.value,
114
+ o.value.inputGuide.value,
122
115
  t,
123
116
  1,
124
117
  void 0,
125
118
  e
126
- ).then((o) => o.values[0]) : Promise.resolve({ value: e, label: " " });
119
+ ).then((a) => a.values[0]) : Promise.resolve({ value: e, label: " " });
127
120
  }
128
- const M = g(), X = d(() => {
121
+ const E = h(), j = p(() => {
129
122
  var e;
130
- if (a.value.reactive.chartType !== "discrete")
123
+ if (o.value.reactive.chartType !== "discrete")
131
124
  return !1;
132
- const t = a.value.reactive.optionsState.components;
125
+ const t = o.value.reactive.optionsState.components;
133
126
  if ((e = t.primaryGrouping) != null && e.selectorStates.length) {
134
- const n = t.primaryGrouping.selectorStates[0].selectedSource, o = a.value.reactive.dataBindAes[n];
135
- if ((o == null ? void 0 : o.type) === "categorical" && o.hidden)
136
- return Object.values(o.hidden).length > 0 && o.order.some((i) => {
137
- var c;
138
- return (c = o.hidden) == null ? void 0 : c[i];
127
+ const l = t.primaryGrouping.selectorStates[0].selectedSource, a = o.value.reactive.dataBindAes[l];
128
+ if ((a == null ? void 0 : a.type) === "categorical" && a.hidden)
129
+ return Object.values(a.hidden).length > 0 && a.order.some((i) => {
130
+ var u;
131
+ return (u = a.hidden) == null ? void 0 : u[i];
139
132
  });
140
133
  }
141
134
  return !1;
142
- }), j = d(() => {
135
+ }), K = p(() => {
143
136
  var e;
144
- if (a.value.reactive.chartType !== "discrete")
137
+ if (o.value.reactive.chartType !== "discrete")
145
138
  return !1;
146
- const t = a.value.reactive.optionsState.components;
139
+ const t = o.value.reactive.optionsState.components;
147
140
  if ((e = t.secondaryGrouping) != null && e.selectorStates.length) {
148
- const n = t.secondaryGrouping.selectorStates[0].selectedSource, o = a.value.reactive.dataBindAes[n];
149
- if ((o == null ? void 0 : o.type) === "categorical" && o.hidden)
150
- return Object.values(o.hidden).length > 0 && o.order.some((i) => {
151
- var c;
152
- return (c = o.hidden) == null ? void 0 : c[i];
141
+ const l = t.secondaryGrouping.selectorStates[0].selectedSource, a = o.value.reactive.dataBindAes[l];
142
+ if ((a == null ? void 0 : a.type) === "categorical" && a.hidden)
143
+ return Object.values(a.hidden).length > 0 && a.order.some((i) => {
144
+ var u;
145
+ return (u = a.hidden) == null ? void 0 : u[i];
153
146
  });
154
147
  }
155
148
  return !1;
156
149
  });
157
- function K() {
158
- a.value.reactive.tabDefaultState.axes.reorderPrimaryOpen = !0, a.value.reactive.currentTab = "axes";
150
+ function M() {
151
+ o.value.reactive.tabDefaultState.axes.reorderPrimaryOpen = !0, o.value.reactive.currentTab = "axes";
159
152
  }
160
- function Y() {
161
- a.value.reactive.tabDefaultState.axes.reorderSecondaryOpen = !0, a.value.reactive.currentTab = "axes";
153
+ function z() {
154
+ o.value.reactive.tabDefaultState.axes.reorderSecondaryOpen = !0, o.value.reactive.currentTab = "axes";
162
155
  }
163
- const z = d(() => {
164
- var t, e, n, o, i, c;
165
- return ((t = r.errorInfo) == null ? void 0 : t.type) === "tooManyFacets" ? `Too many facets (${r.errorInfo.info.count}).
166
- Maximum count is ${r.errorInfo.info.maxCount}.
167
- Try to filter the data.` : ((e = r.errorInfo) == null ? void 0 : e.type) === "tooManyPrimaryGroups" ? `Too many primary groups (${r.errorInfo.info.count}).
168
- Maximum count is ${r.errorInfo.info.maxCount}.
169
- Try to filter the data.` : ((n = r.errorInfo) == null ? void 0 : n.type) === "tooManySecondaryGroups" ? `Too many secondary groups (${r.errorInfo.info.count}).
170
- Maximum count is ${r.errorInfo.info.maxCount}.
171
- Try to filter the data.` : ((o = r.errorInfo) == null ? void 0 : o.type) === "tooManyScatterplotGroupsX" ? `Too many categories on X axis (${r.errorInfo.info.count}).
172
- Maximum count is ${r.errorInfo.info.maxCount}.
173
- Try to filter the data.` : ((i = r.errorInfo) == null ? void 0 : i.type) === "tooManyScatterplotGroupsY" ? `Too many categories on Y axis (${r.errorInfo.info.count}).
174
- Maximum count is ${r.errorInfo.info.maxCount}.
175
- Try to filter the data.` : ((c = r.errorInfo) == null ? void 0 : c.type) === "tooManyHistogramGroups" ? `Too many groups (${r.errorInfo.info.count}).
176
- Maximum count is ${r.errorInfo.info.maxCount}.
177
- Try to filter the data.` : "";
178
- }), J = d(() => r.graphStatus === "noPframe" || r.graphStatus === "empty"), Q = d(() => r.graphStatus === "notReady" || r.graphStatus === "inconsistent" || r.graphStatus === "knownError" || r.graphStatus === "unknownError"), F = d(() => {
179
- var t, e;
180
- return r.graphStatus === "knownError" ? z.value : ((e = (t = r.customStatusText) == null ? void 0 : t[r.graphStatus]) == null ? void 0 : e.title) ?? me[r.graphStatus].title;
181
- });
182
156
  return (t, e) => {
183
- var n;
184
- return s(), S("div", ye, [
185
- h("div", Se, [
186
- h("input", {
157
+ var l;
158
+ return s(), w("div", ue, [
159
+ S("div", ce, [
160
+ S("input", {
187
161
  class: "chart_title",
188
- value: b.value,
189
- disabled: !u.allowTitleEditing,
190
- onChange: W,
191
- onKeyup: e[0] || (e[0] = ee((o) => {
162
+ value: g.value,
163
+ disabled: !n.allowTitleEditing,
164
+ onChange: q,
165
+ onKeyup: e[0] || (e[0] = J((a) => {
192
166
  var i;
193
- (i = o.target) == null || i.blur();
167
+ (i = a.target) == null || i.blur();
194
168
  }, ["enter"]))
195
- }, null, 40, he),
196
- u.allowTitleEditing ? (s(), m(te(fe), {
169
+ }, null, 40, de),
170
+ n.allowTitleEditing ? (s(), d(Q(ne), {
197
171
  key: 0,
198
172
  class: "chart_titleEdit"
199
- })) : v("", !0),
200
- h("div", ge, [
201
- oe(t.$slots, "default")
173
+ })) : c("", !0),
174
+ S("div", ve, [
175
+ Y(t.$slots, "default")
202
176
  ])
203
177
  ]),
204
- x(l(ae), {
205
- modelValue: l(a).reactive.showTooltipHint,
206
- "onUpdate:modelValue": e[1] || (e[1] = (o) => l(a).reactive.showTooltipHint = o),
178
+ C(r(_), {
179
+ modelValue: r(o).reactive.showTooltipHint,
180
+ "onUpdate:modelValue": e[1] || (e[1] = (a) => r(o).reactive.showTooltipHint = a),
207
181
  type: "success",
208
182
  class: "chart_tooltipHint",
209
183
  width: "170px"
210
184
  }, {
211
- default: C(() => [...e[10] || (e[10] = [
185
+ default: k(() => [...e[10] || (e[10] = [
212
186
  B(" Hit enter to pin tooltip ", -1)
213
187
  ])]),
214
188
  _: 1
215
189
  }, 8, ["modelValue"]),
216
- p.value ? (s(), S("div", Te, [
217
- y.value || y.value === void 0 && l(a).loading.inputGuide ? (s(), m(l(re), {
190
+ m.value ? (s(), w("div", me, [
191
+ f.value || f.value === void 0 && r(o).loading.inputGuide ? (s(), d(r(ee), {
218
192
  key: 0,
219
- modelValue: f.value,
193
+ modelValue: v.value,
220
194
  "onUpdate:modelValue": [
221
- e[2] || (e[2] = (o) => f.value = o),
222
- e[3] || (e[3] = (o) => w(o))
195
+ e[2] || (e[2] = (a) => v.value = a),
196
+ e[3] || (e[3] = (a) => b(a))
223
197
  ],
224
198
  label: "Show for",
225
- options: y.value
226
- }, null, 8, ["modelValue", "options"])) : (s(), m(l(ne), {
199
+ options: f.value
200
+ }, null, 8, ["modelValue", "options"])) : (s(), d(r(te), {
227
201
  key: 1,
228
- modelValue: f.value,
202
+ modelValue: v.value,
229
203
  "onUpdate:modelValue": [
230
- e[4] || (e[4] = (o) => f.value = o),
231
- e[5] || (e[5] = (o) => w(o))
204
+ e[4] || (e[4] = (a) => v.value = a),
205
+ e[5] || (e[5] = (a) => b(a))
232
206
  ],
233
207
  label: "Show for",
234
- "options-search": (o, i) => P(p.value, o, i)
208
+ "options-search": (a, i) => F(m.value, a, i)
235
209
  }, null, 8, ["modelValue", "options-search"]))
236
- ])) : v("", !0),
237
- h("div", {
210
+ ])) : c("", !0),
211
+ S("div", {
238
212
  ref_key: "chartContainerRef",
239
- ref: M,
240
- class: H(["chart_main-content", [{ "chart_main-content__dendro": l(a).reactive.chartType === "dendro" }, "pl-scrollable"]])
213
+ ref: E,
214
+ class: R(["chart_main-content", [{ "chart_main-content__dendro": r(o).reactive.chartType === "dendro" }, "pl-scrollable"]])
241
215
  }, [
242
- h("div", {
216
+ S("div", {
243
217
  id: "chartSvgContainer",
244
- class: H({
245
- chart_ready: u.graphStatus === "ready",
246
- chart_loading: u.graphStatus === "loading",
247
- chart_activeLassoSelection: ((n = l(a).reactive.lassoControlsState) == null ? void 0 : n.mode) === "selection"
218
+ class: R({
219
+ chart_ready: n.graphStatus === "ready",
220
+ chart_loading: n.graphStatus === "loading",
221
+ chart_activeLassoSelection: ((l = r(o).reactive.lassoControlsState) == null ? void 0 : l.mode) === "selection"
248
222
  })
249
223
  }, null, 2),
250
- u.graphStatus === "loading" ? (s(), m(de, {
251
- key: 0,
224
+ C(se, {
225
+ graphStatus: n.graphStatus,
252
226
  top: 0,
253
227
  bottom: 11,
254
- "custom-status-text": u.customStatusText
255
- }, null, 8, ["custom-status-text"])) : J.value ? (s(), S("div", xe, [
256
- x(l(le), {
257
- params: { variant: "not-ready", notReadyText: F.value }
258
- }, null, 8, ["params"])
259
- ])) : Q.value ? (s(), S("div", be, [
260
- x(l(ie), {
261
- params: { text: F.value }
262
- }, null, 8, ["params"])
263
- ])) : v("", !0),
264
- l(a).reactive.chartType === "dendro" && u.chartData && l(a).reactive.layersSettings.dendro.showTable ? (s(), m(se, {
265
- key: 3,
266
- chartData: u.chartData,
267
- onRowSelect: q
268
- }, null, 8, ["chartData"])) : v("", !0),
269
- l(a).reactive.dendroInfoByClick ? (s(), m(ue, {
270
- key: 4,
271
- info: l(a).reactive.dendroInfoByClick,
272
- containerRef: M.value,
273
- tooltipBtn: u.dendroTooltipButton,
274
- onTooltipBtnClick: e[6] || (e[6] = (o) => t.$emit("dendro-tooltip-btn-click", o)),
275
- onClose: e[7] || (e[7] = (o) => {
276
- l(a).reactive.dendroInfoByClick = null, t.$emit("dendro-node-select", null);
228
+ customStatusText: n.customStatusText,
229
+ errorInfo: n.errorInfo
230
+ }, null, 8, ["graphStatus", "customStatusText", "errorInfo"]),
231
+ r(o).reactive.chartType === "dendro" && n.chartData && r(o).reactive.layersSettings.dendro.showTable ? (s(), d(ae, {
232
+ key: 0,
233
+ chartData: n.chartData,
234
+ onRowSelect: Z
235
+ }, null, 8, ["chartData"])) : c("", !0),
236
+ r(o).reactive.dendroInfoByClick ? (s(), d(oe, {
237
+ key: 1,
238
+ info: r(o).reactive.dendroInfoByClick,
239
+ containerRef: E.value,
240
+ tooltipBtn: n.dendroTooltipButton,
241
+ onTooltipBtnClick: e[6] || (e[6] = (a) => t.$emit("dendro-tooltip-btn-click", a)),
242
+ onClose: e[7] || (e[7] = (a) => {
243
+ r(o).reactive.dendroInfoByClick = null, t.$emit("dendro-node-select", null);
277
244
  })
278
- }, null, 8, ["info", "containerRef", "tooltipBtn"])) : v("", !0)
245
+ }, null, 8, ["info", "containerRef", "tooltipBtn"])) : c("", !0)
279
246
  ], 2),
280
- u.graphStatus === "ready" ? (s(), S("div", we, [
281
- x(ve),
282
- l(a).reactive.chartType === "scatterplot-umap" ? (s(), m(ce, {
247
+ n.graphStatus === "ready" ? (s(), w("div", pe, [
248
+ C(re),
249
+ r(o).reactive.chartType === "scatterplot-umap" ? (s(), d(le, {
283
250
  key: 0,
284
- "chart-ref": u.chartRef
285
- }, null, 8, ["chart-ref"])) : v("", !0),
286
- X.value ? (s(), m(l(O), {
251
+ "chart-ref": n.chartRef,
252
+ isScatterplotZoomChanged: n.isScatterplotZoomChanged
253
+ }, null, 8, ["chart-ref", "isScatterplotZoomChanged"])) : c("", !0),
254
+ j.value ? (s(), d(r($), {
287
255
  key: 1,
288
256
  icon: "view-hide",
289
- onClick: e[8] || (e[8] = N(() => K(), ["stop"]))
257
+ onClick: e[8] || (e[8] = U(() => M(), ["stop"]))
290
258
  }, {
291
- default: C(() => [...e[11] || (e[11] = [
259
+ default: k(() => [...e[11] || (e[11] = [
292
260
  B(" Hidden (primary) ", -1)
293
261
  ])]),
294
262
  _: 1
295
- })) : v("", !0),
296
- j.value ? (s(), m(l(O), {
263
+ })) : c("", !0),
264
+ K.value ? (s(), d(r($), {
297
265
  key: 2,
298
266
  icon: "view-hide",
299
- onClick: e[9] || (e[9] = N(() => Y(), ["stop"]))
267
+ onClick: e[9] || (e[9] = U(() => z(), ["stop"]))
300
268
  }, {
301
- default: C(() => [...e[12] || (e[12] = [
269
+ default: k(() => [...e[12] || (e[12] = [
302
270
  B(" Hidden (secondary) ", -1)
303
271
  ])]),
304
272
  _: 1
305
- })) : v("", !0)
306
- ])) : v("", !0)
273
+ })) : c("", !0)
274
+ ])) : c("", !0)
307
275
  ]);
308
276
  };
309
277
  }
310
278
  });
311
279
  export {
312
- Me as default
280
+ ke as default
313
281
  };
314
282
  //# sourceMappingURL=Chart.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.vue.js","sources":["../../src/components/Chart.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ChartInterface, ErrorInfo } from '@milaboratories/miplots4';\nimport type { SelectorStateFilter } from '@milaboratories/pf-plots';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\nimport { PlAgOverlayLoading, PlAgOverlayNoRows, PlAutocomplete, PlBtnGhost, PlDropdown, PlNotificationAlert } from '@platforma-sdk/ui-vue';\nimport { computed, ref, watch } from 'vue';\nimport DendroTable from '../components/DendroTable.vue';\nimport DendroTooltip from '../components/DendroTooltip.vue';\nimport LassoControls from '../components/LassoControls/index.vue';\nimport Loading from '../components/Loading.vue';\nimport Zoom from '../components/Zoom/index.vue';\nimport { DEFAULT_STATUS_TEXT, MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../constantsCommon.ts';\nimport EditIcon from '../icons/EditIcon.vue';\nimport { useStore } from '../store.ts';\nimport type { GraphStatus, StatusTextData } from '../types.ts';\n\nconst emit = defineEmits(['graph-title-update', 'dendro-node-select', 'dendro-tooltip-btn-click']);\n\nconst store = useStore();\n\nconst props = defineProps<{\n graphStatus: GraphStatus;\n graphTitle: string;\n dendroTooltipButton?: string;\n chartData: Record<string, unknown> | null;\n chartRef: ChartInterface | null;\n errorInfo: ErrorInfo | null;\n customStatusText?: Partial<StatusTextData>;\n allowTitleEditing?: boolean;\n}>();\n\nconst title = ref(props.graphTitle);\n// title can be updated from graph-maker settings\nwatch(() => props.graphTitle, (graphTitle) => {\n title.value = graphTitle;\n});\n\nconst tabByState = computed(() => store.value.reactive.optionsState.components.tabBy?.selectorStates[0] as SelectorStateFilter | undefined);\nconst tabBySource = computed(() => tabByState.value?.selectedSource);\nconst tabByFilterValue = computed(() => tabByState.value?.selectedFilterValues?.[0]);\nconst filtersStates = computed(() => store.value.reactive.optionsState.components.filters?.selectorStates as SelectorStateFilter[]);\n\nconst tabByLocalValue = ref(tabByFilterValue.value);\nwatch(() => tabBySource.value, (value, prevValue) => { // tabBy column changed, needs to update selected value\n if (value !== prevValue) {\n tabByLocalValue.value = tabByFilterValue.value;\n }\n}, { immediate: true });\n\n// try to load full options list, without search query; if result is not overflow, use values from it in regular dropdown, no autocomplete;\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n return Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n }\n const response = await store.value.controller.getUniqueSourceValuesWithLabels(\n store.value.columnsDataStore.value,\n store.value.inputGuide.value,\n sourceId,\n MAX_SEARCH_OPTIONS_LIST_LENGTH,\n );\n return response.overflow ? null : response.values;\n}\nconst preloadedOptions = ref<ListOption[] | null | undefined>();\nwatch([\n () => tabBySource.value,\n () => store.value.loading.inputGuide,\n], async ([v, loading]) => {\n if (v === undefined || loading || !store.value.columnsDataStore.value) {\n return undefined;\n }\n preloadedOptions.value = await loadOptions(v);\n}, { immediate: true });\n\nwatch(() => preloadedOptions.value, async (opts) => {\n if (\n tabBySource.value === undefined // no tabBy selected\n || tabByLocalValue.value !== undefined // tabBy selected and has selected value\n || opts === undefined // options not loaded yet\n ) {\n return;\n }\n let availableOptions = opts;\n if (opts === null) { // options loaded but too many unique values\n availableOptions = await searchFilterOptions(tabBySource.value, '');\n }\n if (availableOptions?.length) {\n const nextFilterValue = availableOptions[0].value as string;\n tabByLocalValue.value = nextFilterValue;\n onFilterValueUpdate(nextFilterValue);\n }\n}, { immediate: true });\n\nfunction onFilterValueUpdate(value: string) {\n const prevSelectorStates = store.value.reactive.optionsState.components.tabBy.selectorStates;\n if (prevSelectorStates.length) {\n store.value.reactive.optionsState.components.tabBy.selectorStates = [{\n ...prevSelectorStates[0],\n type: 'equals',\n selectedFilterValues: [value],\n }];\n }\n}\n\nfunction onTitleChange(e: Event) {\n const target = e.currentTarget as HTMLInputElement;\n title.value = target.value;\n emit('graph-title-update', target.value);\n}\n\nfunction onTableRowSelect(id: number) {\n emit('dendro-node-select', id);\n}\n\n// search options for autocomplete component; use label-mode search for options and value-mode for search of label of selected by default value;\nasync function searchFilterOptions(sourceId: string, searchStr: string, type: 'value' | 'label' = 'label') {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n const results = await Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n return searchStr ? results.filter((v) => v.label.toLowerCase().includes(searchStr.toLowerCase())) : results;\n }\n const searchLabelStr = type === 'label' ? searchStr : undefined;\n const searchValueStr = type === 'value' ? searchStr : undefined;\n return (await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore.value, store.value.inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH, searchLabelStr, searchValueStr)).values;\n}\n\n// search by value, not by label;\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve({ value: selectedValue, label: ' ' }); // don't show non-human-readable value\n }\n const value = await store.value.controller.getUniqueSourceValuesWithLabels(\n store.value.columnsDataStore.value, store.value.inputGuide.value,\n sourceId, 1, undefined, selectedValue).then((v) => v.values[0]);\n return value;\n}\n\nconst chartContainerRef = ref();\n\nconst hasPrimaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.primaryGrouping?.selectorStates.length) {\n const columnName = optionsState.primaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nconst hasSecondaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.secondaryGrouping?.selectorStates.length) {\n const columnName = optionsState.secondaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nfunction openAxesSettingsPrimary() {\n store.value.reactive.tabDefaultState['axes'].reorderPrimaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\nfunction openAxesSettingsSecondary() {\n store.value.reactive.tabDefaultState['axes'].reorderSecondaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\n\nconst errorMessage = computed(() => {\n if (props.errorInfo?.type === 'tooManyFacets') {\n return `Too many facets (${props.errorInfo.info.count}).\\nMaximum count is\\u00A0${props.errorInfo.info.maxCount}.\\nTry to\\u00A0filter the\\u00A0data.`;\n }\n if (props.errorInfo?.type === 'tooManyPrimaryGroups') {\n return `Too many primary groups\\u00A0(${props.errorInfo.info.count}).\\nMaximum count is\\u00A0${props.errorInfo.info.maxCount}.\\nTry to\\u00A0filter the\\u00A0data.`;\n }\n if (props.errorInfo?.type === 'tooManySecondaryGroups') {\n return `Too many secondary groups\\u00A0(${props.errorInfo.info.count}).\\nMaximum count is\\u00A0${props.errorInfo.info.maxCount}.\\nTry to\\u00A0filter the\\u00A0data.`;\n }\n if (props.errorInfo?.type === 'tooManyScatterplotGroupsX') {\n return `Too many categories on X axis\\u00A0(${props.errorInfo.info.count}).\\nMaximum count is\\u00A0${props.errorInfo.info.maxCount}.\\nTry to\\u00A0filter the\\u00A0data.`;\n }\n if (props.errorInfo?.type === 'tooManyScatterplotGroupsY') {\n return `Too many categories on Y axis\\u00A0(${props.errorInfo.info.count}).\\nMaximum count is\\u00A0${props.errorInfo.info.maxCount}.\\nTry to\\u00A0filter the\\u00A0data.`;\n }\n if (props.errorInfo?.type === 'tooManyHistogramGroups') {\n return `Too many groups\\u00A0(${props.errorInfo.info.count}).\\nMaximum count is\\u00A0${props.errorInfo.info.maxCount}.\\nTry to\\u00A0filter the\\u00A0data.`;\n }\n return '';\n});\n\nconst catInBagStatus = computed(() => props.graphStatus === 'noPframe' || props.graphStatus === 'empty');\nconst catNoDataStatus = computed(() => props.graphStatus === 'notReady' || props.graphStatus === 'inconsistent' || props.graphStatus === 'knownError' || props.graphStatus === 'unknownError');\n\nconst statusText = computed(() => {\n if (props.graphStatus === 'knownError') {\n return errorMessage.value;\n }\n return props.customStatusText?.[props.graphStatus]?.title ?? DEFAULT_STATUS_TEXT[props.graphStatus].title;\n});\n\n</script>\n\n<template>\n <div class=\"chart_container\">\n <div class=\"chart_header\">\n <input\n class=\"chart_title\"\n :value=\"title\"\n :disabled=\"!allowTitleEditing\"\n @change=\"onTitleChange\"\n @keyup.enter=\"(e) => { (e.target as HTMLInputElement)?.blur() }\"\n />\n <component :is=\"EditIcon\" v-if=\"allowTitleEditing\" class=\"chart_titleEdit\" />\n <div class=\"chart_titleLineSlot\">\n <slot />\n </div>\n </div>\n <PlNotificationAlert\n v-model=\"store.reactive.showTooltipHint\" type=\"success\" class=\"chart_tooltipHint\"\n width=\"170px\"\n >\n Hit enter to pin tooltip\n </PlNotificationAlert>\n <div v-if=\"tabBySource\" class=\"chart_tabBy\">\n <PlDropdown\n v-if=\"preloadedOptions || (preloadedOptions === undefined && store.loading.inputGuide)\"\n v-model=\"tabByLocalValue\" label=\"Show for\" :options=\"preloadedOptions\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n <PlAutocomplete\n v-else v-model=\"tabByLocalValue\" label=\"Show for\"\n :options-search=\"(str, type) => searchFilterOptions(tabBySource as string, str, type)\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n </div>\n <div\n ref=\"chartContainerRef\" class=\"chart_main-content\"\n :class=\"[{ 'chart_main-content__dendro': store.reactive.chartType === 'dendro' }, 'pl-scrollable']\"\n >\n <div\n id=\"chartSvgContainer\" :class=\"{\n 'chart_ready': graphStatus === 'ready',\n 'chart_loading': graphStatus === 'loading',\n 'chart_activeLassoSelection': store.reactive.lassoControlsState?.mode === 'selection'\n }\"\n />\n <Loading v-if=\"graphStatus === 'loading'\" :top=\"0\" :bottom=\"11\" :custom-status-text=\"customStatusText\"/>\n <div v-else-if=\"catInBagStatus\" class=\"graph-maker__loading\" :style=\"{top: '0px', bottom: '11px', border: '1px solid #E1E3EB', 'border-radius': '8px', overflow: 'hidden'}\">\n <PlAgOverlayLoading :params=\"{variant: 'not-ready', notReadyText: statusText}\"/>\n </div>\n <div v-else-if=\"catNoDataStatus\" class=\"graph-maker__loading\" :style=\"{top: '0px', bottom: '11px', border: '1px solid #E1E3EB', 'border-radius': '8px', overflow: 'hidden'}\">\n <PlAgOverlayNoRows :params=\"{text: statusText}\"/>\n </div>\n <DendroTable\n v-if=\"store.reactive.chartType === 'dendro' && chartData && store.reactive.layersSettings.dendro.showTable\"\n :chartData=\"chartData\" @row-select=\"onTableRowSelect\"\n />\n <DendroTooltip\n v-if=\"store.reactive.dendroInfoByClick\" :info=\"store.reactive.dendroInfoByClick\"\n :containerRef=\"chartContainerRef\" :tooltipBtn=\"dendroTooltipButton\"\n @tooltip-btn-click=\"(id: string) => $emit('dendro-tooltip-btn-click', id)\" @close=\"\n store.reactive.dendroInfoByClick = null;\n $emit('dendro-node-select', null);\n \"\n />\n </div>\n <div v-if=\"graphStatus === 'ready'\" class=\"chart_controls\">\n <Zoom />\n <LassoControls v-if=\"store.reactive.chartType === 'scatterplot-umap'\" :chart-ref=\"chartRef\" />\n <PlBtnGhost v-if=\"hasPrimaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsPrimary()\">\n Hidden (primary)\n </PlBtnGhost>\n <PlBtnGhost v-if=\"hasSecondaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsSecondary()\">\n Hidden (secondary)\n </PlBtnGhost>\n </div>\n </div>\n</template>\n"],"names":["emit","__emit","store","useStore","props","__props","title","ref","watch","graphTitle","tabByState","computed","_a","tabBySource","tabByFilterValue","_b","filtersStates","tabByLocalValue","value","prevValue","loadOptions","sourceId","filtersStateWithTheSameSource","state","selectedValues","selectedValue","searchSelectedFilterValueOptions","response","MAX_SEARCH_OPTIONS_LIST_LENGTH","preloadedOptions","v","loading","opts","availableOptions","searchFilterOptions","nextFilterValue","onFilterValueUpdate","prevSelectorStates","onTitleChange","e","target","onTableRowSelect","id","searchStr","type","results","searchLabelStr","searchValueStr","chartContainerRef","hasPrimaryHidden","optionsState","columnName","dataBindAes","hasSecondaryHidden","openAxesSettingsPrimary","openAxesSettingsSecondary","errorMessage","_c","_d","_e","_f","catInBagStatus","catNoDataStatus","statusText","DEFAULT_STATUS_TEXT","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createBlock","_resolveDynamicComponent","EditIcon","_hoisted_4","_renderSlot","_ctx","_createVNode","_unref","PlNotificationAlert","$event","_cache","_hoisted_5","PlDropdown","PlAutocomplete","str","_normalizeClass","Loading","_hoisted_6","PlAgOverlayLoading","_hoisted_7","PlAgOverlayNoRows","DendroTable","DendroTooltip","$emit","_hoisted_8","Zoom","LassoControls","PlBtnGhost"],"mappings":"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"}
1
+ {"version":3,"file":"Chart.vue.js","sources":["../../src/components/Chart.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ChartInterface, ErrorInfo } from '@milaboratories/miplots4';\nimport type { SelectorStateFilter } from '@milaboratories/pf-plots';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\nimport { PlAutocomplete, PlBtnGhost, PlDropdown, PlNotificationAlert } from '@platforma-sdk/ui-vue';\nimport { computed, ref, watch } from 'vue';\nimport DendroTable from '../components/DendroTable.vue';\nimport DendroTooltip from '../components/DendroTooltip.vue';\nimport LassoControls from '../components/LassoControls/index.vue';\nimport Zoom from '../components/Zoom/index.vue';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../constantsCommon.ts';\nimport EditIcon from '../icons/EditIcon.vue';\nimport { useStore } from '../store.ts';\nimport type { GraphStatus, StatusTextData } from '../types.ts';\nimport GraphStatusScreen from './GraphStatusScreen.vue';\n\nconst emit = defineEmits(['graph-title-update', 'dendro-node-select', 'dendro-tooltip-btn-click']);\n\nconst store = useStore();\n\nconst props = defineProps<{\n graphStatus: GraphStatus;\n graphTitle: string;\n dendroTooltipButton?: string;\n chartData: Record<string, unknown> | null;\n chartRef: ChartInterface | null;\n errorInfo: ErrorInfo | null;\n customStatusText?: Partial<StatusTextData>;\n allowTitleEditing?: boolean;\n isScatterplotZoomChanged?: boolean;\n}>();\n\nconst title = ref(props.graphTitle);\n// title can be updated from graph-maker settings\nwatch(() => props.graphTitle, (graphTitle) => {\n title.value = graphTitle;\n});\n\nconst tabByState = computed(() => store.value.reactive.optionsState.components.tabBy?.selectorStates[0] as SelectorStateFilter | undefined);\nconst tabBySource = computed(() => tabByState.value?.selectedSource);\nconst tabByFilterValue = computed(() => tabByState.value?.selectedFilterValues?.[0]);\nconst filtersStates = computed(() => store.value.reactive.optionsState.components.filters?.selectorStates as SelectorStateFilter[]);\n\nconst tabByLocalValue = ref(tabByFilterValue.value);\nwatch(() => tabBySource.value, (value, prevValue) => { // tabBy column changed, needs to update selected value\n if (value !== prevValue) {\n tabByLocalValue.value = tabByFilterValue.value;\n }\n}, { immediate: true });\n\n// try to load full options list, without search query; if result is not overflow, use values from it in regular dropdown, no autocomplete;\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n return Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n }\n const response = await store.value.controller.getUniqueSourceValuesWithLabels(\n store.value.columnsDataStore.value,\n store.value.inputGuide.value,\n sourceId,\n MAX_SEARCH_OPTIONS_LIST_LENGTH,\n );\n return response.overflow ? null : response.values;\n}\nconst preloadedOptions = ref<ListOption[] | null | undefined>();\nwatch([\n () => tabBySource.value,\n () => store.value.loading.inputGuide,\n], async ([v, loading]) => {\n if (v === undefined || loading || !store.value.columnsDataStore.value) {\n return undefined;\n }\n preloadedOptions.value = await loadOptions(v);\n}, { immediate: true });\n\nwatch(() => preloadedOptions.value, async (opts) => {\n if (\n tabBySource.value === undefined // no tabBy selected\n || tabByLocalValue.value !== undefined // tabBy selected and has selected value\n || opts === undefined // options not loaded yet\n ) {\n return;\n }\n let availableOptions = opts;\n if (opts === null) { // options loaded but too many unique values\n availableOptions = await searchFilterOptions(tabBySource.value, '');\n }\n if (availableOptions?.length) {\n const nextFilterValue = availableOptions[0].value as string;\n tabByLocalValue.value = nextFilterValue;\n onFilterValueUpdate(nextFilterValue);\n }\n}, { immediate: true });\n\nfunction onFilterValueUpdate(value: string) {\n const prevSelectorStates = store.value.reactive.optionsState.components.tabBy.selectorStates;\n if (prevSelectorStates.length) {\n store.value.reactive.optionsState.components.tabBy.selectorStates = [{\n ...prevSelectorStates[0],\n type: 'equals',\n selectedFilterValues: [value],\n }];\n }\n}\n\nfunction onTitleChange(e: Event) {\n const target = e.currentTarget as HTMLInputElement;\n title.value = target.value;\n emit('graph-title-update', target.value);\n}\n\nfunction onTableRowSelect(id: number) {\n emit('dendro-node-select', id);\n}\n\n// search options for autocomplete component; use label-mode search for options and value-mode for search of label of selected by default value;\nasync function searchFilterOptions(sourceId: string, searchStr: string, type: 'value' | 'label' = 'label') {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n const results = await Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n return searchStr ? results.filter((v) => v.label.toLowerCase().includes(searchStr.toLowerCase())) : results;\n }\n const searchLabelStr = type === 'label' ? searchStr : undefined;\n const searchValueStr = type === 'value' ? searchStr : undefined;\n return (await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore.value, store.value.inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH, searchLabelStr, searchValueStr)).values;\n}\n\n// search by value, not by label;\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string) {\n if (!store.value.columnsDataStore.value) {\n return Promise.resolve({ value: selectedValue, label: ' ' }); // don't show non-human-readable value\n }\n const value = await store.value.controller.getUniqueSourceValuesWithLabels(\n store.value.columnsDataStore.value, store.value.inputGuide.value,\n sourceId, 1, undefined, selectedValue).then((v) => v.values[0]);\n return value;\n}\n\nconst chartContainerRef = ref();\n\nconst hasPrimaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.primaryGrouping?.selectorStates.length) {\n const columnName = optionsState.primaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nconst hasSecondaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.secondaryGrouping?.selectorStates.length) {\n const columnName = optionsState.secondaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nfunction openAxesSettingsPrimary() {\n store.value.reactive.tabDefaultState['axes'].reorderPrimaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\nfunction openAxesSettingsSecondary() {\n store.value.reactive.tabDefaultState['axes'].reorderSecondaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\n\n</script>\n\n<template>\n <div class=\"chart_container\">\n <div class=\"chart_header\">\n <input\n class=\"chart_title\"\n :value=\"title\"\n :disabled=\"!allowTitleEditing\"\n @change=\"onTitleChange\"\n @keyup.enter=\"(e) => { (e.target as HTMLInputElement)?.blur() }\"\n />\n <component :is=\"EditIcon\" v-if=\"allowTitleEditing\" class=\"chart_titleEdit\" />\n <div class=\"chart_titleLineSlot\">\n <slot />\n </div>\n </div>\n <PlNotificationAlert\n v-model=\"store.reactive.showTooltipHint\" type=\"success\" class=\"chart_tooltipHint\"\n width=\"170px\"\n >\n Hit enter to pin tooltip\n </PlNotificationAlert>\n <div v-if=\"tabBySource\" class=\"chart_tabBy\">\n <PlDropdown\n v-if=\"preloadedOptions || (preloadedOptions === undefined && store.loading.inputGuide)\"\n v-model=\"tabByLocalValue\" label=\"Show for\" :options=\"preloadedOptions\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n <PlAutocomplete\n v-else v-model=\"tabByLocalValue\" label=\"Show for\"\n :options-search=\"(str, type) => searchFilterOptions(tabBySource as string, str, type)\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n </div>\n <div\n ref=\"chartContainerRef\" class=\"chart_main-content\"\n :class=\"[{ 'chart_main-content__dendro': store.reactive.chartType === 'dendro' }, 'pl-scrollable']\"\n >\n <div\n id=\"chartSvgContainer\" :class=\"{\n 'chart_ready': graphStatus === 'ready',\n 'chart_loading': graphStatus === 'loading',\n 'chart_activeLassoSelection': store.reactive.lassoControlsState?.mode === 'selection'\n }\"\n />\n <GraphStatusScreen :graphStatus=\"graphStatus\" :top=\"0\" :bottom=\"11\" :customStatusText=\"customStatusText\" :errorInfo=\"errorInfo\"/>\n <DendroTable\n v-if=\"store.reactive.chartType === 'dendro' && chartData && store.reactive.layersSettings.dendro.showTable\"\n :chartData=\"chartData\" @row-select=\"onTableRowSelect\"\n />\n <DendroTooltip\n v-if=\"store.reactive.dendroInfoByClick\" :info=\"store.reactive.dendroInfoByClick\"\n :containerRef=\"chartContainerRef\" :tooltipBtn=\"dendroTooltipButton\"\n @tooltip-btn-click=\"(id: string) => $emit('dendro-tooltip-btn-click', id)\" @close=\"\n store.reactive.dendroInfoByClick = null;\n $emit('dendro-node-select', null);\n \"\n />\n </div>\n <div v-if=\"graphStatus === 'ready'\" class=\"chart_controls\">\n <Zoom />\n <LassoControls v-if=\"store.reactive.chartType === 'scatterplot-umap'\" :chart-ref=\"chartRef\" :isScatterplotZoomChanged=\"isScatterplotZoomChanged\"/>\n <PlBtnGhost v-if=\"hasPrimaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsPrimary()\">\n Hidden (primary)\n </PlBtnGhost>\n <PlBtnGhost v-if=\"hasSecondaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsSecondary()\">\n Hidden (secondary)\n </PlBtnGhost>\n </div>\n </div>\n</template>\n"],"names":["emit","__emit","store","useStore","props","__props","title","ref","watch","graphTitle","tabByState","computed","_a","tabBySource","tabByFilterValue","_b","filtersStates","tabByLocalValue","value","prevValue","loadOptions","sourceId","filtersStateWithTheSameSource","state","selectedValues","selectedValue","searchSelectedFilterValueOptions","response","MAX_SEARCH_OPTIONS_LIST_LENGTH","preloadedOptions","v","loading","opts","availableOptions","searchFilterOptions","nextFilterValue","onFilterValueUpdate","prevSelectorStates","onTitleChange","e","target","onTableRowSelect","id","searchStr","type","results","searchLabelStr","searchValueStr","chartContainerRef","hasPrimaryHidden","optionsState","columnName","dataBindAes","hasSecondaryHidden","openAxesSettingsPrimary","openAxesSettingsSecondary","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createBlock","_resolveDynamicComponent","EditIcon","_hoisted_4","_renderSlot","_ctx","_createVNode","_unref","PlNotificationAlert","$event","_cache","_hoisted_5","PlDropdown","PlAutocomplete","str","_normalizeClass","GraphStatusScreen","DendroTable","DendroTooltip","$emit","_hoisted_6","Zoom","LassoControls","PlBtnGhost"],"mappings":"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"}