@platforma-sdk/ui-vue 1.63.5 → 1.63.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/.turbo/turbo-build.log +157 -159
  2. package/.turbo/turbo-formatter$colon$check.log +2 -2
  3. package/.turbo/turbo-linter$colon$check.log +2 -2
  4. package/.turbo/turbo-types$colon$check.log +1 -1
  5. package/CHANGELOG.md +20 -0
  6. package/dist/AgGridVue/AgGridTheme.js +3 -1
  7. package/dist/AgGridVue/AgGridTheme.js.map +1 -1
  8. package/dist/AgGridVue/ag-override.js +2 -0
  9. package/dist/AgGridVue/ag-override.js.map +1 -1
  10. package/dist/AgGridVue/createAgGridColDef.js +2 -35
  11. package/dist/AgGridVue/createAgGridColDef.js.map +1 -1
  12. package/dist/AgGridVue/selection.js +2 -23
  13. package/dist/AgGridVue/selection.js.map +1 -1
  14. package/dist/AgGridVue/useAgGridOptions.js +2 -83
  15. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  16. package/dist/_virtual/_plugin-vue_export-helper.js +2 -0
  17. package/dist/_virtual/_rolldown/runtime.js +2 -0
  18. package/dist/components/BlockLayout.js +1 -0
  19. package/dist/components/BlockLayout.style.js +1 -0
  20. package/dist/components/BlockLayout.vue2.js +2 -0
  21. package/dist/components/BlockLayout.vue2.js.map +1 -1
  22. package/dist/components/BlockLoader.js +2 -0
  23. package/dist/components/BlockLoader.vue2.js +2 -0
  24. package/dist/components/BlockLoader.vue2.js.map +1 -1
  25. package/dist/components/LoaderPage.js +2 -0
  26. package/dist/components/LoaderPage.js.map +1 -1
  27. package/dist/components/NotFound.js +2 -0
  28. package/dist/components/NotFound.vue2.js +2 -0
  29. package/dist/components/NotFound.vue2.js.map +1 -1
  30. package/dist/components/PlAdvancedFilter/FilterEditor.js +1 -0
  31. package/dist/components/PlAdvancedFilter/FilterEditor.style.js +1 -0
  32. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +2 -0
  33. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -1
  34. package/dist/components/PlAdvancedFilter/OperandButton.js +1 -0
  35. package/dist/components/PlAdvancedFilter/OperandButton.style.js +1 -0
  36. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js +2 -0
  37. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -1
  38. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.js +1 -0
  39. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js +1 -0
  40. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +2 -0
  41. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
  42. package/dist/components/PlAdvancedFilter/constants.js +4 -4
  43. package/dist/components/PlAdvancedFilter/constants.js.map +1 -1
  44. package/dist/components/PlAdvancedFilter/index.js +3 -1
  45. package/dist/components/PlAdvancedFilter/index.js.map +1 -1
  46. package/dist/components/PlAdvancedFilter/utils.js +2 -0
  47. package/dist/components/PlAdvancedFilter/utils.js.map +1 -1
  48. package/dist/components/PlAgCellFile/PlAgCellFile.js +2 -0
  49. package/dist/components/PlAgCellFile/PlAgCellFile.vue2.js +2 -4
  50. package/dist/components/PlAgCellFile/PlAgCellFile.vue2.js.map +1 -1
  51. package/dist/components/PlAgCellProgress/PlAgCellProgress.js +2 -0
  52. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js +2 -0
  53. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js.map +1 -1
  54. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.js +2 -0
  55. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue2.js +2 -0
  56. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue2.js.map +1 -1
  57. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.js +2 -0
  58. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue2.js +2 -0
  59. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue2.js.map +1 -1
  60. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.js +2 -0
  61. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue2.js +2 -0
  62. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue2.js.map +1 -1
  63. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.js +2 -0
  64. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js +2 -0
  65. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js.map +1 -1
  66. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.js +2 -0
  67. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js +2 -0
  68. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js.map +1 -1
  69. package/dist/components/PlAgCsvExporter/export-csv.js +2 -0
  70. package/dist/components/PlAgCsvExporter/export-csv.js.map +1 -1
  71. package/dist/components/PlAgDataTable/PlAgDataTableSheets.js +1 -0
  72. package/dist/components/PlAgDataTable/PlAgDataTableSheets.style.js +1 -0
  73. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js +2 -0
  74. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js.map +1 -1
  75. package/dist/components/PlAgDataTable/PlAgDataTableV2.js +1 -0
  76. package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js +1 -0
  77. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +2 -0
  78. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  79. package/dist/components/PlAgDataTable/PlAgOverlayLoading.js +2 -0
  80. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js +2 -0
  81. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js.map +1 -1
  82. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.js +2 -0
  83. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue2.js +2 -0
  84. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue2.js.map +1 -1
  85. package/dist/components/PlAgDataTable/PlAgRowCount.js +2 -0
  86. package/dist/components/PlAgDataTable/PlAgRowCount.vue2.js +2 -0
  87. package/dist/components/PlAgDataTable/PlAgRowCount.vue2.js.map +1 -1
  88. package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js +2 -0
  89. package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js.map +1 -1
  90. package/dist/components/PlAgDataTable/compositions/useGrid.js +2 -0
  91. package/dist/components/PlAgDataTable/compositions/useGrid.js.map +1 -1
  92. package/dist/components/PlAgDataTable/index.js +2 -0
  93. package/dist/components/PlAgDataTable/index.js.map +1 -1
  94. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.module.js +1 -0
  95. package/dist/components/PlAgDataTable/sources/common.js +3 -1
  96. package/dist/components/PlAgDataTable/sources/common.js.map +1 -1
  97. package/dist/components/PlAgDataTable/sources/focus-row.js +2 -0
  98. package/dist/components/PlAgDataTable/sources/focus-row.js.map +1 -1
  99. package/dist/components/PlAgDataTable/sources/menu-items.js +2 -0
  100. package/dist/components/PlAgDataTable/sources/menu-items.js.map +1 -1
  101. package/dist/components/PlAgDataTable/sources/row-number.js +3 -2
  102. package/dist/components/PlAgDataTable/sources/row-number.js.map +1 -1
  103. package/dist/components/PlAgDataTable/sources/table-source-v2.js +2 -5
  104. package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
  105. package/dist/components/PlAgDataTable/sources/table-state-v2.js +2 -0
  106. package/dist/components/PlAgDataTable/sources/table-state-v2.js.map +1 -1
  107. package/dist/components/PlAgDataTable/sources/value-rendering.js +2 -0
  108. package/dist/components/PlAgDataTable/sources/value-rendering.js.map +1 -1
  109. package/dist/components/PlAgDataTable/types.js +2 -0
  110. package/dist/components/PlAgDataTable/types.js.map +1 -1
  111. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.js +1 -0
  112. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.style.js +1 -0
  113. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js +2 -0
  114. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js.map +1 -1
  115. package/dist/components/PlAgGridColumnManager/useFilteredItems.js +2 -0
  116. package/dist/components/PlAgGridColumnManager/useFilteredItems.js.map +1 -1
  117. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.js +2 -0
  118. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js +2 -0
  119. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js.map +1 -1
  120. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.js +1 -0
  121. package/dist/components/PlAgRowNumHeader.js +2 -0
  122. package/dist/components/PlAgRowNumHeader.vue2.js +2 -0
  123. package/dist/components/PlAgRowNumHeader.vue2.js.map +1 -1
  124. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.js +2 -0
  125. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js +2 -0
  126. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js.map +1 -1
  127. package/dist/components/PlAnnotations/components/AnnotationsSidebar.js +1 -0
  128. package/dist/components/PlAnnotations/components/AnnotationsSidebar.style.js +1 -0
  129. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +2 -0
  130. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
  131. package/dist/components/PlAnnotations/components/FilterSidebar.js +1 -0
  132. package/dist/components/PlAnnotations/components/FilterSidebar.style.js +1 -0
  133. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +2 -0
  134. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
  135. package/dist/components/PlAnnotations/components/PlAnnotations.js +1 -0
  136. package/dist/components/PlAnnotations/components/PlAnnotations.style.js +1 -0
  137. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js +2 -0
  138. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
  139. package/dist/components/PlAnnotations/components/PlAnnotationsModal.js +1 -0
  140. package/dist/components/PlAnnotations/components/PlAnnotationsModal.style.js +1 -0
  141. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js +2 -0
  142. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
  143. package/dist/components/PlAnnotations/components/style.module.js +1 -0
  144. package/dist/components/PlAnnotations/utils.js +2 -0
  145. package/dist/components/PlAnnotations/utils.js.map +1 -1
  146. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.js +2 -0
  147. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js +2 -0
  148. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js.map +1 -1
  149. package/dist/components/PlBtnExportArchive/Item.js +1 -0
  150. package/dist/components/PlBtnExportArchive/Item.style.js +1 -0
  151. package/dist/components/PlBtnExportArchive/Item.vue2.js +2 -0
  152. package/dist/components/PlBtnExportArchive/Item.vue2.js.map +1 -1
  153. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.js +1 -0
  154. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.style.js +1 -0
  155. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js +2 -0
  156. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js.map +1 -1
  157. package/dist/components/PlBtnExportArchive/Summary.js +1 -0
  158. package/dist/components/PlBtnExportArchive/Summary.style.js +1 -0
  159. package/dist/components/PlBtnExportArchive/Summary.vue2.js +2 -0
  160. package/dist/components/PlBtnExportArchive/Summary.vue2.js.map +1 -1
  161. package/dist/components/PlTableFastSearch/PlTableFastSearch.js +2 -0
  162. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue2.js +2 -0
  163. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue2.js.map +1 -1
  164. package/dist/components/PlTableFilters/PlTableFiltersV2.js +1 -0
  165. package/dist/components/PlTableFilters/PlTableFiltersV2.style.js +1 -0
  166. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +2 -0
  167. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
  168. package/dist/composition/AgGrid/index.js +2 -0
  169. package/dist/composition/AgGrid/index.js.map +1 -1
  170. package/dist/composition/fileContent.js +2 -38
  171. package/dist/composition/fileContent.js.map +1 -1
  172. package/dist/computedResult.js +2 -30
  173. package/dist/computedResult.js.map +1 -1
  174. package/dist/createModel.js +2 -0
  175. package/dist/createModel.js.map +1 -1
  176. package/dist/defineApp.js +3 -2
  177. package/dist/defineApp.js.map +1 -1
  178. package/dist/defineStore.js +2 -0
  179. package/dist/defineStore.js.map +1 -1
  180. package/dist/index.js +1 -0
  181. package/dist/internal/UpdateSerializer.js +2 -6
  182. package/dist/internal/UpdateSerializer.js.map +1 -1
  183. package/dist/internal/createAppModel.js +2 -0
  184. package/dist/internal/createAppModel.js.map +1 -1
  185. package/dist/internal/createAppV1.js +2 -14
  186. package/dist/internal/createAppV1.js.map +1 -1
  187. package/dist/internal/createAppV2.js +3 -17
  188. package/dist/internal/createAppV2.js.map +1 -1
  189. package/dist/internal/createAppV3.js +3 -17
  190. package/dist/internal/createAppV3.js.map +1 -1
  191. package/dist/internal/service_factories.js +2 -8
  192. package/dist/internal/service_factories.js.map +1 -1
  193. package/dist/lib/util/helpers/dist/functions.js +2 -3
  194. package/dist/lib/util/helpers/dist/functions.js.map +1 -1
  195. package/dist/lib/util/helpers/dist/hash.js +1 -1
  196. package/dist/lib/util/helpers/dist/hash.js.map +1 -1
  197. package/dist/lib/util/helpers/dist/index.js +0 -2
  198. package/dist/lib/util/helpers/dist/objects.js +2 -45
  199. package/dist/lib/util/helpers/dist/objects.js.map +1 -1
  200. package/dist/lib/util/helpers/dist/prettyBytes.js +2 -0
  201. package/dist/lib/util/helpers/dist/prettyBytes.js.map +1 -1
  202. package/dist/lib/util/helpers/dist/random.js +2 -0
  203. package/dist/lib/util/helpers/dist/random.js.map +1 -1
  204. package/dist/lib/util/helpers/dist/strings.js +2 -0
  205. package/dist/lib/util/helpers/dist/strings.js.map +1 -1
  206. package/dist/lib/util/helpers/dist/uniqId.js +2 -0
  207. package/dist/lib/util/helpers/dist/uniqId.js.map +1 -1
  208. package/dist/lib/util/helpers/dist/utils.js +2 -1
  209. package/dist/lib/util/helpers/dist/utils.js.map +1 -1
  210. package/dist/objectHash.js +2 -5
  211. package/dist/objectHash.js.map +1 -1
  212. package/dist/plugins/Monetization/EndOfPeriod.js +1 -0
  213. package/dist/plugins/Monetization/EndOfPeriod.style.js +1 -0
  214. package/dist/plugins/Monetization/EndOfPeriod.vue2.js +2 -0
  215. package/dist/plugins/Monetization/EndOfPeriod.vue2.js.map +1 -1
  216. package/dist/plugins/Monetization/LimitCard.js +1 -0
  217. package/dist/plugins/Monetization/LimitCard.style.js +1 -0
  218. package/dist/plugins/Monetization/LimitCard.vue2.js +2 -0
  219. package/dist/plugins/Monetization/LimitCard.vue2.js.map +1 -1
  220. package/dist/plugins/Monetization/MonetizationSidebar.js +2 -0
  221. package/dist/plugins/Monetization/MonetizationSidebar.vue2.js +2 -0
  222. package/dist/plugins/Monetization/MonetizationSidebar.vue2.js.map +1 -1
  223. package/dist/plugins/Monetization/RunStatus.js +1 -0
  224. package/dist/plugins/Monetization/RunStatus.style.js +1 -0
  225. package/dist/plugins/Monetization/RunStatus.vue2.js +2 -0
  226. package/dist/plugins/Monetization/RunStatus.vue2.js.map +1 -1
  227. package/dist/plugins/Monetization/UserCabinetCard.js +1 -0
  228. package/dist/plugins/Monetization/UserCabinetCard.style.js +1 -0
  229. package/dist/plugins/Monetization/UserCabinetCard.vue2.js +2 -0
  230. package/dist/plugins/Monetization/UserCabinetCard.vue2.js.map +1 -1
  231. package/dist/plugins/Monetization/useButtonTarget.js +2 -0
  232. package/dist/plugins/Monetization/useButtonTarget.js.map +1 -1
  233. package/dist/plugins/Monetization/useInfo.js +2 -0
  234. package/dist/plugins/Monetization/useInfo.js.map +1 -1
  235. package/dist/plugins/Monetization/validation.js +4 -4
  236. package/dist/plugins/Monetization/validation.js.map +1 -1
  237. package/dist/urls.js +3 -1
  238. package/dist/urls.js.map +1 -1
  239. package/dist/usePlugin.js +2 -24
  240. package/dist/usePlugin.js.map +1 -1
  241. package/dist/utils.js +3 -1
  242. package/dist/utils.js.map +1 -1
  243. package/package.json +13 -13
  244. package/dist/lib/util/helpers/dist/disposable.js +0 -9
  245. package/dist/lib/util/helpers/dist/disposable.js.map +0 -1
  246. package/dist/lib/util/helpers/dist/ref_count_pool.js +0 -4
  247. package/dist/lib/util/helpers/dist/ref_count_pool.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FilterEditor.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlAdvancedFilter/FilterEditor.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n PlAutocomplete,\n PlAutocompleteMulti,\n PlDropdown,\n PlIcon16,\n PlNumberField,\n PlTextField,\n PlToggleSwitch,\n Slider,\n} from \"@milaboratories/uikit\";\nimport type {\n AnchoredPColumnId,\n AxisFilterByIdx,\n AxisFilterValue,\n SUniversalPColumnId,\n} from \"@platforma-sdk/model\";\nimport {\n isFilteredPColumn,\n parseColumnId,\n stringifyColumnId,\n type ListOptionBase,\n} from \"@platforma-sdk/model\";\nimport { computed } from \"vue\";\nimport type { SUPPORTED_FILTER_TYPES } from \"./constants\";\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS } from \"./constants\";\nimport OperandButton from \"./OperandButton.vue\";\nimport type { EditableFilter, Operand, PlAdvancedFilterColumnId, SourceOptionInfo } from \"./types\";\nimport { getFilterInfo, getNormalizedSpec, isNumericFilter, isPositionFilter } from \"./utils\";\n\nconst filter = defineModel<EditableFilter>(\"filter\", { required: true });\n\nconst props = defineProps<{\n isLast: boolean;\n operand: Operand;\n enableDnd: boolean;\n columnOptions: SourceOptionInfo[];\n supportedFilters: typeof SUPPORTED_FILTER_TYPES;\n getSuggestOptions: (params: {\n columnId: PlAdvancedFilterColumnId;\n axisIdx?: number;\n searchType: \"value\" | \"label\";\n searchStr: string;\n }) => ListOptionBase<string | number>[] | Promise<ListOptionBase<string | number>[]>;\n onDelete: (columnId: PlAdvancedFilterColumnId) => void;\n onChangeOperand: (op: Operand) => void;\n}>();\n\nasync function getSuggestOptionsFn(\n id: PlAdvancedFilterColumnId,\n type: \"value\" | \"label\",\n str: string,\n axisIdx?: number,\n): Promise<ListOptionBase<string>[]> {\n return props.getSuggestOptions({\n columnId: id,\n axisIdx,\n searchType: type,\n searchStr: str,\n }) as Promise<ListOptionBase<string>[]>;\n}\n\nasync function getMultiSuggestOptionsFn(\n id: PlAdvancedFilterColumnId,\n type: \"value\" | \"label\",\n str: string | string[],\n axisIdx?: number,\n): Promise<ListOptionBase<string>[]> {\n if (type === \"label\" && typeof str === \"string\") {\n return getSuggestOptionsFn(id, type, str, axisIdx);\n }\n if (type === \"value\" && Array.isArray(str)) {\n const results = await Promise.all(str.map((s) => getSuggestOptionsFn(id, type, s, axisIdx)));\n return results.map((x) => x[0]);\n }\n throw new Error(\"Invalid arguments combination\");\n}\n\ntype Entries<T> = { [K in keyof T]: [K, T[K]] }[keyof T][];\nfunction changeFilterType() {\n const defaultFilter = DEFAULT_FILTERS[filter.value.type];\n\n filter.value = (Object.entries(defaultFilter) as Entries<EditableFilter>).reduce(\n (res, [key, val]) => {\n res[key] = filter.value[key] ?? val;\n return res;\n },\n {} as Record<keyof EditableFilter, EditableFilter[keyof EditableFilter]>,\n ) as EditableFilter;\n}\n\nfunction changeSourceId(newSourceId?: PlAdvancedFilterColumnId) {\n if (!newSourceId) {\n return;\n }\n const newSourceInfo = props.columnOptions.find((v) => v.id === getSourceId(newSourceId));\n if (!newSourceInfo) {\n return;\n }\n const filterInfo = getFilterInfo(filter.value.type);\n const newSourceSpec = getNormalizedSpec(newSourceInfo?.spec);\n if (filterInfo.supportedFor(newSourceSpec)) {\n // don't do anything except update source id\n filter.value.column = newSourceId;\n } else {\n // reset to default filter which fits to any column\n filter.value = {\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: newSourceId,\n };\n }\n}\n\nconst inconsistentSourceSelected = computed(() => {\n const selectedOption = props.columnOptions.find(\n (op) => op.id === getSourceId(filter.value.column),\n );\n return selectedOption === undefined;\n});\nconst sourceOptions = computed(() => {\n const options = props.columnOptions.map((v) => ({ value: v.id, label: v.label ?? v }));\n if (inconsistentSourceSelected.value) {\n options.unshift({ value: filter.value.column, label: \"Inconsistent value\" });\n }\n return options;\n});\n\nfunction getSourceId(column: PlAdvancedFilterColumnId): PlAdvancedFilterColumnId {\n try {\n const parsedColumnId = parseColumnId(column as SUniversalPColumnId);\n if (isFilteredPColumn(parsedColumnId)) {\n return stringifyColumnId(parsedColumnId.source);\n } else {\n return column;\n }\n } catch {\n return column;\n }\n}\n\n// similar to FilteredPColumnId but source is stringified and axis filters can be undefined\ntype ColumnAsSourceAndFixedAxes = {\n source: PlAdvancedFilterColumnId;\n axisFiltersByIndex: Record<number, AxisFilterValue | undefined>;\n};\nfunction getColumnAsSourceAndFixedAxes(\n column: PlAdvancedFilterColumnId,\n): ColumnAsSourceAndFixedAxes {\n const sourceId = getSourceId(column);\n const option = props.columnOptions.find((op) => op.id === sourceId);\n const axesToBeFixed = (option?.axesToBeFixed ?? []).reduce(\n (res, item) => {\n res[item.idx] = undefined;\n return res;\n },\n {} as Record<number, AxisFilterValue | undefined>,\n );\n try {\n const parsedColumnId = parseColumnId(column as SUniversalPColumnId);\n if (isFilteredPColumn(parsedColumnId)) {\n return {\n source: sourceId,\n axisFiltersByIndex: parsedColumnId.axisFilters.reduce((res, item) => {\n res[item[0]] = item[1];\n return res;\n }, axesToBeFixed),\n };\n }\n } catch {\n return { source: column, axisFiltersByIndex: axesToBeFixed };\n }\n return { source: column, axisFiltersByIndex: axesToBeFixed };\n}\n\nfunction stringifyColumn(value: ColumnAsSourceAndFixedAxes): PlAdvancedFilterColumnId {\n if (Object.keys(value.axisFiltersByIndex).length === 0) {\n return value.source;\n }\n return stringifyColumnId({\n source: parseColumnId(value.source as SUniversalPColumnId) as AnchoredPColumnId,\n axisFilters: Object.entries(value.axisFiltersByIndex).map(\n ([idx, value]) => [Number(idx), value] as AxisFilterByIdx,\n ),\n });\n}\n\nconst columnAsSourceAndFixedAxes = computed({\n get: () => {\n return getColumnAsSourceAndFixedAxes(filter.value.column);\n },\n set: (value) => {\n filter.value.column = stringifyColumn(value);\n },\n});\nfunction updateAxisFilterValue(idx: number, value: AxisFilterValue | undefined) {\n columnAsSourceAndFixedAxes.value = {\n ...columnAsSourceAndFixedAxes.value,\n axisFiltersByIndex: { ...columnAsSourceAndFixedAxes.value.axisFiltersByIndex, [idx]: value },\n };\n}\n\nconst currentOption = computed(() =>\n props.columnOptions.find((op) => op.id === columnAsSourceAndFixedAxes.value.source),\n);\nconst currentSpec = computed(() =>\n currentOption.value?.spec ? getNormalizedSpec(currentOption.value.spec) : null,\n);\nconst currentType = computed(() => currentSpec.value?.valueType);\nconst currentError = computed(\n () => Boolean(currentOption.value?.error) || inconsistentSourceSelected.value,\n);\n\nconst filterTypesOptions = computed(() =>\n props.supportedFilters\n .filter(\n (v) =>\n filter.value.type === v ||\n (currentSpec.value ? getFilterInfo(v).supportedFor(currentSpec.value) : true),\n )\n .map((v) => ({ value: v, label: getFilterInfo(v).label })),\n);\n\nconst wildcardOptions = computed(() => {\n if (filter.value.type !== \"patternFuzzyContainSubsequence\") {\n return [];\n }\n if (currentOption.value?.alphabet === \"nucleotide\") {\n return [{ label: \"N\", value: \"N\" }];\n }\n if (currentOption.value?.alphabet === \"aminoacid\") {\n return [{ label: \"X\", value: \"X\" }];\n }\n return [...new Set(filter.value.value.split(\"\"))].sort().map((v) => ({ value: v, label: v }));\n});\n\nconst stringMatchesError = computed(() => {\n if (filter.value.type !== \"patternMatchesRegularExpression\") {\n return false;\n }\n try {\n new RegExp(filter.value.value);\n return false;\n } catch {\n return true;\n }\n});\n</script>\n<template>\n <div :class=\"$style.filterWrapper\">\n <!-- top element - column selector / column label - for all filter types-->\n <div\n v-if=\"enableDnd\"\n :class=\"[$style.top, $style.columnChip, { [$style.error]: currentError }]\"\n >\n <div :class=\"[$style.typeIcon, { [$style.error]: currentError }]\">\n <PlIcon16 v-if=\"currentError\" name=\"warning\" />\n <PlIcon16\n v-else\n :name=\"\n currentType === 'String' || currentType === undefined\n ? 'cell-type-txt'\n : 'cell-type-num'\n \"\n />\n </div>\n <div :class=\"$style.titleWrapper\" :title=\"currentOption?.label ?? ''\">\n <div :class=\"$style.title\">\n {{\n inconsistentSourceSelected\n ? \"Inconsistent value\"\n : (currentOption?.label ?? filter.column)\n }}\n </div>\n </div>\n <div :class=\"$style.closeIcon\" @click=\"onDelete(filter.column)\">\n <PlIcon16 name=\"close\" />\n </div>\n </div>\n <div v-else :class=\"$style.top\">\n <PlDropdown\n v-model=\"columnAsSourceAndFixedAxes.source\"\n :errorStatus=\"currentError\"\n :options=\"sourceOptions\"\n :style=\"{ width: '100%' }\"\n group-position=\"top-left\"\n @update:model-value=\"changeSourceId\"\n />\n <div :class=\"$style.closeButton\" @click=\"onDelete(filter.column)\">\n <PlIcon16 name=\"close\" />\n </div>\n </div>\n\n <div v-if=\"currentOption?.axesToBeFixed?.length\" :class=\"$style.fixedAxesBlock\">\n <template v-for=\"value in currentOption?.axesToBeFixed\" :key=\"value.idx\">\n <PlAutocomplete\n v-model=\"columnAsSourceAndFixedAxes.axisFiltersByIndex[value.idx]\"\n :label=\"value.label\"\n :options-search=\"\n (str, type) =>\n getSuggestOptionsFn(columnAsSourceAndFixedAxes.source, type, str, value.idx)\n \"\n :disabled=\"inconsistentSourceSelected\"\n :clearable=\"true\"\n @update:model-value=\"(v) => updateAxisFilterValue(value.idx, v)\"\n />\n </template>\n </div>\n\n <!-- middle - filter type selector - for all filter types -->\n <div\n :class=\"filter.type === 'isNA' || filter.type === 'isNotNA' ? $style.bottom : $style.middle\"\n >\n <PlDropdown\n v-model=\"filter.type\"\n :options=\"filterTypesOptions\"\n :group-position=\"filter.type === 'isNA' || filter.type === 'isNotNA' ? 'bottom' : 'middle'\"\n @update:model-value=\"changeFilterType\"\n />\n </div>\n\n <!-- middle - for fuzzy contains filter -->\n <template v-if=\"filter.type === 'patternFuzzyContainSubsequence'\">\n <div :class=\"$style.middle\">\n <PlTextField v-model=\"filter.value\" placeholder=\"Substring\" group-position=\"middle\" />\n </div>\n <div :class=\"$style.innerSection\">\n <Slider\n v-model=\"filter.maxEdits\"\n :max=\"5\"\n breakpoints\n label=\"Maximum number of substitutions and indels\"\n />\n <PlToggleSwitch v-model=\"filter.substitutionsOnly\" label=\"Substitutions only\" />\n </div>\n </template>\n\n <!-- bottom element - individual settings for every filter type -->\n <div :class=\"$style.bottom\">\n <PlAutocomplete\n v-if=\"filter.type === 'patternEquals' || filter.type === 'patternNotEquals'\"\n v-model=\"filter.value\"\n :options-search=\"\n (str, type) => getSuggestOptionsFn(columnAsSourceAndFixedAxes.source, type, str)\n \"\n :clearable=\"true\"\n group-position=\"bottom\"\n />\n <PlAutocompleteMulti\n v-if=\"filter.type === 'inSet' || filter.type === 'notInSet'\"\n v-model=\"filter.value\"\n :options-search=\"\n (str, type) => getMultiSuggestOptionsFn(columnAsSourceAndFixedAxes.source, type, str)\n \"\n :disabled=\"inconsistentSourceSelected\"\n group-position=\"bottom\"\n />\n <PlNumberField v-if=\"isNumericFilter(filter)\" v-model=\"filter.x\" group-position=\"bottom\" />\n <PlNumberField v-if=\"isPositionFilter(filter)\" v-model=\"filter.n\" group-position=\"bottom\" />\n <PlTextField\n v-if=\"\n filter.type === 'patternContainSubsequence' ||\n filter.type === 'patternNotContainSubsequence'\n \"\n v-model=\"filter.value\"\n placeholder=\"Substring\"\n group-position=\"bottom\"\n />\n <PlTextField\n v-if=\"filter.type === 'patternMatchesRegularExpression'\"\n v-model=\"filter.value\"\n :error=\"stringMatchesError ? 'Regular expression is not valid' : undefined\"\n placeholder=\"Regular expression\"\n group-position=\"bottom\"\n />\n <PlDropdown\n v-if=\"filter.type === 'patternFuzzyContainSubsequence'\"\n v-model=\"filter.wildcard\"\n clearable\n placeholder=\"Wildcard value\"\n :options=\"wildcardOptions\"\n group-position=\"bottom\"\n />\n </div>\n </div>\n <OperandButton :active=\"operand\" :disabled=\"isLast\" :on-select=\"onChangeOperand\" />\n</template>\n\n<style module>\n.filterWrapper {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n cursor: default;\n}\n\n.typeIcon {\n display: inline-flex;\n margin-right: 8px;\n}\n\n.typeIcon.error {\n --icon-color: var(--txt-error);\n}\n\n.closeIcon {\n display: inline-flex;\n margin-left: 12px;\n cursor: pointer;\n}\n\n.titleWrapper {\n flex-grow: 1;\n overflow: hidden;\n}\n.title {\n overflow: hidden;\n color: var(--txt-01);\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n}\n\n.columnChip {\n width: 100%;\n display: flex;\n padding: 10px 12px;\n align-items: center;\n border-radius: 6px;\n border: 1px solid var(--txt-01);\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n\n &.error {\n border-color: var(--txt-error);\n }\n}\n\n.innerSection {\n border: 1px solid var(--txt-01);\n border-top: none;\n padding: 16px 12px;\n}\n\n.closeButton {\n border: 1px solid var(--txt-01);\n border-top-right-radius: 6px;\n border-left: none;\n width: 40px;\n height: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n cursor: pointer;\n}\n\n.top {\n position: relative;\n display: flex;\n width: 100%;\n z-index: 1;\n background: #fff;\n}\n\n.fixedAxesBlock {\n position: relative;\n display: flex;\n flex-direction: column;\n padding: 12px 8px;\n gap: 12px;\n border-left: 1px solid var(--txt-01);\n border-right: 1px solid var(--txt-01);\n}\n\n.fixedAxesBlock > * {\n background: #fff;\n}\n\n.middle,\n.bottom {\n position: relative;\n margin-top: -1px;\n background: #fff;\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"FilterEditor.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlAdvancedFilter/FilterEditor.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n PlAutocomplete,\n PlAutocompleteMulti,\n PlDropdown,\n PlIcon16,\n PlNumberField,\n PlTextField,\n PlToggleSwitch,\n Slider,\n} from \"@milaboratories/uikit\";\nimport type {\n AnchoredPColumnId,\n AxisFilterByIdx,\n AxisFilterValue,\n SUniversalPColumnId,\n} from \"@platforma-sdk/model\";\nimport {\n isFilteredPColumn,\n parseColumnId,\n stringifyColumnId,\n type ListOptionBase,\n} from \"@platforma-sdk/model\";\nimport { computed } from \"vue\";\nimport type { SUPPORTED_FILTER_TYPES } from \"./constants\";\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS } from \"./constants\";\nimport OperandButton from \"./OperandButton.vue\";\nimport type { EditableFilter, Operand, PlAdvancedFilterColumnId, SourceOptionInfo } from \"./types\";\nimport { getFilterInfo, getNormalizedSpec, isNumericFilter, isPositionFilter } from \"./utils\";\n\nconst filter = defineModel<EditableFilter>(\"filter\", { required: true });\n\nconst props = defineProps<{\n isLast: boolean;\n operand: Operand;\n enableDnd: boolean;\n columnOptions: SourceOptionInfo[];\n supportedFilters: typeof SUPPORTED_FILTER_TYPES;\n getSuggestOptions: (params: {\n columnId: PlAdvancedFilterColumnId;\n axisIdx?: number;\n searchType: \"value\" | \"label\";\n searchStr: string;\n }) => ListOptionBase<string | number>[] | Promise<ListOptionBase<string | number>[]>;\n onDelete: (columnId: PlAdvancedFilterColumnId) => void;\n onChangeOperand: (op: Operand) => void;\n}>();\n\nasync function getSuggestOptionsFn(\n id: PlAdvancedFilterColumnId,\n type: \"value\" | \"label\",\n str: string,\n axisIdx?: number,\n): Promise<ListOptionBase<string>[]> {\n return props.getSuggestOptions({\n columnId: id,\n axisIdx,\n searchType: type,\n searchStr: str,\n }) as Promise<ListOptionBase<string>[]>;\n}\n\nasync function getMultiSuggestOptionsFn(\n id: PlAdvancedFilterColumnId,\n type: \"value\" | \"label\",\n str: string | string[],\n axisIdx?: number,\n): Promise<ListOptionBase<string>[]> {\n if (type === \"label\" && typeof str === \"string\") {\n return getSuggestOptionsFn(id, type, str, axisIdx);\n }\n if (type === \"value\" && Array.isArray(str)) {\n const results = await Promise.all(str.map((s) => getSuggestOptionsFn(id, type, s, axisIdx)));\n return results.map((x) => x[0]);\n }\n throw new Error(\"Invalid arguments combination\");\n}\n\ntype Entries<T> = { [K in keyof T]: [K, T[K]] }[keyof T][];\nfunction changeFilterType() {\n const defaultFilter = DEFAULT_FILTERS[filter.value.type];\n\n filter.value = (Object.entries(defaultFilter) as Entries<EditableFilter>).reduce(\n (res, [key, val]) => {\n res[key] = filter.value[key] ?? val;\n return res;\n },\n {} as Record<keyof EditableFilter, EditableFilter[keyof EditableFilter]>,\n ) as EditableFilter;\n}\n\nfunction changeSourceId(newSourceId?: PlAdvancedFilterColumnId) {\n if (!newSourceId) {\n return;\n }\n const newSourceInfo = props.columnOptions.find((v) => v.id === getSourceId(newSourceId));\n if (!newSourceInfo) {\n return;\n }\n const filterInfo = getFilterInfo(filter.value.type);\n const newSourceSpec = getNormalizedSpec(newSourceInfo?.spec);\n if (filterInfo.supportedFor(newSourceSpec)) {\n // don't do anything except update source id\n filter.value.column = newSourceId;\n } else {\n // reset to default filter which fits to any column\n filter.value = {\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: newSourceId,\n };\n }\n}\n\nconst inconsistentSourceSelected = computed(() => {\n const selectedOption = props.columnOptions.find(\n (op) => op.id === getSourceId(filter.value.column),\n );\n return selectedOption === undefined;\n});\nconst sourceOptions = computed(() => {\n const options = props.columnOptions.map((v) => ({ value: v.id, label: v.label ?? v }));\n if (inconsistentSourceSelected.value) {\n options.unshift({ value: filter.value.column, label: \"Inconsistent value\" });\n }\n return options;\n});\n\nfunction getSourceId(column: PlAdvancedFilterColumnId): PlAdvancedFilterColumnId {\n try {\n const parsedColumnId = parseColumnId(column as SUniversalPColumnId);\n if (isFilteredPColumn(parsedColumnId)) {\n return stringifyColumnId(parsedColumnId.source);\n } else {\n return column;\n }\n } catch {\n return column;\n }\n}\n\n// similar to FilteredPColumnId but source is stringified and axis filters can be undefined\ntype ColumnAsSourceAndFixedAxes = {\n source: PlAdvancedFilterColumnId;\n axisFiltersByIndex: Record<number, AxisFilterValue | undefined>;\n};\nfunction getColumnAsSourceAndFixedAxes(\n column: PlAdvancedFilterColumnId,\n): ColumnAsSourceAndFixedAxes {\n const sourceId = getSourceId(column);\n const option = props.columnOptions.find((op) => op.id === sourceId);\n const axesToBeFixed = (option?.axesToBeFixed ?? []).reduce(\n (res, item) => {\n res[item.idx] = undefined;\n return res;\n },\n {} as Record<number, AxisFilterValue | undefined>,\n );\n try {\n const parsedColumnId = parseColumnId(column as SUniversalPColumnId);\n if (isFilteredPColumn(parsedColumnId)) {\n return {\n source: sourceId,\n axisFiltersByIndex: parsedColumnId.axisFilters.reduce((res, item) => {\n res[item[0]] = item[1];\n return res;\n }, axesToBeFixed),\n };\n }\n } catch {\n return { source: column, axisFiltersByIndex: axesToBeFixed };\n }\n return { source: column, axisFiltersByIndex: axesToBeFixed };\n}\n\nfunction stringifyColumn(value: ColumnAsSourceAndFixedAxes): PlAdvancedFilterColumnId {\n if (Object.keys(value.axisFiltersByIndex).length === 0) {\n return value.source;\n }\n return stringifyColumnId({\n source: parseColumnId(value.source as SUniversalPColumnId) as AnchoredPColumnId,\n axisFilters: Object.entries(value.axisFiltersByIndex).map(\n ([idx, value]) => [Number(idx), value] as AxisFilterByIdx,\n ),\n });\n}\n\nconst columnAsSourceAndFixedAxes = computed({\n get: () => {\n return getColumnAsSourceAndFixedAxes(filter.value.column);\n },\n set: (value) => {\n filter.value.column = stringifyColumn(value);\n },\n});\nfunction updateAxisFilterValue(idx: number, value: AxisFilterValue | undefined) {\n columnAsSourceAndFixedAxes.value = {\n ...columnAsSourceAndFixedAxes.value,\n axisFiltersByIndex: { ...columnAsSourceAndFixedAxes.value.axisFiltersByIndex, [idx]: value },\n };\n}\n\nconst currentOption = computed(() =>\n props.columnOptions.find((op) => op.id === columnAsSourceAndFixedAxes.value.source),\n);\nconst currentSpec = computed(() =>\n currentOption.value?.spec ? getNormalizedSpec(currentOption.value.spec) : null,\n);\nconst currentType = computed(() => currentSpec.value?.valueType);\nconst currentError = computed(\n () => Boolean(currentOption.value?.error) || inconsistentSourceSelected.value,\n);\n\nconst filterTypesOptions = computed(() =>\n props.supportedFilters\n .filter(\n (v) =>\n filter.value.type === v ||\n (currentSpec.value ? getFilterInfo(v).supportedFor(currentSpec.value) : true),\n )\n .map((v) => ({ value: v, label: getFilterInfo(v).label })),\n);\n\nconst wildcardOptions = computed(() => {\n if (filter.value.type !== \"patternFuzzyContainSubsequence\") {\n return [];\n }\n if (currentOption.value?.alphabet === \"nucleotide\") {\n return [{ label: \"N\", value: \"N\" }];\n }\n if (currentOption.value?.alphabet === \"aminoacid\") {\n return [{ label: \"X\", value: \"X\" }];\n }\n return [...new Set(filter.value.value.split(\"\"))].sort().map((v) => ({ value: v, label: v }));\n});\n\nconst stringMatchesError = computed(() => {\n if (filter.value.type !== \"patternMatchesRegularExpression\") {\n return false;\n }\n try {\n new RegExp(filter.value.value);\n return false;\n } catch {\n return true;\n }\n});\n</script>\n<template>\n <div :class=\"$style.filterWrapper\">\n <!-- top element - column selector / column label - for all filter types-->\n <div\n v-if=\"enableDnd\"\n :class=\"[$style.top, $style.columnChip, { [$style.error]: currentError }]\"\n >\n <div :class=\"[$style.typeIcon, { [$style.error]: currentError }]\">\n <PlIcon16 v-if=\"currentError\" name=\"warning\" />\n <PlIcon16\n v-else\n :name=\"\n currentType === 'String' || currentType === undefined\n ? 'cell-type-txt'\n : 'cell-type-num'\n \"\n />\n </div>\n <div :class=\"$style.titleWrapper\" :title=\"currentOption?.label ?? ''\">\n <div :class=\"$style.title\">\n {{\n inconsistentSourceSelected\n ? \"Inconsistent value\"\n : (currentOption?.label ?? filter.column)\n }}\n </div>\n </div>\n <div :class=\"$style.closeIcon\" @click=\"onDelete(filter.column)\">\n <PlIcon16 name=\"close\" />\n </div>\n </div>\n <div v-else :class=\"$style.top\">\n <PlDropdown\n v-model=\"columnAsSourceAndFixedAxes.source\"\n :errorStatus=\"currentError\"\n :options=\"sourceOptions\"\n :style=\"{ width: '100%' }\"\n group-position=\"top-left\"\n @update:model-value=\"changeSourceId\"\n />\n <div :class=\"$style.closeButton\" @click=\"onDelete(filter.column)\">\n <PlIcon16 name=\"close\" />\n </div>\n </div>\n\n <div v-if=\"currentOption?.axesToBeFixed?.length\" :class=\"$style.fixedAxesBlock\">\n <template v-for=\"value in currentOption?.axesToBeFixed\" :key=\"value.idx\">\n <PlAutocomplete\n v-model=\"columnAsSourceAndFixedAxes.axisFiltersByIndex[value.idx]\"\n :label=\"value.label\"\n :options-search=\"\n (str, type) =>\n getSuggestOptionsFn(columnAsSourceAndFixedAxes.source, type, str, value.idx)\n \"\n :disabled=\"inconsistentSourceSelected\"\n :clearable=\"true\"\n @update:model-value=\"(v) => updateAxisFilterValue(value.idx, v)\"\n />\n </template>\n </div>\n\n <!-- middle - filter type selector - for all filter types -->\n <div\n :class=\"filter.type === 'isNA' || filter.type === 'isNotNA' ? $style.bottom : $style.middle\"\n >\n <PlDropdown\n v-model=\"filter.type\"\n :options=\"filterTypesOptions\"\n :group-position=\"filter.type === 'isNA' || filter.type === 'isNotNA' ? 'bottom' : 'middle'\"\n @update:model-value=\"changeFilterType\"\n />\n </div>\n\n <!-- middle - for fuzzy contains filter -->\n <template v-if=\"filter.type === 'patternFuzzyContainSubsequence'\">\n <div :class=\"$style.middle\">\n <PlTextField v-model=\"filter.value\" placeholder=\"Substring\" group-position=\"middle\" />\n </div>\n <div :class=\"$style.innerSection\">\n <Slider\n v-model=\"filter.maxEdits\"\n :max=\"5\"\n breakpoints\n label=\"Maximum number of substitutions and indels\"\n />\n <PlToggleSwitch v-model=\"filter.substitutionsOnly\" label=\"Substitutions only\" />\n </div>\n </template>\n\n <!-- bottom element - individual settings for every filter type -->\n <div :class=\"$style.bottom\">\n <PlAutocomplete\n v-if=\"filter.type === 'patternEquals' || filter.type === 'patternNotEquals'\"\n v-model=\"filter.value\"\n :options-search=\"\n (str, type) => getSuggestOptionsFn(columnAsSourceAndFixedAxes.source, type, str)\n \"\n :clearable=\"true\"\n group-position=\"bottom\"\n />\n <PlAutocompleteMulti\n v-if=\"filter.type === 'inSet' || filter.type === 'notInSet'\"\n v-model=\"filter.value\"\n :options-search=\"\n (str, type) => getMultiSuggestOptionsFn(columnAsSourceAndFixedAxes.source, type, str)\n \"\n :disabled=\"inconsistentSourceSelected\"\n group-position=\"bottom\"\n />\n <PlNumberField v-if=\"isNumericFilter(filter)\" v-model=\"filter.x\" group-position=\"bottom\" />\n <PlNumberField v-if=\"isPositionFilter(filter)\" v-model=\"filter.n\" group-position=\"bottom\" />\n <PlTextField\n v-if=\"\n filter.type === 'patternContainSubsequence' ||\n filter.type === 'patternNotContainSubsequence'\n \"\n v-model=\"filter.value\"\n placeholder=\"Substring\"\n group-position=\"bottom\"\n />\n <PlTextField\n v-if=\"filter.type === 'patternMatchesRegularExpression'\"\n v-model=\"filter.value\"\n :error=\"stringMatchesError ? 'Regular expression is not valid' : undefined\"\n placeholder=\"Regular expression\"\n group-position=\"bottom\"\n />\n <PlDropdown\n v-if=\"filter.type === 'patternFuzzyContainSubsequence'\"\n v-model=\"filter.wildcard\"\n clearable\n placeholder=\"Wildcard value\"\n :options=\"wildcardOptions\"\n group-position=\"bottom\"\n />\n </div>\n </div>\n <OperandButton :active=\"operand\" :disabled=\"isLast\" :on-select=\"onChangeOperand\" />\n</template>\n\n<style module>\n.filterWrapper {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n cursor: default;\n}\n\n.typeIcon {\n display: inline-flex;\n margin-right: 8px;\n}\n\n.typeIcon.error {\n --icon-color: var(--txt-error);\n}\n\n.closeIcon {\n display: inline-flex;\n margin-left: 12px;\n cursor: pointer;\n}\n\n.titleWrapper {\n flex-grow: 1;\n overflow: hidden;\n}\n.title {\n overflow: hidden;\n color: var(--txt-01);\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n}\n\n.columnChip {\n width: 100%;\n display: flex;\n padding: 10px 12px;\n align-items: center;\n border-radius: 6px;\n border: 1px solid var(--txt-01);\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n\n &.error {\n border-color: var(--txt-error);\n }\n}\n\n.innerSection {\n border: 1px solid var(--txt-01);\n border-top: none;\n padding: 16px 12px;\n}\n\n.closeButton {\n border: 1px solid var(--txt-01);\n border-top-right-radius: 6px;\n border-left: none;\n width: 40px;\n height: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n cursor: pointer;\n}\n\n.top {\n position: relative;\n display: flex;\n width: 100%;\n z-index: 1;\n background: #fff;\n}\n\n.fixedAxesBlock {\n position: relative;\n display: flex;\n flex-direction: column;\n padding: 12px 8px;\n gap: 12px;\n border-left: 1px solid var(--txt-01);\n border-right: 1px solid var(--txt-01);\n}\n\n.fixedAxesBlock > * {\n background: #fff;\n}\n\n.middle,\n.bottom {\n position: relative;\n margin-top: -1px;\n background: #fff;\n}\n</style>\n"],"mappings":"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"}
