@platforma-sdk/ui-vue 1.45.21 → 1.45.26

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,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-sdk/ui-vue@1.45.21 build /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.45.26 build /home/runner/_work/platforma/platforma/sdk/ui-vue
4
4
  > ts-builder build --target browser-lib
5
5
 
6
6
  Building browser-lib project...
@@ -23,8 +23,8 @@ computing gzip size...
23
23
  dist/components/PlAgCellFile/PlAgCellFile.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
24
24
  dist/components/PlAgDataTable/PlAgRowCount.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
25
25
  dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
26
- dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
27
26
  dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
27
+ dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
28
28
  dist/components/PlAgRowNumHeader.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
29
29
  dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
30
30
  dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
@@ -64,8 +64,8 @@ computing gzip size...
64
64
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js  0.27 kB │ gzip: 0.21 kB │ map: 0.59 kB
65
65
  dist/components/PlMultiSequenceAlignment/Legend.vue.js  0.27 kB │ gzip: 0.21 kB │ map: 0.10 kB
66
66
  dist/_virtual/index.js  0.27 kB │ gzip: 0.21 kB │ map: 0.09 kB
67
- dist/components/PlBtnExportArchive/Summary.vue.js  0.27 kB │ gzip: 0.21 kB │ map: 0.10 kB
68
67
  dist/components/PlMultiSequenceAlignment/Toolbar.vue.js  0.27 kB │ gzip: 0.21 kB │ map: 0.10 kB
68
+ dist/components/PlBtnExportArchive/Summary.vue.js  0.27 kB │ gzip: 0.21 kB │ map: 0.10 kB
69
69
  dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js  0.27 kB │ gzip: 0.21 kB │ map: 0.10 kB
70
70
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js  0.28 kB │ gzip: 0.21 kB │ map: 0.67 kB
71
71
  dist/components/PlMultiSequenceAlignment/Consensus.vue.js  0.28 kB │ gzip: 0.21 kB │ map: 0.10 kB
@@ -94,7 +94,7 @@ computing gzip size...
94
94
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js  0.32 kB │ gzip: 0.23 kB │ map: 0.80 kB
95
95
  dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.js  0.33 kB │ gzip: 0.23 kB │ map: 0.12 kB
96
96
  dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.js  0.33 kB │ gzip: 0.23 kB │ map: 0.12 kB
97
- dist/components/PlAnnotations/utils.js  0.35 kB │ gzip: 0.21 kB │ map: 0.92 kB
97
+ dist/components/PlAnnotations/utils.js  0.35 kB │ gzip: 0.21 kB │ map: 0.91 kB
98
98
  dist/lib/util/helpers/dist/strings.js  0.35 kB │ gzip: 0.24 kB │ map: 4.16 kB
99
99
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js  0.38 kB │ gzip: 0.25 kB │ map: 0.86 kB
100
100
  dist/computedResult.js  0.40 kB │ gzip: 0.26 kB │ map: 2.42 kB
@@ -114,13 +114,13 @@ computing gzip size...
114
114
  dist/components/PlMultiSequenceAlignment/useMiPlots.js  0.47 kB │ gzip: 0.30 kB │ map: 1.13 kB
115
115
  dist/components/PlMultiSequenceAlignment/Consensus.vue3.js  0.47 kB │ gzip: 0.32 kB │ map: 0.10 kB
116
116
  dist/components/LoaderPage.vue.js  0.51 kB │ gzip: 0.35 kB │ map: 0.54 kB
117
+ dist/components/PlAnnotations/components/PlAnnotations.vue3.js  0.52 kB │ gzip: 0.33 kB │ map: 0.11 kB
117
118
  dist/components/PlAgDataTable/PlAgDataTableV2.vue3.js  0.52 kB │ gzip: 0.36 kB │ map: 0.11 kB
118
119
  dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue3.js  0.52 kB │ gzip: 0.36 kB │ map: 0.11 kB
119
120
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js  0.52 kB │ gzip: 0.31 kB │ map: 1.36 kB
120
121
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js  0.53 kB │ gzip: 0.31 kB │ map: 1.36 kB
121
122
  dist/plugins/Monetization/useButtonTarget.js  0.53 kB │ gzip: 0.33 kB │ map: 1.29 kB
122
123
  dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue3.js  0.53 kB │ gzip: 0.36 kB │ map: 0.11 kB
123
- dist/components/PlAnnotations/components/PlAnnotations.vue3.js  0.60 kB │ gzip: 0.37 kB │ map: 0.11 kB
124
124
  dist/components/PlAnnotations/components/PlAnnotationsModal.vue3.js  0.60 kB │ gzip: 0.37 kB │ map: 0.11 kB
125
125
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js  0.60 kB │ gzip: 0.38 kB │ map: 1.59 kB
126
126
  dist/components/PlAgDataTable/ag-override.css.js  0.61 kB │ gzip: 0.30 kB │ map: 0.92 kB
@@ -183,7 +183,7 @@ computing gzip size...
183
183
  dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js  2.57 kB │ gzip: 1.16 kB │ map: 5.30 kB
184
184
  dist/components/PlTableFilters/PlTableFiltersV2.vue3.js  2.58 kB │ gzip: 0.94 kB │ map: 0.12 kB
185
185
  dist/components/PlTableFilters/filters-state.js  2.60 kB │ gzip: 1.08 kB │ map: 7.95 kB
186
- dist/components/PlAnnotations/components/PlAnnotations.vue2.js  2.61 kB │ gzip: 1.06 kB │ map: 3.47 kB
186
+ dist/components/PlAnnotations/components/PlAnnotations.vue2.js  2.61 kB │ gzip: 1.06 kB │ map: 3.44 kB
187
187
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js  2.65 kB │ gzip: 0.94 kB │ map: 6.36 kB
188
188
  dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/helpers.js  2.79 kB │ gzip: 1.21 kB │ map: 8.92 kB
189
189
  dist/components/PlAgDataTable/sources/row-number.js  3.10 kB │ gzip: 1.34 kB │ map: 8.36 kB
@@ -191,7 +191,7 @@ computing gzip size...
191
191
  dist/components/PlTableFilters/PlTableAddFilterV2.vue.js  3.16 kB │ gzip: 1.27 kB │ map: 3.95 kB
192
192
  dist/components/PlAgDataTable/sources/table-state-v2.js  3.18 kB │ gzip: 1.16 kB │ map: 9.94 kB
193
193
  dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js  3.21 kB │ gzip: 1.32 kB │ map: 6.15 kB
194
- dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js  3.24 kB │ gzip: 1.30 kB │ map: 3.22 kB
194
+ dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js  3.26 kB │ gzip: 1.31 kB │ map: 3.27 kB
195
195
  dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/duplex.js  3.33 kB │ gzip: 1.22 kB │ map: 10.70 kB
196
196
  dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js  3.35 kB │ gzip: 1.42 kB │ map: 2.84 kB
197
197
  dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js  3.51 kB │ gzip: 1.27 kB │ map: 0.13 kB
@@ -202,10 +202,10 @@ computing gzip size...
202
202
  dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js  3.84 kB │ gzip: 1.52 kB │ map: 4.99 kB
203
203
  dist/plugins/Monetization/LimitCard.vue2.js  3.84 kB │ gzip: 1.15 kB │ map: 7.17 kB
204
204
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js  4.03 kB │ gzip: 1.23 kB │ map: 12.92 kB
205
- dist/components/PlAnnotations/components/DynamicForm.vue2.js  4.55 kB │ gzip: 1.42 kB │ map: 7.19 kB
205
+ dist/components/PlAnnotations/components/DynamicForm.vue2.js  4.55 kB │ gzip: 1.42 kB │ map: 7.20 kB
206
206
  dist/plugins/Monetization/MonetizationSidebar.vue.js  4.70 kB │ gzip: 1.74 kB │ map: 4.91 kB
207
207
  dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js  4.71 kB │ gzip: 1.66 kB │ map: 9.69 kB
208
- dist/components/PlAnnotations/components/FilterSidebar.vue2.js  4.71 kB │ gzip: 1.71 kB │ map: 6.45 kB
208
+ dist/components/PlAnnotations/components/FilterSidebar.vue2.js  4.73 kB │ gzip: 1.72 kB │ map: 6.70 kB
209
209
  dist/components/PlMultiSequenceAlignment/chemical-properties.js  4.75 kB │ gzip: 1.67 kB │ map: 11.78 kB
210
210
  dist/components/BlockLayout.vue2.js  4.96 kB │ gzip: 1.83 kB │ map: 2.96 kB
211
211
  dist/components/PlAnnotations/components/FilterSidebar.vue3.js  5.48 kB │ gzip: 1.59 kB │ map: 0.11 kB
