@platforma-sdk/ui-vue 1.48.4 → 1.48.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,221 @@
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.48.4 build /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.48.6 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...
7
7
  ↳ vite.js build --config /configs/vite.browser-lib.config.js --mode production
8
+ vite v6.3.5 building for production...
8
9
  src/components/PlTableFilters/filters_logic.ts:22:8 - error TS1192: Module '"/home/runner/_work/platforma/platforma/node_modules/.pnpm/@types+semver@7.7.0/node_modules/@types/semver/index"' has no default export.
9
10
 
10
11
  22 import semver from 'semver';
11
12
     ~~~~~~
12
13
 
14
+ transforming...
15
+ ✓ 234 modules transformed.
13
16
  Export "default" of module "src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue" was reexported through module "src/components/PlAgGridColumnManager/index.ts" while both modules are dependencies of each other and will end up in different chunks by current Rollup settings. This scenario is not well supported at the moment as it will produce a circular dependency between chunks and will likely lead to broken execution order.
14
17
  Either change the import in "src/components/PlAgDataTable/PlAgDataTableV2.vue?vue&type=script&setup=true&lang.ts" to point directly to the exporting module or do not use "output.preserveModules" to ensure these modules end up in the same chunk.
18
+ rendering chunks...
19
+
20
+ [vite:dts] Start generate declaration files...
21
+ computing gzip size...
22
+ dist/_virtual/re.js  0.08 kB │ gzip: 0.10 kB │ map: 0.09 kB
23
+ dist/components/NotFound.vue2.js  0.10 kB │ gzip: 0.11 kB │ map: 0.10 kB
24
+ dist/components/BlockLoader.vue2.js  0.11 kB │ gzip: 0.11 kB │ map: 0.10 kB
25
+ dist/components/PlAgCellFile/PlAgCellFile.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
26
+ dist/components/PlAgDataTable/PlAgRowCount.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
27
+ dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
28
+ dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
29
+ dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
30
+ dist/components/PlAgRowNumHeader.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
31
+ dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
32
+ dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
33
+ dist/components/PlTableFilters/PlTableAddFilterV2.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
34
+ dist/plugins/Monetization/MonetizationSidebar.vue2.js  0.13 kB │ gzip: 0.12 kB │ map: 0.11 kB
35
+ dist/components/PlTableFilters/PlTableFilterEntryV2.vue2.js  0.13 kB │ gzip: 0.12 kB │ map: 0.11 kB
36
+ dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js  0.13 kB │ gzip: 0.12 kB │ map: 0.11 kB
37
+ dist/components/ValueOrErrorsComponent.vue2.js  0.13 kB │ gzip: 0.12 kB │ map: 0.11 kB
38
+ dist/urls.js  0.14 kB │ gzip: 0.15 kB │ map: 0.64 kB
39
+ dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js  0.14 kB │ gzip: 0.13 kB │ map: 0.12 kB
40
+ dist/lib/util/helpers/dist/random.js  0.16 kB │ gzip: 0.16 kB │ map: 0.74 kB
41
+ dist/_virtual/_plugin-vue_export-helper.js  0.19 kB │ gzip: 0.17 kB │ map: 0.12 kB
42
+ dist/components/PlAgDataTable/sources/menu-items.js  0.19 kB │ gzip: 0.16 kB │ map: 0.52 kB
43
+ dist/lib/util/helpers/dist/functions.js  0.20 kB │ gzip: 0.17 kB │ map: 5.26 kB
44
+ dist/_virtual/_commonjsHelpers.js  0.20 kB │ gzip: 0.18 kB │ map: 0.10 kB
45
+ dist/components/PlAgDataTable/sources/common.js  0.21 kB │ gzip: 0.17 kB │ map: 0.65 kB
46
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js  0.22 kB │ gzip: 0.18 kB │ map: 0.48 kB
47
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js  0.22 kB │ gzip: 0.18 kB │ map: 0.48 kB
48
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js  0.23 kB │ gzip: 0.18 kB │ map: 0.50 kB
49
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js  0.23 kB │ gzip: 0.18 kB │ map: 0.48 kB
50
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js  0.23 kB │ gzip: 0.18 kB │ map: 0.49 kB
51
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js  0.23 kB │ gzip: 0.18 kB │ map: 0.49 kB
52
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js  0.23 kB │ gzip: 0.18 kB │ map: 0.60 kB
53
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js  0.23 kB │ gzip: 0.18 kB │ map: 0.60 kB
54
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js  0.23 kB │ gzip: 0.19 kB │ map: 0.49 kB
55
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js  0.23 kB │ gzip: 0.18 kB │ map: 0.50 kB
56
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js  0.24 kB │ gzip: 0.19 kB │ map: 0.48 kB
57
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js  0.24 kB │ gzip: 0.19 kB │ map: 0.49 kB
58
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js  0.24 kB │ gzip: 0.19 kB │ map: 0.48 kB
59
+ dist/components/PlAdvancedFilter/index.js  0.24 kB │ gzip: 0.20 kB │ map: 0.66 kB
60
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js  0.24 kB │ gzip: 0.20 kB │ map: 0.56 kB
61
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js  0.24 kB │ gzip: 0.20 kB │ map: 0.56 kB
62
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js  0.25 kB │ gzip: 0.20 kB │ map: 0.79 kB
63
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js  0.26 kB │ gzip: 0.20 kB │ map: 0.58 kB
64
+ dist/components/PlBtnExportArchive/Item.vue.js  0.27 kB │ gzip: 0.21 kB │ map: 0.10 kB
65
+ 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
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
+ 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
69
+ dist/plugins/Monetization/RunStatus.vue.js  0.28 kB │ gzip: 0.21 kB │ map: 0.10 kB
70
+ dist/plugins/Monetization/LimitCard.vue.js  0.28 kB │ gzip: 0.21 kB │ map: 0.10 kB
71
+ dist/components/BlockLayout.vue.js  0.28 kB │ gzip: 0.22 kB │ map: 0.11 kB
72
+ dist/plugins/Monetization/EndOfPeriod.vue.js  0.29 kB │ gzip: 0.22 kB │ map: 0.11 kB
73
+ dist/components/PlAdvancedFilter/FilterEditor.vue.js  0.29 kB │ gzip: 0.22 kB │ map: 0.11 kB
74
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js  0.29 kB │ gzip: 0.23 kB │ map: 0.63 kB
75
+ dist/components/PlAdvancedFilter/OperandButton.vue.js  0.29 kB │ gzip: 0.22 kB │ map: 0.11 kB
76
+ dist/components/PlAnnotations/components/PlAnnotations.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
77
+ dist/components/PlAnnotations/components/FilterSidebar.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
78
+ dist/components/PlAgDataTable/PlAgDataTableV2.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
79
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js  0.30 kB │ gzip: 0.23 kB │ map: 0.65 kB
80
+ dist/plugins/Monetization/UserCabinetCard.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
81
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js  0.30 kB │ gzip: 0.22 kB │ map: 0.68 kB
82
+ dist/components/PlTableFilters/PlTableFiltersV2.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
83
+ dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
84
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js  0.30 kB │ gzip: 0.23 kB │ map: 0.78 kB
85
+ dist/components/PlBtnExportArchive/PlBtnExportArchive.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
86
+ dist/components/PlAnnotations/components/PlAnnotationsModal.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
87
+ dist/components/PlAgDataTable/PlAgDataTableSheets.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
88
+ dist/components/PlAnnotations/components/AnnotationsSidebar.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
89
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js  0.31 kB │ gzip: 0.22 kB │ map: 0.76 kB
90
+ dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.js  0.32 kB │ gzip: 0.23 kB │ map: 0.12 kB
91
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js  0.32 kB │ gzip: 0.23 kB │ map: 0.74 kB
92
+ 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
93
+ dist/lib/util/helpers/dist/strings.js  0.35 kB │ gzip: 0.24 kB │ map: 4.16 kB
94
+ 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
95
+ dist/computedResult.js  0.40 kB │ gzip: 0.26 kB │ map: 2.42 kB
96
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js  0.40 kB │ gzip: 0.26 kB │ map: 1.10 kB
97
+ dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue3.js  0.40 kB │ gzip: 0.30 kB │ map: 0.11 kB
98
+ dist/components/BlockLayout.vue3.js  0.42 kB │ gzip: 0.31 kB │ map: 0.10 kB
99
+ dist/objectHash.js  0.43 kB │ gzip: 0.32 kB │ map: 1.23 kB
100
+ dist/components/PlAnnotations/components/PlAnnotations.vue3.js  0.43 kB │ gzip: 0.30 kB │ map: 0.11 kB
101
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js  0.44 kB │ gzip: 0.28 kB │ map: 1.10 kB
102
+ dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue3.js  0.45 kB │ gzip: 0.33 kB │ map: 0.11 kB
103
+ dist/components/PlAgCellProgress/PlAgCellProgress.vue.js  0.47 kB │ gzip: 0.32 kB │ map: 0.76 kB
104
+ dist/defineStore.js  0.47 kB │ gzip: 0.31 kB │ map: 1.40 kB
105
+ dist/components/PlAgDataTable/PlAgDataTableSheets.vue3.js  0.47 kB │ gzip: 0.33 kB │ map: 0.11 kB
106
+ dist/components/PlAnnotations/components/PlAnnotationsModal.vue3.js  0.49 kB │ gzip: 0.34 kB │ map: 0.11 kB
107
+ dist/components/LoaderPage.vue.js  0.51 kB │ gzip: 0.35 kB │ map: 0.55 kB
108
+ dist/components/PlAgDataTable/PlAgDataTableV2.vue3.js  0.52 kB │ gzip: 0.36 kB │ map: 0.11 kB
109
+ dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue3.js  0.52 kB │ gzip: 0.36 kB │ map: 0.11 kB
110
+ 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
111
+ 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
112
+ dist/plugins/Monetization/useButtonTarget.js  0.53 kB │ gzip: 0.33 kB │ map: 1.29 kB
113
+ dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue3.js  0.53 kB │ gzip: 0.36 kB │ map: 0.11 kB
114
+ dist/components/PlAnnotations/components/FilterSidebar.vue3.js  0.53 kB │ gzip: 0.34 kB │ map: 0.11 kB
115
+ 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
116
+ dist/components/PlAgDataTable/ag-override.css.js  0.61 kB │ gzip: 0.30 kB │ map: 0.92 kB
117
+ dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js  0.61 kB │ gzip: 0.40 kB │ map: 0.95 kB
118
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js  0.68 kB │ gzip: 0.33 kB │ map: 1.70 kB
119
+ dist/components/PlAgDataTable/PlAgOverlayNoRows.vue.js  0.69 kB │ gzip: 0.44 kB │ map: 1.74 kB
120
+ dist/plugins/Monetization/EndOfPeriod.vue3.js  0.72 kB │ gzip: 0.48 kB │ map: 0.10 kB
121
+ dist/components/PlAnnotations/components/style.module.css.js  0.74 kB │ gzip: 0.44 kB │ map: 0.11 kB
122
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js  0.75 kB │ gzip: 0.39 kB │ map: 2.46 kB
123
+ dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue.js  0.77 kB │ gzip: 0.45 kB │ map: 1.51 kB
124
+ dist/plugins/Monetization/EndOfPeriod.vue2.js  0.77 kB │ gzip: 0.47 kB │ map: 1.86 kB
125
+ dist/components/BlockLoader.vue.js  0.82 kB │ gzip: 0.48 kB │ map: 1.30 kB
126
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js  0.83 kB │ gzip: 0.44 kB │ map: 2.64 kB
127
+ dist/components/PlAdvancedFilter/OperandButton.vue2.js  0.84 kB │ gzip: 0.51 kB │ map: 1.86 kB
128
+ dist/components/PlBtnExportArchive/Summary.vue3.js  0.85 kB │ gzip: 0.49 kB │ map: 0.10 kB
129
+ dist/components/NotFound.vue.js  0.90 kB │ gzip: 0.54 kB │ map: 1.17 kB
130
+ dist/components/PlBtnExportArchive/PlBtnExportArchive.vue3.js  0.91 kB │ gzip: 0.52 kB │ map: 0.11 kB
131
+ dist/components/PlAdvancedFilter/OperandButton.vue3.js  0.93 kB │ gzip: 0.52 kB │ map: 0.11 kB
132
+ dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/index.js  0.94 kB │ gzip: 0.42 kB │ map: 1.12 kB
133
+ dist/components/ValueOrErrorsComponent.vue.js  0.98 kB │ gzip: 0.50 kB │ map: 1.62 kB
134
+ dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue.js  1.00 kB │ gzip: 0.55 kB │ map: 2.09 kB
135
+ dist/components/PlBtnExportArchive/Item.vue3.js  1.03 kB │ gzip: 0.52 kB │ map: 0.10 kB
136
+ dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.scss.js  1.03 kB │ gzip: 0.49 kB │ map: 0.13 kB
137
+ dist/components/PlAgCellFile/PlAgCellFile.vue.js  1.09 kB │ gzip: 0.59 kB │ map: 3.22 kB
138
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js  1.11 kB │ gzip: 0.40 kB │ map: 2.14 kB
139
+ dist/lib/util/helpers/dist/utils.js  1.13 kB │ gzip: 0.53 kB │ map: 7.55 kB
140
+ dist/components/PlAgGridColumnManager/useFilteredItems.js  1.13 kB │ gzip: 0.58 kB │ map: 3.95 kB
141
+ dist/components/PlAgDataTable/sources/value-rendering.js  1.14 kB │ gzip: 0.54 kB │ map: 3.41 kB
142
+ dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js  1.15 kB │ gzip: 0.62 kB │ map: 1.77 kB
143
+ dist/AgGridVue/selection.js  1.17 kB │ gzip: 0.45 kB │ map: 3.53 kB
144
+ dist/plugins/Monetization/validation.js  1.17 kB │ gzip: 0.56 kB │ map: 2.85 kB
145
+ dist/lib/util/helpers/dist/objects.js  1.18 kB │ gzip: 0.53 kB │ map: 9.42 kB
146
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js  1.18 kB │ gzip: 0.58 kB │ map: 3.54 kB
147
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js  1.20 kB │ gzip: 0.57 kB │ map: 2.88 kB
148
+ dist/components/PlAgDataTable/PlAgOverlayLoading.vue.js  1.23 kB │ gzip: 0.65 kB │ map: 2.46 kB
149
+ dist/components/PlAdvancedFilter/utils.js  1.26 kB │ gzip: 0.60 kB │ map: 5.10 kB
150
+ dist/plugins/Monetization/RunStatus.vue2.js  1.27 kB │ gzip: 0.59 kB │ map: 3.13 kB
151
+ dist/components/PlBtnExportArchive/Summary.vue2.js  1.32 kB │ gzip: 0.58 kB │ map: 2.53 kB
152
+ dist/lib/util/helpers/dist/prettyBytes.js  1.34 kB │ gzip: 0.65 kB │ map: 4.36 kB
153
+ dist/components/PlBtnExportArchive/Item.vue2.js  1.37 kB │ gzip: 0.56 kB │ map: 2.80 kB
154
+ dist/createModel.js  1.39 kB │ gzip: 0.65 kB │ map: 3.91 kB
155
+ dist/components/PlAgDataTable/types.js  1.40 kB │ gzip: 0.56 kB │ map: 9.40 kB
156
+ dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js  1.52 kB │ gzip: 0.73 kB │ map: 0.11 kB
157
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js  1.55 kB │ gzip: 0.65 kB │ map: 3.99 kB
158
+ dist/plugins/Monetization/UserCabinetCard.vue3.js  1.55 kB │ gzip: 0.77 kB │ map: 0.11 kB
159
+ dist/components/PlAgDataTable/sources/focus-row.js  1.57 kB │ gzip: 0.75 kB │ map: 2.65 kB
160
+ dist/utils.js  1.57 kB │ gzip: 0.72 kB │ map: 3.81 kB
161
+ dist/AgGridVue/createAgGridColDef.js  1.61 kB │ gzip: 0.72 kB │ map: 9.40 kB
162
+ dist/components/PlAgCsvExporter/export-csv.js  1.63 kB │ gzip: 0.74 kB │ map: 3.92 kB
163
+ dist/aggrid.js  1.65 kB │ gzip: 0.79 kB │ map: 3.09 kB
164
+ dist/components/PlAdvancedFilter/constants.js  1.66 kB │ gzip: 0.51 kB │ map: 3.77 kB
165
+ dist/internal/createAppModel.js  1.73 kB │ gzip: 0.77 kB │ map: 4.81 kB
166
+ dist/plugins/Monetization/RunStatus.vue3.js  1.79 kB │ gzip: 0.82 kB │ map: 0.11 kB
167
+ dist/internal/UpdateSerializer.js  1.86 kB │ gzip: 0.80 kB │ map: 4.63 kB
168
+ dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js  1.99 kB │ gzip: 0.86 kB │ map: 2.62 kB
169
+ dist/defineApp.js  2.15 kB │ gzip: 0.96 kB │ map: 9.58 kB
170
+ dist/plugins/Monetization/useInfo.js  2.18 kB │ gzip: 0.80 kB │ map: 4.32 kB
171
+ dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js  2.20 kB │ gzip: 1.05 kB │ map: 3.27 kB
172
+ dist/plugins/Monetization/UserCabinetCard.vue2.js  2.36 kB │ gzip: 0.95 kB │ map: 4.61 kB
173
+ dist/components/PlAdvancedFilter/FilterEditor.vue3.js  2.49 kB │ gzip: 1.00 kB │ map: 0.12 kB
174
+ dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js  2.57 kB │ gzip: 1.16 kB │ map: 5.91 kB
175
+ dist/components/PlTableFilters/PlTableFiltersV2.vue3.js  2.58 kB │ gzip: 0.94 kB │ map: 0.12 kB
176
+ dist/components/PlTableFilters/filters-state.js  2.60 kB │ gzip: 1.08 kB │ map: 7.95 kB
177
+ 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
178
+ dist/components/PlAnnotations/components/PlAnnotations.vue2.js  2.68 kB │ gzip: 1.08 kB │ map: 4.03 kB
179
+ 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
180
+ dist/components/PlAgDataTable/sources/row-number.js  3.10 kB │ gzip: 1.34 kB │ map: 8.36 kB
181
+ dist/plugins/Monetization/LimitCard.vue3.js  3.10 kB │ gzip: 1.09 kB │ map: 0.11 kB
182
+ dist/components/PlAgDataTable/sources/table-state-v2.js  3.18 kB │ gzip: 1.16 kB │ map: 9.94 kB
183
+ dist/components/PlTableFilters/PlTableAddFilterV2.vue.js  3.19 kB │ gzip: 1.28 kB │ map: 4.96 kB
184
+ 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
185
+ dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js  3.37 kB │ gzip: 1.43 kB │ map: 4.14 kB
186
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js  3.51 kB │ gzip: 1.04 kB │ map: 11.66 kB
187
+ dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js  3.51 kB │ gzip: 1.38 kB │ map: 4.73 kB
188
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js  3.67 kB │ gzip: 1.01 kB │ map: 5.45 kB
189
+ dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js  3.84 kB │ gzip: 1.47 kB │ map: 5.66 kB
190
+ dist/plugins/Monetization/LimitCard.vue2.js  3.84 kB │ gzip: 1.15 kB │ map: 9.38 kB
191
+ dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js  3.85 kB │ gzip: 1.53 kB │ map: 6.90 kB
192
+ 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
193
+ dist/components/PlAnnotations/components/FilterSidebar.vue2.js  4.21 kB │ gzip: 1.53 kB │ map: 7.29 kB
194
+ dist/plugins/Monetization/MonetizationSidebar.vue.js  4.71 kB │ gzip: 1.75 kB │ map: 6.69 kB
195
+ dist/components/BlockLayout.vue2.js  4.97 kB │ gzip: 1.84 kB │ map: 3.90 kB
196
+ dist/components/PlAnnotations/components/AnnotationsSidebar.vue3.js  5.65 kB │ gzip: 1.67 kB │ map: 0.11 kB
197
+ dist/internal/createAppV1.js  5.76 kB │ gzip: 1.84 kB │ map: 15.33 kB
198
+ dist/composition/fileContent.js  5.78 kB │ gzip: 1.95 kB │ map: 14.16 kB
199
+ dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js  5.93 kB │ gzip: 2.22 kB │ map: 11.97 kB
200
+ dist/components/PlTableFilters/PlTableFiltersV2.vue2.js  6.12 kB │ gzip: 2.03 kB │ map: 11.68 kB
201
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js  6.70 kB │ gzip: 1.86 kB │ map: 15.20 kB
202
+ dist/internal/createAppV2.js  6.93 kB │ gzip: 2.43 kB │ map: 19.37 kB
203
+ dist/components/PlAgDataTable/sources/table-source-v2.js  7.32 kB │ gzip: 2.67 kB │ map: 22.27 kB
204
+ dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js  7.36 kB │ gzip: 1.62 kB │ map: 10.79 kB
205
+ dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js  7.70 kB │ gzip: 2.49 kB │ map: 25.65 kB
206
+ dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js  8.33 kB │ gzip: 2.42 kB │ map: 16.80 kB
207
+ dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/core.js  8.44 kB │ gzip: 2.53 kB │ map: 29.29 kB
208
+ dist/components/PlTableFilters/filters_logic.js  9.18 kB │ gzip: 2.18 kB │ map: 20.22 kB
209
+ dist/components/PlAdvancedFilter/FilterEditor.vue2.js 12.66 kB │ gzip: 3.26 kB │ map: 24.94 kB
210
+ dist/components/PlAgDataTable/PlAgOverlayNoRows.vue3.js 35.48 kB │ gzip: 26.70 kB │ map: 0.11 kB
211
+ dist/components/PlAgDataTable/pl-ag-overlay-loading.module.scss.js 41.43 kB │ gzip: 30.91 kB │ map: 0.12 kB
212
+ dist/index.js 43.15 kB │ gzip: 29.03 kB │ map: 0.13 kB
213
+ dist/components/PlAgDataTable/PlAgRowCount.vue.js 43.93 kB │ gzip: 29.02 kB │ map: 2.76 kB
214
+ dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js 44.32 kB │ gzip: 29.25 kB │ map: 3.03 kB
215
+ dist/components/PlAgRowNumHeader.vue.js 44.59 kB │ gzip: 29.26 kB │ map: 4.04 kB
216
+ dist/AgGridVue/useAgGridOptions.js 48.98 kB │ gzip: 30.09 kB │ map: 15.74 kB
217
+ dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js 50.37 kB │ gzip: 31.06 kB │ map: 34.73 kB
218
+ [vite:dts] Declaration files built in 8755ms.
219
+
220
+ ✓ built in 12.03s
15
221
  Build completed successfully