@@ -2,6 +2,7 @@ import e from "../../_virtual/_plugin-vue_export-helper.js";
2
2
  import t from "./OperandButton.vue2.js";
3
3
  import n from "./OperandButton.style.js";
4
4
  var r = /* @__PURE__ */ e(t, [["__cssModules", { $style: n }]]);
5
+ //#endregion
5
6
  export { r as default };
6
7
 
7
8
  //# sourceMappingURL=OperandButton.js.map
@@ -3,6 +3,7 @@ import './OperandButton.vue.css';var e = {
3
3
  operand: "_operand_efv0d_10",
4
4
  active: "_active_efv0d_25"
5
5
  };
6
+ //#endregion
6
7
  export { e as default };
7
8
 
8
9
  //# sourceMappingURL=OperandButton.style.js.map
@@ -1,4 +1,5 @@
1
1
  import { Fragment as e, createElementBlock as t, createElementVNode as n, defineComponent as r, mergeProps as i, normalizeClass as a, openBlock as o, renderList as s, toDisplayString as c } from "vue";
2
+ //#region src/components/PlAdvancedFilter/OperandButton.vue?vue&type=script&setup=true&lang.ts
2
3
  var l = ["onClick"], u = /* @__PURE__ */ r({
3
4
  __name: "OperandButton",
4
5
  props: {
@@ -15,6 +16,7 @@ var l = ["onClick"], u = /* @__PURE__ */ r({
15
16
  }, c(e), 11, l)), 64))], 16));