@@ -232,7 +232,7 @@ computing gzip size...
232
232
  dist/components/PlAgRowNumHeader.vue.js  44.64 kB │ gzip: 29.28 kB │ map: 3.70 kB
233
233
  dist/AgGridVue/useAgGridOptions.js  49.28 kB │ gzip: 30.14 kB │ map: 16.35 kB
234
234
  dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js  50.33 kB │ gzip: 31.04 kB │ map: 33.70 kB
235
- [vite:dts] Declaration files built in 8753ms.
235
+ [vite:dts] Declaration files built in 9628ms.
236
236
 
237
- ✓ built in 11.31s
237
+ ✓ built in 12.20s
238
238
  Build completed successfully
@@ -1,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-sdk/ui-vue@1.45.21 type-check /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.45.26 type-check /home/runner/_work/platforma/platforma/sdk/ui-vue
4
4
  > ts-builder types --target browser-lib
5
5
 
6
6
  ↳ vue-tsc.js --noEmit --project ./tsconfig.json
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @platforma-sdk/ui-vue
2
2
 
3
+ ## 1.45.26
4
+
5
+ ### Patch Changes
6
+
7
+ - 5814e48: Small changes in sdk
8
+ - Updated dependencies [55b218b]
9
+ - Updated dependencies [5814e48]
10
+ - @platforma-sdk/model@1.45.26
11
+ - @milaboratories/uikit@2.5.4
12
+ - @milaboratories/ptabler-expression-js@1.1.1
13
+
14
+ ## 1.45.23
15
+
16
+ ### Patch Changes
17
+
18
+ - 6f67293: Correct annotations types
19
+ - Updated dependencies [6f67293]
20
+ - @platforma-sdk/model@1.45.23
21
+ - @milaboratories/uikit@2.5.3
22
+
3
23
  ## 1.45.21
4
24
 
5
25
  ### Patch Changes
@@ -1,7 +1,7 @@
1
- import { defineComponent as g, mergeModels as y, useModel as u, createBlock as S, openBlock as b, unref as a, createSlots as I, withCtx as o, createVNode as s, withModifiers as k, createTextVNode as d, createElementVNode as p, normalizeClass as r, toDisplayString as h } from "vue";
2
- import { randomInt as C } from "../../../lib/util/helpers/dist/random.js";
1
+ import { defineComponent as y, mergeModels as S, useModel as u, createBlock as b, openBlock as I, unref as a, createSlots as k, withCtx as o, createVNode as s, withModifiers as h, createTextVNode as d, createElementVNode as p, normalizeClass as r, toDisplayString as C } from "vue";
2
+ import { randomInt as v } from "../../../lib/util/helpers/dist/random.js";
3
3
  import { PlSidebarItem as V, PlBtnGhost as $, PlEditableTitle as M, PlBtnSecondary as P, PlElementList as w } from "@milaboratories/uikit";
