@platforma-sdk/ui-vue 1.45.37 → 1.45.45

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 (78) hide show
  1. package/.turbo/turbo-build.log +23 -39
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +19 -0
  4. package/dist/components/PlAdvancedFilter/{SingleFilter.vue.d.ts → FilterEditor.vue.d.ts} +12 -18
  5. package/dist/components/PlAdvancedFilter/FilterEditor.vue.js +10 -0
  6. package/dist/components/PlAdvancedFilter/FilterEditor.vue.js.map +1 -0
  7. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +305 -0
  8. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -0
  9. package/dist/components/PlAdvancedFilter/FilterEditor.vue3.js +33 -0
  10. package/dist/components/PlAdvancedFilter/FilterEditor.vue3.js.map +1 -0
  11. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -1
  12. package/dist/components/PlAdvancedFilter/OperandButton.vue3.js +9 -9
  13. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts +35 -16
  14. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +185 -145
  15. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
  16. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js +13 -9
  17. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js.map +1 -1
  18. package/dist/components/PlAdvancedFilter/constants.d.ts +4 -4
  19. package/dist/components/PlAdvancedFilter/constants.js +26 -22
  20. package/dist/components/PlAdvancedFilter/constants.js.map +1 -1
  21. package/dist/components/PlAdvancedFilter/index.d.ts +4 -0
  22. package/dist/components/PlAdvancedFilter/index.js +9 -0
  23. package/dist/components/PlAdvancedFilter/index.js.map +1 -0
  24. package/dist/components/PlAdvancedFilter/types.d.ts +30 -34
  25. package/dist/components/PlAdvancedFilter/utils.d.ts +26 -0
  26. package/dist/components/PlAdvancedFilter/utils.js +32 -131
  27. package/dist/components/PlAdvancedFilter/utils.js.map +1 -1
  28. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +43 -41
  29. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
  30. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue3.js +2 -2
  31. package/dist/components/PlAnnotations/components/FilterSidebar.vue.d.ts +14 -2
  32. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +99 -90
  33. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
  34. package/dist/components/PlAnnotations/components/FilterSidebar.vue3.js +5 -5
  35. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js +32 -30
  36. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
  37. package/dist/components/PlAnnotations/components/PlAnnotations.vue3.js +5 -7
  38. package/dist/components/PlAnnotations/components/PlAnnotations.vue3.js.map +1 -1
  39. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js +26 -22
  40. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
  41. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue3.js +7 -9
  42. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue3.js.map +1 -1
  43. package/dist/components/PlAnnotations/components/style.module.css.js +13 -0
  44. package/dist/components/PlAnnotations/components/style.module.css.js.map +1 -0
  45. package/dist/components/PlAnnotations/index.d.ts +1 -0
  46. package/dist/index.js +35 -33
  47. package/dist/index.js.map +1 -1
  48. package/package.json +9 -8
  49. package/src/components/PlAdvancedFilter/{SingleFilter.vue → FilterEditor.vue} +53 -53
  50. package/src/components/PlAdvancedFilter/OperandButton.vue +1 -1
  51. package/src/components/PlAdvancedFilter/PlAdvancedFilter.vue +155 -59
  52. package/src/components/PlAdvancedFilter/constants.ts +17 -11
  53. package/src/components/PlAdvancedFilter/index.ts +6 -0
  54. package/src/components/PlAdvancedFilter/types.ts +23 -54
  55. package/src/components/PlAdvancedFilter/utils.ts +51 -163
  56. package/src/components/PlAnnotations/components/AnnotationsSidebar.vue +8 -8
  57. package/src/components/PlAnnotations/components/FilterSidebar.vue +64 -69
  58. package/src/components/PlAnnotations/components/PlAnnotations.vue +4 -7
  59. package/src/components/PlAnnotations/components/PlAnnotationsModal.vue +5 -8
  60. package/src/components/PlAnnotations/components/style.module.css +16 -0
  61. package/src/components/PlAnnotations/index.ts +2 -0
  62. package/dist/components/PlAdvancedFilter/SingleFilter.vue.js +0 -10
  63. package/dist/components/PlAdvancedFilter/SingleFilter.vue.js.map +0 -1
  64. package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js +0 -306
  65. package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js.map +0 -1
  66. package/dist/components/PlAdvancedFilter/SingleFilter.vue3.js +0 -35
  67. package/dist/components/PlAdvancedFilter/SingleFilter.vue3.js.map +0 -1
  68. package/dist/components/PlAdvancedFilter/types.js +0 -8
  69. package/dist/components/PlAdvancedFilter/types.js.map +0 -1
  70. package/dist/components/PlAnnotations/components/DynamicForm.vue.d.ts +0 -24
  71. package/dist/components/PlAnnotations/components/DynamicForm.vue.js +0 -10
  72. package/dist/components/PlAnnotations/components/DynamicForm.vue.js.map +0 -1
  73. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +0 -109
  74. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js.map +0 -1
  75. package/dist/components/PlAnnotations/components/DynamicForm.vue3.js +0 -9
  76. package/dist/components/PlAnnotations/components/DynamicForm.vue3.js.map +0 -1
  77. package/dist/components/PlAnnotations/utils.js +0 -20
  78. package/dist/components/PlAnnotations/utils.js.map +0 -1