16
17
  }
17
18
  });
19
+ //#endregion
18
20
  export { u as default };
19
21
 
20
22
  //# sourceMappingURL=OperandButton.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OperandButton.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$style"],"sources":["../../../src/components/PlAdvancedFilter/OperandButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { Operand } from \"./types\";\n\nconst props = defineProps<{\n active: Operand;\n disabled: boolean;\n onSelect: (op: Operand) => void;\n}>();\n\nconst OPTIONS: Operand[] = [\"and\", \"or\"];\n</script>\n<template>\n <div v-bind=\"$attrs\" :class=\"$style.block\">\n <div\n v-for=\"op in OPTIONS\"\n :key=\"op\"\n :class=\"[$style.operand, { [$style.active]: op === props.active && !props.disabled }]\"\n @click=\"!props.disabled && props.onSelect(op)\"\n >\n {{ op }}\n </div>\n </div>\n</template>\n<style module>\n.block {\n width: 100%;\n display: flex;\n gap: 4px;\n justify-content: center;\n height: 30px;\n align-items: center;\n}\n.operand {\n border-radius: 16px;\n width: 64px;\n height: 32px;\n display: flex;\n justify-content: center;\n align-items: center;\n text-transform: uppercase;\n font-weight: 600;\n\n color: var(--txt-03);\n border: 1px solid var(--color-div-grey);\n background: transparent;\n cursor: pointer;\n}\n.operand.active {\n color: var(--txt-01);\n background: #fff;\n border: 1px solid var(--txt-01);\n}\n</style>\n"],"mappings":";;;;;;;;;EAGA,IAAM,IAAQ,GAMR,IAAqB,CAAC,OAAO,KAAK;yBAGtC,EASM,OATN,EAAaA,EASP,QATa,EAAG,OAAOC,EAAAA,OAAO,OAAA,CAAA,EAAA,EAAA,GAAA,EAClC,EAOM,GAAA,MAAA,EANS,IAAN,MADT,EAOM,OAAA;GALH,KAAK;GACL,OAAK,EAAA,CAAGA,EAAAA,OAAO,SAAO,GAAKA,EAAAA,OAAO,SAAS,MAAO,EAAM,UAAM,CAAK,EAAM,UAAQ,CAAA,CAAA;GACjF,UAAK,MAAA,CAAG,EAAM,YAAY,EAAM,SAAS,EAAE;OAEzC,EAAE,EAAA,IAAA,EAAA"}