4
- const x = /* @__PURE__ */ g({
4
+ const x = /* @__PURE__ */ y({
5
5
  __name: "AnnotationsSidebar",
6
6
  props: {
7
7
  annotation: { required: !0 },
@@ -9,21 +9,22 @@ const x = /* @__PURE__ */ g({
9
9
  selectedStepId: {},
10
10
  selectedStepIdModifiers: {}
11
11
  },
12
- emits: /* @__PURE__ */ y(["delete-schema"], ["update:annotation", "update:selectedStepId"]),
13
- setup(m, { emit: v }) {
14
- const l = u(m, "annotation"), i = u(m, "selectedStepId"), f = v;
15
- function c() {
16
- const n = C();
12
+ emits: /* @__PURE__ */ S(["delete-schema"], ["update:annotation", "update:selectedStepId"]),
13
+ setup(m, { emit: f }) {
14
+ const l = u(m, "annotation"), i = u(m, "selectedStepId"), c = f;
15
+ function g() {
16
+ const n = v();
17
17
  l.value.steps.push({
18
18
  id: n,
19
19
  label: `Filter #${l.value.steps.length + 1}`,
20
20
  filter: {
21
+ id: v(),
21
22
  type: "and",
22
23
  filters: []
23
24
  }
24
25
  }), i.value = n;
25
26
  }
26
- return (n, e) => (b(), S(a(V), null, I({
27
+ return (n, e) => (I(), b(a(V), null, k({
27
28
  "header-content": o(() => [
28
29
  s(a(M), {
29
30
  modelValue: l.value.title,
@@ -39,7 +40,7 @@ const x = /* @__PURE__ */ g({
39
40
  icon: "delete-bin",
40
41
  reverse: "",
41
42
  disabled: l.value.steps.length === 0,
42
- onClick: e[3] || (e[3] = k((t) => f("delete-schema"), ["stop"]))
43
+ onClick: e[3] || (e[3] = h((t) => c("delete-schema"), ["stop"]))
43
44
  }, {
44
45
  default: o(() => e[5] || (e[5] = [
45
46
  d(" Delete Schema ")
@@ -57,7 +58,7 @@ const x = /* @__PURE__ */ g({
57
58
  }, [
58
59
  s(a(P), {
59
60
  icon: "add",
60
- onClick: c
61
+ onClick: g
61
62
  }, {
62
63
  default: o(() => e[4] || (e[4] = [
63
64
  d(" Add annotation ")
@@ -77,7 +78,7 @@ const x = /* @__PURE__ */ g({
77
78
  onItemClick: e[2] || (e[2] = (t) => i.value = t.id)
78
79
  }, {
79
80
  "item-title": o(({ item: t }) => [
80
- d(h(t.label), 1)
81
+ d(C(t.label), 1)
81
82
  ]),
82
83
  _: 1
83
84
  }, 8, ["items", "get-item-key", "is-active", "item-class", "class"])
@@ -1 +1 @@
1
- {"version":3,"file":"AnnotationsSidebar.vue2.js","sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { randomInt } from '@milaboratories/helpers';\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n} from '@milaboratories/uikit';\nimport type { Annotation } from '../types';\n\n// Models\nconst annotation = defineModel<Annotation>('annotation', { required: true });\nconst selectedStepId = defineModel<undefined | number>('selectedStepId');\n// Emits\nconst emits = defineEmits<{\n (e: 'delete-schema'): void;\n}>();\n// Actions\nfunction handleAddStep() {\n const id = randomInt();\n annotation.value.steps.push({\n id,\n label: `Filter #${annotation.value.steps.length + 1}`,\n filter: {\n type: 'and',\n filters: [],\n },\n });\n selectedStepId.value = id;\n};\n</script>\n\n<template>\n <PlSidebarItem>\n <template #header-content>\n <PlEditableTitle\n v-model=\"annotation.title\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Name\"\n :autofocus=\"annotation.title.length === 0\"\n />\n </template>\n <template v-if=\"annotation\" #body-content>\n <div :class=\"$style.root\">\n <PlBtnSecondary icon=\"add\" @click=\"handleAddStep\">\n Add annotation\n </PlBtnSecondary>\n\n <span :class=\"$style.tip\">Lower annotations override the ones above. Rearrange them by dragging.</span>\n\n <PlElementList\n v-model:items=\"annotation.steps\"\n :get-item-key=\"(item) => item.id!\"\n :is-active=\"(item) => item.id === selectedStepId\"\n :item-class=\"$style.stepItem\"\n :class=\"$style.steps\"\n @item-click=\"(item) => selectedStepId = item.id\"\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n </PlElementList>\n </div>\n </template>\n <template #footer-content>\n <PlBtnGhost\n icon=\"delete-bin\"\n reverse\n :disabled=\"annotation.steps.length === 0\"\n @click.stop=\"emits('delete-schema')\"\n >\n Delete Schema\n </PlBtnGhost>\n </template>\n </PlSidebarItem>\n</template>\n\n<style lang=\"scss\" module>\n@use '@milaboratories/uikit/styles/variables' as *;\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tip {\n margin-top: 12px;\n color: var(--txt-03);\n}\n\n.steps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.stepItem {\n cursor: pointer;\n}\n</style>\n"],"names":["annotation","_useModel","selectedStepId","__props","emits","__emit","handleAddStep","id","randomInt"],"mappings":";;;;;;;;;;;;;AAYA,UAAMA,IAAaC,KAAwB,YAAgC,GACrEC,IAAiBD,EAA+BE,GAAC,gBAAgB,GAEjEC,IAAQC;AAId,aAASC,IAAgB;AACvB,YAAMC,IAAKC,EAAA;AACX,MAAAR,EAAW,MAAM,MAAM,KAAK;AAAA,QAC1B,IAAAO;AAAA,QACA,OAAO,WAAWP,EAAW,MAAM,MAAM,SAAS,CAAC;AAAA,QACnD,QAAQ;AAAA,UACN,MAAM;AAAA,UACN,SAAS,CAAA;AAAA,QAAC;AAAA,MACZ,CACD,GACDE,EAAe,QAAQK;AAAA,IACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"AnnotationsSidebar.vue2.js","sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { randomInt } from '@milaboratories/helpers';\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n} from '@milaboratories/uikit';\nimport type { Annotation } from '../types';\n\n// Models\nconst annotation = defineModel<Annotation>('annotation', { required: true });\nconst selectedStepId = defineModel<undefined | number>('selectedStepId');\n// Emits\nconst emits = defineEmits<{\n (e: 'delete-schema'): void;\n}>();\n// Actions\nfunction handleAddStep() {\n const id = randomInt();\n annotation.value.steps.push({\n id,\n label: `Filter #${annotation.value.steps.length + 1}`,\n filter: {\n id: randomInt(),\n type: 'and',\n filters: [],\n },\n });\n selectedStepId.value = id;\n};\n</script>\n\n<template>\n <PlSidebarItem>\n <template #header-content>\n <PlEditableTitle\n v-model=\"annotation.title\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Name\"\n :autofocus=\"annotation.title.length === 0\"\n />\n </template>\n <template v-if=\"annotation\" #body-content>\n <div :class=\"$style.root\">\n <PlBtnSecondary icon=\"add\" @click=\"handleAddStep\">\n Add annotation\n </PlBtnSecondary>\n\n <span :class=\"$style.tip\">Lower annotations override the ones above. Rearrange them by dragging.</span>\n\n <PlElementList\n v-model:items=\"annotation.steps\"\n :get-item-key=\"(item) => item.id\"\n :is-active=\"(item) => item.id === selectedStepId\"\n :item-class=\"$style.stepItem\"\n :class=\"$style.steps\"\n @item-click=\"(item) => selectedStepId = item.id\"\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n </PlElementList>\n </div>\n </template>\n <template #footer-content>\n <PlBtnGhost\n icon=\"delete-bin\"\n reverse\n :disabled=\"annotation.steps.length === 0\"\n @click.stop=\"emits('delete-schema')\"\n >\n Delete Schema\n </PlBtnGhost>\n </template>\n </PlSidebarItem>\n</template>\n\n<style lang=\"scss\" module>\n@use '@milaboratories/uikit/styles/variables' as *;\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tip {\n margin-top: 12px;\n color: var(--txt-03);\n}\n\n.steps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.stepItem {\n cursor: pointer;\n}\n</style>\n"],"names":["annotation","_useModel","selectedStepId","__props","emits","__emit","handleAddStep","id","randomInt"],"mappings":";;;;;;;;;;;;;AAYA,UAAMA,IAAaC,KAAwB,YAAgC,GACrEC,IAAiBD,EAA+BE,GAAC,gBAAgB,GAEjEC,IAAQC;AAId,aAASC,IAAgB;AACvB,YAAMC,IAAKC,EAAA;AACX,MAAAR,EAAW,MAAM,MAAM,KAAK;AAAA,QAC1B,IAAAO;AAAA,QACA,OAAO,WAAWP,EAAW,MAAM,MAAM,SAAS,CAAC;AAAA,QACnD,QAAQ;AAAA,UACN,IAAIQ,EAAA;AAAA,UACJ,MAAM;AAAA,UACN,SAAS,CAAA;AAAA,QAAC;AAAA,MACZ,CACD,GACDN,EAAe,QAAQK;AAAA,IACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,7 +1,6 @@
1
1
  import { FilterSpecTypeFieldRecord } from '@milaboratories/uikit';
2
- import { SimplifiedUniversalPColumnEntry } from '@platforma-sdk/model';
3
- import { FilterSpec } from '../types';
4
- declare const _default: <T extends FilterSpec = FilterSpec>(__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<{
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<{
5
4
  props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
6
5
  readonly "onUpdate:modelValue"?: ((value: T) => any) | undefined;
7
6
  } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, never>, "onUpdate:modelValue"> & ({
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicForm.vue2.js","sources":["../../../../src/components/PlAnnotations/components/DynamicForm.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T extends FilterSpec = FilterSpec\">\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 { SimplifiedUniversalPColumnEntry, SUniversalPColumnId } from '@platforma-sdk/model';\n\nimport type { FilterSpec, 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"],"mappings":";;;;;;;;;;;;;;AAYA,UAAMA,IAAWC,EAAcC,GAAA,YAAwB,GAEjDC,IAAQD,GAKRE,IAAgBC,EAAS,MAAM;;AACnC,YAAMC,IAAQN,EAAS;AACvB,UAAI,YAAYM;AACd,gBAAOC,IAAAJ,EAAM,QAAQ,KAAK,CAACK,MAAMA,EAAE,OAAOF,EAAM,MAAM,MAA/C,gBAAAC,EAAkD;AAAA,IAG7D,CAAC,GAEKE,IAAkBJ,EAAS,MAAM;AACrC,YAAMC,IAAQN,EAAS;AACvB,UAAIM,EAAM,QAAQ,OAAOA,EAAM,QAAS;AACtC,eAAOI,EAAoBJ,EAAM,IAAI;AAAA,IAGzC,CAAC,GAEKK,IAAsBN,EAAS,MAC5BO,EAAuBR,EAAc,KAAK,CAClD,GAEKS,IAAsBR,EAAS,MAAMF,EAAM,QAAQ,IAAI,CAACK,OAAO,EAAE,OAAOA,EAAE,OAAO,OAAOA,EAAE,GAAA,EAAK,CAAC,GAChGM,IAAsBT,EAAS,MAAM;AACzC,YAAMU,IAAeN,EAAgB,OAC/BO,IAAaZ,EAAc;AACjC,aAAIW,KAAgBC,IACXb,EAAM,QAAQ,OAAO,CAACK,MAAMO,EAAa,aAAaC,GAAYR,EAAE,GAAG,CAAC,EAAE,IAAI,CAACA,OAAO;AAAA,QAC3F,OAAOA,EAAE;AAAA,QACT,OAAOA,EAAE;AAAA,MAAA,EACT,IAEG,CAAA;AAAA,IACT,CAAC,GAEKS,IAAgB,CAAoBC,GAAcZ,MAAgB;AACtE,MAAAN,EAAS,MAAMkB,CAAS,IAAIZ;AAAA,IAC9B;AAEA,IAAAa;AAAA,MAAM,MAAMhB,EAAM;AAAA,MAAc,CAACiB,MAAY;AAC3C,mBAAW,CAACF,GAAWG,CAAK,KAAK,OAAO,QAAQD,CAAO;AACrD,cAAIpB,EAAS,MAAMkB,CAAS,MAAM,QAAW;AAC3C,kBAAMZ,IAAQe,EAAM,aAAA;AACpB,YAAKC,EAAMhB,CAAK,MACdN,EAAS,MAAMkB,CAAS,IAAIZ;AAAA,UAEhC;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,IAAM,MAAM,GAAA;AAAA,IAAK;AAG9B,aAASiB,EAAaC,GAAmC;AACvD,aAAOA,MAAS,gBAEXA,MAAS;AAAA,IAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
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"],"mappings":";;;;;;;;;;;;;;AAYA,UAAMA,IAAWC,EAAcC,GAAA,YAAwB,GAEjDC,IAAQD,GAKRE,IAAgBC,EAAS,MAAM;;AACnC,YAAMC,IAAQN,EAAS;AACvB,UAAI,YAAYM;AACd,gBAAOC,IAAAJ,EAAM,QAAQ,KAAK,CAACK,MAAMA,EAAE,OAAOF,EAAM,MAAM,MAA/C,gBAAAC,EAAkD;AAAA,IAG7D,CAAC,GAEKE,IAAkBJ,EAAS,MAAM;AACrC,YAAMC,IAAQN,EAAS;AACvB,UAAIM,EAAM,QAAQ,OAAOA,EAAM,QAAS;AACtC,eAAOI,EAAoBJ,EAAM,IAAI;AAAA,IAGzC,CAAC,GAEKK,IAAsBN,EAAS,MAC5BO,EAAuBR,EAAc,KAAK,CAClD,GAEKS,IAAsBR,EAAS,MAAMF,EAAM,QAAQ,IAAI,CAACK,OAAO,EAAE,OAAOA,EAAE,OAAO,OAAOA,EAAE,GAAA,EAAK,CAAC,GAChGM,IAAsBT,EAAS,MAAM;AACzC,YAAMU,IAAeN,EAAgB,OAC/BO,IAAaZ,EAAc;AACjC,aAAIW,KAAgBC,IACXb,EAAM,QAAQ,OAAO,CAACK,MAAMO,EAAa,aAAaC,GAAYR,EAAE,GAAG,CAAC,EAAE,IAAI,CAACA,OAAO;AAAA,QAC3F,OAAOA,EAAE;AAAA,QACT,OAAOA,EAAE;AAAA,MAAA,EACT,IAEG,CAAA;AAAA,IACT,CAAC,GAEKS,IAAgB,CAAoBC,GAAcZ,MAAgB;AACtE,MAAAN,EAAS,MAAMkB,CAAS,IAAIZ;AAAA,IAC9B;AAEA,IAAAa;AAAA,MAAM,MAAMhB,EAAM;AAAA,MAAc,CAACiB,MAAY;AAC3C,mBAAW,CAACF,GAAWG,CAAK,KAAK,OAAO,QAAQD,CAAO;AACrD,cAAIpB,EAAS,MAAMkB,CAAS,MAAM,QAAW;AAC3C,kBAAMZ,IAAQe,EAAM,aAAA;AACpB,YAAKC,EAAMhB,CAAK,MACdN,EAAS,MAAMkB,CAAS,IAAIZ;AAAA,UAEhC;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,IAAM,MAAM,GAAA;AAAA,IAAK;AAG9B,aAASiB,EAAaC,GAAmC;AACvD,aAAOA,MAAS,gBAEXA,MAAS;AAAA,IAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,12 +1,12 @@
1
- import { defineComponent as B, mergeModels as w, useModel as M, computed as N, createBlock as r, createCommentVNode as f, openBlock as d, unref as s, withCtx as n, createElementVNode as y, normalizeClass as v, createVNode as g, createTextVNode as p, createElementBlock as P, toDisplayString as F } from "vue";
1
+ import { defineComponent as w, mergeModels as M, useModel as N, computed as P, createBlock as r, createCommentVNode as f, openBlock as d, unref as s, withCtx as n, createElementVNode as y, normalizeClass as v, createVNode as g, createTextVNode as p, createElementBlock as U, toDisplayString as F } from "vue";
2
2
  import { isNil as u } from "../../../lib/util/helpers/dist/utils.js";
3
3
  import { randomInt as V } from "../../../lib/util/helpers/dist/random.js";
4
- import { PlSidebarItem as U, PlBtnSecondary as C, PlElementList as $, PlEditableTitle as D, getFilterUiMetadata as I } from "@milaboratories/uikit";
5
- import { createDefaultFilterMetadata as j } from "../utils.js";
6
- import q from "./DynamicForm.vue.js";
7
- const L = { key: 1 }, J = /* @__PURE__ */ B({
4
+ import { PlSidebarItem as $, PlBtnSecondary as C, PlElementList as D, PlEditableTitle as I, getFilterUiMetadata as j } from "@milaboratories/uikit";
5
+ import { createDefaultFilterMetadata as q } from "../utils.js";
6
+ import L from "./DynamicForm.vue.js";
7
+ const T = { key: 1 }, K = /* @__PURE__ */ w({
8
8
  __name: "FilterSidebar",
9
- props: /* @__PURE__ */ w({
9
+ props: /* @__PURE__ */ M({
10
10
  columns: {},
11
11
  hasSelectedColumns: { type: Boolean },
12
12
  getValuesForSelectedColumns: { type: Function }
@@ -16,7 +16,7 @@ const L = { key: 1 }, J = /* @__PURE__ */ B({
16
16
  }),
17
17
  emits: ["update:step"],
18
18
  setup(c) {
19
- const o = M(c, "step"), a = c, S = N(() => a.hasSelectedColumns !== void 0 && a.getValuesForSelectedColumns !== void 0), h = () => {
19
+ const o = N(c, "step"), a = c, S = P(() => a.hasSelectedColumns !== void 0 && a.getValuesForSelectedColumns !== void 0), h = () => {
20
20
  o.value.filter.filters.push({
21
21
  id: V(),
22
22
  isExpanded: !0,
@@ -33,7 +33,8 @@ const L = { key: 1 }, J = /* @__PURE__ */ B({
33
33
  name: `Selected list (${i})`,
34
34
  isExpanded: !1,
35
35
  type: "or",
36
- filters: e.map((m) => ({
36
+ filters: e.map((m, B) => ({
37
+ id: B,
37
38
  type: "patternEquals",
38
39
  column: l,
39
40
  value: m
@@ -43,10 +44,10 @@ const L = { key: 1 }, J = /* @__PURE__ */ B({
43
44
  const k = (t) => {
44
45
  var l;
45
46
  return u(t.name) ? ((l = a.columns.find((e) => "column" in t ? e.id === t.column : !1)) == null ? void 0 : l.label) ?? t.type : t.name;
46
- }, b = (t) => u(t.type) ? j() : I(t.type).form, E = (t) => t.type === "or" || t.type === "and" ? t.filters.map((l) => "value" in l && !u(l.value) ? l.value : null).filter((l) => !u(l)).join(", ") : null;
47
- return (t, l) => o.value ? (d(), r(s(U), { key: 0 }, {
47
+ }, b = (t) => u(t.type) ? q() : j(t.type).form, E = (t) => t.type === "or" || t.type === "and" ? t.filters.map((l) => "value" in l && !u(l.value) ? l.value : null).filter((l) => !u(l)).join(", ") : null;
48
+ return (t, l) => o.value ? (d(), r(s($), { key: 0 }, {
48
49
  "header-content": n(() => [
49
- (d(), r(s(D), {
50
+ (d(), r(s(I), {
50
51
  key: o.value.id,
51
52
  modelValue: o.value.label,
52
53
  "onUpdate:modelValue": l[0] || (l[0] = (e) => o.value.label = e),
@@ -86,7 +87,7 @@ const L = { key: 1 }, J = /* @__PURE__ */ B({
86
87
  _: 1
87
88
  }, 8, ["disabled"])) : f("", !0)
88
89
  ], 2),
89
- g(s($), {
90
+ g(s(D), {
90
91
  items: o.value.filter.filters,
91
92
  "onUpdate:items": l[1] || (l[1] = (e) => o.value.filter.filters = e),
92
93
  "get-item-key": (e) => e.id,
@@ -97,13 +98,13 @@ const L = { key: 1 }, J = /* @__PURE__ */ B({
97
98
  p(F(k(e)), 1)
98
99
  ]),
99
100
  "item-content": n(({ item: e, index: i }) => [
100
- e.type !== "or" && e.type !== "and" ? (d(), r(q, {
101
+ e.type !== "or" && e.type !== "and" ? (d(), r(L, {
101
102
  key: 0,
102
103
  modelValue: o.value.filter.filters[i],
103
104
  "onUpdate:modelValue": (m) => o.value.filter.filters[i] = m,
104
- "form-metadata": b(e),
105
- columns: a.columns
106
- }, null, 8, ["modelValue", "onUpdate:modelValue", "form-metadata", "columns"])) : (d(), P("div", L, F(E(e)), 1))
105
+ columns: a.columns,
106
+ "form-metadata": b(e)
107
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "columns", "form-metadata"])) : (d(), U("div", T, F(E(e)), 1))
107
108
  ]),
108
109
  _: 1
109
110
  }, 8, ["items", "get-item-key", "is-expanded", "on-expand"])
@@ -114,6 +115,6 @@ const L = { key: 1 }, J = /* @__PURE__ */ B({
114
115
  }
115
116
  });
116
117
  export {
117
- J as default
118
+ K as default
118
119
  };
119
120
  //# sourceMappingURL=FilterSidebar.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterSidebar.vue2.js","sources":["../../../../src/components/PlAnnotations/components/FilterSidebar.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type Props = {\n columns: SimplifiedUniversalPColumnEntry[];\n hasSelectedColumns?: boolean;\n getValuesForSelectedColumns?: () => Promise<undefined | { columnId: PObjectId; values: string[] }>;\n};\n</script>\n<script setup lang=\"ts\">\nimport { isNil, randomInt } from '@milaboratories/helpers';\nimport {\n getFilterUiMetadata,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n} from '@milaboratories/uikit';\nimport type { PObjectId, SimplifiedUniversalPColumnEntry, SUniversalPColumnId } from '@platforma-sdk/model';\nimport { computed } from 'vue';\nimport type { Filter, FilterSpec } from '../types';\nimport { createDefaultFilterMetadata } from '../utils';\nimport DynamicForm from './DynamicForm.vue';\n\n// Models\nconst step = defineModel<Filter>('step', { required: true });\n// Props\nconst props = defineProps<Props>();\n// State\nconst withSelection = computed(() => {\n return props.hasSelectedColumns !== undefined && props.getValuesForSelectedColumns !== undefined;\n});\n// Actions\nconst addFilterPlaceholder = () => {\n step.value.filter.filters.push({\n id: randomInt(),\n isExpanded: true,\n type: undefined,\n });\n};\n\nasync function addFilterFromSelected() {\n if (props.hasSelectedColumns === undefined || props.getValuesForSelectedColumns === undefined) return;\n\n const data = await props.getValuesForSelectedColumns();\n if (!data || data.values.length === 0) return;\n\n const { columnId, values } = data;\n const shortReminder = values.slice(0, 3).join(', ') + (values.length > 3 ? ` and ${values.length - 3} more` : '');\n\n step.value.filter.filters.push({\n id: randomInt(),\n name: `Selected list (${shortReminder})`,\n isExpanded: false,\n type: 'or',\n filters: values.map((value) => ({\n type: 'patternEquals',\n column: columnId as SUniversalPColumnId,\n value,\n })),\n });\n}\n\n// Getters\nconst getColumnLabel = (filter: FilterSpec) => {\n if (!isNil(filter.name)) return filter.name;\n return props.columns\n .find((c) => 'column' in filter ? c.id === filter.column : false)?.label\n ?? filter.type;\n};\n\nconst getFormMetadata = (filter: FilterSpec) => {\n return !isNil(filter.type) ? getFilterUiMetadata(filter.type).form : createDefaultFilterMetadata();\n};\n\nconst getFilterValues = (filter: FilterSpec) => {\n if (filter.type === 'or' || filter.type === 'and') {\n return filter.filters.map((f) => 'value' in f && !isNil(f.value) ? f.value : null).filter((v) => !isNil(v)).join (', ');\n }\n return null;\n};\n</script>\n\n<template>\n <PlSidebarItem v-if=\"step\">\n <template #header-content>\n <PlEditableTitle\n :key=\"step.id\"\n v-model=\"step.label\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Name\"\n :autofocus=\"step.label.length === 0\"\n />\n </template>\n <template #body-content>\n <div :class=\"$style.root\">\n <div :class=\"$style.actions\">\n <PlBtnSecondary style=\"width: 100%;\" icon=\"add\" @click=\"addFilterPlaceholder\">\n Filter\n </PlBtnSecondary>\n <PlBtnSecondary v-if=\"withSelection\" style=\"width: 100%;\" icon=\"add\" :disabled=\"!props.hasSelectedColumns\" @click=\"addFilterFromSelected\">\n From selection\n </PlBtnSecondary>\n </div>\n\n <PlElementList\n v-model:items=\"step.filter.filters\"\n :get-item-key=\"(item) => item.id!\"\n :is-expanded=\"(item) => Boolean(item.isExpanded)\"\n :on-expand=\"(item) => item.isExpanded = !Boolean(item.isExpanded)\"\n >\n <template #item-title=\"{ item }\">\n {{ getColumnLabel(item) }}\n </template>\n <template #item-content=\"{ item, index }\">\n <template v-if=\"item.type !== 'or' && item.type !== 'and'\">\n <DynamicForm\n v-model=\"step.filter.filters[index]\"\n :form-metadata=\"getFormMetadata(item)\"\n :columns=\"props.columns\"\n />\n </template>\n <template v-else>\n <div>{{ getFilterValues(item) }}</div>\n </template>\n </template>\n </PlElementList>\n </div>\n </template>\n </PlSidebarItem>\n</template>\n\n<style lang=\"scss\" module>\n@use '@milaboratories/uikit/styles/variables' as *;\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.actions {\n display: flex;\n flex-direction: row;\n gap: 12px;\n}\n</style>\n"],"names":["step","_useModel","__props","props","withSelection","computed","addFilterPlaceholder","randomInt","addFilterFromSelected","data","columnId","values","shortReminder","value","getColumnLabel","filter","isNil","_a","c","getFormMetadata","createDefaultFilterMetadata","getFilterUiMetadata","getFilterValues","f","v"],"mappings":";;;;;;;;;;;;;;;;;;AAuBA,UAAMA,IAAOC,EAAmBC,GAAC,MAA0B,GAErDC,IAAQD,GAERE,IAAgBC,EAAS,MACtBF,EAAM,uBAAuB,UAAaA,EAAM,gCAAgC,MACxF,GAEKG,IAAuB,MAAM;AACjC,MAAAN,EAAK,MAAM,OAAO,QAAQ,KAAK;AAAA,QAC7B,IAAIO,EAAA;AAAA,QACJ,YAAY;AAAA,QACZ,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAEA,mBAAeC,IAAwB;AACrC,UAAIL,EAAM,uBAAuB,UAAaA,EAAM,gCAAgC,OAAW;AAE/F,YAAMM,IAAO,MAAMN,EAAM,4BAAA;AACzB,UAAI,CAACM,KAAQA,EAAK,OAAO,WAAW,EAAG;AAEvC,YAAM,EAAE,UAAAC,GAAU,QAAAC,EAAA,IAAWF,GACvBG,IAAgBD,EAAO,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,KAAKA,EAAO,SAAS,IAAI,QAAQA,EAAO,SAAS,CAAC,UAAU;AAE9G,MAAAX,EAAK,MAAM,OAAO,QAAQ,KAAK;AAAA,QAC7B,IAAIO,EAAA;AAAA,QACJ,MAAM,kBAAkBK,CAAa;AAAA,QACrC,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,SAASD,EAAO,IAAI,CAACE,OAAW;AAAA,UAC9B,MAAM;AAAA,UACN,QAAQH;AAAA,UACR,OAAAG;AAAA,QAAA,EACA;AAAA,MAAA,CACH;AAAA,IACH;AAGA,UAAMC,IAAiB,CAACC,MAAuB;;AAC7C,aAAKC,EAAMD,EAAO,IAAI,MACfE,IAAAd,EAAM,QACV,KAAK,CAACe,MAAM,YAAYH,IAASG,EAAE,OAAOH,EAAO,SAAS,EAAK,MAD3D,gBAAAE,EAC8D,UAChEF,EAAO,OAHoBA,EAAO;AAAA,IAIzC,GAEMI,IAAkB,CAACJ,MACfC,EAAMD,EAAO,IAAI,IAA4CK,EAAA,IAAxCC,EAAoBN,EAAO,IAAI,EAAE,MAG1DO,IAAkB,CAACP,MACnBA,EAAO,SAAS,QAAQA,EAAO,SAAS,QACnCA,EAAO,QAAQ,IAAI,CAACQ,MAAM,WAAWA,KAAK,CAACP,EAAMO,EAAE,KAAK,IAAIA,EAAE,QAAQ,IAAI,EAAE,OAAO,CAACC,MAAM,CAACR,EAAMQ,CAAC,CAAC,EAAE,KAAM,IAAI,IAEjH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"FilterSidebar.vue2.js","sources":["../../../../src/components/PlAnnotations/components/FilterSidebar.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type Props = {\n columns: SimplifiedUniversalPColumnEntry[];\n hasSelectedColumns?: boolean;\n getValuesForSelectedColumns?: () => Promise<undefined | { columnId: PObjectId; values: string[] }>;\n};\n</script>\n<script setup lang=\"ts\">\nimport { isNil, randomInt } from '@milaboratories/helpers';\nimport type {\n FilterSpecTypeFieldRecord,\n} from '@milaboratories/uikit';\nimport {\n getFilterUiMetadata,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n} from '@milaboratories/uikit';\nimport type { FilterSpecLeaf, PObjectId, SimplifiedUniversalPColumnEntry, SUniversalPColumnId } from '@platforma-sdk/model';\nimport { computed } from 'vue';\nimport type { Filter, FilterSpec } from '../types';\nimport { createDefaultFilterMetadata } from '../utils';\nimport DynamicForm from './DynamicForm.vue';\n\n// Models\nconst step = defineModel<Filter>('step', { required: true });\n// Props\nconst props = defineProps<Props>();\n// State\nconst withSelection = computed(() => {\n return props.hasSelectedColumns !== undefined && props.getValuesForSelectedColumns !== undefined;\n});\n// Actions\nconst addFilterPlaceholder = () => {\n step.value.filter.filters.push({\n id: randomInt(),\n isExpanded: true,\n type: undefined,\n });\n};\n\nasync function addFilterFromSelected() {\n if (props.hasSelectedColumns === undefined || props.getValuesForSelectedColumns === undefined) return;\n\n const data = await props.getValuesForSelectedColumns();\n if (!data || data.values.length === 0) return;\n\n const { columnId, values } = data;\n const shortReminder = values.slice(0, 3).join(', ') + (values.length > 3 ? ` and ${values.length - 3} more` : '');\n\n step.value.filter.filters.push({\n id: randomInt(),\n name: `Selected list (${shortReminder})`,\n isExpanded: false,\n type: 'or',\n filters: values.map((value, i) => ({\n id: i,\n type: 'patternEquals',\n column: columnId as SUniversalPColumnId,\n value,\n })),\n });\n}\n\n// Getters\nconst getColumnLabel = (filter: FilterSpec) => {\n if (!isNil(filter.name)) return filter.name;\n return props.columns\n .find((c) => 'column' in filter ? c.id === filter.column : false)?.label\n ?? filter.type;\n};\n\nconst getFormMetadata = (filter: FilterSpec): FilterSpecTypeFieldRecord<FilterSpecLeaf> => {\n return !isNil(filter.type)\n ? getFilterUiMetadata(filter.type).form as FilterSpecTypeFieldRecord<FilterSpecLeaf>\n : createDefaultFilterMetadata();\n};\n\nconst getFilterValues = (filter: FilterSpec) => {\n if (filter.type === 'or' || filter.type === 'and') {\n return filter.filters.map((f) => 'value' in f && !isNil(f.value) ? f.value : null).filter((v) => !isNil(v)).join (', ');\n }\n return null;\n};\n</script>\n\n<template>\n <PlSidebarItem v-if=\"step\">\n <template #header-content>\n <PlEditableTitle\n :key=\"step.id\"\n v-model=\"step.label\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Name\"\n :autofocus=\"step.label.length === 0\"\n />\n </template>\n <template #body-content>\n <div :class=\"$style.root\">\n <div :class=\"$style.actions\">\n <PlBtnSecondary style=\"width: 100%;\" icon=\"add\" @click=\"addFilterPlaceholder\">\n Filter\n </PlBtnSecondary>\n <PlBtnSecondary v-if=\"withSelection\" style=\"width: 100%;\" icon=\"add\" :disabled=\"!props.hasSelectedColumns\" @click=\"addFilterFromSelected\">\n From selection\n </PlBtnSecondary>\n </div>\n\n <PlElementList\n v-model:items=\"step.filter.filters\"\n :get-item-key=\"(item) => item.id\"\n :is-expanded=\"(item) => Boolean(item.isExpanded)\"\n :on-expand=\"(item) => item.isExpanded = !Boolean(item.isExpanded)\"\n >\n <template #item-title=\"{ item }\">\n {{ getColumnLabel(item) }}\n </template>\n <template #item-content=\"{ item, index }\">\n <template v-if=\"item.type !== 'or' && item.type !== 'and'\">\n <DynamicForm\n v-model=\"(step.filter.filters[index] as FilterSpecLeaf)\"\n :columns=\"props.columns\"\n :form-metadata=\"getFormMetadata(item)\"\n />\n </template>\n <template v-else>\n <div>{{ getFilterValues(item) }}</div>\n </template>\n </template>\n </PlElementList>\n </div>\n </template>\n </PlSidebarItem>\n</template>\n\n<style lang=\"scss\" module>\n@use '@milaboratories/uikit/styles/variables' as *;\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.actions {\n display: flex;\n flex-direction: row;\n gap: 12px;\n}\n</style>\n"],"names":["step","_useModel","__props","props","withSelection","computed","addFilterPlaceholder","randomInt","addFilterFromSelected","data","columnId","values","shortReminder","value","i","getColumnLabel","filter","isNil","_a","c","getFormMetadata","createDefaultFilterMetadata","getFilterUiMetadata","getFilterValues","f","v"],"mappings":";;;;;;;;;;;;;;;;;;AA0BA,UAAMA,IAAOC,EAAmBC,GAAC,MAA0B,GAErDC,IAAQD,GAERE,IAAgBC,EAAS,MACtBF,EAAM,uBAAuB,UAAaA,EAAM,gCAAgC,MACxF,GAEKG,IAAuB,MAAM;AACjC,MAAAN,EAAK,MAAM,OAAO,QAAQ,KAAK;AAAA,QAC7B,IAAIO,EAAA;AAAA,QACJ,YAAY;AAAA,QACZ,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAEA,mBAAeC,IAAwB;AACrC,UAAIL,EAAM,uBAAuB,UAAaA,EAAM,gCAAgC,OAAW;AAE/F,YAAMM,IAAO,MAAMN,EAAM,4BAAA;AACzB,UAAI,CAACM,KAAQA,EAAK,OAAO,WAAW,EAAG;AAEvC,YAAM,EAAE,UAAAC,GAAU,QAAAC,EAAA,IAAWF,GACvBG,IAAgBD,EAAO,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,KAAKA,EAAO,SAAS,IAAI,QAAQA,EAAO,SAAS,CAAC,UAAU;AAE9G,MAAAX,EAAK,MAAM,OAAO,QAAQ,KAAK;AAAA,QAC7B,IAAIO,EAAA;AAAA,QACJ,MAAM,kBAAkBK,CAAa;AAAA,QACrC,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,SAASD,EAAO,IAAI,CAACE,GAAOC,OAAO;AAAA,UACjC,IAAIA;AAAA,UACJ,MAAM;AAAA,UACN,QAAQJ;AAAA,UACR,OAAAG;AAAA,QAAA,EACA;AAAA,MAAA,CACH;AAAA,IACH;AAGA,UAAME,IAAiB,CAACC,MAAuB;;AAC7C,aAAKC,EAAMD,EAAO,IAAI,MACfE,IAAAf,EAAM,QACV,KAAK,CAACgB,MAAM,YAAYH,IAASG,EAAE,OAAOH,EAAO,SAAS,EAAK,MAD3D,gBAAAE,EAC8D,UAChEF,EAAO,OAHoBA,EAAO;AAAA,IAIzC,GAEMI,IAAkB,CAACJ,MACfC,EAAMD,EAAO,IAAI,IAErBK,EAAA,IADAC,EAAoBN,EAAO,IAAI,EAAE,MAIjCO,IAAkB,CAACP,MACnBA,EAAO,SAAS,QAAQA,EAAO,SAAS,QACnCA,EAAO,QAAQ,IAAI,CAACQ,MAAM,WAAWA,KAAK,CAACP,EAAMO,EAAE,KAAK,IAAIA,EAAE,QAAQ,IAAI,EAAE,OAAO,CAACC,MAAM,CAACR,EAAMQ,CAAC,CAAC,EAAE,KAAM,IAAI,IAEjH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAnnotations.vue2.js","sources":["../../../../src/components/PlAnnotations/components/PlAnnotations.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Props as BaseProps } from './FilterSidebar.vue';\nexport type Props = BaseProps & {\n onDeleteSchema?: () => void;\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, effect, shallowRef } from 'vue';\n\nimport { isNil } from '@milaboratories/helpers';\nimport { PlSidebarGroup, useConfirm } from '@milaboratories/uikit';\n\nimport type { Annotation } from '../types';\nimport AnnotationsSidebar from './AnnotationsSidebar.vue';\nimport FilterSidebar from './FilterSidebar.vue';\n\n// Models\nconst annotation = defineModel<Annotation>('annotation', { required: true });\n// Props\nconst props = defineProps<Props>();\n// State\nconst selectedStepId = shallowRef<number | undefined>(undefined);\nconst selectedStep = computed(() => {\n return isNil(selectedStepId.value) || isNil(annotation.value)\n ? undefined\n : annotation.value.steps.find((step) => step.id === selectedStepId.value);\n});\n\n// Watchers\neffect(function setDefaultStepId() {\n if (selectedStepId.value === undefined && annotation.value.steps.length > 0) {\n selectedStepId.value = annotation.value.steps[0].id;\n }\n});\n// Hooks\nconst confirmResetSchema = useConfirm({\n title: 'Reset Schema',\n message: 'Are you sure you want to reset the schema? This action cannot be undone.',\n confirmLabel: 'Yes, reset',\n cancelLabel: 'No, cancel',\n});\n// Actions\nasync function handleDeleteSchema() {\n if (await confirmResetSchema()) {\n selectedStepId.value = undefined;\n props.onDeleteSchema?.();\n }\n}\n\n</script>\n\n<template>\n <PlSidebarGroup :class=\"$style.sidebarGroup\">\n <template #item-0>\n <AnnotationsSidebar\n v-model:annotation=\"annotation\"\n v-model:selectedStepId=\"selectedStepId\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n @delete-schema=\"handleDeleteSchema\"\n />\n </template>\n <template #item-1>\n <FilterSidebar\n v-if=\"selectedStep\"\n v-model:step=\"selectedStep\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n :selectedStepId=\"selectedStepId\"\n :hasSelectedColumns=\"props.hasSelectedColumns\"\n :getValuesForSelectedColumns=\"props.getValuesForSelectedColumns\"\n />\n </template>\n </PlSidebarGroup>\n</template>\n\n<style lang=\"scss\" module>\n.modal {\n display: flex;\n}\n\n.sidebarGroup {\n width: 100%;\n height: 100%;\n}\n\n.sidebarItem {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"names":["annotation","_useModel","props","__props","selectedStepId","shallowRef","selectedStep","computed","isNil","step","effect","confirmResetSchema","useConfirm","handleDeleteSchema","_a"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,UAAMA,IAAaC,KAAwB,YAAgC,GAErEC,IAAQC,GAERC,IAAiBC,EAA+B,MAAS,GACzDC,IAAeC,EAAS,MACrBC,EAAMJ,EAAe,KAAK,KAAKI,EAAMR,EAAW,KAAK,IACxD,SACAA,EAAW,MAAM,MAAM,KAAK,CAACS,MAASA,EAAK,OAAOL,EAAe,KAAK,CAC3E;AAGD,IAAAM,EAAO,WAA4B;AACjC,MAAIN,EAAe,UAAU,UAAaJ,EAAW,MAAM,MAAM,SAAS,MACxEI,EAAe,QAAQJ,EAAW,MAAM,MAAM,CAAC,EAAE;AAAA,IAErD,CAAC;AAED,UAAMW,IAAqBC,EAAW;AAAA,MACpC,OAAO;AAAA,MACP,SAAS;AAAA,MACT,cAAc;AAAA,MACd,aAAa;AAAA,IAAA,CACd;AAED,mBAAeC,IAAqB;;AAClC,MAAI,MAAMF,QACRP,EAAe,QAAQ,SACvBU,IAAAZ,EAAM,mBAAN,QAAAY,EAAA,KAAAZ;AAAA,IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlAnnotations.vue2.js","sources":["../../../../src/components/PlAnnotations/components/PlAnnotations.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Props as BaseProps } from './FilterSidebar.vue';\nexport type Props = BaseProps & {\n onDeleteSchema?: () => void;\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, effect, shallowRef } from 'vue';\n\nimport { isNil } from '@milaboratories/helpers';\nimport { PlSidebarGroup, useConfirm } from '@milaboratories/uikit';\n\nimport type { Annotation } from '../types';\nimport AnnotationsSidebar from './AnnotationsSidebar.vue';\nimport FilterSidebar from './FilterSidebar.vue';\n\n// Models\nconst annotation = defineModel<Annotation>('annotation', { required: true });\n// Props\nconst props = defineProps<Props>();\n// State\nconst selectedStepId = shallowRef<number | undefined>(undefined);\nconst selectedStep = computed(() => {\n return isNil(selectedStepId.value) || isNil(annotation.value)\n ? undefined\n : annotation.value.steps.find((step) => step.id === selectedStepId.value);\n});\n\n// Watchers\neffect(function setDefaultStepId() {\n if (selectedStepId.value === undefined && annotation.value.steps.length > 0) {\n selectedStepId.value = annotation.value.steps[0].id;\n }\n});\n// Hooks\nconst confirmResetSchema = useConfirm({\n title: 'Reset Schema',\n message: 'Are you sure you want to reset the schema? This action cannot be undone.',\n confirmLabel: 'Yes, reset',\n cancelLabel: 'No, cancel',\n});\n// Actions\nasync function handleDeleteSchema() {\n if (await confirmResetSchema()) {\n selectedStepId.value = undefined;\n props.onDeleteSchema?.();\n }\n}\n\n</script>\n\n<template>\n <PlSidebarGroup :class=\"$style.sidebarGroup\">\n <template #item-0>\n <AnnotationsSidebar\n v-model:annotation=\"annotation\"\n v-model:selectedStepId=\"selectedStepId\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n @delete-schema=\"handleDeleteSchema\"\n />\n </template>\n <template #item-1>\n <FilterSidebar\n v-if=\"selectedStep\"\n v-model:step=\"selectedStep\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n :selectedStepId=\"selectedStepId\"\n :hasSelectedColumns=\"props.hasSelectedColumns\"\n :getValuesForSelectedColumns=\"props.getValuesForSelectedColumns\"\n />\n </template>\n </PlSidebarGroup>\n</template>\n\n<style lang=\"scss\" module>\n.sidebarGroup {\n width: 100%;\n height: 100%;\n}\n\n.sidebarItem {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"names":["annotation","_useModel","props","__props","selectedStepId","shallowRef","selectedStep","computed","isNil","step","effect","confirmResetSchema","useConfirm","handleDeleteSchema","_a"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,UAAMA,IAAaC,KAAwB,YAAgC,GAErEC,IAAQC,GAERC,IAAiBC,EAA+B,MAAS,GACzDC,IAAeC,EAAS,MACrBC,EAAMJ,EAAe,KAAK,KAAKI,EAAMR,EAAW,KAAK,IACxD,SACAA,EAAW,MAAM,MAAM,KAAK,CAACS,MAASA,EAAK,OAAOL,EAAe,KAAK,CAC3E;AAGD,IAAAM,EAAO,WAA4B;AACjC,MAAIN,EAAe,UAAU,UAAaJ,EAAW,MAAM,MAAM,SAAS,MACxEI,EAAe,QAAQJ,EAAW,MAAM,MAAM,CAAC,EAAE;AAAA,IAErD,CAAC;AAED,UAAMW,IAAqBC,EAAW;AAAA,MACpC,OAAO;AAAA,MACP,SAAS;AAAA,MACT,cAAc;AAAA,MACd,aAAa;AAAA,IAAA,CACd;AAED,mBAAeC,IAAqB;;AAClC,MAAI,MAAMF,QACRP,EAAe,QAAQ,SACvBU,IAAAZ,EAAM,mBAAN,QAAAY,EAAA,KAAAZ;AAAA,IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,13 +1,11 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._modal_1634u_1{display:flex}._sidebarGroup_1634u_5,._sidebarItem_1634u_10{width:100%;height:100%}")),document.head.appendChild(e)}}catch(d){console.error("vite-plugin-css-injected-by-js",d)}})();
2
- const e = "_modal_1634u_1", s = "_sidebarGroup_1634u_5", a = "_sidebarItem_1634u_10", o = {
3
- modal: e,
4
- sidebarGroup: s,
5
- sidebarItem: a
1
+ (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._sidebarGroup_1imam_1,._sidebarItem_1imam_6{width:100%;height:100%}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
+ const e = "_sidebarGroup_1imam_1", s = "_sidebarItem_1imam_6", a = {
3
+ sidebarGroup: e,
4
+ sidebarItem: s
6
5
  };
7
6
  export {
8
- o as default,
9
- e as modal,
10
- s as sidebarGroup,
11
- a as sidebarItem
7
+ a as default,
8
+ e as sidebarGroup,
9
+ s as sidebarItem
12
10
  };
13
11
  //# sourceMappingURL=PlAnnotations.vue3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAnnotations.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"PlAnnotations.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,7 +1,7 @@
1
1
  import { FilterSpec as _FilterSpec, AnnotationSpecUi, FilterSpecLeaf, FilterSpecUi } from '@platforma-sdk/model';
2
2
  export type { FilterSpecType } from '@platforma-sdk/model';
3
3
  export type FilterSpec = _FilterSpec<FilterSpecLeaf, {
4
- id?: number;
4
+ id: number;
5
5
  name?: string;
6
6
  isExpanded?: boolean;
7
7
  }>;
@@ -1,5 +1,3 @@
1
1
  import { FilterSpecTypeFieldRecord } from '@milaboratories/uikit';
2
- import { FilterSpec } from './types';
3
- export declare function createDefaultFilterMetadata<T extends Extract<FilterSpec, {
4
- column: unknown;
5
- }>>(): FilterSpecTypeFieldRecord<T>;
2
+ import { FilterSpecLeaf } from '@platforma-sdk/model';
3
+ export declare function createDefaultFilterMetadata<T extends FilterSpecLeaf>(): FilterSpecTypeFieldRecord<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/components/PlAnnotations/utils.ts"],"sourcesContent":["import type { FilterSpecTypeFieldRecord } from '@milaboratories/uikit';\nimport type { FilterSpec } from './types';\n\nexport function createDefaultFilterMetadata<T extends Extract<FilterSpec, { column: unknown }>>(): 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,IAAgH;AAC9H,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;"}
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;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/ui-vue",
3
- "version": "1.45.21",
3
+ "version": "1.45.26",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "styles": "dist/index.js",
@@ -26,10 +26,10 @@
26
26
  "d3-format": "^3.1.0",
27
27
  "zod": "~3.23.8",
28
28
  "@zip.js/zip.js": "^2.8.2",
29
- "@milaboratories/ptabler-expression-js": "1.1.0",
30
- "@milaboratories/uikit": "2.5.2",
31
- "@platforma-sdk/model": "1.45.17",
32
- "@milaboratories/biowasm-tools": "2.0.0"
29
+ "@milaboratories/biowasm-tools": "2.0.0",
30
+ "@milaboratories/ptabler-expression-js": "1.1.1",
31
+ "@milaboratories/uikit": "2.5.4",
32
+ "@platforma-sdk/model": "1.45.26"
33
33
  },
34
34
  "devDependencies": {
35
35
  "happy-dom": "^15.11.7",
@@ -45,10 +45,10 @@
45
45
  "fast-json-patch": "^3.1.1",
46
46
  "@faker-js/faker": "^9.2.0",
47
47
  "@milaboratories/ts-configs": "1.0.6",
48
- "@milaboratories/eslint-config": "1.0.4",
49
48
  "@milaboratories/ts-builder": "1.0.5",
49
+ "@milaboratories/build-configs": "1.0.8",
50
50
  "@milaboratories/helpers": "1.12.0",
51
- "@milaboratories/build-configs": "1.0.8"
51
+ "@milaboratories/eslint-config": "1.0.4"
52
52
  },
53
53
  "scripts": {
54
54
  "test": "vitest run --passWithNoTests",
@@ -23,6 +23,7 @@ function handleAddStep() {
23
23
  id,
24
24
  label: `Filter #${annotation.value.steps.length + 1}`,
25
25
  filter: {
26
+ id: randomInt(),
26
27
  type: 'and',
27
28
  filters: [],
28
29
  },
@@ -52,7 +53,7 @@ function handleAddStep() {
52
53
 
53
54
  <PlElementList
54
55
  v-model:items="annotation.steps"
55
- :get-item-key="(item) => item.id!"
56
+ :get-item-key="(item) => item.id"
56
57
  :is-active="(item) => item.id === selectedStepId"
57
58
  :item-class="$style.stepItem"
58
59
  :class="$style.steps"
@@ -1,12 +1,12 @@
1
- <script setup lang="ts" generic="T extends FilterSpec = FilterSpec">
1
+ <script setup lang="ts" generic="T extends FilterSpecLeaf = FilterSpecLeaf">
2
2
  import { computed, watch } from 'vue';
3
3
 
4
4
  import { isNil } from '@milaboratories/helpers';
5
5
  import type { FilterSpecTypeFieldRecord } from '@milaboratories/uikit';
6
6
  import { getFilterUiMetadata, getFilterUiTypeOptions, PlCheckbox, PlDropdown, PlNumberField, PlTextField } from '@milaboratories/uikit';
7
- import type { SimplifiedUniversalPColumnEntry, SUniversalPColumnId } from '@platforma-sdk/model';
7
+ import type { FilterSpecLeaf, SimplifiedUniversalPColumnEntry, SUniversalPColumnId } from '@platforma-sdk/model';
8
8
 
9
- import type { FilterSpec, FilterSpecType } from '../types';
9
+ import type { FilterSpecType } from '../types';
10
10
 
11
11
  type ObjectEntries<T, K extends keyof T = keyof T> = [K, T[K]][];
12
12
 
@@ -7,6 +7,9 @@ export type Props = {
7
7
  </script>
8
8
  <script setup lang="ts">
9
9
  import { isNil, randomInt } from '@milaboratories/helpers';
10
+ import type {
11
+ FilterSpecTypeFieldRecord,
12
+ } from '@milaboratories/uikit';
10
13
  import {
11
14
  getFilterUiMetadata,
12
15
  PlBtnSecondary,
@@ -14,7 +17,7 @@ import {
14
17
  PlElementList,
15
18
  PlSidebarItem,
16
19
  } from '@milaboratories/uikit';
17
- import type { PObjectId, SimplifiedUniversalPColumnEntry, SUniversalPColumnId } from '@platforma-sdk/model';
20
+ import type { FilterSpecLeaf, PObjectId, SimplifiedUniversalPColumnEntry, SUniversalPColumnId } from '@platforma-sdk/model';
18
21
  import { computed } from 'vue';
19
22
  import type { Filter, FilterSpec } from '../types';
20
23
  import { createDefaultFilterMetadata } from '../utils';
@@ -51,7 +54,8 @@ async function addFilterFromSelected() {
51
54
  name: `Selected list (${shortReminder})`,
52
55
  isExpanded: false,
53
56
  type: 'or',
54
- filters: values.map((value) => ({
57
+ filters: values.map((value, i) => ({
58
+ id: i,
55
59
  type: 'patternEquals',
56
60
  column: columnId as SUniversalPColumnId,
57
61
  value,
@@ -67,8 +71,10 @@ const getColumnLabel = (filter: FilterSpec) => {
67
71
  ?? filter.type;
68
72
  };
69
73
 
70
- const getFormMetadata = (filter: FilterSpec) => {
71
- return !isNil(filter.type) ? getFilterUiMetadata(filter.type).form : createDefaultFilterMetadata();
74
+ const getFormMetadata = (filter: FilterSpec): FilterSpecTypeFieldRecord<FilterSpecLeaf> => {
75
+ return !isNil(filter.type)
76
+ ? getFilterUiMetadata(filter.type).form as FilterSpecTypeFieldRecord<FilterSpecLeaf>
77
+ : createDefaultFilterMetadata();
72
78
  };
73
79
 
74
80
  const getFilterValues = (filter: FilterSpec) => {
@@ -104,7 +110,7 @@ const getFilterValues = (filter: FilterSpec) => {
104
110
 
105
111
  <PlElementList
106
112
  v-model:items="step.filter.filters"
107
- :get-item-key="(item) => item.id!"
113
+ :get-item-key="(item) => item.id"
108
114
  :is-expanded="(item) => Boolean(item.isExpanded)"
109
115
  :on-expand="(item) => item.isExpanded = !Boolean(item.isExpanded)"
110
116
  >
@@ -114,9 +120,9 @@ const getFilterValues = (filter: FilterSpec) => {
114
120
  <template #item-content="{ item, index }">
115
121
  <template v-if="item.type !== 'or' && item.type !== 'and'">
116
122
  <DynamicForm
117
- v-model="step.filter.filters[index]"
118
- :form-metadata="getFormMetadata(item)"
123
+ v-model="(step.filter.filters[index] as FilterSpecLeaf)"
119
124
  :columns="props.columns"
125
+ :form-metadata="getFormMetadata(item)"
120
126
  />
121
127
  </template>
122
128
  <template v-else>
@@ -76,10 +76,6 @@ async function handleDeleteSchema() {
76
76
  </template>
77
77
 
78
78
  <style lang="scss" module>
79
- .modal {
80
- display: flex;
81
- }
82
-
83
79
  .sidebarGroup {
84
80
  width: 100%;
85
81
  height: 100%;
@@ -1,10 +1,8 @@
1
1
  import type { FilterSpec as _FilterSpec, AnnotationSpecUi, FilterSpecLeaf, FilterSpecUi } from '@platforma-sdk/model';
2
2
  export type { FilterSpecType } from '@platforma-sdk/model';
3
3
 
4
- export type FilterSpec = _FilterSpec<FilterSpecLeaf, { id?: number; name?: string; isExpanded?: boolean }>;
4
+ export type FilterSpec = _FilterSpec<FilterSpecLeaf, { id: number; name?: string; isExpanded?: boolean }>;
5
5
 
6
- export type Filter = FilterSpecUi<Extract<FilterSpec, { type: 'and' | 'or' }>> & {
7
- id: number;
8
- };
6
+ export type Filter = FilterSpecUi<Extract<FilterSpec, { type: 'and' | 'or' }>> & { id: number };
9
7
 
10
8
  export type Annotation = AnnotationSpecUi<Filter>;
@@ -1,7 +1,7 @@
1
1
  import type { FilterSpecTypeFieldRecord } from '@milaboratories/uikit';
2
- import type { FilterSpec } from './types';
2
+ import type { FilterSpecLeaf } from '@platforma-sdk/model';
3
3
 
4
- export function createDefaultFilterMetadata<T extends Extract<FilterSpec, { column: unknown }>>(): FilterSpecTypeFieldRecord<T> {
4
+ export function createDefaultFilterMetadata<T extends FilterSpecLeaf>(): FilterSpecTypeFieldRecord<T> {
5
5
  return {
6
6
  column: {
7
7
  label: 'Column',