@@ -1,5 +1,5 @@
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.48.4 lint /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.48.6 lint /home/runner/_work/platforma/platforma/sdk/ui-vue
4
4
  > eslint .
5
5
 
@@ -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.48.4 type-check /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.48.6 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 --customConditions ,
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @platforma-sdk/ui-vue
2
2
 
3
+ ## 1.48.6
4
+
5
+ ### Patch Changes
6
+
7
+ - ce1303d: annotations: reorder labels execution
8
+
9
+ ## 1.48.5
10
+
11
+ ### Patch Changes
12
+
13
+ - 1eb721e: annotations default value
14
+ - @milaboratories/biowasm-tools@2.0.0
15
+ - @milaboratories/uikit@2.8.2
16
+ - @platforma-sdk/model@1.48.4
17
+ - @milaboratories/ptabler-expression-js@1.1.7
18
+
3
19
  ## 1.48.4
4
20
 
5
21
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"PlAdvancedFilter.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAdvancedFilter/PlAdvancedFilter.vue"],"names":[],"mappings":"AAgTA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,EAAwC,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,KAAK,EAA4C,wBAAwB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKhI,KAAK,WAAW,GAAG;IACjB,6EAA6E;IAC7E,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,OAAO,sBAAsB,CAAC;IACjD,wHAAwH;IACxH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yFAAyF;IACzF,iBAAiB,EAAE,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,wBAAwB,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAA;KAAE,KACpI,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;CAClF,CAAC;AAoJF,KAAK,iBAAiB,GAAG;IACzB,SAAS,EAAE,UAAU,CAAC;CACrB,GAAG,WAAW,CAAC;AAKhB,iBAAS,cAAc;WA6QT,OAAO,IAA6B;;qCAVR,GAAG;;;;EAe5C;AA6BD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;eAjdP,OAAO;sBAFA,OAAO,sBAAsB;0BAIzB,OAAO;wFAwd9B,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AA0BpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"PlAdvancedFilter.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAdvancedFilter/PlAdvancedFilter.vue"],"names":[],"mappings":"AAsTA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,EAAwC,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,KAAK,EAA4C,wBAAwB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKhI,KAAK,WAAW,GAAG;IACjB,6EAA6E;IAC7E,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,OAAO,sBAAsB,CAAC;IACjD,wHAAwH;IACxH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yFAAyF;IACzF,iBAAiB,EAAE,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,wBAAwB,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAA;KAAE,KACpI,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;CAClF,CAAC;AAoJF,KAAK,iBAAiB,GAAG;IACzB,SAAS,EAAE,UAAU,CAAC;CACrB,GAAG,WAAW,CAAC;AAKhB,iBAAS,cAAc;WA6QT,OAAO,IAA6B;;qCAVR,GAAG;;;;EAe5C;AA6BD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;eAjdP,OAAO;sBAFA,OAAO,sBAAsB;0BAIzB,OAAO;wFAwd9B,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AA0BpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,9 +1,9 @@
1
- import { defineComponent as I, mergeModels as M, useModel as x, computed as Y, createElementBlock as y, openBlock as r, createVNode as b, createBlock as v, createCommentVNode as F, unref as p, withCtx as l, normalizeClass as f, createElementVNode as D, createTextVNode as g, Fragment as q, renderList as W, renderSlot as j, toRaw as H } from "vue";
1
+ import { defineComponent as I, mergeModels as M, useModel as x, computed as Y, createElementBlock as y, openBlock as r, createVNode as b, createBlock as v, createCommentVNode as T, unref as p, withCtx as l, normalizeClass as f, createElementVNode as D, createTextVNode as g, Fragment as q, renderList as W, renderSlot as j, toRaw as H } from "vue";
2
2
  import { PlElementList as $, PlCheckbox as J, PlBtnSecondary as B } from "@milaboratories/uikit";