1
+ {"version":3,"file":"OperandButton.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$style"],"sources":["../../../src/components/PlAdvancedFilter/OperandButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { Operand } from \"./types\";\n\nconst props = defineProps<{\n active: Operand;\n disabled: boolean;\n onSelect: (op: Operand) => void;\n}>();\n\nconst OPTIONS: Operand[] = [\"and\", \"or\"];\n</script>\n<template>\n <div v-bind=\"$attrs\" :class=\"$style.block\">\n <div\n v-for=\"op in OPTIONS\"\n :key=\"op\"\n :class=\"[$style.operand, { [$style.active]: op === props.active && !props.disabled }]\"\n @click=\"!props.disabled && props.onSelect(op)\"\n >\n {{ op }}\n </div>\n </div>\n</template>\n<style module>\n.block {\n width: 100%;\n display: flex;\n gap: 4px;\n justify-content: center;\n height: 30px;\n align-items: center;\n}\n.operand {\n border-radius: 16px;\n width: 64px;\n height: 32px;\n display: flex;\n justify-content: center;\n align-items: center;\n text-transform: uppercase;\n font-weight: 600;\n\n color: var(--txt-03);\n border: 1px solid var(--color-div-grey);\n background: transparent;\n cursor: pointer;\n}\n.operand.active {\n color: var(--txt-01);\n background: #fff;\n border: 1px solid var(--txt-01);\n}\n</style>\n"],"mappings":";;;;;;;;;;EAGA,IAAM,IAAQ,GAMR,IAAqB,CAAC,OAAO,KAAK;yBAGtC,EASM,OATN,EAAaA,EASP,QATa,EAAG,OAAOC,EAAAA,OAAO,OAAA,CAAA,EAAA,EAAA,GAAA,EAClC,EAOM,GAAA,MAAA,EANS,IAAN,MADT,EAOM,OAAA;GALH,KAAK;GACL,OAAK,EAAA,CAAGA,EAAAA,OAAO,SAAO,GAAKA,EAAAA,OAAO,SAAS,MAAO,EAAM,UAAM,CAAK,EAAM,UAAQ,CAAA,CAAA;GACjF,UAAK,MAAA,CAAG,EAAM,YAAY,EAAM,SAAS,EAAE;OAEzC,EAAE,EAAA,IAAA,EAAA"}
@@ -2,6 +2,7 @@ import e from "../../_virtual/_plugin-vue_export-helper.js";
2
2
  import t from "./PlAdvancedFilter.vue2.js";
3
3
  import n from "./PlAdvancedFilter.style.js";
4
4
  var r = /* @__PURE__ */ e(t, [["__cssModules", { $style: n }]]);
5
+ //#endregion
5
6
  export { r as default };
6
7
 
7
8
  //# sourceMappingURL=PlAdvancedFilter.js.map
@@ -7,6 +7,7 @@ import './PlAdvancedFilter.vue.css';var e = {
7
7
  dropzone: "_dropzone_hlpl5_22",
8
8
  buttonWrapper: "_buttonWrapper_hlpl5_36"
9
9
  };
10
+ //#endregion
10
11
  export { e as default };
11
12
 
12
13
  //# sourceMappingURL=PlAdvancedFilter.style.js.map
@@ -4,6 +4,7 @@ import { createNewGroup as i, getNewId as a, isValidColumnId as o } from "./util
4
4
  import s from "./FilterEditor.js";
5
5
  import { Fragment as c, computed as l, createBlock as u, createCommentVNode as d, createElementBlock as f, createElementVNode as p, createTextVNode as m, createVNode as h, defineComponent as g, mergeModels as _, normalizeClass as v, openBlock as y, renderList as b, renderSlot as x, toRaw as S, unref as C, useModel as w, withCtx as T } from "vue";
6
6
  import { PlBtnSecondary as E, PlCheckbox as D, PlElementList as O } from "@milaboratories/uikit";