@@ -1,306 +0,0 @@
1
- import { defineComponent as Z, mergeModels as _, useModel as ee, computed as p, createElementBlock as I, openBlock as n, Fragment as T, createElementVNode as v, createVNode as b, normalizeClass as r, createCommentVNode as f, createBlock as c, unref as a, toDisplayString as le, renderList as te } from "vue";
2
- import { PlIcon16 as B, PlDropdown as N, PlAutocomplete as D, PlTextField as A, Slider as ue, PlToggleSwitch as oe, PlAutocompleteMulti as ae, PlNumberField as ne } from "@milaboratories/uikit";
3
- import { SUPPORTED_FILTER_TYPES as se, DEFAULT_FILTERS as U, DEFAULT_FILTER_TYPE as re } from "./constants.js";
4
- import { parseColumnId as M, isFilteredPColumn as R, stringifyColumnId as q } from "@platforma-sdk/model";
5
- import ie from "./OperandButton.vue.js";
6
- import { getNormalizedSpec as z, getFilterInfo as C, isNumericFilter as L, isStringFilter as de } from "./utils.js";
7
- const pe = ["title"], fe = /* @__PURE__ */ Z({
8
- __name: "SingleFilter",
9
- props: /* @__PURE__ */ _({
10
- operand: {},
11
- columnOptions: {},
12
- enableDnd: { type: Boolean },
13
- isLast: { type: Boolean },
14
- getSuggestOptions: { type: Function },
15
- getSuggestModel: { type: Function },
16
- onDelete: { type: Function },
17
- onChangeOperand: { type: Function }
18
- }, {
19
- modelValue: { required: !0 },
20
- modelModifiers: {}
21
- }),
22
- emits: ["update:modelValue"],
23
- setup(y) {
24
- const g = y, l = ee(y, "modelValue");
25
- async function w(e, t, o) {
26
- return Promise.all(t.map((d) => g.getSuggestModel({ columnId: e, searchStr: d, axisIdx: o })));
27
- }
28
- async function h(e, t, o) {
29
- return g.getSuggestModel({ columnId: e, searchStr: t, axisIdx: o });
30
- }
31
- async function $(e, t, o) {
32
- return g.getSuggestOptions({ columnId: e, searchStr: t, axisIdx: o });
33
- }
34
- function W() {
35
- const e = C(l.value.type);
36
- F.value && e.supportedFor(F.value) && L(l.value) || (F.value && e.supportedFor(F.value) && de(l.value) ? l.value = {
37
- ...U[l.value.type],
38
- value: l.value.value,
39
- column: l.value.column
40
- } : l.value = {
41
- ...U[l.value.type],
42
- column: l.value.column
43
- });
44
- }
45
- function j(e) {
46
- if (!e)
47
- return;
48
- const t = g.columnOptions.find((i) => i.id === E(e));
49
- if (!t)
50
- return;
51
- const o = C(l.value.type), d = z(t == null ? void 0 : t.spec);
52
- o.supportedFor(d) ? l.value.column = e : l.value = {
53
- ...U[re],
54
- column: e
55
- };
56
- }
57
- const x = p(() => g.columnOptions.find((t) => t.id === E(l.value.column)) === void 0), X = p(() => {
58
- const e = g.columnOptions.map((t) => ({ value: t.id, label: t.label ?? t }));
59
- return x.value && e.unshift({ value: l.value.column, label: "Inconsistent value" }), e;
60
- });
61
- function E(e) {
62
- try {
63
- const t = M(e);
64
- return R(t) ? q(t.source) : e;
65
- } catch {
66
- return e;
67
- }
68
- }
69
- function Y(e) {
70
- const t = E(e), o = g.columnOptions.find((i) => i.id === t), d = ((o == null ? void 0 : o.axesToBeFixed) ?? []).reduce((i, V) => (i[V.idx] = void 0, i), {});
71
- try {
72
- const i = M(e);
73
- if (R(i))
74
- return {
75
- source: t,
76
- axisFiltersByIndex: i.axisFilters.reduce((V, O) => (V[O[0]] = O[1], V), d)
77
- };
78
- } catch {
79
- return { source: e, axisFiltersByIndex: d };
80
- }
81
- return { source: e, axisFiltersByIndex: d };
82
- }
83
- function G(e) {
84
- return Object.keys(e.axisFiltersByIndex).length === 0 ? e.source : q({
85
- source: M(e.source),
86
- axisFilters: Object.entries(e.axisFiltersByIndex).map(([t, o]) => [Number(t), o])
87
- });
88
- }
89
- const s = p({
90
- get: () => Y(l.value.column),
91
- set: (e) => {
92
- l.value.column = G(e);
93
- }
94
- });
95
- function H(e, t) {
96
- s.value = {
97
- ...s.value,
98
- axisFiltersByIndex: { ...s.value.axisFiltersByIndex, [e]: t }
99
- };
100
- }
101
- const m = p(() => g.columnOptions.find((e) => e.id === s.value.source)), F = p(() => {
102
- var e;
103
- return (e = m.value) != null && e.spec ? z(m.value.spec) : null;
104
- }), P = p(() => {
105
- var e;
106
- return (e = F.value) == null ? void 0 : e.valueType;
107
- }), k = p(() => {
108
- var e;
109
- return ((e = m.value) == null ? void 0 : e.error) || x.value;
110
- }), J = p(
111
- () => [...se].filter(
112
- (e) => l.value.type === e || (F.value ? C(e).supportedFor(F.value) : !0)
113
- ).map((e) => ({ value: e, label: C(e).label }))
114
- ), K = p(() => {
115
- var e, t;
116
- return l.value.type === "patternFuzzyContainSubsequence" ? ((e = m.value) == null ? void 0 : e.alphabet) === "nucleotide" ? [{ label: "N", value: "N" }] : ((t = m.value) == null ? void 0 : t.alphabet) === "aminoacid" ? [{ label: "X", value: "X" }] : [...new Set(l.value.value.split(""))].sort().map((o) => ({ value: o, label: o })) : [];
117
- }), Q = p(() => {
118
- if (l.value.type !== "patternMatchesRegularExpression")
119
- return !1;
120
- try {
121
- return new RegExp(l.value.value), !1;
122
- } catch {
123
- return !0;
124
- }
125
- });
126
- return (e, t) => {
127
- var o, d, i, V, O;
128
- return n(), I(T, null, [
129
- v("div", {
130
- class: r(e.$style.filterWrapper)
131
- }, [
132
- y.enableDnd ? (n(), I("div", {
133
- key: 0,
134
- class: r([e.$style.top, e.$style.columnChip, { [e.$style.error]: k.value }])
135
- }, [
136
- v("div", {
137
- class: r([e.$style.typeIcon, { [e.$style.error]: k.value }])
138
- }, [
139
- k.value ? (n(), c(a(B), {
140
- key: 0,
141
- name: "warning"
142
- })) : (n(), c(a(B), {
143
- key: 1,
144
- name: P.value === "String" || P.value === void 0 ? "cell-type-txt" : "cell-type-num"
145
- }, null, 8, ["name"]))
146
- ], 2),
147
- v("div", {
148
- class: r(e.$style.titleWrapper),
149
- title: ((o = m.value) == null ? void 0 : o.label) ?? ""
150
- }, [
151
- v("div", {
152
- class: r(e.$style.title)
153
- }, le(x.value ? "Inconsistent value" : ((d = m.value) == null ? void 0 : d.label) ?? l.value.column), 3)
154
- ], 10, pe),
155
- v("div", {
156
- class: r(e.$style.closeIcon),
157
- onClick: t[0] || (t[0] = (u) => y.onDelete(l.value.column))
158
- }, [
159
- b(a(B), { name: "close" })
160
- ], 2)
161
- ], 2)) : (n(), I("div", {
162
- key: 1,
163
- class: r(e.$style.top)
164
- }, [
165
- b(a(N), {
166
- modelValue: s.value.source,
167
- "onUpdate:modelValue": [
168
- t[1] || (t[1] = (u) => s.value.source = u),
169
- j
170
- ],
171
- errorStatus: k.value,
172
- options: X.value,
173
- style: { width: "100%" },
174
- "group-position": "top-left"
175
- }, null, 8, ["modelValue", "errorStatus", "options"]),
176
- v("div", {
177
- class: r(e.$style.closeButton),
178
- onClick: t[2] || (t[2] = (u) => y.onDelete(l.value.column))
179
- }, [
180
- b(a(B), { name: "close" })
181
- ], 2)
182
- ], 2)),
183
- (V = (i = m.value) == null ? void 0 : i.axesToBeFixed) != null && V.length ? (n(), I("div", {
184
- key: 2,
185
- class: r(e.$style.fixedAxesBlock)
186
- }, [
187
- (n(!0), I(T, null, te((O = m.value) == null ? void 0 : O.axesToBeFixed, (u) => (n(), c(a(D), {
188
- key: u.idx,
189
- modelValue: s.value.axisFiltersByIndex[u.idx],
190
- "onUpdate:modelValue": [(S) => s.value.axisFiltersByIndex[u.idx] = S, (S) => H(u.idx, S)],
191
- label: u.label,
192
- "options-search": (S) => $(s.value.source, S, u.idx),
193
- "model-search": (S) => h(s.value.source, S, u.idx),
194
- disabled: x.value,
195
- clearable: !0
196
- }, null, 8, ["modelValue", "onUpdate:modelValue", "label", "options-search", "model-search", "disabled"]))), 128))
197
- ], 2)) : f("", !0),
198
- v("div", {
199
- class: r(l.value.type === "isNA" || l.value.type === "isNotNA" ? e.$style.bottom : e.$style.middle)
200
- }, [
201
- b(a(N), {
202
- modelValue: l.value.type,
203
- "onUpdate:modelValue": [
204
- t[3] || (t[3] = (u) => l.value.type = u),
205
- W
206
- ],
207
- options: J.value,
208
- "group-position": l.value.type === "isNA" || l.value.type === "isNotNA" ? "bottom" : "middle"
209
- }, null, 8, ["modelValue", "options", "group-position"])
210
- ], 2),
211
- l.value.type === "patternFuzzyContainSubsequence" ? (n(), I(T, { key: 3 }, [
212
- v("div", {
213
- class: r(e.$style.middle)
214
- }, [
215
- b(a(A), {
216
- modelValue: l.value.value,
217
- "onUpdate:modelValue": t[4] || (t[4] = (u) => l.value.value = u),
218
- placeholder: "Substring",
219
- "group-position": "middle"
220
- }, null, 8, ["modelValue"])
221
- ], 2),
222
- v("div", {
223
- class: r(e.$style.innerSection)
224
- }, [
225
- b(a(ue), {
226
- modelValue: l.value.maxEdits,
227
- "onUpdate:modelValue": t[5] || (t[5] = (u) => l.value.maxEdits = u),
228
- max: 5,
229
- breakpoints: "",
230
- label: "Maximum number of substitutions and indels"
231
- }, null, 8, ["modelValue"]),
232
- b(a(oe), {
233
- modelValue: l.value.substitutionsOnly,
234
- "onUpdate:modelValue": t[6] || (t[6] = (u) => l.value.substitutionsOnly = u),
235
- label: "Substitutions only"
236
- }, null, 8, ["modelValue"])
237
- ], 2)
238
- ], 64)) : f("", !0),
239
- v("div", {
240
- class: r(e.$style.bottom)
241
- }, [
242
- l.value.type === "patternEquals" || l.value.type === "patternNotEquals" ? (n(), c(a(D), {
243
- key: 0,
244
- modelValue: l.value.value,
245
- "onUpdate:modelValue": t[7] || (t[7] = (u) => l.value.value = u),
246
- "options-search": (u) => $(s.value.source, u),
247
- "model-search": (u) => h(s.value.source, u),
248
- disabled: x.value,
249
- clearable: !0,
250
- "group-position": "bottom"
251
- }, null, 8, ["modelValue", "options-search", "model-search", "disabled"])) : f("", !0),
252
- l.value.type === "inSet" || l.value.type === "notInSet" ? (n(), c(a(ae), {
253
- key: 1,
254
- modelValue: l.value.value,
255
- "onUpdate:modelValue": t[8] || (t[8] = (u) => l.value.value = u),
256
- "options-search": (u) => $(s.value.source, u),
257
- "model-search": (u) => w(s.value.source, u),
258
- disabled: x.value,
259
- "group-position": "bottom"
260
- }, null, 8, ["modelValue", "options-search", "model-search", "disabled"])) : f("", !0),
261
- a(L)(l.value) ? (n(), c(a(ne), {
262
- key: 2,
263
- modelValue: l.value.x,
264
- "onUpdate:modelValue": t[9] || (t[9] = (u) => l.value.x = u),
265
- "group-position": "bottom"
266
- }, null, 8, ["modelValue"])) : f("", !0),
267
- l.value.type === "patternContainSubsequence" || l.value.type === "patternNotContainSubsequence" ? (n(), c(a(A), {
268
- key: 3,
269
- modelValue: l.value.value,
270
- "onUpdate:modelValue": t[10] || (t[10] = (u) => l.value.value = u),
271
- placeholder: "Substring",
272
- "group-position": "bottom"
273
- }, null, 8, ["modelValue"])) : f("", !0),
274
- l.value.type === "patternMatchesRegularExpression" ? (n(), c(a(A), {
275
- key: 4,
276
- modelValue: l.value.value,
277
- "onUpdate:modelValue": t[11] || (t[11] = (u) => l.value.value = u),
278
- error: Q.value ? "Regular expression is not valid" : void 0,
279
- placeholder: "Regular expression",
280
- "group-position": "bottom"
281
- }, null, 8, ["modelValue", "error"])) : f("", !0),
282
- l.value.type === "patternFuzzyContainSubsequence" ? (n(), c(a(N), {
283
- key: 5,
284
- modelValue: l.value.wildcard,
285
- "onUpdate:modelValue": t[12] || (t[12] = (u) => l.value.wildcard = u),
286
- clearable: "",
287
- placeholder: "Wildcard value",
288
- options: K.value,
289
- "group-position": "bottom"
290
- }, null, 8, ["modelValue", "options"])) : f("", !0)
291
- ], 2)
292
- ], 2),
293
- b(ie, {
294
- class: r(e.$style.buttonWrapper),
295
- active: y.operand,
296
- disabled: y.isLast,
297
- "on-select": y.onChangeOperand
298
- }, null, 8, ["class", "active", "disabled", "on-select"])
299
- ], 64);
300
- };
301
- }
302
- });
303
- export {
304
- fe as default
305
- };
306
- //# sourceMappingURL=SingleFilter.vue2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SingleFilter.vue2.js","sources":["../../../src/components/PlAdvancedFilter/SingleFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { PlAdvancedFilterColumnId, Filter, Operand, SourceOptionInfo } from './types';\nimport { PlIcon16, PlDropdown, PlAutocomplete, PlAutocompleteMulti, PlTextField, PlNumberField, Slider, PlToggleSwitch } from '@milaboratories/uikit';\nimport { computed } from 'vue';\nimport { SUPPORTED_FILTER_TYPES, DEFAULT_FILTER_TYPE, DEFAULT_FILTERS } from './constants';\nimport type { AnchoredPColumnId, AxisFilterByIdx, AxisFilterValue, SUniversalPColumnId } from '@platforma-sdk/model';\nimport { isFilteredPColumn, parseColumnId, stringifyColumnId, type ListOptionBase } from '@platforma-sdk/model';\nimport OperandButton from './OperandButton.vue';\nimport { getFilterInfo, getNormalizedSpec, isNumericFilter, isStringFilter } from './utils';\n\nconst props = defineProps<{\n operand: Operand;\n columnOptions: SourceOptionInfo[];\n enableDnd: boolean;\n isLast: boolean;\n getSuggestOptions: (params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => (Promise<ListOptionBase<string | number>[]>) |\n ((params: { columnId: SUniversalPColumnId; searchStr: string; axisIdx?: number }) => ListOptionBase<string | number>[]);\n getSuggestModel: (params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => (Promise<ListOptionBase<string | number>>) |\n ((params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => ListOptionBase<string | number>);\n onDelete: (columnId: PlAdvancedFilterColumnId) => void;\n onChangeOperand: (op: Operand) => void;\n}>();\n\nconst filter = defineModel<Filter>({ required: true });\n\nasync function getSuggestModelMultiFn(id: PlAdvancedFilterColumnId, v: string[], axisIdx?: number): Promise<ListOptionBase<string>[]> {\n return Promise.all(v.map((v) => props.getSuggestModel({ columnId: id, searchStr: v, axisIdx }) as Promise<ListOptionBase<string>>));\n}\nasync function getSuggestModelSingleFn(id: PlAdvancedFilterColumnId, v: string, axisIdx?: number): Promise<ListOptionBase<string>> {\n return props.getSuggestModel({ columnId: id, searchStr: v, axisIdx }) as Promise<ListOptionBase<string>>;\n}\nasync function getSuggestOptionsFn(id: PlAdvancedFilterColumnId, str: string, axisIdx?: number): Promise<ListOptionBase<string>[]> {\n return props.getSuggestOptions({ columnId: id, searchStr: str, axisIdx }) as Promise<ListOptionBase<string>[]>;\n}\n\nfunction changeFilterType() {\n const nextFilterInfo = getFilterInfo(filter.value.type);\n if (currentSpec.value && nextFilterInfo.supportedFor(currentSpec.value) && isNumericFilter(filter.value)) {\n // no extra changes, previous filter is compatible with new filter type\n return;\n } else if (currentSpec.value && nextFilterInfo.supportedFor(currentSpec.value) && isStringFilter(filter.value)) {\n // erase extra settings for string filter types, save only value and column (for example regex)\n filter.value = {\n ...DEFAULT_FILTERS[filter.value.type],\n value: filter.value.value,\n column: filter.value.column,\n } as Filter;\n } else {\n filter.value = {\n ...DEFAULT_FILTERS[filter.value.type],\n column: filter.value.column,\n };\n }\n}\n\nfunction changeSourceId(newSourceId?: PlAdvancedFilterColumnId) {\n if (!newSourceId) {\n return;\n }\n const newSourceInfo = props.columnOptions.find((v) => v.id === getSourceId(newSourceId));\n if (!newSourceInfo) {\n return;\n }\n const filterInfo = getFilterInfo(filter.value.type);\n const newSourceSpec = getNormalizedSpec(newSourceInfo?.spec);\n if (filterInfo.supportedFor(newSourceSpec)) { // don't do anything except update source id\n filter.value.column = newSourceId;\n } else { // reset to default filter which fits to any column\n filter.value = {\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: newSourceId,\n };\n }\n}\n\nconst inconsistentSourceSelected = computed(() => {\n const selectedOption = props.columnOptions.find((op) => op.id === getSourceId(filter.value.column));\n return selectedOption === undefined;\n});\nconst sourceOptions = computed(() => {\n const options = props.columnOptions.map((v) => ({ value: v.id, label: v.label ?? v }));\n if (inconsistentSourceSelected.value) {\n options.unshift({ value: filter.value.column, label: 'Inconsistent value' });\n }\n return options;\n});\n\nfunction getSourceId(column: PlAdvancedFilterColumnId): PlAdvancedFilterColumnId {\n try {\n const parsedColumnId = parseColumnId(column as SUniversalPColumnId);\n if (isFilteredPColumn(parsedColumnId)) {\n return stringifyColumnId(parsedColumnId.source);\n } else {\n return column;\n }\n } catch {\n return column;\n }\n}\n\n// similar to FilteredPColumnId but source is stringified and axis filters can be undefined\ntype ColumnAsSourceAndFixedAxes = { source: PlAdvancedFilterColumnId; axisFiltersByIndex: Record<number, AxisFilterValue | undefined> };\nfunction getColumnAsSourceAndFixedAxes(column: PlAdvancedFilterColumnId): ColumnAsSourceAndFixedAxes {\n const sourceId = getSourceId(column);\n const option = props.columnOptions.find((op) => op.id === sourceId);\n const axesToBeFixed = (option?.axesToBeFixed ?? []).reduce((res, item) => {\n res[item.idx] = undefined;\n return res;\n }, {} as Record<number, AxisFilterValue | undefined>);\n try {\n const parsedColumnId = parseColumnId(column as SUniversalPColumnId);\n if (isFilteredPColumn(parsedColumnId)) {\n return {\n source: sourceId,\n axisFiltersByIndex: parsedColumnId.axisFilters.reduce((res, item) => {\n res[item[0]] = item[1];\n return res;\n }, axesToBeFixed),\n };\n }\n } catch {\n return { source: column, axisFiltersByIndex: axesToBeFixed };\n }\n return { source: column, axisFiltersByIndex: axesToBeFixed };\n}\n\nfunction stringifyColumn(value: ColumnAsSourceAndFixedAxes): PlAdvancedFilterColumnId {\n if (Object.keys(value.axisFiltersByIndex).length === 0) {\n return value.source;\n }\n return stringifyColumnId({\n source: parseColumnId(value.source as SUniversalPColumnId) as AnchoredPColumnId,\n axisFilters: Object.entries(value.axisFiltersByIndex).map(([idx, value]) => [Number(idx), value] as AxisFilterByIdx),\n });\n}\n\nconst columnAsSourceAndFixedAxes = computed({\n get: () => {\n return getColumnAsSourceAndFixedAxes(filter.value.column);\n },\n set: (value) => {\n filter.value.column = stringifyColumn(value);\n },\n});\nfunction updateAxisFilterValue(idx: number, value: AxisFilterValue | undefined) {\n columnAsSourceAndFixedAxes.value = {\n ...columnAsSourceAndFixedAxes.value,\n axisFiltersByIndex: { ...columnAsSourceAndFixedAxes.value.axisFiltersByIndex, [idx]: value } };\n}\n\nconst currentOption = computed(() => props.columnOptions.find((op) => op.id === columnAsSourceAndFixedAxes.value.source));\nconst currentSpec = computed(() => currentOption.value?.spec ? getNormalizedSpec(currentOption.value.spec) : null);\nconst currentType = computed(() => currentSpec.value?.valueType);\nconst currentError = computed(() => currentOption.value?.error || inconsistentSourceSelected.value);\n\nconst filterTypesOptions = computed(() => [...SUPPORTED_FILTER_TYPES].filter((v) =>\n filter.value.type === v || (currentSpec.value ? getFilterInfo(v).supportedFor(currentSpec.value) : true),\n).map((v) => ({ value: v, label: getFilterInfo(v).label })),\n);\n\nconst wildcardOptions = computed(() => {\n if (filter.value.type === 'patternFuzzyContainSubsequence') {\n if (currentOption.value?.alphabet === 'nucleotide') {\n return [{ label: 'N', value: 'N' }];\n }\n if (currentOption.value?.alphabet === 'aminoacid') {\n return [{ label: 'X', value: 'X' }];\n }\n return [...new Set(filter.value.value.split(''))].sort().map((v) => ({ value: v, label: v }));\n }\n return [];\n});\n\nconst stringMatchesError = computed(() => {\n if (filter.value.type !== 'patternMatchesRegularExpression') {\n return false;\n }\n try {\n new RegExp(filter.value.value);\n return false;\n } catch {\n return true;\n }\n});\n\n</script>\n<template>\n <div :class=\"$style.filterWrapper\">\n <!-- top element - column selector / column label - for all filter types-->\n <div v-if=\"enableDnd\" :class=\"[$style.top, $style.columnChip, {[$style.error]: currentError}]\">\n <div :class=\"[$style.typeIcon, {[$style.error]: currentError}]\">\n <PlIcon16 v-if=\"currentError\" name=\"warning\"/>\n <PlIcon16 v-else :name=\"currentType === 'String' || currentType === undefined ? 'cell-type-txt' : 'cell-type-num'\"/>\n </div>\n <div :class=\"$style.titleWrapper\" :title=\"currentOption?.label ?? ''\">\n <div :class=\"$style.title\">\n {{ inconsistentSourceSelected ? 'Inconsistent value' : currentOption?.label ?? filter.column }}\n </div>\n </div>\n <div :class=\"$style.closeIcon\" @click=\"onDelete(filter.column)\">\n <PlIcon16 name=\"close\"/>\n </div>\n </div>\n <div v-else :class=\"$style.top\" >\n <PlDropdown\n v-model=\"columnAsSourceAndFixedAxes.source\"\n :errorStatus=\"currentError\"\n :options=\"sourceOptions\"\n :style=\"{width: '100%'}\"\n group-position=\"top-left\"\n @update:model-value=\"changeSourceId\"\n />\n <div :class=\"$style.closeButton\" @click=\"onDelete(filter.column)\">\n <PlIcon16 name=\"close\"/>\n </div>\n </div>\n\n <div v-if=\"currentOption?.axesToBeFixed?.length\" :class=\"$style.fixedAxesBlock\">\n <template v-for=\"value in currentOption?.axesToBeFixed\" :key=\"value.idx\">\n <PlAutocomplete\n v-model=\"columnAsSourceAndFixedAxes.axisFiltersByIndex[value.idx]\"\n :label=\"value.label\"\n :options-search=\"(str) => getSuggestOptionsFn(columnAsSourceAndFixedAxes.source, str, value.idx)\"\n :model-search=\"(v) => getSuggestModelSingleFn(columnAsSourceAndFixedAxes.source, v as string, value.idx)\"\n :disabled=\"inconsistentSourceSelected\"\n :clearable=\"true\"\n @update:model-value=\"(v) => updateAxisFilterValue(value.idx, v)\"\n />\n </template>\n </div>\n\n <!-- middle - filter type selector - for all filter types -->\n <div :class=\"filter.type === 'isNA' || filter.type === 'isNotNA' ? $style.bottom : $style.middle\">\n <PlDropdown\n v-model=\"filter.type\"\n :options=\"filterTypesOptions\"\n :group-position=\"filter.type === 'isNA' || filter.type === 'isNotNA' ? 'bottom' : 'middle'\"\n @update:model-value=\"changeFilterType\"\n />\n </div>\n\n <!-- middle - for fuzzy contains filter -->\n <template v-if=\"filter.type === 'patternFuzzyContainSubsequence'\">\n <div :class=\"$style.middle\">\n <PlTextField\n v-model=\"filter.value\"\n placeholder=\"Substring\"\n group-position=\"middle\"\n />\n </div>\n <div :class=\"$style.innerSection\">\n <Slider\n v-model=\"filter.maxEdits\"\n :max=\"5\"\n breakpoints label=\"Maximum number of substitutions and indels\"\n />\n <PlToggleSwitch\n v-model=\"filter.substitutionsOnly\"\n label=\"Substitutions only\"\n />\n </div>\n </template>\n\n <!-- bottom element - individual settings for every filter type -->\n <div :class=\"$style.bottom\">\n <template v-if=\"filter.type === 'patternEquals' || filter.type === 'patternNotEquals'\" >\n <PlAutocomplete\n v-model=\"filter.value\"\n :options-search=\"(str) => getSuggestOptionsFn(columnAsSourceAndFixedAxes.source, str)\"\n :model-search=\"(v) => getSuggestModelSingleFn(columnAsSourceAndFixedAxes.source, v as string)\"\n :disabled=\"inconsistentSourceSelected\"\n :clearable=\"true\"\n group-position=\"bottom\"\n />\n </template>\n <template v-if=\"filter.type === 'inSet' || filter.type === 'notInSet'\" >\n <PlAutocompleteMulti\n v-model=\"filter.value\"\n :options-search=\"(str) => getSuggestOptionsFn(columnAsSourceAndFixedAxes.source, str)\"\n :model-search=\"(v) => getSuggestModelMultiFn(columnAsSourceAndFixedAxes.source, v as string[])\"\n :disabled=\"inconsistentSourceSelected\"\n group-position=\"bottom\"\n />\n </template>\n <PlNumberField\n v-if=\"isNumericFilter(filter)\"\n v-model=\"filter.x\"\n group-position=\"bottom\"\n />\n <PlTextField\n v-if=\"filter.type === 'patternContainSubsequence' || filter.type === 'patternNotContainSubsequence'\"\n v-model=\"filter.value\"\n placeholder=\"Substring\"\n group-position=\"bottom\"\n />\n <PlTextField\n v-if=\"filter.type === 'patternMatchesRegularExpression'\"\n v-model=\"filter.value\"\n :error=\"stringMatchesError ? 'Regular expression is not valid' : undefined\"\n placeholder=\"Regular expression\"\n group-position=\"bottom\"\n />\n <PlDropdown\n v-if=\"filter.type === 'patternFuzzyContainSubsequence'\"\n v-model=\"filter.wildcard\"\n clearable\n placeholder=\"Wildcard value\"\n :options=\"wildcardOptions\"\n group-position=\"bottom\"\n />\n </div>\n </div>\n <OperandButton\n :class=\"$style.buttonWrapper\"\n :active=\"operand\"\n :disabled=\"isLast\"\n :on-select=\"onChangeOperand\"\n />\n</template>\n\n<style module>\n.filterWrapper {\n position: relative;\n display: flex;\n flex-direction: column;\n margin-bottom: 8px;\n width: 100%;\n cursor: default;\n}\n\n.typeIcon {\n display: inline-flex;\n margin-right: 8px;\n}\n\n.typeIcon.error {\n --icon-color: var(--txt-error);\n}\n\n.closeIcon {\n display: inline-flex;\n margin-left: 12px;\n cursor: pointer;\n}\n\n.titleWrapper {\n flex-grow: 1;\n overflow: hidden;\n}\n.title {\n overflow: hidden;\n color: var(--txt-01);\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n}\n\n.columnChip {\n width: 100%;\n display: flex;\n padding: 10px 12px;\n align-items: center;\n border-radius: 6px;\n border: 1px solid var(--txt-01);\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n\n &.error {\n border-color: var(--txt-error);\n }\n}\n\n.innerSection {\n border: 1px solid var(--txt-01);\n border-top: none;\n padding: 16px 12px;\n}\n\n.closeButton {\n border: 1px solid var(--txt-01);\n border-top-right-radius: 6px;\n border-left: none;\n width: 40px;\n height: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n cursor: pointer;\n}\n\n.top {\n position: relative;\n display: flex;\n width: 100%;\n z-index: 1;\n background: #fff;\n}\n\n.fixedAxesBlock {\n position: relative;\n display: flex;\n flex-direction: column;\n padding: 12px 8px;\n gap: 12px;\n border-left: 1px solid var(--txt-01);\n border-right: 1px solid var(--txt-01);\n}\n\n.fixedAxesBlock > * {\n background: #fff;\n}\n\n.middle, .bottom {\n position: relative;\n margin-top: -1px;\n background: #fff;\n}\n\n.buttonWrapper {\n margin-bottom: 8px;\n}\n</style>\n"],"names":["props","__props","filter","_useModel","getSuggestModelMultiFn","id","v","axisIdx","getSuggestModelSingleFn","getSuggestOptionsFn","str","changeFilterType","nextFilterInfo","getFilterInfo","currentSpec","isNumericFilter","isStringFilter","DEFAULT_FILTERS","changeSourceId","newSourceId","newSourceInfo","getSourceId","filterInfo","newSourceSpec","getNormalizedSpec","DEFAULT_FILTER_TYPE","inconsistentSourceSelected","computed","op","sourceOptions","options","column","parsedColumnId","parseColumnId","isFilteredPColumn","stringifyColumnId","getColumnAsSourceAndFixedAxes","sourceId","option","axesToBeFixed","res","item","stringifyColumn","value","idx","columnAsSourceAndFixedAxes","updateAxisFilterValue","currentOption","_a","currentType","currentError","filterTypesOptions","SUPPORTED_FILTER_TYPES","wildcardOptions","_b","stringMatchesError","_createElementVNode","_normalizeClass","$style","_createElementBlock","_createBlock","_unref","PlIcon16","_toDisplayString","_cache","$event","_createVNode","PlDropdown","_d","_c","_openBlock","_Fragment","_renderList","_e","PlAutocomplete","PlTextField","Slider","PlToggleSwitch","PlAutocompleteMulti","PlNumberField","OperandButton"],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var o=document.createElement("style");o.appendChild(document.createTextNode("._filterWrapper_mviuo_2{position:relative;display:flex;flex-direction:column;margin-bottom:8px;width:100%;cursor:default}._typeIcon_mviuo_11{display:inline-flex;margin-right:8px}._typeIcon_mviuo_11._error_mviuo_16{--icon-color: var(--txt-error)}._closeIcon_mviuo_20{display:inline-flex;margin-left:12px;cursor:pointer}._titleWrapper_mviuo_26{flex-grow:1;overflow:hidden}._title_mviuo_26{overflow:hidden;color:var(--txt-01);text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px}._columnChip_mviuo_40{width:100%;display:flex;padding:10px 12px;align-items:center;border:1px solid var(--txt-01);border-radius:6px 6px 0 0}._columnChip_mviuo_40._error_mviuo_16{border-color:var(--txt-error)}._innerSection_mviuo_55{border:1px solid var(--txt-01);border-top:none;padding:16px 12px}._closeButton_mviuo_61{border:1px solid var(--txt-01);border-top-right-radius:6px;border-left:none;width:40px;height:40px;display:flex;justify-content:center;align-items:center;flex-shrink:0;cursor:pointer}._top_mviuo_74{position:relative;display:flex;width:100%;z-index:1;background:#fff}._fixedAxesBlock_mviuo_82{position:relative;display:flex;flex-direction:column;padding:12px 8px;gap:12px;border-left:1px solid var(--txt-01);border-right:1px solid var(--txt-01)}._fixedAxesBlock_mviuo_82>*{background:#fff}._middle_mviuo_96,._bottom_mviuo_96{position:relative;margin-top:-1px;background:#fff}._buttonWrapper_mviuo_102{margin-bottom:8px}")),document.head.appendChild(o)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();
2
- const o = "_filterWrapper_mviuo_2", t = "_typeIcon_mviuo_11", e = "_error_mviuo_16", _ = "_closeIcon_mviuo_20", n = "_titleWrapper_mviuo_26", i = "_title_mviuo_26", c = "_columnChip_mviuo_40", r = "_innerSection_mviuo_55", p = "_closeButton_mviuo_61", l = "_top_mviuo_74", s = "_fixedAxesBlock_mviuo_82", u = "_middle_mviuo_96", m = "_bottom_mviuo_96", v = "_buttonWrapper_mviuo_102", a = {
3
- filterWrapper: o,
4
- typeIcon: t,
5
- error: e,
6
- closeIcon: _,
7
- titleWrapper: n,
8
- title: i,
9
- columnChip: c,
10
- innerSection: r,
11
- closeButton: p,
12
- top: l,
13
- fixedAxesBlock: s,
14
- middle: u,
15
- bottom: m,
16
- buttonWrapper: v
17
- };
18
- export {
19
- m as bottom,
20
- v as buttonWrapper,
21
- p as closeButton,
22
- _ as closeIcon,
23
- c as columnChip,
24
- a as default,
25
- e as error,
26
- o as filterWrapper,
27
- s as fixedAxesBlock,
28
- r as innerSection,
29
- u as middle,
30
- i as title,
31
- n as titleWrapper,
32
- l as top,
33
- t as typeIcon
34
- };
35
- //# sourceMappingURL=SingleFilter.vue3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SingleFilter.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
@@ -1,8 +0,0 @@
1
- import { SUPPORTED_FILTER_TYPES as e } from "./constants.js";
2
- function i(r) {
3
- return r ? e.has(r) : !1;
4
- }
5
- export {
6
- i as isSupportedFilterType
7
- };
8
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sources":["../../../src/components/PlAdvancedFilter/types.ts"],"sourcesContent":["import type { AxisSpec, FilterSpec, FilterSpecLeaf, FilterSpecType, ListOptionBase, PColumnSpec, SUniversalPColumnId } from '@platforma-sdk/model';\nimport { SUPPORTED_FILTER_TYPES } from './constants';\nimport type { CanonicalizedJson } from '@platforma-sdk/model';\nimport type { AxisId } from '@platforma-sdk/model';\n\nexport type PlAdvancedFilterColumnId = SUniversalPColumnId | CanonicalizedJson<AxisId>;\nexport type CommonFilterSpec = FilterSpec<FilterSpecLeaf<PlAdvancedFilterColumnId>, { expanded?: boolean }>;\n\n// Not supported: topN, bottomN, lessThanColumn, lessThanColumnOrEqual\n// or, and, not - in groups\nexport type SupportedFilterTypes = FilterSpecType &\n 'isNA' | 'isNotNA' |\n 'patternEquals' | 'patternNotEquals' |\n 'patternContainSubsequence' | 'patternNotContainSubsequence' |\n 'patternMatchesRegularExpression' |\n 'patternFuzzyContainSubsequence' |\n 'inSet' | 'notInSet' |\n 'equal' | 'notEqual' |\n 'lessThan' | 'lessThanOrEqual' |\n 'greaterThan' | 'greaterThanOrEqual';\n\nexport type FilterType = SupportedFilterTypes;\n\nexport function isSupportedFilterType(type: FilterSpecType | undefined): type is SupportedFilterTypes {\n if (!type) {\n return false;\n }\n return SUPPORTED_FILTER_TYPES.has(type as SupportedFilterTypes);\n}\n\nexport type Operand = 'or' | 'and';\n\ntype FilterUiBase = FilterSpecLeaf<PlAdvancedFilterColumnId> & {\n type: SupportedFilterTypes;\n column: PlAdvancedFilterColumnId;\n};\n\ntype RequireFields<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\ntype OptionalFields<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\ntype NumericalWithOptionalX = 'lessThan' | 'lessThanOrEqual' | 'greaterThan' | 'greaterThanOrEqual' | 'equal' | 'notEqual';\ntype StringWithOptionalValue = 'patternEquals' | 'patternNotEquals';\ntype EditedTypes = SupportedFilterTypes & ('patternFuzzyContainSubsequence' | NumericalWithOptionalX | StringWithOptionalValue); // types from ui with some changed by optionality fields\nexport type Filter = Exclude<FilterUiBase, { type: EditedTypes }> |\n RequireFields<Extract<FilterUiBase, { type: 'patternFuzzyContainSubsequence' }>, 'maxEdits' | 'substitutionsOnly'> |\n OptionalFields<Extract<FilterUiBase, { type: NumericalWithOptionalX }>, 'x'> |\n OptionalFields<Extract<FilterUiBase, { type: StringWithOptionalValue }>, 'value'>\n;\n\nexport type Group = {\n id: string;\n not: boolean;\n filters: Filter[];\n operand: Operand;\n expanded: boolean;\n};\n\nexport type PlAdvancedFilterUI = {\n groups: Group[];\n operand: Operand;\n};\n\nexport type UniqueValuesList = ListOptionBase<string | number>[];\nexport type OptionInfo = { error: boolean; label: string; spec: PColumnSpec | AxisSpec };\nexport type FixedAxisInfo = {\n idx: number;\n label: string;\n};\n\nexport type SourceOptionInfo = {\n id: PlAdvancedFilterColumnId;\n label: string;\n error: boolean;\n spec: PColumnSpec | AxisSpec;\n axesToBeFixed?: FixedAxisInfo[];\n alphabet?: 'nucleotide' | 'aminoacid' | string;\n};\n"],"names":["isSupportedFilterType","type","SUPPORTED_FILTER_TYPES"],"mappings":";AAuBO,SAASA,EAAsBC,GAAgE;AACpG,SAAKA,IAGEC,EAAuB,IAAID,CAA4B,IAFrD;AAGX;"}
@@ -1,24 +0,0 @@
1
- import { FilterSpecTypeFieldRecord } from '@milaboratories/uikit';
2
- import { FilterSpecLeaf, SimplifiedUniversalPColumnEntry } from '@platforma-sdk/model';
3
- declare const _default: <T extends FilterSpecLeaf = FilterSpecLeaf>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
- props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
5
- readonly "onUpdate:modelValue"?: ((value: T) => any) | undefined;
6
- } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, never>, "onUpdate:modelValue"> & ({
7
- modelValue?: T;
8
- } & {
9
- columns: SimplifiedUniversalPColumnEntry[];
10
- formMetadata: FilterSpecTypeFieldRecord<T>;
11
- }) & Partial<{}>> & import('vue').PublicProps;
12
- expose(exposed: import('vue').ShallowUnwrapRef<{}>): void;
13
- attrs: any;
14
- slots: {};
15
- emit: (evt: "update:modelValue", value: T) => void;
16
- }>) => import('vue').VNode<import('vue').RendererNode, import('vue').RendererElement, {
17
- [key: string]: any;
18
- }> & {
19
- __ctx?: Awaited<typeof __VLS_setup>;
20
- };
21
- export default _default;
22
- type __VLS_PrettifyLocal<T> = {
23
- [K in keyof T]: T[K];
24
- } & {};
@@ -1,10 +0,0 @@
1
- import o from "./DynamicForm.vue2.js";
2
- import s from "./DynamicForm.vue3.js";
3
- import t from "../../../_virtual/_plugin-vue_export-helper.js";
4
- const m = {
5
- $style: s
6
- }, f = /* @__PURE__ */ t(o, [["__cssModules", m]]);
7
- export {
8
- f as default
9
- };
10
- //# sourceMappingURL=DynamicForm.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DynamicForm.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,109 +0,0 @@
1
- import { defineComponent as D, mergeModels as O, useModel as h, computed as c, watch as x, resolveComponent as P, createElementBlock as v, createCommentVNode as V, openBlock as u, normalizeClass as B, Fragment as y, renderList as S, createBlock as p, unref as d, withCtx as _, createTextVNode as j, toDisplayString as U } from "vue";
2
- import { isNil as w } from "../../../lib/util/helpers/dist/utils.js";
3
- import { getFilterUiMetadata as R, getFilterUiTypeOptions as z, PlDropdown as T, PlTextField as E, PlNumberField as k, PlCheckbox as I } from "@milaboratories/uikit";
4
- const L = { key: 7 }, G = /* @__PURE__ */ D({
5
- __name: "DynamicForm",
6
- props: /* @__PURE__ */ O({
7
- columns: {},
8
- formMetadata: {}
9
- }, {
10
- modelValue: { default: () => ({}) },
11
- modelModifiers: {}
12
- }),
13
- emits: ["update:modelValue"],
14
- setup(i) {
15
- const t = h(i, "modelValue"), s = i, b = c(() => {
16
- var n;
17
- const l = t.value;
18
- if ("column" in l)
19
- return (n = s.columns.find((r) => r.id === l.column)) == null ? void 0 : n.obj;
20
- }), F = c(() => {
21
- const l = t.value;
22
- if (l.type && typeof l.type == "string")
23
- return R(l.type);
24
- }), M = c(() => z(b.value)), f = c(() => s.columns.map((l) => ({ label: l.label, value: l.id }))), C = c(() => {
25
- const l = F.value, n = b.value;
26
- return l && n ? s.columns.filter((r) => l.supportedFor(n, r.obj)).map((r) => ({
27
- label: r.label,
28
- value: r.id
29
- })) : [];
30
- }), m = (l, n) => {
31
- t.value[l] = n;
32
- };
33
- x(
34
- () => s.formMetadata,
35
- (l) => {
36
- for (const [n, r] of Object.entries(l))
37
- if (t.value[n] === void 0) {
38
- const o = r.defaultValue();
39
- w(o) || (t.value[n] = o);
40
- }
41
- },
42
- { immediate: !0, deep: !0 }
43
- );
44
- function g(l) {
45
- return l === "FilterType" || l === "FilterUiType";
46
- }
47
- return (l, n) => {
48
- const r = P("DynamicForm", !0);
49
- return i.formMetadata ? (u(), v("div", {
50
- key: 0,
51
- class: B(l.$style.form)
52
- }, [
53
- (u(!0), v(y, null, S(i.formMetadata, (o, e) => (u(), v(y, { key: e }, [
54
- o.fieldType === "form" ? (u(), v(y, { key: 0 }, [
55
- "form" in o ? (u(), p(r, {
56
- key: 0,
57
- "model-value": t.value[e],
58
- "form-metadata": o.form,
59
- columns: s.columns,
60
- "onUpdate:modelValue": (a) => m(e, a)
61
- }, null, 8, ["model-value", "form-metadata", "columns", "onUpdate:modelValue"])) : V("", !0)
62
- ], 64)) : g(o.fieldType) ? (u(), p(d(T), {
63
- key: 1,
64
- "model-value": t.value[e],
65
- label: o.label ?? e,
66
- options: M.value,
67
- "onUpdate:modelValue": (a) => m(e, a)
68
- }, null, 8, ["model-value", "label", "options", "onUpdate:modelValue"])) : o.fieldType === "string" ? (u(), p(d(E), {
69
- key: 2,
70
- "model-value": t.value[e],
71
- label: o.label ?? e,
72
- "onUpdate:modelValue": (a) => m(e, a)
73
- }, null, 8, ["model-value", "label", "onUpdate:modelValue"])) : o.fieldType === "SUniversalPColumnId" ? (u(), p(d(T), {
74
- key: 3,
75
- "model-value": t.value[e],
76
- label: o.label ?? e,
77
- options: e === "column" ? f.value : C.value,
78
- "onUpdate:modelValue": (a) => m(e, a)
79
- }, null, 8, ["model-value", "label", "options", "onUpdate:modelValue"])) : o.fieldType === "number" ? (u(), p(d(k), {
80
- key: 4,
81
- "model-value": t.value[e],
82
- label: o.label ?? e,
83
- "onUpdate:modelValue": (a) => m(e, a)
84
- }, null, 8, ["model-value", "label", "onUpdate:modelValue"])) : o.fieldType === "number?" ? (u(), p(d(k), {
85
- key: 5,
86
- "model-value": t.value[e],
87
- label: o.label ?? e,
88
- clearable: !0,
89
- "onUpdate:modelValue": (a) => m(e, a)
90
- }, null, 8, ["model-value", "label", "onUpdate:modelValue"])) : o.fieldType === "boolean" || o.fieldType === "boolean?" ? (u(), p(d(I), {
91
- key: 6,
92
- "model-value": !!t.value[e],
93
- label: o.label ?? e,
94
- "onUpdate:modelValue": (a) => m(e, a)
95
- }, {
96
- default: _(() => [
97
- j(U(o.label ?? e), 1)
98
- ]),
99
- _: 2
100
- }, 1032, ["model-value", "label", "onUpdate:modelValue"])) : (u(), v("pre", L, "TODO:" + U(o.fieldType), 1))
101
- ], 64))), 128))
102
- ], 2)) : V("", !0);
103
- };
104
- }
105
- });
106
- export {
107
- G as default
108
- };
109
- //# sourceMappingURL=DynamicForm.vue2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DynamicForm.vue2.js","sources":["../../../../src/components/PlAnnotations/components/DynamicForm.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T extends FilterSpecLeaf = FilterSpecLeaf\">\nimport { computed, watch } from 'vue';\n\nimport { isNil } from '@milaboratories/helpers';\nimport type { FilterSpecTypeFieldRecord } from '@milaboratories/uikit';\nimport { getFilterUiMetadata, getFilterUiTypeOptions, PlCheckbox, PlDropdown, PlNumberField, PlTextField } from '@milaboratories/uikit';\nimport type { FilterSpecLeaf, SimplifiedUniversalPColumnEntry, SUniversalPColumnId } from '@platforma-sdk/model';\n\nimport type { FilterSpecType } from '../types';\n\ntype ObjectEntries<T, K extends keyof T = keyof T> = [K, T[K]][];\n\nconst formData = defineModel<T>({ default: () => ({}) });\n\nconst props = defineProps<{\n columns: SimplifiedUniversalPColumnEntry[];\n formMetadata: FilterSpecTypeFieldRecord<T>;\n}>();\n\nconst columnSpecRef = computed(() => {\n const value = formData.value;\n if ('column' in value) {\n return props.columns.find((c) => c.id === value.column)?.obj;\n }\n return undefined;\n});\n\nconst typeMetadataRef = computed(() => {\n const value = formData.value;\n if (value.type && typeof value.type === 'string') {\n return getFilterUiMetadata(value.type);\n }\n return undefined;\n});\n\nconst filterUiTypeOptions = computed(() => {\n return getFilterUiTypeOptions(columnSpecRef.value);\n});\n\nconst firstColumnsOptions = computed(() => props.columns.map((c) => ({ label: c.label, value: c.id })));\nconst secondColumnOptions = computed(() => {\n const typeMetadata = typeMetadataRef.value;\n const columnSpec = columnSpecRef.value;\n if (typeMetadata && columnSpec) {\n return props.columns.filter((c) => typeMetadata.supportedFor(columnSpec, c.obj)).map((c) => ({\n label: c.label,\n value: c.id,\n }));\n }\n return [];\n});\n\nconst setFieldValue = <K extends keyof T>(fieldName: K, value: T[K]) => {\n formData.value[fieldName] = value;\n};\n\nwatch(() => props.formMetadata, (newForm) => {\n for (const [fieldName, field] of Object.entries(newForm) as ObjectEntries<typeof newForm>) {\n if (formData.value[fieldName] === undefined) {\n const value = field.defaultValue();\n if (!isNil(value)) {\n formData.value[fieldName] = value;\n }\n }\n }\n},\n{ immediate: true, deep: true },\n);\n\nfunction isFilterType(type: string | undefined): boolean {\n return type === 'FilterType'\n // @deprecated version\n || type === 'FilterUiType';\n}\n\n</script>\n\n<template>\n <div v-if=\"formMetadata\" :class=\"$style.form\">\n <template v-for=\"(field, fieldName) in formMetadata\" :key=\"fieldName\">\n <template v-if=\"field.fieldType === 'form'\">\n <!-- TODO: Nested Form not described in FilterUi, we need to define it later. Even more in type it don't possible situations -->\n <DynamicForm\n v-if=\"'form' in field\"\n :model-value=\"formData[fieldName] as any\"\n :form-metadata=\"field.form as any\"\n :columns=\"props.columns\"\n @update:model-value=\"setFieldValue(fieldName, $event as T[keyof T])\"\n />\n </template>\n <template v-else-if=\"isFilterType(field.fieldType)\">\n <PlDropdown\n :model-value=\"formData[fieldName] as FilterSpecType\"\n :label=\"field.label ?? fieldName\"\n :options=\"filterUiTypeOptions\"\n @update:model-value=\"setFieldValue(fieldName, $event as T[keyof T])\"\n />\n </template>\n <template v-else-if=\"field.fieldType === 'string'\">\n <PlTextField\n :model-value=\"formData[fieldName] as string\"\n :label=\"field.label ?? fieldName\"\n @update:model-value=\"setFieldValue(fieldName, $event as T[keyof T])\"\n />\n </template>\n <template v-else-if=\"field.fieldType === 'SUniversalPColumnId'\">\n <PlDropdown\n :model-value=\"formData[fieldName] as SUniversalPColumnId\"\n :label=\"field.label ?? fieldName\"\n :options=\"fieldName === 'column' ? firstColumnsOptions : secondColumnOptions\"\n @update:model-value=\"setFieldValue(fieldName, $event as T[keyof T])\"\n />\n </template>\n <template v-else-if=\"field.fieldType === 'number'\">\n <PlNumberField\n :model-value=\"formData[fieldName] as number\"\n :label=\"field.label ?? fieldName\"\n @update:model-value=\"setFieldValue(fieldName, $event as T[keyof T])\"\n />\n </template>\n <template v-else-if=\"field.fieldType === 'number?'\">\n <PlNumberField\n :model-value=\"formData[fieldName] as (undefined | number)\"\n :label=\"field.label ?? fieldName\"\n :clearable=\"true\"\n @update:model-value=\"setFieldValue(fieldName, $event as T[keyof T])\"\n />\n </template>\n <template v-else-if=\"field.fieldType === 'boolean' || field.fieldType === 'boolean?'\">\n <PlCheckbox\n :model-value=\"Boolean(formData[fieldName])\"\n :label=\"field.label ?? fieldName\"\n @update:model-value=\"setFieldValue(fieldName, $event as T[keyof T])\"\n >\n {{ field.label ?? fieldName }}\n </PlCheckbox>\n </template>\n <template v-else>\n <pre>TODO:{{ field.fieldType }}</pre>\n </template>\n </template>\n </div>\n</template>\n\n<style module>\n.form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n</style>\n"],"names":["formData","_useModel","__props","props","columnSpecRef","computed","value","_a","c","typeMetadataRef","getFilterUiMetadata","filterUiTypeOptions","getFilterUiTypeOptions","firstColumnsOptions","secondColumnOptions","typeMetadata","columnSpec","setFieldValue","fieldName","watch","newForm","field","isNil","isFilterType","type","_createElementBlock","_normalizeClass","$style","_openBlock","_Fragment","_renderList","_createBlock","_component_DynamicForm","$event","_unref","PlDropdown","PlTextField","PlNumberField","PlCheckbox","_hoisted_1","_toDisplayString"],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._form_15mna_2{display:flex;flex-direction:column;gap:12px}")),document.head.appendChild(e)}}catch(n){console.error("vite-plugin-css-injected-by-js",n)}})();
2
- const o = "_form_15mna_2", t = {
3
- form: o
4
- };
5
- export {
6
- t as default,
7
- o as form
8
- };
9
- //# sourceMappingURL=DynamicForm.vue3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DynamicForm.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -1,20 +0,0 @@
1
- function e() {
2
- return {
3
- column: {
4
- label: "Column",
5
- fieldType: "SUniversalPColumnId",
6
- defaultValue: () => {
7
- }
8
- },
9
- type: {
10
- label: "Predicate",
11
- fieldType: "FilterType",
12
- defaultValue: () => {
13
- }
14
- }
15
- };
16
- }
17
- export {
18
- e as createDefaultFilterMetadata
19
- };
20
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/components/PlAnnotations/utils.ts"],"sourcesContent":["import type { FilterSpecTypeFieldRecord } from '@milaboratories/uikit';\nimport type { FilterSpecLeaf } from '@platforma-sdk/model';\n\nexport function createDefaultFilterMetadata<T extends FilterSpecLeaf>(): FilterSpecTypeFieldRecord<T> {\n return {\n column: {\n label: 'Column',\n fieldType: 'SUniversalPColumnId',\n defaultValue: () => undefined,\n },\n type: {\n label: 'Predicate',\n fieldType: 'FilterType',\n defaultValue: () => undefined,\n },\n } as FilterSpecTypeFieldRecord<T>;\n};\n"],"names":["createDefaultFilterMetadata"],"mappings":"AAGO,SAASA,IAAsF;AACpG,SAAO;AAAA,IACL,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,cAAc,MAAA;AAAA;AAAA,IAAM;AAAA,IAEtB,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,cAAc,MAAA;AAAA;AAAA,IAAM;AAAA,EACtB;AAEJ;"}