@milaboratories/graph-maker 1.1.190 → 1.1.191

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.
@@ -1,23 +1,23 @@
1
- import { defineComponent as K, ref as S, watch as g, computed as p, createElementBlock as T, openBlock as s, createElementVNode as y, createVNode as I, createCommentVNode as d, createBlock as v, withKeys as z, resolveDynamicComponent as X, renderSlot as J, unref as n, withCtx as C, createTextVNode as B, normalizeClass as E, toDisplayString as Q, withModifiers as M } from "vue";
2
- import { PlNotificationAlert as Y, PlDropdown as Z, PlAutocomplete as ee, PlBtnGhost as H } from "@platforma-sdk/ui-vue";
3
- import te from "./DendroTable.vue.js";
4
- import oe from "./DendroTooltip.vue.js";
5
- import ae from "./LassoControls/index.vue.js";
6
- import re from "./Loading.vue.js";
7
- import ne from "./Zoom/index.vue.js";
8
- import { MAX_SEARCH_OPTIONS_LIST_LENGTH as L } from "../constantsCommon.js";
9
- import le from "../icons/EditIcon.vue.js";
10
- import { useStore as ie } from "../store.js";
11
- const se = { class: "chart_container" }, ue = { class: "chart_header" }, ce = ["value"], de = { class: "chart_titleLineSlot" }, ve = {
1
+ import { defineComponent as J, ref as y, watch as g, computed as f, createElementBlock as T, openBlock as s, createElementVNode as S, createVNode as M, createCommentVNode as d, createBlock as v, withKeys as Q, resolveDynamicComponent as Y, renderSlot as Z, unref as n, withCtx as C, createTextVNode as B, normalizeClass as H, toDisplayString as ee, withModifiers as R } from "vue";
2
+ import { PlNotificationAlert as te, PlDropdown as oe, PlAutocomplete as ae, PlBtnGhost as N } from "@platforma-sdk/ui-vue";
3
+ import re from "./DendroTable.vue.js";
4
+ import ne from "./DendroTooltip.vue.js";
5
+ import le from "./LassoControls/index.vue.js";
6
+ import ie from "./Loading.vue.js";
7
+ import se from "./Zoom/index.vue.js";
8
+ import { MAX_SEARCH_OPTIONS_LIST_LENGTH as O } from "../constantsCommon.js";
9
+ import ue from "../icons/EditIcon.vue.js";
10
+ import { useStore as ce } from "../store.js";
11
+ const de = { class: "chart_container" }, ve = { class: "chart_header" }, me = ["value"], fe = { class: "chart_titleLineSlot" }, pe = {
12
12
  key: 0,
13
13
  class: "chart_tabBy"
14
- }, me = {
14
+ }, he = {
15
15
  key: 1,
16
16
  class: "chart_errorMessage"
17
- }, fe = {
17
+ }, Se = {
18
18
  key: 1,
19
19
  class: "chart_controls"
20
- }, Ce = /* @__PURE__ */ K({
20
+ }, xe = /* @__PURE__ */ J({
21
21
  __name: "Chart",
22
22
  props: {
23
23
  graphStatus: {},
@@ -28,55 +28,60 @@ const se = { class: "chart_container" }, ue = { class: "chart_header" }, ce = ["
28
28
  errorInfo: {}
29
29
  },
30
30
  emits: ["graph-title-update", "dendro-node-select", "dendro-tooltip-btn-click"],
31
- setup(l, { emit: R }) {
32
- const D = R, a = ie(), u = l, w = S(u.graphTitle);
31
+ setup(l, { emit: U }) {
32
+ const D = U, a = ce(), u = l, b = y(u.graphTitle);
33
33
  g(() => u.graphTitle, (t) => {
34
- w.value = t;
34
+ b.value = t;
35
35
  });
36
- const x = p(() => {
36
+ const x = f(() => {
37
37
  var t;
38
38
  return (t = a.value.reactive.optionsState.components.tabBy) == null ? void 0 : t.selectorStates[0];
39
- }), m = p(() => {
39
+ }), p = f(() => {
40
40
  var t;
41
41
  return (t = x.value) == null ? void 0 : t.selectedSource;
42
- }), $ = p(() => {
42
+ }), $ = f(() => {
43
43
  var t, e;
44
44
  return (e = (t = x.value) == null ? void 0 : t.selectedFilterValues) == null ? void 0 : e[0];
45
- }), P = p(() => {
45
+ }), P = f(() => {
46
46
  var t;
47
47
  return (t = a.value.reactive.optionsState.components.filters) == null ? void 0 : t.selectorStates;
48
- }), f = S($.value);
49
- g(() => m.value, (t, e) => {
50
- t !== e && (f.value = $.value);
48
+ }), m = y($.value);
49
+ g(() => p.value, (t, e) => {
50
+ t !== e && (m.value = $.value);
51
51
  }, { immediate: !0 });
52
- async function N(t) {
52
+ async function A(t) {
53
53
  var o;
54
54
  if (!a.value.columnsDataStore)
55
55
  return Promise.resolve([]);
56
56
  const e = P.value.find((i) => i.selectedSource === t);
57
57
  if (e && (((o = e.selectedFilterValues) == null ? void 0 : o.length) ?? 0) > 0) {
58
58
  const i = e.selectedFilterValues ?? [];
59
- return Promise.all(i.map((c) => V(t, c)));
59
+ return Promise.all(i.map((c) => F(t, c)));
60
60
  }
61
- const r = await a.value.controller.getUniqueSourceValuesWithLabels(a.value.columnsDataStore, a.value.inputGuide.value, t, L);
61
+ const r = await a.value.controller.getUniqueSourceValuesWithLabels(
62
+ a.value.columnsDataStore,
63
+ a.value.inputGuide.value,
64
+ t,
65
+ O
66
+ );
62
67
  return r.overflow ? null : r.values;
63
68
  }
64
- const h = S();
69
+ const h = y();
65
70
  g([
66
- () => m.value,
71
+ () => p.value,
67
72
  () => a.value.loading.inputGuide
68
73
  ], async ([t, e]) => {
69
- t === void 0 || e || !a.value.columnsDataStore || (h.value = await N(t));
74
+ t === void 0 || e || !a.value.columnsDataStore || (h.value = await A(t));
70
75
  }, { immediate: !0 }), g(() => h.value, async (t) => {
71
- if (m.value === void 0 || f.value !== void 0 || t === void 0)
76
+ if (p.value === void 0 || m.value !== void 0 || t === void 0)
72
77
  return;
73
78
  let e = t;
74
- if (t === null && (e = await G(m.value, "")), e != null && e.length) {
79
+ if (t === null && (e = await G(p.value, "")), e != null && e.length) {
75
80
  const r = e[0].value;
76
- f.value = r, k(r);
81
+ m.value = r, w(r);
77
82
  }
78
83
  }, { immediate: !0 });
79
- function k(t) {
84
+ function w(t) {
80
85
  const e = a.value.reactive.optionsState.components.tabBy.selectorStates;
81
86
  e.length && (a.value.reactive.optionsState.components.tabBy.selectorStates = [{
82
87
  ...e[0],
@@ -84,25 +89,26 @@ const se = { class: "chart_container" }, ue = { class: "chart_header" }, ce = ["
84
89
  selectedFilterValues: [t]
85
90
  }]);
86
91
  }
87
- function O(t) {
92
+ function W(t) {
88
93
  const e = t.currentTarget;
89
- w.value = e.value, D("graph-title-update", e.value);
94
+ b.value = e.value, D("graph-title-update", e.value);
90
95
  }
91
- function U(t) {
96
+ function q(t) {
92
97
  D("dendro-node-select", t);
93
98
  }
94
- async function G(t, e) {
95
- var o;
99
+ async function G(t, e, r = "label") {
100
+ var E;
96
101
  if (!a.value.columnsDataStore)
97
102
  return Promise.resolve([]);
98
- const r = P.value.find((i) => i.selectedSource === t);
99
- if (r && (((o = r.selectedFilterValues) == null ? void 0 : o.length) ?? 0) > 0) {
100
- const i = r.selectedFilterValues ?? [], c = await Promise.all(i.map((b) => V(t, b)));
101
- return e ? c.filter((b) => b.label.toLowerCase().includes(e.toLowerCase())) : c;
103
+ const o = P.value.find((V) => V.selectedSource === t);
104
+ if (o && (((E = o.selectedFilterValues) == null ? void 0 : E.length) ?? 0) > 0) {
105
+ const V = o.selectedFilterValues ?? [], L = await Promise.all(V.map((k) => F(t, k)));
106
+ return e ? L.filter((k) => k.label.toLowerCase().includes(e.toLowerCase())) : L;
102
107
  }
103
- return (await a.value.controller.getUniqueSourceValuesWithLabels(a.value.columnsDataStore, a.value.inputGuide.value, t, L, e || void 0)).values;
108
+ const i = r === "label" ? e : void 0, c = r === "value" ? e : void 0;
109
+ return (await a.value.controller.getUniqueSourceValuesWithLabels(a.value.columnsDataStore, a.value.inputGuide.value, t, O, i, c)).values;
104
110
  }
105
- async function V(t, e) {
111
+ async function F(t, e) {
106
112
  return a.value.columnsDataStore ? await a.value.controller.getUniqueSourceValuesWithLabels(
107
113
  a.value.columnsDataStore,
108
114
  a.value.inputGuide.value,
@@ -112,7 +118,7 @@ const se = { class: "chart_container" }, ue = { class: "chart_header" }, ce = ["
112
118
  e
113
119
  ).then((o) => o.values[0]) : Promise.resolve({ value: e, label: " " });
114
120
  }
115
- const F = S(), A = p(() => {
121
+ const I = y(), _ = f(() => {
116
122
  var e;
117
123
  if (a.value.reactive.chartType !== "discrete")
118
124
  return !1;
@@ -126,7 +132,7 @@ const se = { class: "chart_container" }, ue = { class: "chart_header" }, ce = ["
126
132
  });
127
133
  }
128
134
  return !1;
129
- }), W = p(() => {
135
+ }), j = f(() => {
130
136
  var e;
131
137
  if (a.value.reactive.chartType !== "discrete")
132
138
  return !1;
@@ -141,13 +147,13 @@ const se = { class: "chart_container" }, ue = { class: "chart_header" }, ce = ["
141
147
  }
142
148
  return !1;
143
149
  });
144
- function q() {
150
+ function K() {
145
151
  a.value.reactive.tabDefaultState.axes.reorderPrimaryOpen = !0, a.value.reactive.currentTab = "axes";
146
152
  }
147
- function _() {
153
+ function z() {
148
154
  a.value.reactive.tabDefaultState.axes.reorderSecondaryOpen = !0, a.value.reactive.currentTab = "axes";
149
155
  }
150
- const j = p(() => {
156
+ const X = f(() => {
151
157
  var t, e, r;
152
158
  return ((t = u.errorInfo) == null ? void 0 : t.type) === "tooManyFacets" ? `Too many facets (${u.errorInfo.info.count}).
153
159
  Maximum count is ${u.errorInfo.info.maxCount}.
@@ -159,23 +165,23 @@ Try to filter the data.` : "";
159
165
  });
160
166
  return (t, e) => {
161
167
  var r;
162
- return s(), T("div", se, [
163
- y("div", ue, [
164
- y("input", {
168
+ return s(), T("div", de, [
169
+ S("div", ve, [
170
+ S("input", {
165
171
  class: "chart_title",
166
- value: w.value,
167
- onChange: O,
168
- onKeyup: e[0] || (e[0] = z((o) => {
172
+ value: b.value,
173
+ onChange: W,
174
+ onKeyup: e[0] || (e[0] = Q((o) => {
169
175
  var i;
170
176
  (i = o.target) == null || i.blur();
171
177
  }, ["enter"]))
172
- }, null, 40, ce),
173
- (s(), v(X(le), { class: "chart_titleEdit" })),
174
- y("div", de, [
175
- J(t.$slots, "default")
178
+ }, null, 40, me),
179
+ (s(), v(Y(ue), { class: "chart_titleEdit" })),
180
+ S("div", fe, [
181
+ Z(t.$slots, "default")
176
182
  ])
177
183
  ]),
178
- I(n(Y), {
184
+ M(n(te), {
179
185
  modelValue: n(a).reactive.showTooltipHint,
180
186
  "onUpdate:modelValue": e[1] || (e[1] = (o) => n(a).reactive.showTooltipHint = o),
181
187
  type: "success",
@@ -187,36 +193,35 @@ Try to filter the data.` : "";
187
193
  ])]),
188
194
  _: 1
189
195
  }, 8, ["modelValue"]),
190
- m.value ? (s(), T("div", ve, [
191
- h.value || h.value === void 0 && n(a).loading.inputGuide ? (s(), v(n(Z), {
196
+ p.value ? (s(), T("div", pe, [
197
+ h.value || h.value === void 0 && n(a).loading.inputGuide ? (s(), v(n(oe), {
192
198
  key: 0,
193
- modelValue: f.value,
199
+ modelValue: m.value,
194
200
  "onUpdate:modelValue": [
195
- e[2] || (e[2] = (o) => f.value = o),
196
- e[3] || (e[3] = (o) => k(o))
201
+ e[2] || (e[2] = (o) => m.value = o),
202
+ e[3] || (e[3] = (o) => w(o))
197
203
  ],
198
204
  label: "Show for",
199
205
  options: h.value
200
- }, null, 8, ["modelValue", "options"])) : (s(), v(n(ee), {
206
+ }, null, 8, ["modelValue", "options"])) : (s(), v(n(ae), {
201
207
  key: 1,
202
- modelValue: f.value,
208
+ modelValue: m.value,
203
209
  "onUpdate:modelValue": [
204
- e[4] || (e[4] = (o) => f.value = o),
205
- e[5] || (e[5] = (o) => k(o))
210
+ e[4] || (e[4] = (o) => m.value = o),
211
+ e[5] || (e[5] = (o) => w(o))
206
212
  ],
207
213
  label: "Show for",
208
- "options-search": (o) => G(m.value, o),
209
- "model-search": (o) => V(m.value, o)
210
- }, null, 8, ["modelValue", "options-search", "model-search"]))
214
+ "options-search": (o, i) => G(p.value, o, i)
215
+ }, null, 8, ["modelValue", "options-search"]))
211
216
  ])) : d("", !0),
212
- y("div", {
217
+ S("div", {
213
218
  ref_key: "chartContainerRef",
214
- ref: F,
215
- class: E(["chart_main-content", [{ "chart_main-content__dendro": n(a).reactive.chartType === "dendro" }, "pl-scrollable"]])
219
+ ref: I,
220
+ class: H(["chart_main-content", [{ "chart_main-content__dendro": n(a).reactive.chartType === "dendro" }, "pl-scrollable"]])
216
221
  }, [
217
- y("div", {
222
+ S("div", {
218
223
  id: "chartSvgContainer",
219
- class: E({
224
+ class: H({
220
225
  chart_loading: l.graphStatus === "loading",
221
226
  chart_noDataMapping: l.graphStatus === "notReady",
222
227
  chart_emptyData: l.graphStatus === "empty",
@@ -226,21 +231,21 @@ Try to filter the data.` : "";
226
231
  chart_activeLassoSelection: ((r = n(a).reactive.lassoControlsState) == null ? void 0 : r.mode) === "selection"
227
232
  })
228
233
  }, [
229
- l.graphStatus === "loading" ? (s(), v(re, {
234
+ l.graphStatus === "loading" ? (s(), v(ie, {
230
235
  key: 0,
231
236
  top: 10
232
237
  })) : d("", !0),
233
- l.graphStatus === "knownError" ? (s(), T("div", me, Q(j.value), 1)) : d("", !0)
238
+ l.graphStatus === "knownError" ? (s(), T("div", he, ee(X.value), 1)) : d("", !0)
234
239
  ], 2),
235
- n(a).reactive.chartType === "dendro" && l.chartData && n(a).reactive.layersSettings.dendro.showTable ? (s(), v(te, {
240
+ n(a).reactive.chartType === "dendro" && l.chartData && n(a).reactive.layersSettings.dendro.showTable ? (s(), v(re, {
236
241
  key: 0,
237
242
  chartData: l.chartData,
238
- onRowSelect: U
243
+ onRowSelect: q
239
244
  }, null, 8, ["chartData"])) : d("", !0),
240
- n(a).reactive.dendroInfoByClick ? (s(), v(oe, {
245
+ n(a).reactive.dendroInfoByClick ? (s(), v(ne, {
241
246
  key: 1,
242
247
  info: n(a).reactive.dendroInfoByClick,
243
- containerRef: F.value,
248
+ containerRef: I.value,
244
249
  tooltipBtn: l.dendroTooltipButton,
245
250
  onTooltipBtnClick: e[6] || (e[6] = (o) => t.$emit("dendro-tooltip-btn-click", o)),
246
251
  onClose: e[7] || (e[7] = (o) => {
@@ -248,26 +253,26 @@ Try to filter the data.` : "";
248
253
  })
249
254
  }, null, 8, ["info", "containerRef", "tooltipBtn"])) : d("", !0)
250
255
  ], 2),
251
- l.graphStatus !== "empty" ? (s(), T("div", fe, [
252
- I(ne),
253
- n(a).reactive.chartType === "scatterplot-umap" ? (s(), v(ae, {
256
+ l.graphStatus !== "empty" ? (s(), T("div", Se, [
257
+ M(se),
258
+ n(a).reactive.chartType === "scatterplot-umap" ? (s(), v(le, {
254
259
  key: 0,
255
260
  "chart-ref": l.chartRef
256
261
  }, null, 8, ["chart-ref"])) : d("", !0),
257
- A.value ? (s(), v(n(H), {
262
+ _.value ? (s(), v(n(N), {
258
263
  key: 1,
259
264
  icon: "view-hide",
260
- onClick: e[8] || (e[8] = M(() => q(), ["stop"]))
265
+ onClick: e[8] || (e[8] = R(() => K(), ["stop"]))
261
266
  }, {
262
267
  default: C(() => [...e[11] || (e[11] = [
263
268
  B(" Hidden (primary) ", -1)
264
269
  ])]),
265
270
  _: 1
266
271
  })) : d("", !0),
267
- W.value ? (s(), v(n(H), {
272
+ j.value ? (s(), v(n(N), {
268
273
  key: 2,
269
274
  icon: "view-hide",
270
- onClick: e[9] || (e[9] = M(() => _(), ["stop"]))
275
+ onClick: e[9] || (e[9] = R(() => z(), ["stop"]))
271
276
  }, {
272
277
  default: C(() => [...e[12] || (e[12] = [
273
278
  B(" Hidden (secondary) ", -1)
@@ -280,6 +285,6 @@ Try to filter the data.` : "";
280
285
  }
281
286
  });
282
287
  export {
283
- Ce as default
288
+ xe as default
284
289
  };
285
290
  //# 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 { 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 { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../constantsCommon.ts';\nimport EditIcon from '../icons/EditIcon.vue';\nimport { useStore } from '../store.ts';\nimport type { GraphStatus } 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}>();\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\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore) {\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(store.value.columnsDataStore, store.value.inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH);\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) {\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\nasync function searchFilterOptions(sourceId: string, searchStr: string) {\n if (!store.value.columnsDataStore) {\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 return (await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore, store.value.inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH, searchStr || undefined)).values;\n}\n\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string) {\n if (!store.value.columnsDataStore) {\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, 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 return '';\n});\n\n</script>\n\n<template>\n <div class=\"chart_container\">\n <div class=\"chart_header\">\n <input\n class=\"chart_title\" :value=\"title\" @change=\"onTitleChange\"\n @keyup.enter=\"(e) => { (e.target as HTMLInputElement)?.blur() }\"\n />\n <component :is=\"EditIcon\" 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) => searchFilterOptions(tabBySource as string, str)\"\n :model-search=\"(v) => searchSelectedFilterValueOptions(tabBySource as string, v as string)\"\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_loading': graphStatus === 'loading',\n 'chart_noDataMapping': graphStatus === 'notReady',\n 'chart_emptyData': graphStatus === 'empty',\n 'chart_inconsistent': graphStatus === 'inconsistent',\n 'chart_knownError': graphStatus === 'knownError',\n 'chart_unknownError': graphStatus === 'unknownError',\n 'chart_activeLassoSelection': store.reactive.lassoControlsState?.mode === 'selection'\n }\"\n >\n <Loading v-if=\"graphStatus === 'loading'\" :top=\"10\" />\n <div v-if=\"graphStatus === 'knownError'\" class=\"chart_errorMessage\">\n {{ errorMessage }}\n </div>\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 !== 'empty'\" 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","results","chartContainerRef","hasPrimaryHidden","optionsState","columnName","dataBindAes","hasSecondaryHidden","openAxesSettingsPrimary","openAxesSettingsSecondary","errorMessage","_c","_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","_toDisplayString","DendroTable","DendroTooltip","$emit","_hoisted_7","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 Loading from '../components/Loading.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 } 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}>();\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) {\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,\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) {\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) {\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, 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) {\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, 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 return '';\n});\n\n</script>\n\n<template>\n <div class=\"chart_container\">\n <div class=\"chart_header\">\n <input\n class=\"chart_title\" :value=\"title\" @change=\"onTitleChange\"\n @keyup.enter=\"(e) => { (e.target as HTMLInputElement)?.blur() }\"\n />\n <component :is=\"EditIcon\" 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_loading': graphStatus === 'loading',\n 'chart_noDataMapping': graphStatus === 'notReady',\n 'chart_emptyData': graphStatus === 'empty',\n 'chart_inconsistent': graphStatus === 'inconsistent',\n 'chart_knownError': graphStatus === 'knownError',\n 'chart_unknownError': graphStatus === 'unknownError',\n 'chart_activeLassoSelection': store.reactive.lassoControlsState?.mode === 'selection'\n }\"\n >\n <Loading v-if=\"graphStatus === 'loading'\" :top=\"10\" />\n <div v-if=\"graphStatus === 'knownError'\" class=\"chart_errorMessage\">\n {{ errorMessage }}\n </div>\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 !== 'empty'\" 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","_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","_toDisplayString","DendroTable","DendroTooltip","$emit","_hoisted_7","Zoom","LassoControls","PlBtnGhost"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
- import { defineComponent as M, mergeModels as h, useModel as V, ref as b, watch as _, createElementBlock as y, openBlock as d, createElementVNode as i, normalizeClass as g, createCommentVNode as w, createVNode as O, createBlock as a, unref as r, toDisplayString as C } from "vue";
2
- import { PlIcon16 as m, PlDropdownMulti as D, PlAutocompleteMulti as S } from "@platforma-sdk/ui-vue";
1
+ import { defineComponent as k, mergeModels as h, useModel as M, ref as y, watch as V, createElementBlock as b, openBlock as r, createElementVNode as n, normalizeClass as g, createCommentVNode as w, createVNode as O, createBlock as a, unref as s, toDisplayString as C } from "vue";
2
+ import { PlIcon16 as f, PlDropdownMulti as D, PlAutocompleteMulti as S } from "@platforma-sdk/ui-vue";
3
3
  import B from "../../assets/drag-and-drop/img/chip-close.svg.js";
4
4
  import { useStore as F } from "../../store.js";
5
5
  const P = {
6
6
  ref: "chipRoot",
7
7
  class: "dnd-double-chip__group"
8
- }, N = { class: "dnd-double-chip__top" }, x = {
8
+ }, A = { class: "dnd-double-chip__top" }, N = {
9
9
  key: 0,
10
10
  class: "dnd-basket-chip__handler"
11
- }, E = ["title"], H = { class: "dnd-double-chip__title" }, I = ["innerHTML"], L = { class: "dnd-double-chip__bottom" }, A = /* @__PURE__ */ M({
11
+ }, x = ["title"], E = { class: "dnd-double-chip__title" }, H = ["innerHTML"], I = { class: "dnd-double-chip__bottom" }, z = /* @__PURE__ */ k({
12
12
  __name: "DndDoubleChip",
13
13
  props: /* @__PURE__ */ h({
14
14
  info: {},
@@ -22,59 +22,58 @@ const P = {
22
22
  filterModifiers: {}
23
23
  }),
24
24
  emits: /* @__PURE__ */ h(["close-chip", "update:filter"], ["update:filter"]),
25
- setup(e, { emit: T }) {
26
- var p, v;
27
- const o = e, u = F(), s = V(e, "filter"), c = b((p = u.value.filterSuggestionsData.value[o.info.id]) == null ? void 0 : p.values), f = b(((v = u.value.filterSuggestionsData.value[o.info.id]) == null ? void 0 : v.overflow) ?? !1);
28
- _(() => u.value.loading.inputGuide, async (n) => {
29
- if (n)
25
+ setup(e, { emit: L }) {
26
+ var m, v;
27
+ const o = e, u = F(), d = M(e, "filter"), c = y((m = u.value.filterSuggestionsData.value[o.info.id]) == null ? void 0 : m.values), p = y(((v = u.value.filterSuggestionsData.value[o.info.id]) == null ? void 0 : v.overflow) ?? !1);
28
+ V(() => u.value.loading.inputGuide, async (t) => {
29
+ if (t)
30
30
  return;
31
- const { values: t, overflow: l } = await o.loadOptions(o.info.id);
32
- c.value = t, f.value = l;
31
+ const { values: l, overflow: i } = await o.loadOptions(o.info.id);
32
+ c.value = l, p.value = i;
33
33
  }, { immediate: !0 });
34
- function k(n) {
35
- return n === "" ? Promise.resolve(c.value ?? []) : o.searchOptions(o.info.id, n);
34
+ function _(t) {
35
+ return t === "" ? Promise.resolve(c.value ?? []) : Array.isArray(t) ? o.searchModel(o.info.id, t) : o.searchOptions(o.info.id, t);
36
36
  }
37
- return (n, t) => (d(), y("div", P, [
38
- i("div", {
37
+ return (t, l) => (r(), b("div", P, [
38
+ n("div", {
39
39
  class: g([{ error: e.error, sortable: e.sortable }, "dnd-double-chip"])
40
40
  }, [
41
- i("div", N, [
42
- i("div", {
41
+ n("div", A, [
42
+ n("div", {
43
43
  class: g(["dnd-double-chip__icon", { error: e.error }])
44
44
  }, [
45
- e.error ? (d(), a(r(m), {
45
+ e.error ? (r(), a(s(f), {
46
46
  key: 0,
47
47
  name: "warning"
48
- })) : (d(), a(r(m), {
48
+ })) : (r(), a(s(f), {
49
49
  key: 1,
50
50
  name: e.info.isSubsetFilter ? "cell-type-subset" : e.info.type === "String" ? "cell-type-txt" : "cell-type-num"
51
51
  }, null, 8, ["name"]))
52
52
  ], 2),
53
- e.sortable ? (d(), y("div", x)) : w("", !0),
54
- O(r(m), { name: "drag-dots" }),
55
- i("div", {
53
+ e.sortable ? (r(), b("div", N)) : w("", !0),
54
+ O(s(f), { name: "drag-dots" }),
55
+ n("div", {
56
56
  class: "dnd-double-chip__title-wrapper",
57
57
  title: e.info.title
58
58
  }, [
59
- i("div", H, C(e.info.title), 1)
60
- ], 8, E),
61
- i("div", {
59
+ n("div", E, C(e.info.title), 1)
60
+ ], 8, x),
61
+ n("div", {
62
62
  class: "dnd-double-chip__icon-close",
63
- onClick: t[0] || (t[0] = (l) => n.$emit("close-chip", o.info.id)),
64
- innerHTML: r(B)
65
- }, null, 8, I)
63
+ onClick: l[0] || (l[0] = (i) => t.$emit("close-chip", o.info.id)),
64
+ innerHTML: s(B)
65
+ }, null, 8, H)
66
66
  ]),
67
- i("div", L, [
68
- f.value ? (d(), a(r(S), {
67
+ n("div", I, [
68
+ p.value ? (r(), a(s(S), {
69
69
  key: 1,
70
- modelValue: s.value,
71
- "onUpdate:modelValue": t[2] || (t[2] = (l) => s.value = l),
72
- "options-search": k,
73
- "model-search": (l) => e.searchModel(o.info.id, l)
74
- }, null, 8, ["modelValue", "model-search"])) : (d(), a(r(D), {
70
+ modelValue: d.value,
71
+ "onUpdate:modelValue": l[2] || (l[2] = (i) => d.value = i),
72
+ "options-search": (i) => _(i)
73
+ }, null, 8, ["modelValue", "options-search"])) : (r(), a(s(D), {
75
74
  key: 0,
76
- modelValue: s.value,
77
- "onUpdate:modelValue": t[1] || (t[1] = (l) => s.value = l),
75
+ modelValue: d.value,
76
+ "onUpdate:modelValue": l[1] || (l[1] = (i) => d.value = i),
78
77
  options: c.value
79
78
  }, null, 8, ["modelValue", "options"]))
80
79
  ])
@@ -83,6 +82,6 @@ const P = {
83
82
  }
84
83
  });
85
84
  export {
86
- A as default
85
+ z as default
87
86
  };
88
87
  //# sourceMappingURL=DndDoubleChip.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DndDoubleChip.vue.js","sources":["../../../src/components/DragAndDrop/DndDoubleChip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { ListOption, ListOptionBase } from '@platforma-sdk/ui-vue';\nimport { PlAutocompleteMulti, PlDropdownMulti, PlIcon16 } from '@platforma-sdk/ui-vue';\nimport type { ChipInfo } from './types';\nimport CloseIcon from '../../assets/drag-and-drop/img/chip-close.svg?raw';\nimport { useStore } from '../../store.ts';\n\nconst props = defineProps<{\n info: ChipInfo;\n error: boolean;\n searchModel: (sourceId: string, selectedValues: string[]) => Promise<ListOptionBase<string>[]>;\n searchOptions: (sourceId: string, searchStr: string) => Promise<ListOptionBase<string>[]>;\n loadOptions: (sourceId: string) => Promise<{ values: ListOption<string>[]; overflow: boolean }>;\n sortable?: boolean;\n}>();\n\nconst _emit = defineEmits<{\n (e: 'close-chip', id: ChipInfo['id']): void;\n (e: 'update:filter', id: unknown): void;\n}>();\n\nconst store = useStore();\n\nconst filterModel = defineModel<string[]>('filter', { required: true });\n\nconst preloadedOptions = ref<ListOption[] | undefined>(store.value.filterSuggestionsData.value[props.info.id]?.values);\nconst optionsOverflow = ref(store.value.filterSuggestionsData.value[props.info.id]?.overflow ?? false);\n\nwatch(() => store.value.loading.inputGuide, async (loading) => {\n if (loading) {\n return;\n }\n const { values, overflow } = await props.loadOptions(props.info.id);\n preloadedOptions.value = values;\n optionsOverflow.value = overflow;\n}, { immediate: true });\n\nfunction searchOptionsFn(str: string): Promise<ListOptionBase<string>[]> {\n if (str === '') {\n return Promise.resolve((preloadedOptions.value ?? []) as ListOptionBase<string>[]);\n }\n return props.searchOptions(props.info.id, str);\n}\n\n</script>\n\n<template>\n <div ref=\"chipRoot\" class=\"dnd-double-chip__group\">\n <div :class=\"{ error, sortable }\" class=\"dnd-double-chip\">\n <div class=\"dnd-double-chip__top\">\n <div class=\"dnd-double-chip__icon\" :class=\"{error}\">\n <PlIcon16 v-if=\"error\" name=\"warning\"/>\n <PlIcon16 v-else :name=\"info.isSubsetFilter ? 'cell-type-subset' : info.type === 'String' ? 'cell-type-txt' : 'cell-type-num'\"/>\n </div>\n <div v-if=\"sortable\" class=\"dnd-basket-chip__handler\"/>\n <PlIcon16 name=\"drag-dots\" />\n <div class=\"dnd-double-chip__title-wrapper\" :title=\"info.title\">\n <div class=\"dnd-double-chip__title\">\n {{ info.title }}\n </div>\n </div>\n\n <div\n class=\"dnd-double-chip__icon-close\"\n @click=\"$emit('close-chip', props.info.id)\"\n v-html=\"CloseIcon\"\n />\n </div>\n <div class=\"dnd-double-chip__bottom\">\n <PlDropdownMulti v-if=\"!optionsOverflow\" v-model=\"filterModel\" :options=\"preloadedOptions\" />\n <PlAutocompleteMulti\n v-else\n v-model=\"filterModel\"\n :options-search=\"searchOptionsFn\"\n :model-search=\"(v) => searchModel(props.info.id, v as string[])\"\n />\n </div>\n </div>\n </div>\n</template>\n"],"names":["props","__props","store","useStore","filterModel","_useModel","preloadedOptions","ref","_a","optionsOverflow","_b","watch","loading","values","overflow","searchOptionsFn","str","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_normalizeClass","_hoisted_2","_createBlock","_unref","PlIcon16","_hoisted_3","_createVNode","_hoisted_5","_toDisplayString","$emit","CloseIcon","_hoisted_7","PlAutocompleteMulti","$event","v","PlDropdownMulti"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,UAAMA,IAAQC,GAcRC,IAAQC,EAAA,GAERC,IAAcC,EAAqBJ,GAAC,QAA4B,GAEhEK,IAAmBC,GAA8BC,IAAAN,EAAM,MAAM,sBAAsB,MAAMF,EAAM,KAAK,EAAE,MAArD,gBAAAQ,EAAwD,MAAM,GAC/GC,IAAkBF,IAAIG,IAAAR,EAAM,MAAM,sBAAsB,MAAMF,EAAM,KAAK,EAAE,MAArD,gBAAAU,EAAwD,aAAY,EAAK;AAErG,IAAAC,EAAM,MAAMT,EAAM,MAAM,QAAQ,YAAY,OAAOU,MAAY;AAC7D,UAAIA;AACF;AAEF,YAAM,EAAE,QAAAC,GAAQ,UAAAC,MAAa,MAAMd,EAAM,YAAYA,EAAM,KAAK,EAAE;AAClE,MAAAM,EAAiB,QAAQO,GACzBJ,EAAgB,QAAQK;AAAA,IAC1B,GAAG,EAAE,WAAW,IAAM;AAEtB,aAASC,EAAgBC,GAAgD;AACvE,aAAIA,MAAQ,KACH,QAAQ,QAASV,EAAiB,SAAS,CAAA,CAA+B,IAE5EN,EAAM,cAAcA,EAAM,KAAK,IAAIgB,CAAG;AAAA,IAC/C;sBAKEC,EAAA,GAAAC,EA+BM,OA/BNC,GA+BM;AAAA,MA9BJC,EA6BM,OAAA;AAAA,QA7BA,OAAKC,EAAA,CAAA,EAAA,OAAIpB,EAAA,OAAK,UAAEA,EAAA,SAAA,GAAkB,iBAAiB,CAAA;AAAA,MAAA;QACvDmB,EAkBM,OAlBNE,GAkBM;AAAA,UAjBJF,EAGM,OAAA;AAAA,YAHD,OAAKC,EAAA,CAAC,yBAAuB,EAAA,OAAUpB,EAAA,OAAK,CAAA;AAAA,UAAA;YAC/BA,EAAA,cAAhBsB,EAAuCC,EAAAC,CAAA,GAAA;AAAA;cAAhB,MAAK;AAAA,YAAA,YAC5BF,EAAgIC,EAAAC,CAAA,GAAA;AAAA;cAA9G,MAAMxB,EAAA,KAAK,iBAAc,qBAAwBA,EAAA,KAAK,SAAI,WAAA,kBAAA;AAAA,YAAA;;UAEnEA,EAAA,YAAXgB,EAAA,GAAAC,EAAuD,OAAvDQ,CAAuD;UACvDC,EAA6BH,EAAAC,CAAA,GAAA,EAAnB,MAAK,aAAW;AAAA,UAC1BL,EAIM,OAAA;AAAA,YAJD,OAAM;AAAA,YAAkC,OAAOnB,EAAA,KAAK;AAAA,UAAA;YACvDmB,EAEM,OAFNQ,GAEMC,EADD5B,EAAA,KAAK,KAAK,GAAA,CAAA;AAAA,UAAA;UAIjBmB,EAIE,OAAA;AAAA,YAHA,OAAM;AAAA,YACL,gCAAOU,EAAAA,MAAK,cAAe9B,EAAM,KAAK,EAAE;AAAA,YACzC,WAAQwB,EAAAO,CAAA;AAAA,UAAA;;QAGZX,EAQM,OARNY,GAQM;AAAA,UAPoBvB,EAAA,cACxBc,EAKEC,EAAAS,CAAA,GAAA;AAAA;wBAHS7B,EAAA;AAAA,0DAAAA,EAAW,QAAA8B;AAAA,YACnB,kBAAgBnB;AAAA,YAChB,gBAAY,CAAGoB,MAAMlC,EAAA,YAAYD,EAAM,KAAK,IAAImC,CAAC;AAAA,UAAA,qDALpDZ,EAA6FC,EAAAY,CAAA,GAAA;AAAA;wBAA3ChC,EAAA;AAAA,0DAAAA,EAAW,QAAA8B;AAAA,YAAG,SAAS5B,EAAA;AAAA,UAAA;;;;;;"}
1
+ {"version":3,"file":"DndDoubleChip.vue.js","sources":["../../../src/components/DragAndDrop/DndDoubleChip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { ListOption, ListOptionBase } from '@platforma-sdk/ui-vue';\nimport { PlAutocompleteMulti, PlDropdownMulti, PlIcon16 } from '@platforma-sdk/ui-vue';\nimport type { ChipInfo } from './types';\nimport CloseIcon from '../../assets/drag-and-drop/img/chip-close.svg?raw';\nimport { useStore } from '../../store.ts';\n\nconst props = defineProps<{\n info: ChipInfo;\n error: boolean;\n searchModel: (sourceId: string, selectedValues: string[]) => Promise<ListOptionBase<string>[]>;\n searchOptions: (sourceId: string, searchStr: string) => Promise<ListOptionBase<string>[]>;\n loadOptions: (sourceId: string) => Promise<{ values: ListOption<string>[]; overflow: boolean }>;\n sortable?: boolean;\n}>();\n\nconst _emit = defineEmits<{\n (e: 'close-chip', id: ChipInfo['id']): void;\n (e: 'update:filter', id: unknown): void;\n}>();\n\nconst store = useStore();\n\nconst filterModel = defineModel<string[]>('filter', { required: true });\n\nconst preloadedOptions = ref<ListOption[] | undefined>(store.value.filterSuggestionsData.value[props.info.id]?.values);\nconst optionsOverflow = ref(store.value.filterSuggestionsData.value[props.info.id]?.overflow ?? false);\n\nwatch(() => store.value.loading.inputGuide, async (loading) => {\n if (loading) {\n return;\n }\n const { values, overflow } = await props.loadOptions(props.info.id);\n preloadedOptions.value = values;\n optionsOverflow.value = overflow;\n}, { immediate: true });\n\nfunction searchOptionsFn(str: string | string[]): Promise<ListOptionBase<string>[]> {\n if (str === '') {\n return Promise.resolve((preloadedOptions.value ?? []) as ListOptionBase<string>[]);\n }\n if (Array.isArray(str)) {\n return props.searchModel(props.info.id, str);\n }\n return props.searchOptions(props.info.id, str);\n}\n\n</script>\n\n<template>\n <div ref=\"chipRoot\" class=\"dnd-double-chip__group\">\n <div :class=\"{ error, sortable }\" class=\"dnd-double-chip\">\n <div class=\"dnd-double-chip__top\">\n <div class=\"dnd-double-chip__icon\" :class=\"{error}\">\n <PlIcon16 v-if=\"error\" name=\"warning\"/>\n <PlIcon16 v-else :name=\"info.isSubsetFilter ? 'cell-type-subset' : info.type === 'String' ? 'cell-type-txt' : 'cell-type-num'\"/>\n </div>\n <div v-if=\"sortable\" class=\"dnd-basket-chip__handler\"/>\n <PlIcon16 name=\"drag-dots\" />\n <div class=\"dnd-double-chip__title-wrapper\" :title=\"info.title\">\n <div class=\"dnd-double-chip__title\">\n {{ info.title }}\n </div>\n </div>\n\n <div\n class=\"dnd-double-chip__icon-close\"\n @click=\"$emit('close-chip', props.info.id)\"\n v-html=\"CloseIcon\"\n />\n </div>\n <div class=\"dnd-double-chip__bottom\">\n <PlDropdownMulti v-if=\"!optionsOverflow\" v-model=\"filterModel\" :options=\"preloadedOptions\" />\n <PlAutocompleteMulti\n v-else\n v-model=\"filterModel\"\n :options-search=\"(str: string | string[]) => searchOptionsFn(str)\"\n />\n </div>\n </div>\n </div>\n</template>\n"],"names":["props","__props","store","useStore","filterModel","_useModel","preloadedOptions","ref","_a","optionsOverflow","_b","watch","loading","values","overflow","searchOptionsFn","str","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_normalizeClass","_hoisted_2","_createBlock","_unref","PlIcon16","_hoisted_3","_createVNode","_hoisted_5","_toDisplayString","$emit","CloseIcon","_hoisted_7","PlAutocompleteMulti","$event","PlDropdownMulti"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,UAAMA,IAAQC,GAcRC,IAAQC,EAAA,GAERC,IAAcC,EAAqBJ,GAAC,QAA4B,GAEhEK,IAAmBC,GAA8BC,IAAAN,EAAM,MAAM,sBAAsB,MAAMF,EAAM,KAAK,EAAE,MAArD,gBAAAQ,EAAwD,MAAM,GAC/GC,IAAkBF,IAAIG,IAAAR,EAAM,MAAM,sBAAsB,MAAMF,EAAM,KAAK,EAAE,MAArD,gBAAAU,EAAwD,aAAY,EAAK;AAErG,IAAAC,EAAM,MAAMT,EAAM,MAAM,QAAQ,YAAY,OAAOU,MAAY;AAC7D,UAAIA;AACF;AAEF,YAAM,EAAE,QAAAC,GAAQ,UAAAC,MAAa,MAAMd,EAAM,YAAYA,EAAM,KAAK,EAAE;AAClE,MAAAM,EAAiB,QAAQO,GACzBJ,EAAgB,QAAQK;AAAA,IAC1B,GAAG,EAAE,WAAW,IAAM;AAEtB,aAASC,EAAgBC,GAA2D;AAClF,aAAIA,MAAQ,KACH,QAAQ,QAASV,EAAiB,SAAS,CAAA,CAA+B,IAE/E,MAAM,QAAQU,CAAG,IACZhB,EAAM,YAAYA,EAAM,KAAK,IAAIgB,CAAG,IAEtChB,EAAM,cAAcA,EAAM,KAAK,IAAIgB,CAAG;AAAA,IAC/C;sBAKEC,EAAA,GAAAC,EA8BM,OA9BNC,GA8BM;AAAA,MA7BJC,EA4BM,OAAA;AAAA,QA5BA,OAAKC,EAAA,CAAA,EAAA,OAAIpB,EAAA,OAAK,UAAEA,EAAA,SAAA,GAAkB,iBAAiB,CAAA;AAAA,MAAA;QACvDmB,EAkBM,OAlBNE,GAkBM;AAAA,UAjBJF,EAGM,OAAA;AAAA,YAHD,OAAKC,EAAA,CAAC,yBAAuB,EAAA,OAAUpB,EAAA,OAAK,CAAA;AAAA,UAAA;YAC/BA,EAAA,cAAhBsB,EAAuCC,EAAAC,CAAA,GAAA;AAAA;cAAhB,MAAK;AAAA,YAAA,YAC5BF,EAAgIC,EAAAC,CAAA,GAAA;AAAA;cAA9G,MAAMxB,EAAA,KAAK,iBAAc,qBAAwBA,EAAA,KAAK,SAAI,WAAA,kBAAA;AAAA,YAAA;;UAEnEA,EAAA,YAAXgB,EAAA,GAAAC,EAAuD,OAAvDQ,CAAuD;UACvDC,EAA6BH,EAAAC,CAAA,GAAA,EAAnB,MAAK,aAAW;AAAA,UAC1BL,EAIM,OAAA;AAAA,YAJD,OAAM;AAAA,YAAkC,OAAOnB,EAAA,KAAK;AAAA,UAAA;YACvDmB,EAEM,OAFNQ,GAEMC,EADD5B,EAAA,KAAK,KAAK,GAAA,CAAA;AAAA,UAAA;UAIjBmB,EAIE,OAAA;AAAA,YAHA,OAAM;AAAA,YACL,gCAAOU,EAAAA,MAAK,cAAe9B,EAAM,KAAK,EAAE;AAAA,YACzC,WAAQwB,EAAAO,CAAA;AAAA,UAAA;;QAGZX,EAOM,OAPNY,GAOM;AAAA,UANoBvB,EAAA,cACxBc,EAIEC,EAAAS,CAAA,GAAA;AAAA;wBAFS7B,EAAA;AAAA,0DAAAA,EAAW,QAAA8B;AAAA,YACnB,kBAAc,CAAGlB,MAA2BD,EAAgBC,CAAG;AAAA,UAAA,uDAJlEO,EAA6FC,EAAAW,CAAA,GAAA;AAAA;wBAA3C/B,EAAA;AAAA,0DAAAA,EAAW,QAAA8B;AAAA,YAAG,SAAS5B,EAAA;AAAA,UAAA;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/graph-maker",
3
- "version": "1.1.190",
3
+ "version": "1.1.191",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,8 +28,8 @@
28
28
  "dependencies": {
29
29
  "@ag-grid-community/core": "^32.3.3",
30
30
  "@milaboratories/helpers": "^1.6.15",
31
- "@platforma-sdk/model": "^1.45.45",
32
- "@platforma-sdk/ui-vue": "^1.45.45",
31
+ "@platforma-sdk/model": "^1.46.0",
32
+ "@platforma-sdk/ui-vue": "^1.46.1",
33
33
  "@types/d3-hierarchy": "^3.1.7",
34
34
  "@types/d3-scale": "^4.0.8",
35
35
  "@vueuse/core": "^13.1.0",