7
+ //#region src/components/PlAdvancedFilter/PlAdvancedFilter.vue?vue&type=script&setup=true&lang.ts
7
8
  var k = ["onDrop"], A = /* @__PURE__ */ g({
8
9
  __name: "PlAdvancedFilter",
9
10
  props: /* @__PURE__ */ _({
@@ -235,6 +236,7 @@ var k = ["onDrop"], A = /* @__PURE__ */ g({
235
236
  ])) : d("", !0)]));
236
237
  }
237
238
  });
239
+ //#endregion
238
240
  export { A as default };
239
241
 
240
242
  //# sourceMappingURL=PlAdvancedFilter.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAdvancedFilter.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlAdvancedFilter/PlAdvancedFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends RootFilter\">\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 {\n CommonFilter,\n EditableFilter,\n NodeFilter,\n PlAdvancedFilterColumnId,\n RootFilter,\n SourceOptionInfo,\n} from \"./types\";\nimport { createNewGroup, getNewId, isValidColumnId } from \"./utils\";\n\nconst model = defineModel<T>(\"filters\", { required: true });\n\nconst props = withDefaults(\n 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: {\n columnId: PlAdvancedFilterColumnId;\n axisIdx?: number;\n searchStr: string;\n searchType: \"value\" | \"label\";\n }) => ListOptionBase<string | number>[] | Promise<ListOptionBase<string | number>[]>;\n }>(),\n {\n supportedFilters: () => SUPPORTED_FILTER_TYPES,\n getSuggestModel: undefined,\n\n enableDnd: false,\n enableAddGroupButton: false,\n },\n);\n\nconst firstColumnId = computed(() => props.items[0]?.id);\nconst emptyGroup: NodeFilter[] = [\n {\n id: -1,\n type: \"and\",\n filters: [],\n isExpanded: true,\n },\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\"\n ? (item.filter as Exclude<T, { type: \"not\" }>)\n : (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 :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n :is-expanded=\"(filter) => filter.isExpanded === true\"\n :on-expand=\"\n (group) => {\n group.isExpanded = !group.isExpanded;\n }\n \"\n :disableDragging=\"false\"\n :disableRemoving=\"false\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n >\n <template #item-title> Filter group </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=\"\n (value) => updateFilter(getNotContent(item).filters, filterIdx, value)\n \"\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 :is-expanded=\"() => true\"\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)\"> Add filter </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"],"mappings":"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"}
1
+ {"version":3,"file":"PlAdvancedFilter.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlAdvancedFilter/PlAdvancedFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends RootFilter\">\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 {\n CommonFilter,\n EditableFilter,\n NodeFilter,\n PlAdvancedFilterColumnId,\n RootFilter,\n SourceOptionInfo,\n} from \"./types\";\nimport { createNewGroup, getNewId, isValidColumnId } from \"./utils\";\n\nconst model = defineModel<T>(\"filters\", { required: true });\n\nconst props = withDefaults(\n 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: {\n columnId: PlAdvancedFilterColumnId;\n axisIdx?: number;\n searchStr: string;\n searchType: \"value\" | \"label\";\n }) => ListOptionBase<string | number>[] | Promise<ListOptionBase<string | number>[]>;\n }>(),\n {\n supportedFilters: () => SUPPORTED_FILTER_TYPES,\n getSuggestModel: undefined,\n\n enableDnd: false,\n enableAddGroupButton: false,\n },\n);\n\nconst firstColumnId = computed(() => props.items[0]?.id);\nconst emptyGroup: NodeFilter[] = [\n {\n id: -1,\n type: \"and\",\n filters: [],\n isExpanded: true,\n },\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\"\n ? (item.filter as Exclude<T, { type: \"not\" }>)\n : (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 :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n :is-expanded=\"(filter) => filter.isExpanded === true\"\n :on-expand=\"\n (group) => {\n group.isExpanded = !group.isExpanded;\n }\n \"\n :disableDragging=\"false\"\n :disableRemoving=\"false\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n >\n <template #item-title> Filter group </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=\"\n (value) => updateFilter(getNotContent(item).filters, filterIdx, value)\n \"\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 :is-expanded=\"() => true\"\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)\"> Add filter </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"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- const e = [
1
+ //#region src/components/PlAdvancedFilter/constants.ts
2
+ var e = [
2
3
  "isNA",
3
4
  "isNotNA",
4
5
  "greaterThan",
@@ -17,9 +18,7 @@ const e = [
17
18
  "notInSet",
18
19
  "topN",
19
20
  "bottomN"
20
- ], t = "isNA";
21
- var n = { column: "" };
22
- const r = {
21
+ ], t = "isNA", n = { column: "" }, r = {
23
22
  isNA: {
24
23
  type: "isNA",
25
24
  ...n
@@ -112,6 +111,7 @@ const r = {
112
111
  ...n
113
112
  }
114
113
  };
114
+ //#endregion
115
115
  export { r as DEFAULT_FILTERS, t as DEFAULT_FILTER_TYPE, e as SUPPORTED_FILTER_TYPES };
116
116
 
117
117
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../../../src/components/PlAdvancedFilter/constants.ts"],"sourcesContent":["import type { FilterSpecType } from \"@platforma-sdk/model\";\nimport type { EditableFilter, PlAdvancedFilterColumnId, SupportedFilterTypes } from \"./types\";\n\n// List of ALL supported filter types in Advanced Filter component\nexport const SUPPORTED_FILTER_TYPES = [\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 \"patternFuzzyContainSubsequence\",\n \"patternMatchesRegularExpression\",\n \"inSet\",\n \"notInSet\",\n \"topN\",\n \"bottomN\",\n] satisfies FilterSpecType[];\n\nexport const DEFAULT_FILTER_TYPE: SupportedFilterTypes = \"isNA\";\n\nconst emptyCommonPart = { column: \"\" as PlAdvancedFilterColumnId };\nexport const DEFAULT_FILTERS: Record<SupportedFilterTypes, EditableFilter> = {\n isNA: { type: \"isNA\", ...emptyCommonPart },\n isNotNA: { type: \"isNotNA\", ...emptyCommonPart },\n lessThan: { type: \"lessThan\", x: 0, ...emptyCommonPart },\n lessThanOrEqual: { type: \"lessThanOrEqual\", x: 0, ...emptyCommonPart },\n patternEquals: { type: \"patternEquals\", value: undefined, ...emptyCommonPart },\n patternNotEquals: { type: \"patternNotEquals\", value: undefined, ...emptyCommonPart },\n greaterThan: { type: \"greaterThan\", x: 0, ...emptyCommonPart },\n greaterThanOrEqual: { type: \"greaterThanOrEqual\", x: 0, ...emptyCommonPart },\n patternContainSubsequence: { type: \"patternContainSubsequence\", value: \"\", ...emptyCommonPart },\n patternNotContainSubsequence: {\n type: \"patternNotContainSubsequence\",\n value: \"\",\n ...emptyCommonPart,\n },\n patternFuzzyContainSubsequence: {\n type: \"patternFuzzyContainSubsequence\",\n maxEdits: 2,\n substitutionsOnly: false,\n wildcard: undefined,\n value: \"\",\n ...emptyCommonPart,\n },\n patternMatchesRegularExpression: {\n type: \"patternMatchesRegularExpression\",\n value: \"\",\n ...emptyCommonPart,\n },\n equal: { type: \"equal\", x: 0, ...emptyCommonPart },\n notEqual: { type: \"notEqual\", x: 0, ...emptyCommonPart },\n inSet: { type: \"inSet\", value: [], ...emptyCommonPart },\n notInSet: { type: \"notInSet\", value: [], ...emptyCommonPart },\n topN: { type: \"topN\", n: 10, ...emptyCommonPart },\n bottomN: { type: \"bottomN\", n: 10, ...emptyCommonPart },\n};\n"],"mappings":"AAIA,MAAa,IAAyB;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EAEY,IAA4C;AAEzD,IAAM,IAAkB,EAAE,QAAQ,IAAgC;AAClE,MAAa,IAAgE;CAC3E,MAAM;EAAE,MAAM;EAAQ,GAAG;EAAiB;CAC1C,SAAS;EAAE,MAAM;EAAW,GAAG;EAAiB;CAChD,UAAU;EAAE,MAAM;EAAY,GAAG;EAAG,GAAG;EAAiB;CACxD,iBAAiB;EAAE,MAAM;EAAmB,GAAG;EAAG,GAAG;EAAiB;CACtE,eAAe;EAAE,MAAM;EAAiB,OAAO,KAAA;EAAW,GAAG;EAAiB;CAC9E,kBAAkB;EAAE,MAAM;EAAoB,OAAO,KAAA;EAAW,GAAG;EAAiB;CACpF,aAAa;EAAE,MAAM;EAAe,GAAG;EAAG,GAAG;EAAiB;CAC9D,oBAAoB;EAAE,MAAM;EAAsB,GAAG;EAAG,GAAG;EAAiB;CAC5E,2BAA2B;EAAE,MAAM;EAA6B,OAAO;EAAI,GAAG;EAAiB;CAC/F,8BAA8B;EAC5B,MAAM;EACN,OAAO;EACP,GAAG;EACJ;CACD,gCAAgC;EAC9B,MAAM;EACN,UAAU;EACV,mBAAmB;EACnB,UAAU,KAAA;EACV,OAAO;EACP,GAAG;EACJ;CACD,iCAAiC;EAC/B,MAAM;EACN,OAAO;EACP,GAAG;EACJ;CACD,OAAO;EAAE,MAAM;EAAS,GAAG;EAAG,GAAG;EAAiB;CAClD,UAAU;EAAE,MAAM;EAAY,GAAG;EAAG,GAAG;EAAiB;CACxD,OAAO;EAAE,MAAM;EAAS,OAAO,EAAE;EAAE,GAAG;EAAiB;CACvD,UAAU;EAAE,MAAM;EAAY,OAAO,EAAE;EAAE,GAAG;EAAiB;CAC7D,MAAM;EAAE,MAAM;EAAQ,GAAG;EAAI,GAAG;EAAiB;CACjD,SAAS;EAAE,MAAM;EAAW,GAAG;EAAI,GAAG;EAAiB;CACxD"}
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../src/components/PlAdvancedFilter/constants.ts"],"sourcesContent":["import type { FilterSpecType } from \"@platforma-sdk/model\";\nimport type { EditableFilter, PlAdvancedFilterColumnId, SupportedFilterTypes } from \"./types\";\n\n// List of ALL supported filter types in Advanced Filter component\nexport const SUPPORTED_FILTER_TYPES = [\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 \"patternFuzzyContainSubsequence\",\n \"patternMatchesRegularExpression\",\n \"inSet\",\n \"notInSet\",\n \"topN\",\n \"bottomN\",\n] satisfies FilterSpecType[];\n\nexport const DEFAULT_FILTER_TYPE: SupportedFilterTypes = \"isNA\";\n\nconst emptyCommonPart = { column: \"\" as PlAdvancedFilterColumnId };\nexport const DEFAULT_FILTERS: Record<SupportedFilterTypes, EditableFilter> = {\n isNA: { type: \"isNA\", ...emptyCommonPart },\n isNotNA: { type: \"isNotNA\", ...emptyCommonPart },\n lessThan: { type: \"lessThan\", x: 0, ...emptyCommonPart },\n lessThanOrEqual: { type: \"lessThanOrEqual\", x: 0, ...emptyCommonPart },\n patternEquals: { type: \"patternEquals\", value: undefined, ...emptyCommonPart },\n patternNotEquals: { type: \"patternNotEquals\", value: undefined, ...emptyCommonPart },\n greaterThan: { type: \"greaterThan\", x: 0, ...emptyCommonPart },\n greaterThanOrEqual: { type: \"greaterThanOrEqual\", x: 0, ...emptyCommonPart },\n patternContainSubsequence: { type: \"patternContainSubsequence\", value: \"\", ...emptyCommonPart },\n patternNotContainSubsequence: {\n type: \"patternNotContainSubsequence\",\n value: \"\",\n ...emptyCommonPart,\n },\n patternFuzzyContainSubsequence: {\n type: \"patternFuzzyContainSubsequence\",\n maxEdits: 2,\n substitutionsOnly: false,\n wildcard: undefined,\n value: \"\",\n ...emptyCommonPart,\n },\n patternMatchesRegularExpression: {\n type: \"patternMatchesRegularExpression\",\n value: \"\",\n ...emptyCommonPart,\n },\n equal: { type: \"equal\", x: 0, ...emptyCommonPart },\n notEqual: { type: \"notEqual\", x: 0, ...emptyCommonPart },\n inSet: { type: \"inSet\", value: [], ...emptyCommonPart },\n notInSet: { type: \"notInSet\", value: [], ...emptyCommonPart },\n topN: { type: \"topN\", n: 10, ...emptyCommonPart },\n bottomN: { type: \"bottomN\", n: 10, ...emptyCommonPart },\n};\n"],"mappings":";AAIA,IAAa,IAAyB;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EAEY,IAA4C,QAEnD,IAAkB,EAAE,QAAQ,IAAgC,EACrD,IAAgE;CAC3E,MAAM;EAAE,MAAM;EAAQ,GAAG;EAAiB;CAC1C,SAAS;EAAE,MAAM;EAAW,GAAG;EAAiB;CAChD,UAAU;EAAE,MAAM;EAAY,GAAG;EAAG,GAAG;EAAiB;CACxD,iBAAiB;EAAE,MAAM;EAAmB,GAAG;EAAG,GAAG;EAAiB;CACtE,eAAe;EAAE,MAAM;EAAiB,OAAO,KAAA;EAAW,GAAG;EAAiB;CAC9E,kBAAkB;EAAE,MAAM;EAAoB,OAAO,KAAA;EAAW,GAAG;EAAiB;CACpF,aAAa;EAAE,MAAM;EAAe,GAAG;EAAG,GAAG;EAAiB;CAC9D,oBAAoB;EAAE,MAAM;EAAsB,GAAG;EAAG,GAAG;EAAiB;CAC5E,2BAA2B;EAAE,MAAM;EAA6B,OAAO;EAAI,GAAG;EAAiB;CAC/F,8BAA8B;EAC5B,MAAM;EACN,OAAO;EACP,GAAG;EACJ;CACD,gCAAgC;EAC9B,MAAM;EACN,UAAU;EACV,mBAAmB;EACnB,UAAU,KAAA;EACV,OAAO;EACP,GAAG;EACJ;CACD,iCAAiC;EAC/B,MAAM;EACN,OAAO;EACP,GAAG;EACJ;CACD,OAAO;EAAE,MAAM;EAAS,GAAG;EAAG,GAAG;EAAiB;CAClD,UAAU;EAAE,MAAM;EAAY,GAAG;EAAG,GAAG;EAAiB;CACxD,OAAO;EAAE,MAAM;EAAS,OAAO,EAAE;EAAE,GAAG;EAAiB;CACvD,UAAU;EAAE,MAAM;EAAY,OAAO,EAAE;EAAE,GAAG;EAAiB;CAC7D,MAAM;EAAE,MAAM;EAAQ,GAAG;EAAI,GAAG;EAAiB;CACjD,SAAS;EAAE,MAAM;EAAW,GAAG;EAAI,GAAG;EAAiB;CACxD"}
@@ -1,6 +1,8 @@
1
1
  import { SUPPORTED_FILTER_TYPES as e } from "./constants.js";