3
3
  import K from "./FilterEditor.vue.js";
4
4
  import Q from "./OperandButton.vue.js";
5
5
  import { SUPPORTED_FILTER_TYPES as X, DEFAULT_FILTERS as Z, DEFAULT_FILTER_TYPE as _ } from "./constants.js";
6
- import { getNewId as R, createNewGroup as ee, isValidColumnId as N } from "./utils.js";
6
+ import { getNewId as R, createNewGroup as ee, isValidColumnId as P } from "./utils.js";
7
7
  const te = ["onDrop"], de = /* @__PURE__ */ I({
8
8
  __name: "PlAdvancedFilter",
9
9
  props: /* @__PURE__ */ M({
@@ -21,7 +21,7 @@ const te = ["onDrop"], de = /* @__PURE__ */ I({
21
21
  const i = x(m, "filters"), s = m, G = Y(() => {
22
22
  var e;
23
23
  return (e = s.items[0]) == null ? void 0 : e.id;
24
- }), P = [{
24
+ }), N = [{
25
25
  id: -1,
26
26
  type: "and",
27
27
  filters: [],
@@ -90,17 +90,17 @@ const te = ["onDrop"], de = /* @__PURE__ */ I({
90
90
  const o = t.dataTransfer;
91
91
  if (o != null && o.getData("text/plain")) {
92
92
  const n = o.getData("text/plain");
93
- N(n) && w(e, n);
93
+ P(n) && w(e, n);
94
94
  }
95
95
  }
96
96
  function O(e) {
97
97
  const t = e.dataTransfer;
98
98
  if (t != null && t.getData("text/plain")) {
99
99
  const o = t.getData("text/plain");
100
- N(o) && C(o);
100
+ P(o) && C(o);
101
101
  }
102
102
  }
103
- function T(e) {
103
+ function F(e) {
104
104
  e.preventDefault();
105
105
  }
106
106
  function h(e) {
@@ -136,7 +136,7 @@ const te = ["onDrop"], de = /* @__PURE__ */ I({
136
136
  class: f(e.$style.groupContent),
137
137
  dropzone: "true",
138
138
  onDrop: (c) => V(n, c),
139
- onDragover: T
139
+ onDragover: F
140
140
  }, [
141
141
  b(p(J), {
142
142
  "model-value": o.type === "not",
@@ -144,7 +144,7 @@ const te = ["onDrop"], de = /* @__PURE__ */ I({
144
144
  "onUpdate:modelValue": (c) => L(n)
145
145
  }, {
146
146
  default: l(() => [...t[3] || (t[3] = [
147
- g("NOT", -1)
147
+ g(" Filter Out ", -1)
148
148
  ])]),
149
149
  _: 1
150
150
  }, 8, ["model-value", "class", "onUpdate:modelValue"]),
@@ -185,13 +185,13 @@ const te = ["onDrop"], de = /* @__PURE__ */ I({
185
185
  active: i.value.type,
186
186
  disabled: o === d().length - 1,
187
187
  "on-select": (n) => i.value.type = n
188
- }, null, 8, ["class", "active", "disabled", "on-select"])) : F("", !0)
188
+ }, null, 8, ["class", "active", "disabled", "on-select"])) : T("", !0)
189
189
  ]),
190
190
  _: 1
191
191
  }, 8, ["items", "get-item-key", "item-class", "item-class-content", "item-class-title", "is-expanded", "on-expand"]),
192
192
  s.enableAddGroupButton ? (r(), v(p($), {
193
193
  key: 0,
194
- items: P,
194
+ items: N,
195
195
  "get-item-key": (o) => o.id,
196
196
  "item-class": e.$style.filterGroup,
197
197
  "item-class-content": e.$style.filterGroupContent,
@@ -203,7 +203,7 @@ const te = ["onDrop"], de = /* @__PURE__ */ I({
203
203
  disablePinning: !0,
204
204
  dropzone: "true",
205
205
  onDrop: O,
206
- onDragover: T
206
+ onDragover: F
207
207
  }, {
208
208
  "item-title": l(() => [...t[6] || (t[6] = [
209
209
  g("Filter group", -1)
@@ -227,7 +227,7 @@ const te = ["onDrop"], de = /* @__PURE__ */ I({
227
227
  ])
228
228
  ]),
229
229
  _: 3
230
- }, 8, ["get-item-key", "item-class", "item-class-content", "item-class-title"])) : F("", !0)
230
+ }, 8, ["get-item-key", "item-class", "item-class-content", "item-class-title"])) : T("", !0)
231
231
  ]));
232
232
  }
233
233
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PlAdvancedFilter.vue2.js","sources":["../../../src/components/PlAdvancedFilter/PlAdvancedFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlBtnSecondary, PlCheckbox, PlElementList } from '@milaboratories/uikit';\nimport type { ListOptionBase } from '@platforma-sdk/model';\nimport { computed, toRaw } from 'vue';\nimport FilterEditor from './FilterEditor.vue';\nimport OperandButton from './OperandButton.vue';\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS, SUPPORTED_FILTER_TYPES } from './constants';\nimport type { CommonFilter, EditableFilter, NodeFilter, PlAdvancedFilterColumnId, RootFilter, SourceOptionInfo } from './types';\nimport { createNewGroup, getNewId, isValidColumnId } from './utils';\n\nconst model = defineModel<RootFilter>('filters', { required: true });\n\nconst props = withDefaults(defineProps<{\n /** List of ids of sources (columns, axes) that can be selected in filters */\n items: SourceOptionInfo[];\n /** List of supported filter types */\n supportedFilters?: typeof SUPPORTED_FILTER_TYPES;\n /** If true - new filter can be added by droppind element into filter group; else new column is added by button click */\n enableDnd?: boolean;\n /** If true - \"Add group\" button is shown below the filter groups */\n enableAddGroupButton?: boolean;\n /** Loading function for unique values for Equal/InSet filters and fixed axes options. */\n getSuggestOptions: (params: { columnId: PlAdvancedFilterColumnId; axisIdx?: number; searchStr: string; searchType: 'value' | 'label' }) =>\n ListOptionBase<string | number>[] | Promise<ListOptionBase<string | number>[]>;\n}>(), {\n supportedFilters: () => SUPPORTED_FILTER_TYPES,\n getSuggestModel: undefined,\n\n enableDnd: false,\n enableAddGroupButton: false,\n});\n\nconst firstColumnId = computed(() => props.items[0]?.id);\nconst emptyGroup: NodeFilter[] = [{\n id: -1,\n type: 'and',\n filters: [],\n isExpanded: true,\n}];\n\nfunction getRootGroups() {\n if (model.value.type !== 'or' && model.value.type !== 'and') {\n throw new Error('Invalid model structure, expected root to be \"or\" or \"and\" group');\n }\n return model.value.filters;\n}\n\nfunction getRootGroup(idx: number): NodeFilter {\n const groups = getRootGroups();\n const group = groups[idx];\n if (group.type !== 'and' && group.type !== 'or' && group.type !== 'not') {\n throw new Error('Invalid group structure, expected \"and\", \"or\" or \"not\" group');\n }\n return group;\n}\n\nfunction getRootGroupContent(idx: number): Exclude<NodeFilter, { type: 'not' }> {\n const group = getRootGroup(idx);\n\n if (group.type !== 'not') {\n return group;\n }\n\n if (group.filter.type !== 'and' && group.filter.type !== 'or') {\n throw new Error('Invalid group structure, expected \"and\" or \"or\" group inside \"not\"');\n }\n\n return group.filter;\n}\n\nfunction addColumnToGroup(groupIdx: number, selectedSourceId: PlAdvancedFilterColumnId) {\n const group = getRootGroupContent(groupIdx);\n\n group.filters.push({\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: selectedSourceId,\n id: getNewId(),\n isExpanded: true,\n } as CommonFilter);\n}\n\nfunction removeFilterFromGroup(groupIdx: number, filterIdx: number) {\n const group = getRootGroupContent(groupIdx);\n\n if (group.filters.length === 1 && filterIdx === 0) {\n removeGroup(groupIdx);\n } else {\n group.filters.splice(filterIdx, 1);\n }\n}\nfunction inverseRootNode(groupIdx: number) {\n const groups = getRootGroups();\n const group = groups[groupIdx];\n if (group.type === 'not') {\n if (group.filter.type !== 'and' && group.filter.type !== 'or') {\n throw new Error('Invalid group structure, expected \"and\" or \"or\" group inside \"not\"');\n }\n groups[groupIdx] = group.filter;\n } else {\n const type = groups[groupIdx].type;\n if (type !== 'and' && type !== 'or' && type !== 'not') {\n throw new Error('Invalid group structure, expected \"and\", \"or\" or \"not\" group');\n }\n\n groups[groupIdx] = {\n id: getNewId(),\n isExpanded: true,\n type: 'not',\n filter: groups[groupIdx],\n };\n }\n}\n\nfunction getNotContent<T extends CommonFilter>(item: T): Exclude<T, { type: 'not' }> {\n return item.type === 'not' ? item.filter as Exclude<T, { type: 'not' }> : item as Exclude<T, { type: 'not' }>;\n}\n\nfunction removeGroup(groupIdx: number) {\n const groups = getRootGroups();\n groups.splice(groupIdx, 1);\n}\nfunction addGroup(selectedSourceId: PlAdvancedFilterColumnId) {\n const newGroup = createNewGroup(selectedSourceId);\n const groups = getRootGroups();\n groups.push(newGroup);\n}\n\nfunction handleDropToExistingGroup(groupIdx: number, event: DragEvent) {\n const dataTransfer = event.dataTransfer;\n if (dataTransfer?.getData('text/plain')) {\n const draggedId = dataTransfer.getData('text/plain');\n if (isValidColumnId(draggedId)) {\n addColumnToGroup(groupIdx, draggedId);\n }\n }\n}\nfunction handleDropToNewGroup(event: DragEvent) {\n const dataTransfer = event.dataTransfer;\n if (dataTransfer?.getData('text/plain')) {\n const draggedId = dataTransfer.getData('text/plain');\n if (isValidColumnId(draggedId)) {\n addGroup(draggedId);\n }\n }\n}\nfunction dragOver(event: DragEvent) {\n event.preventDefault();\n}\n\nfunction validateFilter<T extends CommonFilter>(item: T): EditableFilter {\n if (item.type === 'and' || item.type === 'or' || item.type === 'not') {\n throw new Error('Invalid filter structure, expected leaf filter');\n }\n\n return item as EditableFilter;\n}\n\nfunction updateFilter(filters: CommonFilter[], idx: number, updatedFilter: EditableFilter) {\n filters[idx] = toRaw(updatedFilter as CommonFilter);\n}\n</script>\n<template>\n <div>\n <PlElementList\n v-model:items=\"model.filters\"\n :get-item-key=\"(filter) => filter.id\"\n\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"(filter) => filter.isExpanded === true\"\n :on-expand=\"(group) => { group.isExpanded = !group.isExpanded}\"\n\n :disableDragging=\"false\"\n :disableRemoving=\"false\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n >\n <template #item-title>\n Filter group\n </template>\n <template #item-content=\"{ item, index }\">\n <div\n :class=\"$style.groupContent\"\n dropzone=\"true\"\n @drop=\"(event) => handleDropToExistingGroup(index, event)\"\n @dragover=\"dragOver\"\n >\n <PlCheckbox :model-value=\"item.type === 'not'\" :class=\"$style.notCheckbox\" @update:model-value=\"inverseRootNode(index)\">NOT</PlCheckbox>\n <template v-for=\"(_, filterIdx) in getNotContent(item).filters\" :key=\"filterIdx\">\n <FilterEditor\n :filter=\"validateFilter(getNotContent(item).filters[filterIdx])\"\n :operand=\"getNotContent(item).type\"\n :column-options=\"items\"\n :supported-filters=\"props.supportedFilters\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :enable-dnd=\"Boolean(props.enableDnd)\"\n :is-last=\"filterIdx === getNotContent(item).filters.length - 1\"\n :on-change-operand=\"(v) => getNotContent(item).type = v\"\n :on-delete=\"() => removeFilterFromGroup(index, filterIdx)\"\n @update:filter=\"(value) => updateFilter(getNotContent(item).filters, filterIdx, value)\"\n />\n </template>\n <div v-if=\"props.enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <PlBtnSecondary v-else icon=\"add\" @click=\"addColumnToGroup(index, firstColumnId)\">\n Add filter\n </PlBtnSecondary>\n </div>\n </template>\n <template #item-after=\"{ index }\">\n <OperandButton\n v-if=\"props.enableAddGroupButton || index < getRootGroups().length - 1\"\n :class=\"$style.buttonWrapper\"\n :active=\"model.type\"\n :disabled=\"index === getRootGroups().length - 1\"\n :on-select=\"(v) => model.type = v\"\n />\n </template>\n </PlElementList>\n\n <!-- Last group - always empty, just for adding new groups -->\n <PlElementList\n v-if=\"props.enableAddGroupButton\"\n :items=\"emptyGroup\"\n :get-item-key=\"(group) => group.id\"\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"() => true\"\n\n :disableDragging=\"true\"\n :disableRemoving=\"true\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n dropzone=\"true\"\n @drop=\"handleDropToNewGroup\"\n @dragover=\"dragOver\"\n >\n <template #item-title>Filter group</template>\n <template #item-content>\n <div v-if=\"enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <slot v-else name=\"add-group-buttons\">\n <PlBtnSecondary icon=\"add\" @click=\"addGroup(firstColumnId)\">\n Add filter\n </PlBtnSecondary>\n </slot>\n </template>\n </PlElementList>\n </div>\n</template>\n<style module>\n .filterGroup {\n background: var(--bg-base-light);\n }\n .filterGroup:hover {\n background: rgba(99, 224, 36, 0.12);\n }\n .filterGroupTitle {\n background: none;\n }\n .filterGroupContent {\n padding: 4px 24px 24px 24px;\n }\n .groupContent {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .notCheckbox {\n margin: 4px 0;\n }\n .dropzone {\n border-radius: 6px;\n border: 1.5px dashed var(--color-div-grey);\n color: var(--txt-03);\n font-family: Manrope;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n height: 40px;\n cursor: default;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .buttonWrapper {\n margin-top: 8px;\n height: 56px;\n display: flex;\n align-items: center;\n }\n :global(.sortable-chosen) .buttonWrapper {\n visibility: hidden;\n }\n</style>\n"],"names":["model","_useModel","__props","props","firstColumnId","computed","_a","emptyGroup","getRootGroups","getRootGroup","idx","group","getRootGroupContent","addColumnToGroup","groupIdx","selectedSourceId","DEFAULT_FILTERS","DEFAULT_FILTER_TYPE","getNewId","removeFilterFromGroup","filterIdx","removeGroup","inverseRootNode","groups","type","getNotContent","item","addGroup","newGroup","createNewGroup","handleDropToExistingGroup","event","dataTransfer","draggedId","isValidColumnId","handleDropToNewGroup","dragOver","validateFilter","updateFilter","filters","updatedFilter","toRaw","_createElementBlock","_createVNode","_unref","PlElementList","_cache","$event","filter","$style","_withCtx","index","_createElementVNode","_normalizeClass","PlCheckbox","_Fragment","_renderList","_","_createBlock","FilterEditor","v","value","PlBtnSecondary","OperandButton","_renderSlot","_ctx"],"mappings":"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"}
1
+ {"version":3,"file":"PlAdvancedFilter.vue2.js","sources":["../../../src/components/PlAdvancedFilter/PlAdvancedFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlBtnSecondary, PlCheckbox, PlElementList } from '@milaboratories/uikit';\nimport type { ListOptionBase } from '@platforma-sdk/model';\nimport { computed, toRaw } from 'vue';\nimport FilterEditor from './FilterEditor.vue';\nimport OperandButton from './OperandButton.vue';\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS, SUPPORTED_FILTER_TYPES } from './constants';\nimport type { CommonFilter, EditableFilter, NodeFilter, PlAdvancedFilterColumnId, RootFilter, SourceOptionInfo } from './types';\nimport { createNewGroup, getNewId, isValidColumnId } from './utils';\n\nconst model = defineModel<RootFilter>('filters', { required: true });\n\nconst props = withDefaults(defineProps<{\n /** List of ids of sources (columns, axes) that can be selected in filters */\n items: SourceOptionInfo[];\n /** List of supported filter types */\n supportedFilters?: typeof SUPPORTED_FILTER_TYPES;\n /** If true - new filter can be added by droppind element into filter group; else new column is added by button click */\n enableDnd?: boolean;\n /** If true - \"Add group\" button is shown below the filter groups */\n enableAddGroupButton?: boolean;\n /** Loading function for unique values for Equal/InSet filters and fixed axes options. */\n getSuggestOptions: (params: { columnId: PlAdvancedFilterColumnId; axisIdx?: number; searchStr: string; searchType: 'value' | 'label' }) =>\n ListOptionBase<string | number>[] | Promise<ListOptionBase<string | number>[]>;\n}>(), {\n supportedFilters: () => SUPPORTED_FILTER_TYPES,\n getSuggestModel: undefined,\n\n enableDnd: false,\n enableAddGroupButton: false,\n});\n\nconst firstColumnId = computed(() => props.items[0]?.id);\nconst emptyGroup: NodeFilter[] = [{\n id: -1,\n type: 'and',\n filters: [],\n isExpanded: true,\n}];\n\nfunction getRootGroups() {\n if (model.value.type !== 'or' && model.value.type !== 'and') {\n throw new Error('Invalid model structure, expected root to be \"or\" or \"and\" group');\n }\n return model.value.filters;\n}\n\nfunction getRootGroup(idx: number): NodeFilter {\n const groups = getRootGroups();\n const group = groups[idx];\n if (group.type !== 'and' && group.type !== 'or' && group.type !== 'not') {\n throw new Error('Invalid group structure, expected \"and\", \"or\" or \"not\" group');\n }\n return group;\n}\n\nfunction getRootGroupContent(idx: number): Exclude<NodeFilter, { type: 'not' }> {\n const group = getRootGroup(idx);\n\n if (group.type !== 'not') {\n return group;\n }\n\n if (group.filter.type !== 'and' && group.filter.type !== 'or') {\n throw new Error('Invalid group structure, expected \"and\" or \"or\" group inside \"not\"');\n }\n\n return group.filter;\n}\n\nfunction addColumnToGroup(groupIdx: number, selectedSourceId: PlAdvancedFilterColumnId) {\n const group = getRootGroupContent(groupIdx);\n\n group.filters.push({\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: selectedSourceId,\n id: getNewId(),\n isExpanded: true,\n } as CommonFilter);\n}\n\nfunction removeFilterFromGroup(groupIdx: number, filterIdx: number) {\n const group = getRootGroupContent(groupIdx);\n\n if (group.filters.length === 1 && filterIdx === 0) {\n removeGroup(groupIdx);\n } else {\n group.filters.splice(filterIdx, 1);\n }\n}\nfunction inverseRootNode(groupIdx: number) {\n const groups = getRootGroups();\n const group = groups[groupIdx];\n if (group.type === 'not') {\n if (group.filter.type !== 'and' && group.filter.type !== 'or') {\n throw new Error('Invalid group structure, expected \"and\" or \"or\" group inside \"not\"');\n }\n groups[groupIdx] = group.filter;\n } else {\n const type = groups[groupIdx].type;\n if (type !== 'and' && type !== 'or' && type !== 'not') {\n throw new Error('Invalid group structure, expected \"and\", \"or\" or \"not\" group');\n }\n\n groups[groupIdx] = {\n id: getNewId(),\n isExpanded: true,\n type: 'not',\n filter: groups[groupIdx],\n };\n }\n}\n\nfunction getNotContent<T extends CommonFilter>(item: T): Exclude<T, { type: 'not' }> {\n return item.type === 'not' ? item.filter as Exclude<T, { type: 'not' }> : item as Exclude<T, { type: 'not' }>;\n}\n\nfunction removeGroup(groupIdx: number) {\n const groups = getRootGroups();\n groups.splice(groupIdx, 1);\n}\nfunction addGroup(selectedSourceId: PlAdvancedFilterColumnId) {\n const newGroup = createNewGroup(selectedSourceId);\n const groups = getRootGroups();\n groups.push(newGroup);\n}\n\nfunction handleDropToExistingGroup(groupIdx: number, event: DragEvent) {\n const dataTransfer = event.dataTransfer;\n if (dataTransfer?.getData('text/plain')) {\n const draggedId = dataTransfer.getData('text/plain');\n if (isValidColumnId(draggedId)) {\n addColumnToGroup(groupIdx, draggedId);\n }\n }\n}\nfunction handleDropToNewGroup(event: DragEvent) {\n const dataTransfer = event.dataTransfer;\n if (dataTransfer?.getData('text/plain')) {\n const draggedId = dataTransfer.getData('text/plain');\n if (isValidColumnId(draggedId)) {\n addGroup(draggedId);\n }\n }\n}\nfunction dragOver(event: DragEvent) {\n event.preventDefault();\n}\n\nfunction validateFilter<T extends CommonFilter>(item: T): EditableFilter {\n if (item.type === 'and' || item.type === 'or' || item.type === 'not') {\n throw new Error('Invalid filter structure, expected leaf filter');\n }\n\n return item as EditableFilter;\n}\n\nfunction updateFilter(filters: CommonFilter[], idx: number, updatedFilter: EditableFilter) {\n filters[idx] = toRaw(updatedFilter as CommonFilter);\n}\n</script>\n<template>\n <div>\n <PlElementList\n v-model:items=\"model.filters\"\n :get-item-key=\"(filter) => filter.id\"\n\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"(filter) => filter.isExpanded === true\"\n :on-expand=\"(group) => { group.isExpanded = !group.isExpanded}\"\n\n :disableDragging=\"false\"\n :disableRemoving=\"false\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n >\n <template #item-title>\n Filter group\n </template>\n <template #item-content=\"{ item, index }\">\n <div\n :class=\"$style.groupContent\"\n dropzone=\"true\"\n @drop=\"(event) => handleDropToExistingGroup(index, event)\"\n @dragover=\"dragOver\"\n >\n <PlCheckbox\n :model-value=\"item.type === 'not'\"\n :class=\"$style.notCheckbox\"\n @update:model-value=\"inverseRootNode(index)\"\n >\n Filter Out\n </PlCheckbox>\n <template v-for=\"(_, filterIdx) in getNotContent(item).filters\" :key=\"filterIdx\">\n <FilterEditor\n :filter=\"validateFilter(getNotContent(item).filters[filterIdx])\"\n :operand=\"getNotContent(item).type\"\n :column-options=\"items\"\n :supported-filters=\"props.supportedFilters\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :enable-dnd=\"Boolean(props.enableDnd)\"\n :is-last=\"filterIdx === getNotContent(item).filters.length - 1\"\n :on-change-operand=\"(v) => getNotContent(item).type = v\"\n :on-delete=\"() => removeFilterFromGroup(index, filterIdx)\"\n @update:filter=\"(value) => updateFilter(getNotContent(item).filters, filterIdx, value)\"\n />\n </template>\n <div v-if=\"props.enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <PlBtnSecondary v-else icon=\"add\" @click=\"addColumnToGroup(index, firstColumnId)\">\n Add filter\n </PlBtnSecondary>\n </div>\n </template>\n <template #item-after=\"{ index }\">\n <OperandButton\n v-if=\"props.enableAddGroupButton || index < getRootGroups().length - 1\"\n :class=\"$style.buttonWrapper\"\n :active=\"model.type\"\n :disabled=\"index === getRootGroups().length - 1\"\n :on-select=\"(v) => model.type = v\"\n />\n </template>\n </PlElementList>\n\n <!-- Last group - always empty, just for adding new groups -->\n <PlElementList\n v-if=\"props.enableAddGroupButton\"\n :items=\"emptyGroup\"\n :get-item-key=\"(group) => group.id\"\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"() => true\"\n\n :disableDragging=\"true\"\n :disableRemoving=\"true\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n dropzone=\"true\"\n @drop=\"handleDropToNewGroup\"\n @dragover=\"dragOver\"\n >\n <template #item-title>Filter group</template>\n <template #item-content>\n <div v-if=\"enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <slot v-else name=\"add-group-buttons\">\n <PlBtnSecondary icon=\"add\" @click=\"addGroup(firstColumnId)\">\n Add filter\n </PlBtnSecondary>\n </slot>\n </template>\n </PlElementList>\n </div>\n</template>\n<style module>\n .filterGroup {\n background: var(--bg-base-light);\n }\n .filterGroup:hover {\n background: rgba(99, 224, 36, 0.12);\n }\n .filterGroupTitle {\n background: none;\n }\n .filterGroupContent {\n padding: 4px 24px 24px 24px;\n }\n .groupContent {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .notCheckbox {\n margin: 4px 0;\n }\n .dropzone {\n border-radius: 6px;\n border: 1.5px dashed var(--color-div-grey);\n color: var(--txt-03);\n font-family: Manrope;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n height: 40px;\n cursor: default;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .buttonWrapper {\n margin-top: 8px;\n height: 56px;\n display: flex;\n align-items: center;\n }\n :global(.sortable-chosen) .buttonWrapper {\n visibility: hidden;\n }\n</style>\n"],"names":["model","_useModel","__props","props","firstColumnId","computed","_a","emptyGroup","getRootGroups","getRootGroup","idx","group","getRootGroupContent","addColumnToGroup","groupIdx","selectedSourceId","DEFAULT_FILTERS","DEFAULT_FILTER_TYPE","getNewId","removeFilterFromGroup","filterIdx","removeGroup","inverseRootNode","groups","type","getNotContent","item","addGroup","newGroup","createNewGroup","handleDropToExistingGroup","event","dataTransfer","draggedId","isValidColumnId","handleDropToNewGroup","dragOver","validateFilter","updateFilter","filters","updatedFilter","toRaw","_createElementBlock","_createVNode","_unref","PlElementList","_cache","$event","filter","$style","_withCtx","index","_createElementVNode","_normalizeClass","PlCheckbox","_Fragment","_renderList","_","_createBlock","FilterEditor","v","value","PlBtnSecondary","OperandButton","_renderSlot","_ctx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AnnotationsSidebar.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"names":[],"mappings":"AAkHA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA6B3C,KAAK,iBAAiB,GAAG;IACzB,YAAY,EAAE,UAAU,CAAC;IACzB,gBAAgB,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CACrC,CAAC;;;;;;;;;;;AAkLF,wBAQG"}
1
+ {"version":3,"file":"AnnotationsSidebar.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"names":[],"mappings":"AAiIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA4B3C,KAAK,iBAAiB,GAAG;IACzB,YAAY,EAAE,UAAU,CAAC;IACzB,gBAAgB,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CACrC,CAAC;;;;;;;;;;;AAiNF,wBAQG"}
@@ -1,8 +1,8 @@
1
- import { defineComponent as y, mergeModels as S, useModel as u, createBlock as I, openBlock as h, unref as o, createSlots as k, withCtx as s, createVNode as a, withModifiers as C, createTextVNode as r, normalizeClass as i, createElementVNode as p, toDisplayString as V } from "vue";
2
- import { randomInt as f } from "../../../lib/util/helpers/dist/random.js";
3
- import { PlSidebarItem as $, PlBtnGhost as M, PlEditableTitle as P, PlElementList as w, PlBtnSecondary as A } from "@milaboratories/uikit";
4
- import v from "./style.module.css.js";
5
- const T = /* @__PURE__ */ y({
1
+ import { defineComponent as S, mergeModels as k, useModel as u, createBlock as I, openBlock as V, unref as o, createSlots as C, withCtx as n, createVNode as i, withModifiers as p, createTextVNode as r, normalizeClass as s, createElementVNode as v, toDisplayString as h } from "vue";
2
+ import f from "./style.module.css.js";
3
+ import { randomInt as b } from "../../../lib/util/helpers/dist/random.js";
4
+ import { PlSidebarItem as P, PlBtnGhost as w, PlEditableTitle as A, PlElementList as M, PlTextField as $, PlBtnSecondary as x } from "@milaboratories/uikit";
5
+ const U = /* @__PURE__ */ S({
6
6
  __name: "AnnotationsSidebar",
7
7
  props: {
8
8
  annotation: { required: !0 },
@@ -10,41 +10,41 @@ const T = /* @__PURE__ */ y({
10
10
  selectedStepId: {},
11
11
  selectedStepIdModifiers: {}
12
12
  },
13
- emits: /* @__PURE__ */ S(["delete-schema"], ["update:annotation", "update:selectedStepId"]),
13
+ emits: /* @__PURE__ */ k(["delete-schema"], ["update:annotation", "update:selectedStepId"]),
14
14
  setup(m, { emit: c }) {
15
15
  const l = u(m, "annotation"), d = u(m, "selectedStepId"), g = c;
16
- function b() {
17
- const n = f();
16
+ function y() {
17
+ const a = b();
18
18
  l.value.steps.push({
19
- id: n,
19
+ id: a,
20
20
  label: "",
21
21
  filter: {
22
- id: f(),
22
+ id: b(),
23
23
  type: "and",
24
24
  filters: []
25
25
  }
26
- }), d.value = n;
26
+ }), d.value = a;
27
27
  }
28
- return (n, e) => (h(), I(o($), null, k({
29
- "header-content": s(() => [
30
- a(o(P), {
28
+ return (a, e) => (V(), I(o(P), null, C({
29
+ "header-content": n(() => [
30
+ i(o(A), {
31
31
  modelValue: l.value.title,
32
32
  "onUpdate:modelValue": e[0] || (e[0] = (t) => l.value.title = t),
33
- class: i({ [o(v).flashing]: l.value.title.length === 0 }),
33
+ class: s({ [o(f).flashing]: l.value.title.length === 0 }),
34
34
  "max-length": 40,
35
35
  "max-width": "600px",
36
36
  placeholder: "Annotation Title",
37
37
  autofocus: l.value.title.length === 0
38
38
  }, null, 8, ["modelValue", "class", "autofocus"])
39
39
  ]),
40
- "footer-content": s(() => [
41
- a(o(M), {
40
+ "footer-content": n(() => [
41
+ i(o(w), {
42
42
  icon: "delete-bin",
43
43
  reverse: "",
44
44
  disabled: l.value.steps.length === 0,
45
- onClick: e[3] || (e[3] = C((t) => g("delete-schema"), ["stop"]))
45
+ onClick: e[5] || (e[5] = p((t) => g("delete-schema"), ["stop"]))
46
46
  }, {
47
- default: s(() => [...e[5] || (e[5] = [
47
+ default: n(() => [...e[7] || (e[7] = [
48
48
  r(" Delete Schema ", -1)
49
49
  ])]),
50
50
  _: 1
@@ -54,32 +54,41 @@ const T = /* @__PURE__ */ y({
54
54
  }, [
55
55
  l.value ? {
56
56
  name: "body-content",
57
- fn: s(() => [
58
- p("div", {
59
- class: i([n.$style.root, { [o(v).disabled]: l.value.title.length === 0 }])
57
+ fn: n(() => [
58
+ v("div", {
59
+ class: s([a.$style.root, { [o(f).disabled]: l.value.title.length === 0 }])
60
60
  }, [
61
- p("span", {
62
- class: i(n.$style.tip)
63
- }, "Lower annotations override the ones above. Rearrange them by dragging.", 2),
64
- a(o(w), {
61
+ v("span", {
62
+ class: s(a.$style.tip)
63
+ }, "Above annotations override the ones below. Rearrange them by dragging.", 2),
64
+ i(o(M), {
65
65
  items: l.value.steps,
66
66
  "onUpdate:items": e[1] || (e[1] = (t) => l.value.steps = t),
67
67
  "get-item-key": (t) => t.id,
68
68
  "is-active": (t) => t.id === d.value,
69
- "item-class": n.$style.stepItem,
70
- class: i(n.$style.steps),
69
+ "item-class": a.$style.stepItem,
70
+ class: s(a.$style.steps),
71
71
  onItemClick: e[2] || (e[2] = (t) => d.value = t.id)
72
72
  }, {
73
- "item-title": s(({ item: t }) => [
74
- r(V(t.label), 1)
73
+ "item-title": n(({ item: t }) => [
74
+ r(h(t.label), 1)
75
75
  ]),
76
76
  _: 1
77
77
  }, 8, ["items", "get-item-key", "is-active", "item-class", "class"]),
78
- a(o(A), {
78
+ i(o($), {
79
+ "model-value": l.value.defaultValue ?? "",
80
+ label: "Label remaining with",
81
+ placeholder: "No label",
82
+ clearable: "",
83
+ onClick: e[3] || (e[3] = p(() => {
84
+ }, ["stop"])),
85
+ "onUpdate:modelValue": e[4] || (e[4] = (t) => l.value.defaultValue = t === "" ? void 0 : t)
86
+ }, null, 8, ["model-value"]),
87
+ i(o(x), {
79
88
  icon: "add",
80
- onClick: b
89
+ onClick: y
81
90
  }, {
82
- default: s(() => [...e[4] || (e[4] = [
91
+ default: n(() => [...e[6] || (e[6] = [
83
92
  r(" Add label ", -1)
84
93
  ])]),
85
94
  _: 1
@@ -92,6 +101,6 @@ const T = /* @__PURE__ */ y({
92
101
  }
93
102
  });
94
103
  export {
95
- T as default
104
+ U as default
96
105
  };
97
106
  //# sourceMappingURL=AnnotationsSidebar.vue2.js.map
@@ -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';\nimport $commonStyle from './style.module.css';\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: '',\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 :class=\"{ [$commonStyle.flashing]: annotation.title.length === 0 }\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Title\"\n :autofocus=\"annotation.title.length === 0\"\n />\n </template>\n <template v-if=\"annotation\" #body-content>\n <div :class=\"[$style.root, { [$commonStyle.disabled]: annotation.title.length === 0 }]\">\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 <PlBtnSecondary icon=\"add\" @click=\"handleAddStep\">\n Add label\n </PlBtnSecondary>\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 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","_createBlock","_unref","PlSidebarItem","_createSlots","_createVNode","PlEditableTitle","_cache","$event","_normalizeClass","PlBtnGhost","_createElementVNode","$style","$commonStyle","PlElementList","item","_withCtx","_createTextVNode","_toDisplayString","PlBtnSecondary"],"mappings":";;;;;;;;;;;;;;AAaA,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;AAAA,QACP,QAAQ;AAAA,UACN,IAAIC,EAAA;AAAA,UACJ,MAAM;AAAA,UACN,SAAS,CAAA;AAAA,QAAC;AAAA,MACZ,CACD,GACDN,EAAe,QAAQK;AAAA,IACzB;2BAIEE,EA0CgBC,EAAAC,CAAA,GAAA,MAAAC,EAAA;AAAA,MAzCH,oBACT,MAOE;AAAA,QAPFC,EAOEH,EAAAI,CAAA,GAAA;AAAA,UANS,YAAAd,EAAA,MAAW;AAAA,UAAX,uBAAAe,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAhB,EAAA,MAAW,QAAKgB;AAAA,UACxB,OAAKC,EAAA,EAAA,CAAKP,KAAa,QAAQ,GAAGV,EAAA,MAAW,MAAM,WAAM,GAAA;AAAA,UACzD,cAAY;AAAA,UACb,aAAU;AAAA,UACV,aAAY;AAAA,UACX,WAAWA,EAAA,MAAW,MAAM,WAAM;AAAA,QAAA;;MAwB5B,oBACT,MAOa;AAAA,QAPba,EAOaH,EAAAQ,CAAA,GAAA;AAAA,UANX,MAAK;AAAA,UACL,SAAA;AAAA,UACC,UAAUlB,EAAA,MAAW,MAAM,WAAM;AAAA,UACjC,kCAAYI,EAAK,eAAA,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;qBACnB,MAED,CAAA,GAAAW,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,cAFC,mBAED,EAAA;AAAA,UAAA;;;;;;MA7Bcf,EAAA;cAAa;AAAA,cAC3B,MAkBM;AAAA,UAlBNmB,EAkBM,OAAA;AAAA,YAlBA,OAAKF,EAAA,CAAGG,EAAAA,OAAO,MAAI,EAAA,CAAKV,EAAAW,CAAA,EAAa,QAAQ,GAAGrB,EAAA,MAAW,MAAM,WAAM,GAAA,CAAA;AAAA,UAAA;YAC3EmB,EAAuG,QAAA;AAAA,cAAhG,OAAKF,EAAEG,EAAAA,OAAO,GAAG;AAAA,YAAA,GAAE,0EAAsE,CAAA;AAAA,YAEhGP,EAWgBH,EAAAY,CAAA,GAAA;AAAA,cAVN,OAAOtB,EAAA,MAAW;AAAA,cAAX,kBAAAe,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAhB,EAAA,MAAW,QAAKgB;AAAA,cAC9B,gBAAY,CAAGO,MAASA,EAAK;AAAA,cAC7B,cAAYA,MAASA,EAAK,OAAOrB,EAAA;AAAA,cACjC,cAAYkB,EAAAA,OAAO;AAAA,cACnB,OAAKH,EAAEG,EAAAA,OAAO,KAAK;AAAA,cACnB,8BAAaG,MAASrB,UAAiBqB,EAAK;AAAA,YAAA;cAElC,cAAUC,EACnB,CAAgB,EADO,MAAAD,QAAI;AAAA,gBACxBE,EAAAC,EAAAH,EAAK,KAAK,GAAA,CAAA;AAAA,cAAA;;;YAGjBV,EAEiBH,EAAAiB,CAAA,GAAA;AAAA,cAFD,MAAK;AAAA,cAAO,SAAOrB;AAAA,YAAA;yBAAe,MAElD,CAAA,GAAAS,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,kBAFkD,eAElD,EAAA;AAAA,cAAA;;;;;;;;;;"}
1
+ {"version":3,"file":"AnnotationsSidebar.vue2.js","sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport $commonStyle from './style.module.css';\n\nimport { randomInt } from '@milaboratories/helpers';\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n PlTextField,\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: '',\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 :class=\"{ [$commonStyle.flashing]: annotation.title.length === 0 }\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Title\"\n :autofocus=\"annotation.title.length === 0\"\n />\n </template>\n <template v-if=\"annotation\" #body-content>\n <div :class=\"[$style.root, { [$commonStyle.disabled]: annotation.title.length === 0 }]\">\n <span :class=\"$style.tip\">Above annotations override the ones below. 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\n <PlTextField\n :model-value=\"annotation.defaultValue ?? ''\"\n label=\"Label remaining with\"\n placeholder=\"No label\"\n clearable\n @click.stop\n @update:model-value=\"annotation.defaultValue = $event === '' ? undefined : $event\"\n />\n\n <PlBtnSecondary icon=\"add\" @click=\"handleAddStep\">\n Add label\n </PlBtnSecondary>\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 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","_createBlock","_unref","PlSidebarItem","_createSlots","_createVNode","PlEditableTitle","_cache","$event","_normalizeClass","PlBtnGhost","_createElementVNode","$style","$commonStyle","PlElementList","item","_withCtx","_createTextVNode","_toDisplayString","PlTextField","PlBtnSecondary"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { defineComponent as V, mergeModels as q, useModel as E, computed as k, c
2
2
  import { randomInt as i } from "../../../lib/util/helpers/dist/random.js";
3
3
  import { PlSidebarItem as T, PlBtnSecondary as g, PlEditableTitle as A } from "@milaboratories/uikit";
4
4
  import P from "../../PlAdvancedFilter/PlAdvancedFilter.vue.js";
5
- import v from "./style.module.css.js";
5
+ import b from "./style.module.css.js";
6
6
  const M = /* @__PURE__ */ V({
7
7
  __name: "FilterSidebar",
8
8
  props: /* @__PURE__ */ q({
@@ -16,7 +16,7 @@ const M = /* @__PURE__ */ V({
16
16
  }),
17
17
  emits: ["update:step"],
18
18
  setup(m) {
19
- const e = E(m, "step"), l = m, b = k(() => l.hasSelectedColumns !== void 0 && l.getValuesForSelectedColumns !== void 0), S = () => {
19
+ const e = E(m, "step"), l = m, v = k(() => l.hasSelectedColumns !== void 0 && l.getValuesForSelectedColumns !== void 0), S = () => {
20
20
  e.value.filter.filters.push({
21
21
  id: i(),
22
22
  isExpanded: !0,
@@ -70,10 +70,10 @@ const M = /* @__PURE__ */ V({
70
70
  key: e.value.id,
71
71
  modelValue: e.value.label,
72
72
  "onUpdate:modelValue": t[0] || (t[0] = (o) => e.value.label = o),
73
- class: d({ [s(v).flashing]: e.value.label.length === 0 }),
73
+ class: d({ [s(b).flashing]: e.value.label.length === 0 }),
74
74
  "max-length": 40,
75
75
  "max-width": "600px",
76
- placeholder: "Filter Name",
76
+ placeholder: "Label",
77
77
  autofocus: e.value.label.length === 0
78
78
  }, null, 8, ["modelValue", "class", "autofocus"]))
79
79
  ]),
@@ -81,7 +81,7 @@ const M = /* @__PURE__ */ V({
81
81
  c(s(P), {
82
82
  filters: e.value.filter,
83
83
  "onUpdate:filters": t[1] || (t[1] = (o) => e.value.filter = o),
84
- class: d([n.$style.root, { [s(v).disabled]: e.value.label.length === 0 }]),
84
+ class: d([n.$style.root, { [s(b).disabled]: e.value.label.length === 0 }]),
85
85
  items: l.columns,
86
86
  "supported-filters": y,
87
87
  "get-suggest-options": l.getSuggestOptions,
@@ -101,7 +101,7 @@ const M = /* @__PURE__ */ V({
101
101
  ])]),
102
102
  _: 1
103
103
  }),
104
- b.value ? (u(), r(s(g), {
104
+ v.value ? (u(), r(s(g), {
105
105
  key: 0,
106
106
  icon: "add",
107
107
  disabled: !l.hasSelectedColumns,
@@ -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: PlAdvancedFilterItem[];\n\n getSuggestOptions: (params: { columnId: PlAdvancedFilterColumnId; axisIdx?: number; searchStr: string; searchType: 'value' | 'label' }) =>\n ListOptionBase<string | number>[] | Promise<ListOptionBase<string | number>[]>;\n\n hasSelectedColumns?: boolean;\n getValuesForSelectedColumns?: () => Promise<undefined | { columnId: PObjectId; values: string[] }>;\n};\n</script>\n<script setup lang=\"ts\">\nimport { randomInt } from '@milaboratories/helpers';\nimport {\n PlBtnSecondary,\n PlEditableTitle,\n PlSidebarItem,\n} from '@milaboratories/uikit';\nimport type { ListOptionBase, PObjectId, SUniversalPColumnId } from '@platforma-sdk/model';\nimport { computed } from 'vue';\nimport type { PlAdvancedFilterFilter, PlAdvancedFilterSupportedFilters } from '../../PlAdvancedFilter';\nimport { PlAdvancedFilter, type PlAdvancedFilterItem } from '../../PlAdvancedFilter';\nimport type { PlAdvancedFilterColumnId } from '../../PlAdvancedFilter/types';\nimport type { Filter } from '../types';\n\nimport $commonStyle from './style.module.css';\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: 'or',\n filters: [\n {\n id: randomInt(),\n type: 'isNA',\n column: props.columns[0].id as SUniversalPColumnId,\n },\n ],\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\nconst supportedFilters = [\n 'isNA',\n 'isNotNA',\n 'greaterThan',\n 'greaterThanOrEqual',\n 'lessThan',\n 'lessThanOrEqual',\n 'patternEquals',\n 'patternNotEquals',\n 'patternContainSubsequence',\n 'patternNotContainSubsequence',\n 'equal',\n 'notEqual',\n 'topN',\n 'bottomN',\n] as typeof PlAdvancedFilterSupportedFilters[number][];\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 :class=\"{ [$commonStyle.flashing]: step.label.length === 0 }\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Filter Name\"\n :autofocus=\"step.label.length === 0\"\n />\n </template>\n <template #body-content>\n <PlAdvancedFilter\n v-model:filters=\"(step.filter as PlAdvancedFilterFilter)\"\n :class=\"[$style.root, { [$commonStyle.disabled]: step.label.length === 0 }]\"\n :items=\"props.columns\"\n :supported-filters=\"supportedFilters\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :enable-dnd=\"false\"\n :enable-add-group-button=\"true\"\n >\n <template #add-group-buttons>\n <div :class=\"$style.actions\">\n <PlBtnSecondary icon=\"add\" @click=\"addFilterPlaceholder\">\n Add Filter\n </PlBtnSecondary>\n <PlBtnSecondary v-if=\"withSelection\" icon=\"add\" :disabled=\"!props.hasSelectedColumns\" @click=\"addFilterFromSelected\">\n From selection\n </PlBtnSecondary>\n </div>\n </template>\n </PlAdvancedFilter>\n </template>\n </PlSidebarItem>\n</template>\n\n<style module>\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","supportedFilters","_createBlock","_unref","PlSidebarItem","PlEditableTitle","_cache","$event","_normalizeClass","_createVNode","PlAdvancedFilter","$style","$commonStyle","_createElementVNode","PlBtnSecondary"],"mappings":"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"}
1
+ {"version":3,"file":"FilterSidebar.vue2.js","sources":["../../../../src/components/PlAnnotations/components/FilterSidebar.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type Props = {\n columns: PlAdvancedFilterItem[];\n\n getSuggestOptions: (params: { columnId: PlAdvancedFilterColumnId; axisIdx?: number; searchStr: string; searchType: 'value' | 'label' }) =>\n ListOptionBase<string | number>[] | Promise<ListOptionBase<string | number>[]>;\n\n hasSelectedColumns?: boolean;\n getValuesForSelectedColumns?: () => Promise<undefined | { columnId: PObjectId; values: string[] }>;\n};\n</script>\n<script setup lang=\"ts\">\nimport { randomInt } from '@milaboratories/helpers';\nimport {\n PlBtnSecondary,\n PlEditableTitle,\n PlSidebarItem,\n} from '@milaboratories/uikit';\nimport type { ListOptionBase, PObjectId, SUniversalPColumnId } from '@platforma-sdk/model';\nimport { computed } from 'vue';\nimport type { PlAdvancedFilterFilter, PlAdvancedFilterSupportedFilters } from '../../PlAdvancedFilter';\nimport { PlAdvancedFilter, type PlAdvancedFilterItem } from '../../PlAdvancedFilter';\nimport type { PlAdvancedFilterColumnId } from '../../PlAdvancedFilter/types';\nimport type { Filter } from '../types';\n\nimport $commonStyle from './style.module.css';\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: 'or',\n filters: [\n {\n id: randomInt(),\n type: 'isNA',\n column: props.columns[0].id as SUniversalPColumnId,\n },\n ],\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\nconst supportedFilters = [\n 'isNA',\n 'isNotNA',\n 'greaterThan',\n 'greaterThanOrEqual',\n 'lessThan',\n 'lessThanOrEqual',\n 'patternEquals',\n 'patternNotEquals',\n 'patternContainSubsequence',\n 'patternNotContainSubsequence',\n 'equal',\n 'notEqual',\n 'topN',\n 'bottomN',\n] as typeof PlAdvancedFilterSupportedFilters[number][];\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 :class=\"{ [$commonStyle.flashing]: step.label.length === 0 }\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Label\"\n :autofocus=\"step.label.length === 0\"\n />\n </template>\n <template #body-content>\n <PlAdvancedFilter\n v-model:filters=\"(step.filter as PlAdvancedFilterFilter)\"\n :class=\"[$style.root, { [$commonStyle.disabled]: step.label.length === 0 }]\"\n :items=\"props.columns\"\n :supported-filters=\"supportedFilters\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :enable-dnd=\"false\"\n :enable-add-group-button=\"true\"\n >\n <template #add-group-buttons>\n <div :class=\"$style.actions\">\n <PlBtnSecondary icon=\"add\" @click=\"addFilterPlaceholder\">\n Add Filter\n </PlBtnSecondary>\n <PlBtnSecondary v-if=\"withSelection\" icon=\"add\" :disabled=\"!props.hasSelectedColumns\" @click=\"addFilterFromSelected\">\n From selection\n </PlBtnSecondary>\n </div>\n </template>\n </PlAdvancedFilter>\n </template>\n </PlSidebarItem>\n</template>\n\n<style module>\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","supportedFilters","_createBlock","_unref","PlSidebarItem","PlEditableTitle","_cache","$event","_normalizeClass","_createVNode","PlAdvancedFilter","$style","$commonStyle","_createElementVNode","PlBtnSecondary"],"mappings":"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"}
@@ -10,5 +10,7 @@ export type Filter = FilterSpecUi<Extract<FilterSpec, {
10
10
  }>> & {
11
11
  id: number;
12
12
  };
13
- export type Annotation = AnnotationSpecUi<Filter>;
13
+ export type Annotation = AnnotationSpecUi<Filter> & {
14
+ defaultValue?: string;
15
+ };
14
16
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/PlAnnotations/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACtH,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,cAAc,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAE1G,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/PlAnnotations/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACtH,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,cAAc,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAE1G,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/ui-vue",
3
- "version": "1.48.4",
3
+ "version": "1.48.6",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "styles": "dist/index.js",
@@ -27,8 +27,8 @@
27
27
  "@zip.js/zip.js": "^2.8.2",
28
28
  "es-toolkit": "^1.39.10",
29
29
  "@milaboratories/ptabler-expression-js": "1.1.7",
30
- "@milaboratories/uikit": "2.8.2",
31
30
  "@milaboratories/biowasm-tools": "2.0.0",
31
+ "@milaboratories/uikit": "2.8.2",
32
32
  "@platforma-sdk/model": "1.48.4"
33
33
  },
34
34
  "devDependencies": {
@@ -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.2.0",
48
- "@milaboratories/helpers": "1.12.0",
49
48
  "@milaboratories/eslint-config": "1.0.5",
50
- "@milaboratories/ts-builder": "1.2.0",
51
- "@milaboratories/build-configs": "1.2.0"
49
+ "@milaboratories/helpers": "1.12.0",
50
+ "@milaboratories/build-configs": "1.2.1",
51
+ "@milaboratories/ts-builder": "1.2.1"
52
52
  },
53
53
  "scripts": {
54
54
  "test": "vitest run --passWithNoTests",
@@ -187,7 +187,13 @@ function updateFilter(filters: CommonFilter[], idx: number, updatedFilter: Edita
187
187
  @drop="(event) => handleDropToExistingGroup(index, event)"
188
188
  @dragover="dragOver"
189
189
  >
190
- <PlCheckbox :model-value="item.type === 'not'" :class="$style.notCheckbox" @update:model-value="inverseRootNode(index)">NOT</PlCheckbox>
190
+ <PlCheckbox
191
+ :model-value="item.type === 'not'"
192
+ :class="$style.notCheckbox"
193
+ @update:model-value="inverseRootNode(index)"
194
+ >
195
+ Filter Out
196
+ </PlCheckbox>
191
197
  <template v-for="(_, filterIdx) in getNotContent(item).filters" :key="filterIdx">
192
198
  <FilterEditor
193
199
  :filter="validateFilter(getNotContent(item).filters[filterIdx])"
@@ -1,4 +1,6 @@
1
1
  <script setup lang="ts">
2
+ import $commonStyle from './style.module.css';
3
+
2
4
  import { randomInt } from '@milaboratories/helpers';
3
5
  import {
4
6
  PlBtnGhost,
@@ -6,9 +8,9 @@ import {
6
8
  PlEditableTitle,
7
9
  PlElementList,
8
10
  PlSidebarItem,
11
+ PlTextField,
9
12
  } from '@milaboratories/uikit';
10
13
  import type { Annotation } from '../types';
11
- import $commonStyle from './style.module.css';
12
14
 
13
15
  // Models
14
16
  const annotation = defineModel<Annotation>('annotation', { required: true });
@@ -47,7 +49,7 @@ function handleAddStep() {
47
49
  </template>
48
50
  <template v-if="annotation" #body-content>
49
51
  <div :class="[$style.root, { [$commonStyle.disabled]: annotation.title.length === 0 }]">
50
- <span :class="$style.tip">Lower annotations override the ones above. Rearrange them by dragging.</span>
52
+ <span :class="$style.tip">Above annotations override the ones below. Rearrange them by dragging.</span>
51
53
 
52
54
  <PlElementList
53
55
  v-model:items="annotation.steps"
@@ -61,6 +63,16 @@ function handleAddStep() {
61
63
  {{ item.label }}
62
64
  </template>
63
65
  </PlElementList>
66
+
67
+ <PlTextField
68
+ :model-value="annotation.defaultValue ?? ''"
69
+ label="Label remaining with"
70
+ placeholder="No label"
71
+ clearable
72
+ @click.stop
73
+ @update:model-value="annotation.defaultValue = $event === '' ? undefined : $event"
74
+ />
75
+
64
76
  <PlBtnSecondary icon="add" @click="handleAddStep">
65
77
  Add label
66
78
  </PlBtnSecondary>
@@ -99,7 +99,7 @@ const supportedFilters = [
99
99
  :class="{ [$commonStyle.flashing]: step.label.length === 0 }"
100
100
  :max-length="40"
101
101
  max-width="600px"
102
- placeholder="Filter Name"
102
+ placeholder="Label"
103
103
  :autofocus="step.label.length === 0"
104
104
  />
105
105
  </template>
@@ -5,4 +5,4 @@ export type FilterSpec = _FilterSpec<FilterSpecLeaf, { id: number; name?: string
5
5
 
6
6
  export type Filter = FilterSpecUi<Extract<FilterSpec, { type: 'and' | 'or' }>> & { id: number };
7
7
 
8
- export type Annotation = AnnotationSpecUi<Filter>;
8
+ export type Annotation = AnnotationSpecUi<Filter> & { defaultValue?: string };
@@ -1,151 +0,0 @@
1
- <script setup lang="ts" generic="T extends FilterSpecLeaf = FilterSpecLeaf">
2
- import { computed, watch } from 'vue';
3
-
4
- import { isNil } from '@milaboratories/helpers';
5
- import type { FilterSpecTypeFieldRecord } from '@milaboratories/uikit';
6
- import { getFilterUiMetadata, getFilterUiTypeOptions, PlCheckbox, PlDropdown, PlNumberField, PlTextField } from '@milaboratories/uikit';
7
- import type { FilterSpecLeaf, SimplifiedUniversalPColumnEntry, SUniversalPColumnId } from '@platforma-sdk/model';
8
-
9
- import type { FilterSpecType } from '../types';
10
-
11
- type ObjectEntries<T, K extends keyof T = keyof T> = [K, T[K]][];
12
-
13
- const formData = defineModel<T>({ default: () => ({}) });
14
-
15
- const props = defineProps<{
16
- columns: SimplifiedUniversalPColumnEntry[];
17
- formMetadata: FilterSpecTypeFieldRecord<T>;
18
- }>();
19
-
20
- const columnSpecRef = computed(() => {
21
- const value = formData.value;
22
- if ('column' in value) {
23
- return props.columns.find((c) => c.id === value.column)?.obj;
24
- }
25
- return undefined;
26
- });
27
-
28
- const typeMetadataRef = computed(() => {
29
- const value = formData.value;
30
- if (value.type && typeof value.type === 'string') {
31
- return getFilterUiMetadata(value.type);
32
- }
33
- return undefined;
34
- });
35
-
36
- const filterUiTypeOptions = computed(() => {
37
- return getFilterUiTypeOptions(columnSpecRef.value);
38
- });
39
-
40
- const firstColumnsOptions = computed(() => props.columns.map((c) => ({ label: c.label, value: c.id })));
41
- const secondColumnOptions = computed(() => {
42
- const typeMetadata = typeMetadataRef.value;
43
- const columnSpec = columnSpecRef.value;
44
- if (typeMetadata && columnSpec) {
45
- return props.columns.filter((c) => typeMetadata.supportedFor(columnSpec, c.obj)).map((c) => ({
46
- label: c.label,
47
- value: c.id,
48
- }));
49
- }
50
- return [];
51
- });
52
-
53
- const setFieldValue = <K extends keyof T>(fieldName: K, value: T[K]) => {
54
- formData.value[fieldName] = value;
55
- };
56
-
57
- watch(() => props.formMetadata, (newForm) => {
58
- for (const [fieldName, field] of Object.entries(newForm) as ObjectEntries<typeof newForm>) {
59
- if (formData.value[fieldName] === undefined) {
60
- const value = field.defaultValue();
61
- if (!isNil(value)) {
62
- formData.value[fieldName] = value;
63
- }
64
- }
65
- }
66
- },
67
- { immediate: true, deep: true },
68
- );
69
-
70
- function isFilterType(type: string | undefined): boolean {
71
- return type === 'FilterType'
72
- // @deprecated version
73
- || type === 'FilterUiType';
74
- }
75
-
76
- </script>
77
-
78
- <template>
79
- <div v-if="formMetadata" :class="$style.form">
80
- <template v-for="(field, fieldName) in formMetadata" :key="fieldName">
81
- <template v-if="field.fieldType === 'form'">
82
- <!-- TODO: Nested Form not described in FilterUi, we need to define it later. Even more in type it don't possible situations -->
83
- <DynamicForm
84
- v-if="'form' in field"
85
- :model-value="formData[fieldName] as any"
86
- :form-metadata="field.form as any"
87
- :columns="props.columns"
88
- @update:model-value="setFieldValue(fieldName, $event as T[keyof T])"
89
- />
90
- </template>
91
- <template v-else-if="isFilterType(field.fieldType)">
92
- <PlDropdown
93
- :model-value="formData[fieldName] as FilterSpecType"
94
- :label="field.label ?? fieldName"
95
- :options="filterUiTypeOptions"
96
- @update:model-value="setFieldValue(fieldName, $event as T[keyof T])"
97
- />
98
- </template>
99
- <template v-else-if="field.fieldType === 'string'">
100
- <PlTextField
101
- :model-value="formData[fieldName] as string"
102
- :label="field.label ?? fieldName"
103
- @update:model-value="setFieldValue(fieldName, $event as T[keyof T])"
104
- />
105
- </template>
106
- <template v-else-if="field.fieldType === 'SUniversalPColumnId'">
107
- <PlDropdown
108
- :model-value="formData[fieldName] as SUniversalPColumnId"
109
- :label="field.label ?? fieldName"
110
- :options="fieldName === 'column' ? firstColumnsOptions : secondColumnOptions"
111
- @update:model-value="setFieldValue(fieldName, $event as T[keyof T])"
112
- />
113
- </template>
114
- <template v-else-if="field.fieldType === 'number'">
115
- <PlNumberField
116
- :model-value="formData[fieldName] as number"
117
- :label="field.label ?? fieldName"
118
- @update:model-value="setFieldValue(fieldName, $event as T[keyof T])"
119
- />
120
- </template>
121
- <template v-else-if="field.fieldType === 'number?'">
122
- <PlNumberField
123
- :model-value="formData[fieldName] as (undefined | number)"
124
- :label="field.label ?? fieldName"
125
- :clearable="true"
126
- @update:model-value="setFieldValue(fieldName, $event as T[keyof T])"
127
- />
128
- </template>
129
- <template v-else-if="field.fieldType === 'boolean' || field.fieldType === 'boolean?'">
130
- <PlCheckbox
131
- :model-value="Boolean(formData[fieldName])"
132
- :label="field.label ?? fieldName"
133
- @update:model-value="setFieldValue(fieldName, $event as T[keyof T])"
134
- >
135
- {{ field.label ?? fieldName }}
136
- </PlCheckbox>
137
- </template>
138
- <template v-else>
139
- <pre>TODO:{{ field.fieldType }}</pre>
140
- </template>
141
- </template>
142
- </div>
143
- </template>
144
-
145
- <style module>
146
- .form {
147
- display: flex;
148
- flex-direction: column;
149
- gap: 12px;
150
- }
151
- </style>