2
2
  import "./PlAdvancedFilter.js";
3
- const t = e;
3
+ //#region src/components/PlAdvancedFilter/index.ts
4
+ var t = e;
5
+ //#endregion
4
6
  export { t as PlAdvancedFilterSupportedFilters };
5
7
 
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/PlAdvancedFilter/index.ts"],"sourcesContent":["import { SUPPORTED_FILTER_TYPES } from \"./constants.ts\";\nimport type {\n RootFilter,\n SourceOptionInfo,\n PlAdvancedFilterColumnId,\n RequiredMeta,\n} from \"./types.ts\";\n\nexport { default as PlAdvancedFilterComponent } from \"./PlAdvancedFilter.vue\";\nexport const PlAdvancedFilterSupportedFilters = SUPPORTED_FILTER_TYPES;\nexport type PlAdvancedFilterItem = SourceOptionInfo;\nexport type PlAdvancedFilter<Meta extends RequiredMeta = RequiredMeta> = RootFilter<Meta>;\nexport { PlAdvancedFilterColumnId };\n"],"mappings":";;AASA,MAAa,IAAmC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/PlAdvancedFilter/index.ts"],"sourcesContent":["import { SUPPORTED_FILTER_TYPES } from \"./constants.ts\";\nimport type {\n RootFilter,\n SourceOptionInfo,\n PlAdvancedFilterColumnId,\n RequiredMeta,\n} from \"./types.ts\";\n\nexport { default as PlAdvancedFilterComponent } from \"./PlAdvancedFilter.vue\";\nexport const PlAdvancedFilterSupportedFilters = SUPPORTED_FILTER_TYPES;\nexport type PlAdvancedFilterItem = SourceOptionInfo;\nexport type PlAdvancedFilter<Meta extends RequiredMeta = RequiredMeta> = RootFilter<Meta>;\nexport { PlAdvancedFilterColumnId };\n"],"mappings":";;;AASA,IAAa,IAAmC"}
@@ -1,6 +1,7 @@
1
1
  import { DEFAULT_FILTERS as e, DEFAULT_FILTER_TYPE as t } from "./constants.js";
2
2
  import { getTypeFromPColumnOrAxisSpec as n, isAnchoredPColumnId as r, isAxisId as i, isFilteredPColumn as a, parseJson as o } from "@platforma-sdk/model";
3
3
  import { filterUiMetadata as s } from "@milaboratories/uikit";
4
+ //#region src/components/PlAdvancedFilter/utils.ts
4
5
  function c() {
5
6
  return Date.now();
6
7
  }
@@ -51,6 +52,7 @@ function g(e) {
51
52
  return !1;
52
53
  }
53
54
  }
55
+ //#endregion
54
56
  export { l as createNewGroup, h as getFilterInfo, c as getNewId, u as getNormalizedSpec, p as isNumericFilter, d as isNumericValueType, m as isPositionFilter, f as isStringValueType, g as isValidColumnId };
55
57
 
56
58
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../../src/components/PlAdvancedFilter/utils.ts"],"sourcesContent":["import { filterUiMetadata } from \"@milaboratories/uikit\";\nimport type {\n AnchoredPColumnId,\n AxisId,\n CanonicalizedJson,\n FilteredPColumnId,\n ValueType,\n} from \"@platforma-sdk/model\";\nimport {\n getTypeFromPColumnOrAxisSpec,\n isAnchoredPColumnId,\n isAxisId,\n isFilteredPColumn,\n parseJson,\n type AxisSpec,\n type PColumnSpec,\n type SUniversalPColumnId,\n} from \"@platforma-sdk/model\";\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS } from \"./constants\";\nimport type { NodeFilter } from \"./types\";\nimport {\n type CommonFilter,\n type EditableFilter,\n type PlAdvancedFilterColumnId,\n type SupportedFilterTypes,\n} from \"./types\";\n\nexport function getNewId() {\n return Date.now();\n}\n\nexport function createNewGroup(selectedSourceId: string): NodeFilter {\n return {\n id: getNewId(),\n isExpanded: true,\n type: \"and\",\n filters: [\n {\n id: getNewId(),\n isExpanded: true,\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: selectedSourceId as SUniversalPColumnId,\n } as CommonFilter,\n ],\n };\n}\n\nexport type NormalizedSpecData = {\n valueType: ValueType;\n annotations: PColumnSpec[\"annotations\"];\n domain: PColumnSpec[\"domain\"];\n contextDomain: PColumnSpec[\"contextDomain\"];\n};\nexport function getNormalizedSpec(spec: PColumnSpec | AxisSpec): NormalizedSpecData {\n return {\n valueType: getTypeFromPColumnOrAxisSpec(spec),\n annotations: spec.annotations,\n domain: spec.domain,\n contextDomain: spec.contextDomain,\n };\n}\n\nexport function isNumericValueType(spec?: PColumnSpec | AxisSpec): boolean {\n if (!spec) {\n return false;\n }\n const valueType = getNormalizedSpec(spec).valueType;\n return (\n valueType === \"Int\" || valueType === \"Long\" || valueType === \"Float\" || valueType === \"Double\"\n );\n}\n\nexport function isStringValueType(spec?: PColumnSpec | AxisSpec): boolean {\n if (!spec) {\n return false;\n }\n const valueType = getNormalizedSpec(spec).valueType;\n return valueType === \"String\";\n}\n\nexport function isNumericFilter(filter: EditableFilter): filter is Extract<\n EditableFilter,\n {\n type:\n | \"equal\"\n | \"notEqual\"\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"greaterThan\"\n | \"greaterThanOrEqual\";\n }\n> {\n return (\n filter.type === \"equal\" ||\n filter.type === \"notEqual\" ||\n filter.type === \"lessThan\" ||\n filter.type === \"lessThanOrEqual\" ||\n filter.type === \"greaterThan\" ||\n filter.type === \"greaterThanOrEqual\"\n );\n}\n\nexport function isPositionFilter(\n filter: EditableFilter,\n): filter is Extract<EditableFilter, { type: \"topN\" | \"bottomN\" }> {\n return filter.type === \"topN\" || filter.type === \"bottomN\";\n}\n\nexport function isStringFilter(filter: EditableFilter): filter is Extract<\n EditableFilter,\n {\n type:\n | \"patternEquals\"\n | \"patternNotEquals\"\n | \"patternContainSubsequence\"\n | \"patternNotContainSubsequence\"\n | \"patternMatchesRegularExpression\"\n | \"patternFuzzyContainSubsequence\";\n }\n> {\n return (\n filter.type === \"patternEquals\" ||\n filter.type === \"patternNotEquals\" ||\n filter.type === \"patternContainSubsequence\" ||\n filter.type === \"patternNotContainSubsequence\" ||\n filter.type === \"patternMatchesRegularExpression\" ||\n filter.type === \"patternFuzzyContainSubsequence\"\n );\n}\n\nexport function getFilterInfo(filterType: SupportedFilterTypes): {\n label: string;\n supportedFor: (spec: NormalizedSpecData) => boolean;\n} {\n return filterUiMetadata[filterType as keyof typeof filterUiMetadata];\n}\n\nexport function isValidColumnId(id: unknown): id is PlAdvancedFilterColumnId {\n if (typeof id !== \"string\") {\n return false;\n }\n try {\n const parsedId = parseJson<FilteredPColumnId | AnchoredPColumnId | AxisId>(\n id as CanonicalizedJson<FilteredPColumnId | AnchoredPColumnId | AxisId>,\n );\n return isFilteredPColumn(parsedId) || isAnchoredPColumnId(parsedId) || isAxisId(parsedId);\n } catch {\n return false;\n }\n}\n"],"mappings":";;;AA2BA,SAAgB,IAAW;AACzB,QAAO,KAAK,KAAK;;AAGnB,SAAgB,EAAe,GAAsC;AACnE,QAAO;EACL,IAAI,GAAU;EACd,YAAY;EACZ,MAAM;EACN,SAAS,CACP;GACE,IAAI,GAAU;GACd,YAAY;GACZ,GAAG,EAAgB;GACnB,QAAQ;GACT,CACF;EACF;;AASH,SAAgB,EAAkB,GAAkD;AAClF,QAAO;EACL,WAAW,EAA6B,EAAK;EAC7C,aAAa,EAAK;EAClB,QAAQ,EAAK;EACb,eAAe,EAAK;EACrB;;AAGH,SAAgB,EAAmB,GAAwC;AACzE,KAAI,CAAC,EACH,QAAO;CAET,IAAM,IAAY,EAAkB,EAAK,CAAC;AAC1C,QACE,MAAc,SAAS,MAAc,UAAU,MAAc,WAAW,MAAc;;AAI1F,SAAgB,EAAkB,GAAwC;AAKxE,QAJK,IAGa,EAAkB,EAAK,CAAC,cACrB,WAHZ;;AAMX,SAAgB,EAAgB,GAW9B;AACA,QACE,EAAO,SAAS,WAChB,EAAO,SAAS,cAChB,EAAO,SAAS,cAChB,EAAO,SAAS,qBAChB,EAAO,SAAS,iBAChB,EAAO,SAAS;;AAIpB,SAAgB,EACd,GACiE;AACjE,QAAO,EAAO,SAAS,UAAU,EAAO,SAAS;;AAyBnD,SAAgB,EAAc,GAG5B;AACA,QAAO,EAAiB;;AAG1B,SAAgB,EAAgB,GAA6C;AAC3E,KAAI,OAAO,KAAO,SAChB,QAAO;AAET,KAAI;EACF,IAAM,IAAW,EACf,EACD;AACD,SAAO,EAAkB,EAAS,IAAI,EAAoB,EAAS,IAAI,EAAS,EAAS;SACnF;AACN,SAAO"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../src/components/PlAdvancedFilter/utils.ts"],"sourcesContent":["import { filterUiMetadata } from \"@milaboratories/uikit\";\nimport type {\n AnchoredPColumnId,\n AxisId,\n CanonicalizedJson,\n FilteredPColumnId,\n ValueType,\n} from \"@platforma-sdk/model\";\nimport {\n getTypeFromPColumnOrAxisSpec,\n isAnchoredPColumnId,\n isAxisId,\n isFilteredPColumn,\n parseJson,\n type AxisSpec,\n type PColumnSpec,\n type SUniversalPColumnId,\n} from \"@platforma-sdk/model\";\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS } from \"./constants\";\nimport type { NodeFilter } from \"./types\";\nimport {\n type CommonFilter,\n type EditableFilter,\n type PlAdvancedFilterColumnId,\n type SupportedFilterTypes,\n} from \"./types\";\n\nexport function getNewId() {\n return Date.now();\n}\n\nexport function createNewGroup(selectedSourceId: string): NodeFilter {\n return {\n id: getNewId(),\n isExpanded: true,\n type: \"and\",\n filters: [\n {\n id: getNewId(),\n isExpanded: true,\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: selectedSourceId as SUniversalPColumnId,\n } as CommonFilter,\n ],\n };\n}\n\nexport type NormalizedSpecData = {\n valueType: ValueType;\n annotations: PColumnSpec[\"annotations\"];\n domain: PColumnSpec[\"domain\"];\n contextDomain: PColumnSpec[\"contextDomain\"];\n};\nexport function getNormalizedSpec(spec: PColumnSpec | AxisSpec): NormalizedSpecData {\n return {\n valueType: getTypeFromPColumnOrAxisSpec(spec),\n annotations: spec.annotations,\n domain: spec.domain,\n contextDomain: spec.contextDomain,\n };\n}\n\nexport function isNumericValueType(spec?: PColumnSpec | AxisSpec): boolean {\n if (!spec) {\n return false;\n }\n const valueType = getNormalizedSpec(spec).valueType;\n return (\n valueType === \"Int\" || valueType === \"Long\" || valueType === \"Float\" || valueType === \"Double\"\n );\n}\n\nexport function isStringValueType(spec?: PColumnSpec | AxisSpec): boolean {\n if (!spec) {\n return false;\n }\n const valueType = getNormalizedSpec(spec).valueType;\n return valueType === \"String\";\n}\n\nexport function isNumericFilter(filter: EditableFilter): filter is Extract<\n EditableFilter,\n {\n type:\n | \"equal\"\n | \"notEqual\"\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"greaterThan\"\n | \"greaterThanOrEqual\";\n }\n> {\n return (\n filter.type === \"equal\" ||\n filter.type === \"notEqual\" ||\n filter.type === \"lessThan\" ||\n filter.type === \"lessThanOrEqual\" ||\n filter.type === \"greaterThan\" ||\n filter.type === \"greaterThanOrEqual\"\n );\n}\n\nexport function isPositionFilter(\n filter: EditableFilter,\n): filter is Extract<EditableFilter, { type: \"topN\" | \"bottomN\" }> {\n return filter.type === \"topN\" || filter.type === \"bottomN\";\n}\n\nexport function isStringFilter(filter: EditableFilter): filter is Extract<\n EditableFilter,\n {\n type:\n | \"patternEquals\"\n | \"patternNotEquals\"\n | \"patternContainSubsequence\"\n | \"patternNotContainSubsequence\"\n | \"patternMatchesRegularExpression\"\n | \"patternFuzzyContainSubsequence\";\n }\n> {\n return (\n filter.type === \"patternEquals\" ||\n filter.type === \"patternNotEquals\" ||\n filter.type === \"patternContainSubsequence\" ||\n filter.type === \"patternNotContainSubsequence\" ||\n filter.type === \"patternMatchesRegularExpression\" ||\n filter.type === \"patternFuzzyContainSubsequence\"\n );\n}\n\nexport function getFilterInfo(filterType: SupportedFilterTypes): {\n label: string;\n supportedFor: (spec: NormalizedSpecData) => boolean;\n} {\n return filterUiMetadata[filterType as keyof typeof filterUiMetadata];\n}\n\nexport function isValidColumnId(id: unknown): id is PlAdvancedFilterColumnId {\n if (typeof id !== \"string\") {\n return false;\n }\n try {\n const parsedId = parseJson<FilteredPColumnId | AnchoredPColumnId | AxisId>(\n id as CanonicalizedJson<FilteredPColumnId | AnchoredPColumnId | AxisId>,\n );\n return isFilteredPColumn(parsedId) || isAnchoredPColumnId(parsedId) || isAxisId(parsedId);\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;AA2BA,SAAgB,IAAW;AACzB,QAAO,KAAK,KAAK;;AAGnB,SAAgB,EAAe,GAAsC;AACnE,QAAO;EACL,IAAI,GAAU;EACd,YAAY;EACZ,MAAM;EACN,SAAS,CACP;GACE,IAAI,GAAU;GACd,YAAY;GACZ,GAAG,EAAgB;GACnB,QAAQ;GACT,CACF;EACF;;AASH,SAAgB,EAAkB,GAAkD;AAClF,QAAO;EACL,WAAW,EAA6B,EAAK;EAC7C,aAAa,EAAK;EAClB,QAAQ,EAAK;EACb,eAAe,EAAK;EACrB;;AAGH,SAAgB,EAAmB,GAAwC;AACzE,KAAI,CAAC,EACH,QAAO;CAET,IAAM,IAAY,EAAkB,EAAK,CAAC;AAC1C,QACE,MAAc,SAAS,MAAc,UAAU,MAAc,WAAW,MAAc;;AAI1F,SAAgB,EAAkB,GAAwC;AAKxE,QAJK,IAGa,EAAkB,EAAK,CAAC,cACrB,WAHZ;;AAMX,SAAgB,EAAgB,GAW9B;AACA,QACE,EAAO,SAAS,WAChB,EAAO,SAAS,cAChB,EAAO,SAAS,cAChB,EAAO,SAAS,qBAChB,EAAO,SAAS,iBAChB,EAAO,SAAS;;AAIpB,SAAgB,EACd,GACiE;AACjE,QAAO,EAAO,SAAS,UAAU,EAAO,SAAS;;AAyBnD,SAAgB,EAAc,GAG5B;AACA,QAAO,EAAiB;;AAG1B,SAAgB,EAAgB,GAA6C;AAC3E,KAAI,OAAO,KAAO,SAChB,QAAO;AAET,KAAI;EACF,IAAM,IAAW,EACf,EACD;AACD,SAAO,EAAkB,EAAS,IAAI,EAAoB,EAAS,IAAI,EAAS,EAAS;SACnF;AACN,SAAO"}
@@ -1,5 +1,7 @@
1
1
  import e from "./PlAgCellFile.vue2.js";
2
+ //#region src/components/PlAgCellFile/PlAgCellFile.vue
2
3
  var t = e;
4
+ //#endregion
3
5
  export { t as default };
4
6
 
5
7
  //# sourceMappingURL=PlAgCellFile.js.map
@@ -1,14 +1,11 @@
1
1
  import { computed as e, createElementBlock as t, createVNode as n, defineComponent as r, openBlock as i, unref as a } from "vue";
2
2
  import { PlFileInput as o } from "@milaboratories/uikit";
3
+ //#region src/components/PlAgCellFile/PlAgCellFile.vue?vue&type=script&setup=true&lang.ts
3
4
  var s = { style: { height: "100%" } }, c = /* @__PURE__ */ r({
4
5
  __name: "PlAgCellFile",
5
6
  props: { params: {} },
6
7
  setup(r) {
7
8
  let c = r, l = e(() => c.params.extensions), u = e(() => c.params.value);
8
- /**
9
- * When value changes in the file input this method forward the value to the ag-grid,
10
- * which in tern forwards in to the valueSetter in corresponding column.
11
- * */
12
9
  function d(e) {
13
10
  c.params.setValue(e);
14
11
  }
@@ -31,6 +28,7 @@ var s = { style: { height: "100%" } }, c = /* @__PURE__ */ r({
31
28
  ])]));
32
29
  }
33
30
  });
31
+ //#endregion
34
32
  export { c as default };
35
33
 
36
34
  //# sourceMappingURL=PlAgCellFile.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgCellFile.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgCellFile/PlAgCellFile.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { PlFileInput } from \"@milaboratories/uikit\";\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport type { ImportFileHandle, ImportProgress } from \"@platforma-sdk/model\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n // this component is intended to be used in ag-grid, params are the main object\n // to communicate with the corresponding cell data\n params: ICellRendererParams<unknown, ImportFileHandle> & {\n extensions?: string[];\n progress?: ImportProgress;\n /**\n * The resolveProgress function is an optional input parameter for the component\n * that allows tracking the file upload progress in real-time.\n * By passing resolveProgress, you can ensure that the component\n * displays accurate progress values for each file as they upload.\n * How to use it in AgGrid\n * cellRendererParams: {\n * resolveProgress: (fileHandle: ImportFileHandle | undefined) => {\n * const progresses = app.progresses;\n * if (!fileHandle) return undefined;\n * else return progresses[fileHandle];\n * }\n * }\n */\n resolveProgress?: (v: ImportFileHandle | undefined) => ImportProgress | undefined;\n };\n}>();\n\nconst extensions = computed(() => props.params.extensions);\n\n// extracting cell value and casting it to the type we expect\nconst handle = computed(() => props.params.value as ImportFileHandle | undefined);\n\n/**\n * When value changes in the file input this method forward the value to the ag-grid,\n * which in tern forwards in to the valueSetter in corresponding column.\n * */\nfunction onHandleUpdate(newHandle: ImportFileHandle | undefined) {\n props.params.setValue!(newHandle);\n}\n\nconst currentProgress = computed(() => {\n return props.params.resolveProgress ? props.params.resolveProgress(handle.value) : undefined;\n});\n</script>\n\n<template>\n <div style=\"height: 100%\">\n <PlFileInput\n show-filename-only\n clearable\n cell-style\n file-dialog-title=\"Select any file\"\n :placeholder=\"`Choose file ${extensions ? extensions[0] : ''}`\"\n :extensions=\"extensions\"\n :model-value=\"handle\"\n :progress=\"currentProgress\"\n @update:model-value=\"onHandleUpdate\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;EAMA,IAAM,IAAQ,GAwBR,IAAa,QAAe,EAAM,OAAO,WAAW,EAGpD,IAAS,QAAe,EAAM,OAAO,MAAsC;;;;;EAMjF,SAAS,EAAe,GAAyC;AAC/D,KAAM,OAAO,SAAU,EAAU;;EAGnC,IAAM,IAAkB,QACf,EAAM,OAAO,kBAAkB,EAAM,OAAO,gBAAgB,EAAO,MAAM,GAAG,KAAA,EACnF;yBAIA,EAYM,OAZN,GAYM,CAXJ,EAUE,EAAA,EAAA,EAAA;GATA,sBAAA;GACA,WAAA;GACA,cAAA;GACA,qBAAkB;GACjB,aAAW,eAAiB,EAAA,QAAa,EAAA,MAAU,KAAA;GACnD,YAAY,EAAA;GACZ,eAAa,EAAA;GACb,UAAU,EAAA;GACV,uBAAoB"}
1
+ {"version":3,"file":"PlAgCellFile.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgCellFile/PlAgCellFile.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { PlFileInput } from \"@milaboratories/uikit\";\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport type { ImportFileHandle, ImportProgress } from \"@platforma-sdk/model\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n // this component is intended to be used in ag-grid, params are the main object\n // to communicate with the corresponding cell data\n params: ICellRendererParams<unknown, ImportFileHandle> & {\n extensions?: string[];\n progress?: ImportProgress;\n /**\n * The resolveProgress function is an optional input parameter for the component\n * that allows tracking the file upload progress in real-time.\n * By passing resolveProgress, you can ensure that the component\n * displays accurate progress values for each file as they upload.\n * How to use it in AgGrid\n * cellRendererParams: {\n * resolveProgress: (fileHandle: ImportFileHandle | undefined) => {\n * const progresses = app.progresses;\n * if (!fileHandle) return undefined;\n * else return progresses[fileHandle];\n * }\n * }\n */\n resolveProgress?: (v: ImportFileHandle | undefined) => ImportProgress | undefined;\n };\n}>();\n\nconst extensions = computed(() => props.params.extensions);\n\n// extracting cell value and casting it to the type we expect\nconst handle = computed(() => props.params.value as ImportFileHandle | undefined);\n\n/**\n * When value changes in the file input this method forward the value to the ag-grid,\n * which in tern forwards in to the valueSetter in corresponding column.\n * */\nfunction onHandleUpdate(newHandle: ImportFileHandle | undefined) {\n props.params.setValue!(newHandle);\n}\n\nconst currentProgress = computed(() => {\n return props.params.resolveProgress ? props.params.resolveProgress(handle.value) : undefined;\n});\n</script>\n\n<template>\n <div style=\"height: 100%\">\n <PlFileInput\n show-filename-only\n clearable\n cell-style\n file-dialog-title=\"Select any file\"\n :placeholder=\"`Choose file ${extensions ? extensions[0] : ''}`\"\n :extensions=\"extensions\"\n :model-value=\"handle\"\n :progress=\"currentProgress\"\n @update:model-value=\"onHandleUpdate\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;EAMA,IAAM,IAAQ,GAwBR,IAAa,QAAe,EAAM,OAAO,WAAW,EAGpD,IAAS,QAAe,EAAM,OAAO,MAAsC;EAMjF,SAAS,EAAe,GAAyC;AAC/D,KAAM,OAAO,SAAU,EAAU;;EAGnC,IAAM,IAAkB,QACf,EAAM,OAAO,kBAAkB,EAAM,OAAO,gBAAgB,EAAO,MAAM,GAAG,KAAA,EACnF;yBAIA,EAYM,OAZN,GAYM,CAXJ,EAUE,EAAA,EAAA,EAAA;GATA,sBAAA;GACA,WAAA;GACA,cAAA;GACA,qBAAkB;GACjB,aAAW,eAAiB,EAAA,QAAa,EAAA,MAAU,KAAA;GACnD,YAAY,EAAA;GACZ,eAAa,EAAA;GACb,UAAU,EAAA;GACV,uBAAoB"}
@@ -1,5 +1,7 @@
1
1
  import e from "./PlAgCellProgress.vue2.js";
2
+ //#region src/components/PlAgCellProgress/PlAgCellProgress.vue
2
3
  var t = e;
4
+ //#endregion
3
5
  export { t as default };
4
6
 
5
7
  //# sourceMappingURL=PlAgCellProgress.js.map
@@ -1,5 +1,6 @@
1
1
  import { createBlock as e, defineComponent as t, guardReactiveProps as n, normalizeProps as r, openBlock as i, unref as a } from "vue";
2
2
  import { PlProgressCell as o } from "@milaboratories/uikit";
3
+ //#region src/components/PlAgCellProgress/PlAgCellProgress.vue?vue&type=script&setup=true&lang.ts
3
4
  var s = /* @__PURE__ */ t({
4
5
  __name: "PlAgCellProgress",
5
6
  props: { params: {} },
@@ -8,6 +9,7 @@ var s = /* @__PURE__ */ t({
8
9
  return (t, c) => (i(), e(a(o), r(n(s.params)), null, 16));
9
10
  }
10
11
  });
12
+ //#endregion
11
13
  export { s as default };
12
14
 
13
15
  //# sourceMappingURL=PlAgCellProgress.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgCellProgress.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgCellProgress/PlAgCellProgress.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { PlProgressCellProps } from \"@milaboratories/uikit\";\nimport { PlProgressCell } from \"@milaboratories/uikit\";\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\n\nconst props = defineProps<{ params: ICellRendererParams & PlProgressCellProps }>();\n</script>\n\n<template>\n <PlProgressCell v-bind=\"props.params\" />\n</template>\n"],"mappings":";;;;;;EAKA,IAAM,IAAQ;yBAIZ,EAAwC,EAAA,EAAA,EAAA,EAAA,EAAhB,EAAM,OAAM,CAAA,EAAA,MAAA,GAAA"}
1
+ {"version":3,"file":"PlAgCellProgress.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgCellProgress/PlAgCellProgress.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { PlProgressCellProps } from \"@milaboratories/uikit\";\nimport { PlProgressCell } from \"@milaboratories/uikit\";\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\n\nconst props = defineProps<{ params: ICellRendererParams & PlProgressCellProps }>();\n</script>\n\n<template>\n <PlProgressCell v-bind=\"props.params\" />\n</template>\n"],"mappings":";;;;;;;EAKA,IAAM,IAAQ;yBAIZ,EAAwC,EAAA,EAAA,EAAA,EAAA,EAAhB,EAAM,OAAM,CAAA,EAAA,MAAA,GAAA"}
@@ -1,6 +1,8 @@
1
1
  import e from "./PlAgCellStatusTag.vue2.js";
2
2
  import './PlAgCellStatusTag.style.css';/* empty css */
3
+ //#region src/components/PlAgCellStatusTag/PlAgCellStatusTag.vue
3
4
  var t = e;
5
+ //#endregion
4
6
  export { t as default };
5
7
 
6
8
  //# sourceMappingURL=PlAgCellStatusTag.js.map
@@ -1,5 +1,6 @@
1
1
  import { createElementBlock as e, createVNode as t, defineComponent as n, openBlock as r, unref as i } from "vue";
2
2
  import { PlStatusTag as a } from "@milaboratories/uikit";
3
+ //#region src/components/PlAgCellStatusTag/PlAgCellStatusTag.vue?vue&type=script&setup=true&lang.ts
3
4
  var o = { class: "pl-ag-cell-status-tag d-flex align-center" }, s = /* @__PURE__ */ n({
4
5
  __name: "PlAgCellStatusTag",
5
6
  props: { params: {} },
@@ -7,6 +8,7 @@ var o = { class: "pl-ag-cell-status-tag d-flex align-center" }, s = /* @__PURE__
7
8
  return (s, c) => (r(), e("div", o, [t(i(a), { type: n.params?.type }, null, 8, ["type"])]));
8
9
  }
9
10
  });
11
+ //#endregion
10
12
  export { s as default };
11
13
 
12
14
  //# sourceMappingURL=PlAgCellStatusTag.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgCellStatusTag.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgCellStatusTag/PlAgCellStatusTag.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport { PlStatusTag } from \"@milaboratories/uikit\";\nimport type { PlStatusTagType } from \"@milaboratories/uikit\";\n\ndefineProps<{ params?: ICellRendererParams & { type: PlStatusTagType } }>();\n</script>\n\n<template>\n <div class=\"pl-ag-cell-status-tag d-flex align-center\">\n <PlStatusTag :type=\"params?.type\" />\n </div>\n</template>\n\n<style lang=\"scss\">\n.pl-ag-cell-status-tag {\n height: 100%;\n padding: 0 12px;\n}\n</style>\n"],"mappings":";;;;;;yBASE,EAEM,OAFN,GAEM,CADJ,EAAoC,EAAA,EAAA,EAAA,EAAtB,MAAM,EAAA,QAAQ,MAAA,EAAA,MAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"PlAgCellStatusTag.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgCellStatusTag/PlAgCellStatusTag.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport { PlStatusTag } from \"@milaboratories/uikit\";\nimport type { PlStatusTagType } from \"@milaboratories/uikit\";\n\ndefineProps<{ params?: ICellRendererParams & { type: PlStatusTagType } }>();\n</script>\n\n<template>\n <div class=\"pl-ag-cell-status-tag d-flex align-center\">\n <PlStatusTag :type=\"params?.type\" />\n </div>\n</template>\n\n<style lang=\"scss\">\n.pl-ag-cell-status-tag {\n height: 100%;\n padding: 0 12px;\n}\n</style>\n"],"mappings":";;;;;;;yBASE,EAEM,OAFN,GAEM,CADJ,EAAoC,EAAA,EAAA,EAAA,EAAtB,MAAM,EAAA,QAAQ,MAAA,EAAA,MAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA"}
@@ -1,6 +1,8 @@
1
1
  import e from "./PlAgChartHistogramCell.vue2.js";
2
2
  import './PlAgChartHistogramCell.style.css';/* empty css */
3
+ //#region src/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue
3
4
  var t = e;
5
+ //#endregion
4
6
  export { t as default };
5
7
 
6
8
  //# sourceMappingURL=PlAgChartHistogramCell.js.map
@@ -1,6 +1,7 @@
1
1
  import { computed as e, createBlock as t, createElementBlock as n, defineComponent as r, openBlock as i, ref as a, unref as o } from "vue";
2
2
  import { useElementBounding as s } from "@vueuse/core";
3
3
  import { PlChartHistogram as c } from "@milaboratories/uikit";
4
+ //#region src/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue?vue&type=script&setup=true&lang.ts
4
5
  var l = {
5
6
  key: 1,
6
7
  class: "pl-ag-chart-histogram-cell__not-ready"
@@ -26,6 +27,7 @@ var l = {
26
27
  }, null, 8, ["settings"])) : (i(), n("div", l, "Not ready"))], 512));
27
28
  }
28
29
  });
30
+ //#endregion
29
31
  export { u as default };
30
32
 
31
33
  //# sourceMappingURL=PlAgChartHistogramCell.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgChartHistogramCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport { type InferComponentProps, PlChartHistogram } from \"@milaboratories/uikit\";\nimport { computed, ref } from \"vue\";\nimport { useElementBounding } from \"@vueuse/core\";\n\ntype PlChartHistogramSettings = InferComponentProps<typeof PlChartHistogram>[\"settings\"];\n\nconst props = defineProps<{\n params: ICellRendererParams<unknown, PlChartHistogramSettings | undefined>;\n}>();\n\nconst root = ref<HTMLElement>();\n\nconst { width } = useElementBounding(root);\n\nconst settings = computed<PlChartHistogramSettings | undefined>(() => {\n if (!props.params.value) {\n return undefined;\n }\n\n if (!width.value) {\n return undefined;\n }\n\n return { ...props.params.value, compact: true, totalHeight: 24, totalWidth: width.value };\n});\n</script>\n\n<template>\n <div ref=\"root\" class=\"pl-ag-chart-histogram-cell\">\n <PlChartHistogram v-if=\"settings\" :settings=\"settings\" />\n <div v-else class=\"pl-ag-chart-histogram-cell__not-ready\">Not ready</div>\n </div>\n</template>\n\n<style>\n.pl-ag-chart-histogram-cell {\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.pl-ag-chart-histogram-cell__not-ready {\n color: var(--txt-03) !important;\n}\n</style>\n"],"mappings":";;;;;;;;;;EAQA,IAAM,IAAQ,GAIR,IAAO,GAAkB,EAEzB,EAAE,aAAU,EAAmB,EAAK,EAEpC,IAAW,QAAqD;AAC/D,SAAM,OAAO,SAIb,EAAM,MAIX,QAAO;IAAE,GAAG,EAAM,OAAO;IAAO,SAAS;IAAM,aAAa;IAAI,YAAY,EAAM;IAAO;IACzF;yBAIA,EAGM,OAAA;YAHG;GAAJ,KAAI;GAAO,OAAM;MACI,EAAA,SAAA,GAAA,EAAxB,EAAyD,EAAA,EAAA,EAAA;;GAAtB,UAAU,EAAA;qCAC7C,EAAyE,OAAzE,GAA0D,YAAS,EAAA,EAAA,IAAA"}
1
+ {"version":3,"file":"PlAgChartHistogramCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport { type InferComponentProps, PlChartHistogram } from \"@milaboratories/uikit\";\nimport { computed, ref } from \"vue\";\nimport { useElementBounding } from \"@vueuse/core\";\n\ntype PlChartHistogramSettings = InferComponentProps<typeof PlChartHistogram>[\"settings\"];\n\nconst props = defineProps<{\n params: ICellRendererParams<unknown, PlChartHistogramSettings | undefined>;\n}>();\n\nconst root = ref<HTMLElement>();\n\nconst { width } = useElementBounding(root);\n\nconst settings = computed<PlChartHistogramSettings | undefined>(() => {\n if (!props.params.value) {\n return undefined;\n }\n\n if (!width.value) {\n return undefined;\n }\n\n return { ...props.params.value, compact: true, totalHeight: 24, totalWidth: width.value };\n});\n</script>\n\n<template>\n <div ref=\"root\" class=\"pl-ag-chart-histogram-cell\">\n <PlChartHistogram v-if=\"settings\" :settings=\"settings\" />\n <div v-else class=\"pl-ag-chart-histogram-cell__not-ready\">Not ready</div>\n </div>\n</template>\n\n<style>\n.pl-ag-chart-histogram-cell {\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.pl-ag-chart-histogram-cell__not-ready {\n color: var(--txt-03) !important;\n}\n</style>\n"],"mappings":";;;;;;;;;;;EAQA,IAAM,IAAQ,GAIR,IAAO,GAAkB,EAEzB,EAAE,aAAU,EAAmB,EAAK,EAEpC,IAAW,QAAqD;AAC/D,SAAM,OAAO,SAIb,EAAM,MAIX,QAAO;IAAE,GAAG,EAAM,OAAO;IAAO,SAAS;IAAM,aAAa;IAAI,YAAY,EAAM;IAAO;IACzF;yBAIA,EAGM,OAAA;YAHG;GAAJ,KAAI;GAAO,OAAM;MACI,EAAA,SAAA,GAAA,EAAxB,EAAyD,EAAA,EAAA,EAAA;;GAAtB,UAAU,EAAA;qCAC7C,EAAyE,OAAzE,GAA0D,YAAS,EAAA,EAAA,IAAA"}
@@ -1,6 +1,8 @@
1
1
  import e from "./PlAgChartStackedBarCell.vue2.js";
2
2
  import './PlAgChartStackedBarCell.style.css';/* empty css */
3
+ //#region src/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue
3
4
  var t = e;
5
+ //#endregion
4
6
  export { t as default };
5
7
 
6
8
  //# sourceMappingURL=PlAgChartStackedBarCell.js.map
@@ -1,5 +1,6 @@
1
1
  import { computed as e, createBlock as t, createElementBlock as n, defineComponent as r, openBlock as i, unref as a } from "vue";
2
2
  import { PlChartStackedBarCompact as o } from "@milaboratories/uikit";
3
+ //#region src/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue?vue&type=script&setup=true&lang.ts
3
4
  var s = { class: "pl-ag-chart-stacked-bar-cell" }, c = {
4
5
  key: 1,
5
6
  class: "pl-ag-chart-stacked-bar-cell__not-ready"
@@ -14,6 +15,7 @@ var s = { class: "pl-ag-chart-stacked-bar-cell" }, c = {
14
15
  }, null, 8, ["settings"])) : (i(), n("div", c, "Not ready"))]));
15
16
  }
16
17
  });
18
+ //#endregion
17
19
  export { l as default };
18
20
 
19
21
  //# sourceMappingURL=PlAgChartStackedBarCell.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgChartStackedBarCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport type { PlChartStackedBarSettings } from \"@milaboratories/uikit\";\nimport { PlChartStackedBarCompact } from \"@milaboratories/uikit\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n params: ICellRendererParams<unknown, PlChartStackedBarSettings | undefined>;\n}>();\n\nconst settings = computed(() => props.params.value || undefined);\n</script>\n\n<template>\n <div class=\"pl-ag-chart-stacked-bar-cell\">\n <PlChartStackedBarCompact v-if=\"settings\" :settings=\"settings\" />\n <div v-else class=\"pl-ag-chart-stacked-bar-cell__not-ready\">Not ready</div>\n </div>\n</template>\n\n<style>\n.pl-ag-chart-stacked-bar-cell {\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.pl-ag-chart-stacked-bar-cell__not-ready {\n color: var(--txt-03) !important;\n}\n</style>\n"],"mappings":";;;;;;;;;EAMA,IAAM,IAAQ,GAIR,IAAW,QAAe,EAAM,OAAO,SAAS,KAAA,EAAU;yBAI9D,EAGM,OAHN,GAGM,CAF4B,EAAA,SAAA,GAAA,EAAhC,EAAiE,EAAA,EAAA,EAAA;;GAAtB,UAAU,EAAA;qCACrD,EAA2E,OAA3E,GAA4D,YAAS,EAAA,CAAA"}
1
+ {"version":3,"file":"PlAgChartStackedBarCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport type { PlChartStackedBarSettings } from \"@milaboratories/uikit\";\nimport { PlChartStackedBarCompact } from \"@milaboratories/uikit\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n params: ICellRendererParams<unknown, PlChartStackedBarSettings | undefined>;\n}>();\n\nconst settings = computed(() => props.params.value || undefined);\n</script>\n\n<template>\n <div class=\"pl-ag-chart-stacked-bar-cell\">\n <PlChartStackedBarCompact v-if=\"settings\" :settings=\"settings\" />\n <div v-else class=\"pl-ag-chart-stacked-bar-cell__not-ready\">Not ready</div>\n </div>\n</template>\n\n<style>\n.pl-ag-chart-stacked-bar-cell {\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.pl-ag-chart-stacked-bar-cell__not-ready {\n color: var(--txt-03) !important;\n}\n</style>\n"],"mappings":";;;;;;;;;;EAMA,IAAM,IAAQ,GAIR,IAAW,QAAe,EAAM,OAAO,SAAS,KAAA,EAAU;yBAI9D,EAGM,OAHN,GAGM,CAF4B,EAAA,SAAA,GAAA,EAAhC,EAAiE,EAAA,EAAA,EAAA;;GAAtB,UAAU,EAAA;qCACrD,EAA2E,OAA3E,GAA4D,YAAS,EAAA,CAAA"}
@@ -1,5 +1,7 @@
1
1
  import e from "./PlAgColumnHeader.vue2.js";
2
+ //#region src/components/PlAgColumnHeader/PlAgColumnHeader.vue
2
3
  var t = e;
4
+ //#endregion
3
5
  export { t as default };
4
6
 
5
7
  //# sourceMappingURL=PlAgColumnHeader.js.map