@platforma-sdk/ui-vue 1.45.42 → 1.46.0
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.
- package/.turbo/turbo-build.log +23 -39
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +22 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.vue.d.ts +27 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.vue.js +10 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.vue.js.map +1 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +302 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.vue3.js +33 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.vue3.js.map +1 -0
- package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -1
- package/dist/components/PlAdvancedFilter/OperandButton.vue3.js +9 -9
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts +29 -20
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +184 -146
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js +13 -9
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js.map +1 -1
- package/dist/components/PlAdvancedFilter/constants.d.ts +4 -4
- package/dist/components/PlAdvancedFilter/constants.js +26 -22
- package/dist/components/PlAdvancedFilter/constants.js.map +1 -1
- package/dist/components/PlAdvancedFilter/index.d.ts +4 -0
- package/dist/components/PlAdvancedFilter/index.js +9 -0
- package/dist/components/PlAdvancedFilter/index.js.map +1 -0
- package/dist/components/PlAdvancedFilter/types.d.ts +30 -34
- package/dist/components/PlAdvancedFilter/utils.d.ts +26 -0
- package/dist/components/PlAdvancedFilter/utils.js +32 -131
- package/dist/components/PlAdvancedFilter/utils.js.map +1 -1
- package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +43 -41
- package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
- package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue3.js +2 -2
- package/dist/components/PlAnnotations/components/FilterSidebar.vue.d.ts +10 -2
- package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +98 -91
- package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
- package/dist/components/PlAnnotations/components/FilterSidebar.vue3.js +5 -5
- package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js +23 -23
- package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
- package/dist/components/PlAnnotations/components/PlAnnotations.vue3.js +5 -7
- package/dist/components/PlAnnotations/components/PlAnnotations.vue3.js.map +1 -1
- package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js +19 -17
- package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
- package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue3.js +7 -9
- package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue3.js.map +1 -1
- package/dist/components/PlAnnotations/components/style.module.css.js +13 -0
- package/dist/components/PlAnnotations/components/style.module.css.js.map +1 -0
- package/dist/components/PlAnnotations/index.d.ts +1 -0
- package/dist/index.js +35 -33
- package/dist/index.js.map +1 -1
- package/package.json +9 -8
- package/src/components/PlAdvancedFilter/{SingleFilter.vue → FilterEditor.vue} +58 -62
- package/src/components/PlAdvancedFilter/OperandButton.vue +1 -1
- package/src/components/PlAdvancedFilter/PlAdvancedFilter.vue +152 -60
- package/src/components/PlAdvancedFilter/constants.ts +17 -11
- package/src/components/PlAdvancedFilter/index.ts +6 -0
- package/src/components/PlAdvancedFilter/types.ts +23 -54
- package/src/components/PlAdvancedFilter/utils.ts +51 -163
- package/src/components/PlAnnotations/components/AnnotationsSidebar.vue +8 -8
- package/src/components/PlAnnotations/components/FilterSidebar.vue +60 -69
- package/src/components/PlAnnotations/components/PlAnnotations.vue +3 -7
- package/src/components/PlAnnotations/components/PlAnnotationsModal.vue +4 -8
- package/src/components/PlAnnotations/components/style.module.css +16 -0
- package/src/components/PlAnnotations/index.ts +2 -0
- package/dist/components/PlAdvancedFilter/SingleFilter.vue.d.ts +0 -37
- package/dist/components/PlAdvancedFilter/SingleFilter.vue.js +0 -10
- package/dist/components/PlAdvancedFilter/SingleFilter.vue.js.map +0 -1
- package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js +0 -306
- package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js.map +0 -1
- package/dist/components/PlAdvancedFilter/SingleFilter.vue3.js +0 -35
- package/dist/components/PlAdvancedFilter/SingleFilter.vue3.js.map +0 -1
- package/dist/components/PlAdvancedFilter/types.js +0 -8
- package/dist/components/PlAdvancedFilter/types.js.map +0 -1
- package/dist/components/PlAnnotations/components/DynamicForm.vue.d.ts +0 -24
- package/dist/components/PlAnnotations/components/DynamicForm.vue.js +0 -10
- package/dist/components/PlAnnotations/components/DynamicForm.vue.js.map +0 -1
- package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +0 -109
- package/dist/components/PlAnnotations/components/DynamicForm.vue2.js.map +0 -1
- package/dist/components/PlAnnotations/components/DynamicForm.vue3.js +0 -9
- package/dist/components/PlAnnotations/components/DynamicForm.vue3.js.map +0 -1
- package/dist/components/PlAnnotations/utils.js +0 -20
- package/dist/components/PlAnnotations/utils.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAdvancedFilter.vue2.js","sources":["../../../src/components/PlAdvancedFilter/PlAdvancedFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport SingleFilter from './SingleFilter.vue';\nimport { PlBtnSecondary, PlElementList, PlCheckbox, PlIcon16 } from '@milaboratories/uikit';\nimport type { PlAdvancedFilterColumnId, CommonFilterSpec, Group, PlAdvancedFilterUI, SourceOptionInfo } from './types';\nimport { computed } from 'vue';\nimport OperandButton from './OperandButton.vue';\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS } from './constants';\nimport type { ListOptionBase } from '@platforma-sdk/model';\nimport { createNewGroup, isValidColumnId, toInnerModel, toOuterModel, useInnerModel } from './utils';\n\nconst props = withDefaults(defineProps<{\n /** List of ids of sources (columns, axes) that can be selected in filters */\n items: SourceOptionInfo[];\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 /** Loading function for unique values for Equal/InSet filters and fixed axes options. */\n getSuggestOptions: (params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => (Promise<ListOptionBase<string | number>[]>) |\n ((params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => ListOptionBase<string | number>[]);\n /** Loading function for label of selected value for Equal/InSet filters and fixed axes options. */\n getSuggestModel: (params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => (Promise<ListOptionBase<string | number>>) |\n ((params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => ListOptionBase<string | number>);\n}>(), { enableDnd: false });\n\nconst model = defineModel<CommonFilterSpec>({ required: true });\nconst innerModel = useInnerModel<CommonFilterSpec, PlAdvancedFilterUI>(toInnerModel, toOuterModel, model);\n\nconst firstColumnId = computed(() => props.items[0]?.id);\nconst emptyGroup: Group[] = [{\n id: 'empty',\n not: false,\n operand: 'and',\n filters: [],\n expanded: true,\n}];\n\nfunction addColumnToGroup(groupIdx: number, selectedSourceId: PlAdvancedFilterColumnId) {\n innerModel.value.groups[groupIdx].filters.push({\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: selectedSourceId,\n });\n}\n\nfunction removeFilterFromGroup(groupIdx: number, filterIdx: number) {\n if (innerModel.value.groups[groupIdx].filters.length === 1 && filterIdx === 0) {\n removeGroup(groupIdx);\n } else {\n innerModel.value.groups[groupIdx].filters = innerModel.value.groups[groupIdx].filters.filter((_v, idx) => idx !== filterIdx);\n }\n}\n\nfunction removeGroup(groupIdx: number) {\n innerModel.value.groups = innerModel.value.groups.filter((v, idx) => idx !== groupIdx);\n}\nfunction addGroup(selectedSourceId: PlAdvancedFilterColumnId) {\n const newGroup = createNewGroup(selectedSourceId);\n innerModel.value.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</script>\n<template>\n <div>\n <PlElementList\n v-model:items=\"innerModel.groups\"\n :get-item-key=\"(group) => group.id\"\n\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"(group) => group.expanded\"\n\n :disableDragging=\"false\"\n :disableRemoving=\"false\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n\n :on-expand=\"(group) => { group.expanded = !group.expanded}\"\n >\n <template #item-title>\n Filter group\n </template>\n <template #item-content=\"{ item, index }\">\n <div\n :class=\"$style.groupContent\" dropzone=\"true\"\n @drop=\"(event) => handleDropToExistingGroup(index, event)\"\n @dragover=\"dragOver\"\n >\n <PlCheckbox v-model=\"item.not\">NOT</PlCheckbox>\n <SingleFilter\n v-for=\"(filter, filterIdx) in item.filters\"\n :key=\"filterIdx\"\n v-model=\"item.filters[filterIdx]\"\n :operand=\"item.operand\"\n :column-options=\"items\"\n :get-suggest-model=\"getSuggestModel\"\n :get-suggest-options=\"getSuggestOptions\"\n :enable-dnd=\"enableDnd\"\n :is-last=\"filterIdx === item.filters.length - 1\"\n :on-change-operand=\"(v) => item.operand = v\"\n :on-delete=\"() => removeFilterFromGroup(index, filterIdx)\"\n />\n <div v-if=\"enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <PlBtnSecondary v-else @click=\"addColumnToGroup(index, firstColumnId)\">\n <PlIcon16 name=\"add\" style=\"margin-right: 8px\"/>Add column\n </PlBtnSecondary>\n </div>\n </template>\n <template #item-after=\"{ index }\">\n <OperandButton\n :class=\"$style.buttonWrapper\"\n :active=\"innerModel.operand\"\n :disabled=\"index === innerModel.groups.length - 1\"\n :on-select=\"(v) => innerModel.operand = v\"\n />\n </template>\n </PlElementList>\n\n <!-- Last group - always exists, always empty, just for adding new groups -->\n <PlElementList\n v-model:items=\"emptyGroup\"\n :get-item-key=\"(group) => group.id\"\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"() => true\"\n\n :disableDragging=\"true\"\n :disableRemoving=\"true\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n dropzone=\"true\"\n @drop=\"handleDropToNewGroup\"\n @dragover=\"dragOver\"\n >\n <template #item-title>Filter group</template>\n <template #item-content=\"{item}\">\n <PlCheckbox v-model=\"item.not\" disabled >NOT</PlCheckbox>\n <div v-if=\"enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <PlBtnSecondary v-else @click=\"addGroup(firstColumnId)\">\n <PlIcon16 name=\"add\" style=\"margin-right: 8px\"/>Add column\n </PlBtnSecondary>\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 .groupContent {\n display: flex;\n flex-direction: column;\n gap: 12px;\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 height: 72px;\n display: flex;\n align-items: center;\n }\n :global(.sortable-chosen) .buttonWrapper {\n visibility: hidden;\n }\n</style>\n"],"names":["props","__props","model","_useModel","innerModel","useInnerModel","toInnerModel","toOuterModel","firstColumnId","computed","_a","emptyGroup","addColumnToGroup","groupIdx","selectedSourceId","DEFAULT_FILTERS","DEFAULT_FILTER_TYPE","removeFilterFromGroup","filterIdx","removeGroup","_v","idx","v","addGroup","newGroup","createNewGroup","handleDropToExistingGroup","event","dataTransfer","draggedId","isValidColumnId","handleDropToNewGroup","dragOver","_createElementBlock","_createVNode","_unref","PlElementList","_cache","$event","group","$style","_withCtx","item","index","_createElementVNode","_normalizeClass","PlCheckbox","_openBlock","_Fragment","filter","_createBlock","SingleFilter","PlBtnSecondary","PlIcon16","OperandButton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PlAdvancedFilter.vue2.js","sources":["../../../src/components/PlAdvancedFilter/PlAdvancedFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlBtnSecondary, PlCheckbox, PlElementList } from '@milaboratories/uikit';\nimport type { ListOptionBase } from '@platforma-sdk/model';\nimport { computed, toRaw } from 'vue';\nimport FilterEditor from './FilterEditor.vue';\nimport OperandButton from './OperandButton.vue';\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS, SUPPORTED_FILTER_TYPES } from './constants';\nimport type { CommonFilter, EditableFilter, NodeFilter, PlAdvancedFilterColumnId, RootFilter, SourceOptionInfo } from './types';\nimport { createNewGroup, getNewId, isValidColumnId } from './utils';\n\nconst model = defineModel<RootFilter>('filters', { required: true });\n\nconst props = withDefaults(defineProps<{\n /** List of ids of sources (columns, axes) that can be selected in filters */\n items: SourceOptionInfo[];\n /** List of supported filter types */\n supportedFilters?: typeof SUPPORTED_FILTER_TYPES;\n /** If true - new filter can be added by droppind element into filter group; else new column is added by button click */\n enableDnd?: boolean;\n /** If true - \"Add group\" button is shown below the filter groups */\n enableAddGroupButton?: boolean;\n /** Loading function for unique values for Equal/InSet filters and fixed axes options. */\n getSuggestOptions: (params: { columnId: PlAdvancedFilterColumnId; axisIdx?: number; searchStr: string; searchType: 'value' | 'label' }) =>\n ListOptionBase<string | number>[] | Promise<ListOptionBase<string | number>[]>;\n}>(), {\n supportedFilters: () => SUPPORTED_FILTER_TYPES,\n getSuggestModel: undefined,\n\n enableDnd: false,\n enableAddGroupButton: false,\n});\n\nconst firstColumnId = computed(() => props.items[0]?.id);\nconst emptyGroup: NodeFilter[] = [{\n id: -1,\n type: 'and',\n filters: [],\n isExpanded: true,\n}];\n\nfunction getRootGroups() {\n if (model.value.type !== 'or' && model.value.type !== 'and') {\n throw new Error('Invalid model structure, expected root to be \"or\" or \"and\" group');\n }\n return model.value.filters;\n}\n\nfunction getRootGroup(idx: number): NodeFilter {\n const groups = getRootGroups();\n const group = groups[idx];\n if (group.type !== 'and' && group.type !== 'or' && group.type !== 'not') {\n throw new Error('Invalid group structure, expected \"and\", \"or\" or \"not\" group');\n }\n return group;\n}\n\nfunction getRootGroupContent(idx: number): Exclude<NodeFilter, { type: 'not' }> {\n const group = getRootGroup(idx);\n\n if (group.type !== 'not') {\n return group;\n }\n\n if (group.filter.type !== 'and' && group.filter.type !== 'or') {\n throw new Error('Invalid group structure, expected \"and\" or \"or\" group inside \"not\"');\n }\n\n return group.filter;\n}\n\nfunction addColumnToGroup(groupIdx: number, selectedSourceId: PlAdvancedFilterColumnId) {\n const group = getRootGroupContent(groupIdx);\n\n group.filters.push({\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: selectedSourceId,\n id: getNewId(),\n isExpanded: true,\n } as CommonFilter);\n}\n\nfunction removeFilterFromGroup(groupIdx: number, filterIdx: number) {\n const group = getRootGroupContent(groupIdx);\n\n if (group.filters.length === 1 && filterIdx === 0) {\n removeGroup(groupIdx);\n } else {\n group.filters.splice(filterIdx, 1);\n }\n}\nfunction inverseRootNode(groupIdx: number) {\n const groups = getRootGroups();\n const group = groups[groupIdx];\n if (group.type === 'not') {\n if (group.filter.type !== 'and' && group.filter.type !== 'or') {\n throw new Error('Invalid group structure, expected \"and\" or \"or\" group inside \"not\"');\n }\n groups[groupIdx] = group.filter;\n } else {\n const type = groups[groupIdx].type;\n if (type !== 'and' && type !== 'or' && type !== 'not') {\n throw new Error('Invalid group structure, expected \"and\", \"or\" or \"not\" group');\n }\n\n groups[groupIdx] = {\n id: getNewId(),\n isExpanded: true,\n type: 'not',\n filter: groups[groupIdx],\n };\n }\n}\n\nfunction getNotContent<T extends CommonFilter>(item: T): Exclude<T, { type: 'not' }> {\n return item.type === 'not' ? item.filter as Exclude<T, { type: 'not' }> : item as Exclude<T, { type: 'not' }>;\n}\n\nfunction removeGroup(groupIdx: number) {\n const groups = getRootGroups();\n groups.splice(groupIdx, 1);\n}\nfunction addGroup(selectedSourceId: PlAdvancedFilterColumnId) {\n const newGroup = createNewGroup(selectedSourceId);\n const groups = getRootGroups();\n groups.push(newGroup);\n}\n\nfunction handleDropToExistingGroup(groupIdx: number, event: DragEvent) {\n const dataTransfer = event.dataTransfer;\n if (dataTransfer?.getData('text/plain')) {\n const draggedId = dataTransfer.getData('text/plain');\n if (isValidColumnId(draggedId)) {\n addColumnToGroup(groupIdx, draggedId);\n }\n }\n}\nfunction handleDropToNewGroup(event: DragEvent) {\n const dataTransfer = event.dataTransfer;\n if (dataTransfer?.getData('text/plain')) {\n const draggedId = dataTransfer.getData('text/plain');\n if (isValidColumnId(draggedId)) {\n addGroup(draggedId);\n }\n }\n}\nfunction dragOver(event: DragEvent) {\n event.preventDefault();\n}\n\nfunction validateFilter<T extends CommonFilter>(item: T): EditableFilter {\n if (item.type === 'and' || item.type === 'or' || item.type === 'not') {\n throw new Error('Invalid filter structure, expected leaf filter');\n }\n\n return item as EditableFilter;\n}\n\nfunction updateFilter(filters: CommonFilter[], idx: number, updatedFilter: EditableFilter) {\n filters[idx] = toRaw(updatedFilter as CommonFilter);\n}\n</script>\n<template>\n <div>\n <PlElementList\n v-model:items=\"model.filters\"\n :get-item-key=\"(filter) => filter.id\"\n\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"(filter) => filter.isExpanded === true\"\n :on-expand=\"(group) => { group.isExpanded = !group.isExpanded}\"\n\n :disableDragging=\"false\"\n :disableRemoving=\"false\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n >\n <template #item-title>\n Filter group\n </template>\n <template #item-content=\"{ item, index }\">\n <div\n :class=\"$style.groupContent\"\n dropzone=\"true\"\n @drop=\"(event) => handleDropToExistingGroup(index, event)\"\n @dragover=\"dragOver\"\n >\n <PlCheckbox :model-value=\"item.type === 'not'\" :class=\"$style.notCheckbox\" @update:model-value=\"inverseRootNode(index)\">NOT</PlCheckbox>\n <template v-for=\"(_, filterIdx) in getNotContent(item).filters\" :key=\"filterIdx\">\n <FilterEditor\n :filter=\"validateFilter(getNotContent(item).filters[filterIdx])\"\n :operand=\"getNotContent(item).type\"\n :column-options=\"items\"\n :supported-filters=\"props.supportedFilters\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :enable-dnd=\"Boolean(props.enableDnd)\"\n :is-last=\"filterIdx === getNotContent(item).filters.length - 1\"\n :on-change-operand=\"(v) => getNotContent(item).type = v\"\n :on-delete=\"() => removeFilterFromGroup(index, filterIdx)\"\n @update:filter=\"(value) => updateFilter(getNotContent(item).filters, filterIdx, value)\"\n />\n </template>\n <div v-if=\"props.enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <PlBtnSecondary v-else icon=\"add\" @click=\"addColumnToGroup(index, firstColumnId)\">\n Add filter\n </PlBtnSecondary>\n </div>\n </template>\n <template #item-after=\"{ index }\">\n <OperandButton\n v-if=\"props.enableAddGroupButton || index < getRootGroups().length - 1\"\n :class=\"$style.buttonWrapper\"\n :active=\"model.type\"\n :disabled=\"index === getRootGroups().length - 1\"\n :on-select=\"(v) => model.type = v\"\n />\n </template>\n </PlElementList>\n\n <!-- Last group - always empty, just for adding new groups -->\n <PlElementList\n v-if=\"props.enableAddGroupButton\"\n :items=\"emptyGroup\"\n :get-item-key=\"(group) => group.id\"\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"() => true\"\n\n :disableDragging=\"true\"\n :disableRemoving=\"true\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n dropzone=\"true\"\n @drop=\"handleDropToNewGroup\"\n @dragover=\"dragOver\"\n >\n <template #item-title>Filter group</template>\n <template #item-content>\n <div v-if=\"enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <slot v-else name=\"add-group-buttons\">\n <PlBtnSecondary icon=\"add\" @click=\"addGroup(firstColumnId)\">\n Add filter\n </PlBtnSecondary>\n </slot>\n </template>\n </PlElementList>\n </div>\n</template>\n<style module>\n .filterGroup {\n background: var(--bg-base-light);\n }\n .filterGroup:hover {\n background: rgba(99, 224, 36, 0.12);\n }\n .filterGroupTitle {\n background: none;\n }\n .filterGroupContent {\n padding: 4px 24px 24px 24px;\n }\n .groupContent {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .notCheckbox {\n margin: 4px 0;\n }\n .dropzone {\n border-radius: 6px;\n border: 1.5px dashed var(--color-div-grey);\n color: var(--txt-03);\n font-family: Manrope;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n height: 40px;\n cursor: default;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .buttonWrapper {\n margin-top: 8px;\n height: 56px;\n display: flex;\n align-items: center;\n }\n :global(.sortable-chosen) .buttonWrapper {\n visibility: hidden;\n }\n</style>\n"],"names":["model","_useModel","__props","props","firstColumnId","computed","_a","emptyGroup","getRootGroups","getRootGroup","idx","group","getRootGroupContent","addColumnToGroup","groupIdx","selectedSourceId","DEFAULT_FILTERS","DEFAULT_FILTER_TYPE","getNewId","removeFilterFromGroup","filterIdx","removeGroup","inverseRootNode","groups","type","getNotContent","item","addGroup","newGroup","createNewGroup","handleDropToExistingGroup","event","dataTransfer","draggedId","isValidColumnId","handleDropToNewGroup","dragOver","validateFilter","updateFilter","filters","updatedFilter","toRaw","_createElementBlock","_createVNode","_unref","PlElementList","_cache","$event","filter","$style","_withCtx","index","_createElementVNode","_normalizeClass","PlCheckbox","_Fragment","_renderList","_","_createBlock","FilterEditor","v","value","PlBtnSecondary","OperandButton","_renderSlot","_ctx"],"mappings":"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"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(".
|
|
2
|
-
const t = "
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._filterGroup_q5yyu_2{background:var(--bg-base-light)}._filterGroup_q5yyu_2:hover{background:#63e0241f}._filterGroupTitle_q5yyu_8{background:none}._filterGroupContent_q5yyu_11{padding:4px 24px 24px}._groupContent_q5yyu_14{display:flex;flex-direction:column;gap:12px}._notCheckbox_q5yyu_19{margin:4px 0}._dropzone_q5yyu_22{border-radius:6px;border:1.5px dashed var(--color-div-grey);color:var(--txt-03);font-family:Manrope;font-size:14px;font-style:normal;font-weight:500;height:40px;cursor:default;display:flex;justify-content:center;align-items:center}._buttonWrapper_q5yyu_36{margin-top:8px;height:56px;display:flex;align-items:center}.sortable-chosen ._buttonWrapper_q5yyu_36{visibility:hidden}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
|
|
2
|
+
const t = "_filterGroup_q5yyu_2", o = "_filterGroupTitle_q5yyu_8", r = "_filterGroupContent_q5yyu_11", e = "_groupContent_q5yyu_14", n = "_notCheckbox_q5yyu_19", u = "_dropzone_q5yyu_22", p = "_buttonWrapper_q5yyu_36", _ = {
|
|
3
3
|
filterGroup: t,
|
|
4
4
|
filterGroupTitle: o,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
filterGroupContent: r,
|
|
6
|
+
groupContent: e,
|
|
7
|
+
notCheckbox: n,
|
|
8
|
+
dropzone: u,
|
|
9
|
+
buttonWrapper: p
|
|
8
10
|
};
|
|
9
11
|
export {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
p as buttonWrapper,
|
|
13
|
+
_ as default,
|
|
14
|
+
u as dropzone,
|
|
13
15
|
t as filterGroup,
|
|
16
|
+
r as filterGroupContent,
|
|
14
17
|
o as filterGroupTitle,
|
|
15
|
-
|
|
18
|
+
e as groupContent,
|
|
19
|
+
n as notCheckbox
|
|
16
20
|
};
|
|
17
21
|
//# sourceMappingURL=PlAdvancedFilter.vue3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAdvancedFilter.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlAdvancedFilter.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const SUPPORTED_FILTER_TYPES:
|
|
3
|
-
export declare const DEFAULT_FILTER_TYPE:
|
|
4
|
-
export declare const DEFAULT_FILTERS: Record<SupportedFilterTypes,
|
|
1
|
+
import { EditableFilter, SupportedFilterTypes } from './types';
|
|
2
|
+
export declare const SUPPORTED_FILTER_TYPES: ("isNA" | "isNotNA" | "patternEquals" | "patternNotEquals" | "patternContainSubsequence" | "patternNotContainSubsequence" | "patternMatchesRegularExpression" | "patternFuzzyContainSubsequence" | "inSet" | "notInSet" | "topN" | "bottomN" | "equal" | "notEqual" | "lessThan" | "greaterThan" | "lessThanOrEqual" | "greaterThanOrEqual")[];
|
|
3
|
+
export declare const DEFAULT_FILTER_TYPE: SupportedFilterTypes;
|
|
4
|
+
export declare const DEFAULT_FILTERS: Record<SupportedFilterTypes, EditableFilter>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const e = [
|
|
2
2
|
"isNA",
|
|
3
3
|
"isNotNA",
|
|
4
4
|
"greaterThan",
|
|
@@ -14,28 +14,32 @@ const t = /* @__PURE__ */ new Set([
|
|
|
14
14
|
"patternFuzzyContainSubsequence",
|
|
15
15
|
"patternMatchesRegularExpression",
|
|
16
16
|
"inSet",
|
|
17
|
-
"notInSet"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
17
|
+
"notInSet",
|
|
18
|
+
"topN",
|
|
19
|
+
"bottomN"
|
|
20
|
+
], n = "isNA", t = { column: "" }, a = {
|
|
21
|
+
isNA: { type: "isNA", ...t },
|
|
22
|
+
isNotNA: { type: "isNotNA", ...t },
|
|
23
|
+
lessThan: { type: "lessThan", x: 0, ...t },
|
|
24
|
+
lessThanOrEqual: { type: "lessThanOrEqual", x: 0, ...t },
|
|
25
|
+
patternEquals: { type: "patternEquals", value: void 0, ...t },
|
|
26
|
+
patternNotEquals: { type: "patternNotEquals", value: void 0, ...t },
|
|
27
|
+
greaterThan: { type: "greaterThan", x: 0, ...t },
|
|
28
|
+
greaterThanOrEqual: { type: "greaterThanOrEqual", x: 0, ...t },
|
|
29
|
+
patternContainSubsequence: { type: "patternContainSubsequence", value: "", ...t },
|
|
30
|
+
patternNotContainSubsequence: { type: "patternNotContainSubsequence", value: "", ...t },
|
|
31
|
+
patternFuzzyContainSubsequence: { type: "patternFuzzyContainSubsequence", maxEdits: 2, substitutionsOnly: !1, wildcard: void 0, value: "", ...t },
|
|
32
|
+
patternMatchesRegularExpression: { type: "patternMatchesRegularExpression", value: "", ...t },
|
|
33
|
+
equal: { type: "equal", x: 0, ...t },
|
|
34
|
+
notEqual: { type: "notEqual", x: 0, ...t },
|
|
35
|
+
inSet: { type: "inSet", value: [], ...t },
|
|
36
|
+
notInSet: { type: "notInSet", value: [], ...t },
|
|
37
|
+
topN: { type: "topN", n: 10, ...t },
|
|
38
|
+
bottomN: { type: "bottomN", n: 10, ...t }
|
|
35
39
|
};
|
|
36
40
|
export {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
a as DEFAULT_FILTERS,
|
|
42
|
+
n as DEFAULT_FILTER_TYPE,
|
|
43
|
+
e as SUPPORTED_FILTER_TYPES
|
|
40
44
|
};
|
|
41
45
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../src/components/PlAdvancedFilter/constants.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"constants.js","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: { type: 'patternNotContainSubsequence', value: '', ...emptyCommonPart },\n patternFuzzyContainSubsequence: { type: 'patternFuzzyContainSubsequence', maxEdits: 2, substitutionsOnly: false, wildcard: undefined, value: '', ...emptyCommonPart },\n patternMatchesRegularExpression: { type: 'patternMatchesRegularExpression', value: '', ...emptyCommonPart },\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"],"names":["SUPPORTED_FILTER_TYPES","DEFAULT_FILTER_TYPE","emptyCommonPart","DEFAULT_FILTERS"],"mappings":"AAIO,MAAMA,IAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,IAA4C,QAEnDC,IAAkB,EAAE,QAAQ,GAAA,GACrBC,IAAgE;AAAA,EAC3E,MAAM,EAAE,MAAM,QAAQ,GAAGD,EAAA;AAAA,EACzB,SAAS,EAAE,MAAM,WAAW,GAAGA,EAAA;AAAA,EAC/B,UAAU,EAAE,MAAM,YAAY,GAAG,GAAG,GAAGA,EAAA;AAAA,EACvC,iBAAiB,EAAE,MAAM,mBAAmB,GAAG,GAAG,GAAGA,EAAA;AAAA,EACrD,eAAe,EAAE,MAAM,iBAAiB,OAAO,QAAW,GAAGA,EAAA;AAAA,EAC7D,kBAAkB,EAAE,MAAM,oBAAoB,OAAO,QAAW,GAAGA,EAAA;AAAA,EACnE,aAAa,EAAE,MAAM,eAAe,GAAG,GAAG,GAAGA,EAAA;AAAA,EAC7C,oBAAoB,EAAE,MAAM,sBAAsB,GAAG,GAAG,GAAGA,EAAA;AAAA,EAC3D,2BAA2B,EAAE,MAAM,6BAA6B,OAAO,IAAI,GAAGA,EAAA;AAAA,EAC9E,8BAA8B,EAAE,MAAM,gCAAgC,OAAO,IAAI,GAAGA,EAAA;AAAA,EACpF,gCAAgC,EAAE,MAAM,kCAAkC,UAAU,GAAG,mBAAmB,IAAO,UAAU,QAAW,OAAO,IAAI,GAAGA,EAAA;AAAA,EACpJ,iCAAiC,EAAE,MAAM,mCAAmC,OAAO,IAAI,GAAGA,EAAA;AAAA,EAC1F,OAAO,EAAE,MAAM,SAAS,GAAG,GAAG,GAAGA,EAAA;AAAA,EACjC,UAAU,EAAE,MAAM,YAAY,GAAG,GAAG,GAAGA,EAAA;AAAA,EACvC,OAAO,EAAE,MAAM,SAAS,OAAO,CAAA,GAAI,GAAGA,EAAA;AAAA,EACtC,UAAU,EAAE,MAAM,YAAY,OAAO,CAAA,GAAI,GAAGA,EAAA;AAAA,EAC5C,MAAM,EAAE,MAAM,QAAQ,GAAG,IAAI,GAAGA,EAAA;AAAA,EAChC,SAAS,EAAE,MAAM,WAAW,GAAG,IAAI,GAAGA,EAAA;AACxC;"}
|
|
@@ -1 +1,5 @@
|
|
|
1
|
+
import { RootFilter, SourceOptionInfo } from './types.ts';
|
|
1
2
|
export { default as PlAdvancedFilter } from './PlAdvancedFilter.vue';
|
|
3
|
+
export declare const PlAdvancedFilterSupportedFilters: ("isNA" | "isNotNA" | "patternEquals" | "patternNotEquals" | "patternContainSubsequence" | "patternNotContainSubsequence" | "patternMatchesRegularExpression" | "patternFuzzyContainSubsequence" | "inSet" | "notInSet" | "topN" | "bottomN" | "equal" | "notEqual" | "lessThan" | "greaterThan" | "lessThanOrEqual" | "greaterThanOrEqual")[];
|
|
4
|
+
export type PlAdvancedFilterItem = SourceOptionInfo;
|
|
5
|
+
export type PlAdvancedFilterFilter = RootFilter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/PlAdvancedFilter/index.ts"],"sourcesContent":["import { SUPPORTED_FILTER_TYPES } from './constants.ts';\nimport type { RootFilter, SourceOptionInfo } from './types.ts';\n\nexport { default as PlAdvancedFilter } from './PlAdvancedFilter.vue';\nexport const PlAdvancedFilterSupportedFilters = SUPPORTED_FILTER_TYPES;\nexport type PlAdvancedFilterItem = SourceOptionInfo;\nexport type PlAdvancedFilterFilter = RootFilter;\n"],"names":["PlAdvancedFilterSupportedFilters","SUPPORTED_FILTER_TYPES"],"mappings":";;;;AAIO,MAAMA,IAAmCC;"}
|
|
@@ -1,47 +1,43 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export type CommonFilterSpec = FilterSpec<FilterSpecLeaf<PlAdvancedFilterColumnId>, {
|
|
4
|
-
expanded?: boolean;
|
|
5
|
-
}>;
|
|
6
|
-
export type SupportedFilterTypes = FilterSpecType & 'isNA' | 'isNotNA' | 'patternEquals' | 'patternNotEquals' | 'patternContainSubsequence' | 'patternNotContainSubsequence' | 'patternMatchesRegularExpression' | 'patternFuzzyContainSubsequence' | 'inSet' | 'notInSet' | 'equal' | 'notEqual' | 'lessThan' | 'lessThanOrEqual' | 'greaterThan' | 'greaterThanOrEqual';
|
|
7
|
-
export type FilterType = SupportedFilterTypes;
|
|
8
|
-
export declare function isSupportedFilterType(type: FilterSpecType | undefined): type is SupportedFilterTypes;
|
|
1
|
+
import { AxisId, AxisSpec, CanonicalizedJson, FilterSpec, FilterSpecLeaf, PColumnSpec, SUniversalPColumnId } from '@platforma-sdk/model';
|
|
2
|
+
import { SUPPORTED_FILTER_TYPES } from './constants';
|
|
9
3
|
export type Operand = 'or' | 'and';
|
|
10
|
-
type
|
|
4
|
+
export type PlAdvancedFilterColumnId = SUniversalPColumnId | CanonicalizedJson<AxisId>;
|
|
5
|
+
export type FilterLeafContent = Extract<FilterSpecLeaf<PlAdvancedFilterColumnId>, {
|
|
11
6
|
type: SupportedFilterTypes;
|
|
12
|
-
|
|
7
|
+
}>;
|
|
8
|
+
export type CommonFilter = FilterSpec<FilterLeafContent, {
|
|
9
|
+
id: number;
|
|
10
|
+
isExpanded?: boolean;
|
|
11
|
+
}>;
|
|
12
|
+
export type FilterLeaf = Exclude<CommonFilter, {
|
|
13
|
+
type: Operand | 'not';
|
|
14
|
+
}>;
|
|
15
|
+
export type NodeFilter = Extract<CommonFilter, {
|
|
16
|
+
type: Operand | 'not';
|
|
17
|
+
}>;
|
|
18
|
+
export type RootFilter = Omit<Extract<NodeFilter, {
|
|
19
|
+
type: Operand;
|
|
20
|
+
}>, 'filters'> & {
|
|
21
|
+
filters: NodeFilter[];
|
|
13
22
|
};
|
|
23
|
+
export type SupportedFilterTypes = typeof SUPPORTED_FILTER_TYPES[number];
|
|
14
24
|
type RequireFields<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
|
|
15
25
|
type OptionalFields<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
26
|
+
type NumericalWithOptionalN = 'topN' | 'bottomN';
|
|
16
27
|
type NumericalWithOptionalX = 'lessThan' | 'lessThanOrEqual' | 'greaterThan' | 'greaterThanOrEqual' | 'equal' | 'notEqual';
|
|
17
28
|
type StringWithOptionalValue = 'patternEquals' | 'patternNotEquals';
|
|
18
|
-
type EditedTypes =
|
|
19
|
-
export type
|
|
29
|
+
type EditedTypes = 'patternFuzzyContainSubsequence' | NumericalWithOptionalX | StringWithOptionalValue | NumericalWithOptionalN;
|
|
30
|
+
export type EditableFilter = Exclude<FilterLeafContent, {
|
|
20
31
|
type: EditedTypes;
|
|
21
|
-
}> | RequireFields<Extract<
|
|
32
|
+
}> | RequireFields<Extract<FilterLeafContent, {
|
|
22
33
|
type: 'patternFuzzyContainSubsequence';
|
|
23
|
-
}>, 'maxEdits' | 'substitutionsOnly'> | OptionalFields<Extract<
|
|
34
|
+
}>, 'maxEdits' | 'substitutionsOnly'> | OptionalFields<Extract<FilterLeafContent, {
|
|
35
|
+
type: NumericalWithOptionalN;
|
|
36
|
+
}>, 'n'> | OptionalFields<Extract<FilterLeafContent, {
|
|
24
37
|
type: NumericalWithOptionalX;
|
|
25
|
-
}>, 'x'> | OptionalFields<Extract<
|
|
38
|
+
}>, 'x'> | OptionalFields<Extract<FilterLeafContent, {
|
|
26
39
|
type: StringWithOptionalValue;
|
|
27
40
|
}>, 'value'>;
|
|
28
|
-
export type Group = {
|
|
29
|
-
id: string;
|
|
30
|
-
not: boolean;
|
|
31
|
-
filters: Filter[];
|
|
32
|
-
operand: Operand;
|
|
33
|
-
expanded: boolean;
|
|
34
|
-
};
|
|
35
|
-
export type PlAdvancedFilterUI = {
|
|
36
|
-
groups: Group[];
|
|
37
|
-
operand: Operand;
|
|
38
|
-
};
|
|
39
|
-
export type UniqueValuesList = ListOptionBase<string | number>[];
|
|
40
|
-
export type OptionInfo = {
|
|
41
|
-
error: boolean;
|
|
42
|
-
label: string;
|
|
43
|
-
spec: PColumnSpec | AxisSpec;
|
|
44
|
-
};
|
|
45
41
|
export type FixedAxisInfo = {
|
|
46
42
|
idx: number;
|
|
47
43
|
label: string;
|
|
@@ -49,9 +45,9 @@ export type FixedAxisInfo = {
|
|
|
49
45
|
export type SourceOptionInfo = {
|
|
50
46
|
id: PlAdvancedFilterColumnId;
|
|
51
47
|
label: string;
|
|
52
|
-
error: boolean;
|
|
53
48
|
spec: PColumnSpec | AxisSpec;
|
|
54
|
-
|
|
49
|
+
error?: boolean;
|
|
55
50
|
alphabet?: 'nucleotide' | 'aminoacid' | string;
|
|
51
|
+
axesToBeFixed?: FixedAxisInfo[];
|
|
56
52
|
};
|
|
57
53
|
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ValueType, AxisSpec, PColumnSpec } from '@platforma-sdk/model';
|
|
2
|
+
import { NodeFilter, EditableFilter, PlAdvancedFilterColumnId, SupportedFilterTypes } from './types';
|
|
3
|
+
export declare function getNewId(): number;
|
|
4
|
+
export declare function createNewGroup(selectedSourceId: string): NodeFilter;
|
|
5
|
+
export type NormalizedSpecData = {
|
|
6
|
+
valueType: ValueType;
|
|
7
|
+
annotations: PColumnSpec['annotations'];
|
|
8
|
+
domain: PColumnSpec['domain'];
|
|
9
|
+
};
|
|
10
|
+
export declare function getNormalizedSpec(spec: PColumnSpec | AxisSpec): NormalizedSpecData;
|
|
11
|
+
export declare function isNumericValueType(spec?: PColumnSpec | AxisSpec): boolean;
|
|
12
|
+
export declare function isStringValueType(spec?: PColumnSpec | AxisSpec): boolean;
|
|
13
|
+
export declare function isNumericFilter(filter: EditableFilter): filter is Extract<EditableFilter, {
|
|
14
|
+
type: 'equal' | 'notEqual' | 'lessThan' | 'lessThanOrEqual' | 'greaterThan' | 'greaterThanOrEqual';
|
|
15
|
+
}>;
|
|
16
|
+
export declare function isPositionFilter(filter: EditableFilter): filter is Extract<EditableFilter, {
|
|
17
|
+
type: 'topN' | 'bottomN';
|
|
18
|
+
}>;
|
|
19
|
+
export declare function isStringFilter(filter: EditableFilter): filter is Extract<EditableFilter, {
|
|
20
|
+
type: 'patternEquals' | 'patternNotEquals' | 'patternContainSubsequence' | 'patternNotContainSubsequence' | 'patternMatchesRegularExpression' | 'patternFuzzyContainSubsequence';
|
|
21
|
+
}>;
|
|
22
|
+
export declare function getFilterInfo(filterType: SupportedFilterTypes): {
|
|
23
|
+
label: string;
|
|
24
|
+
supportedFor: (spec: NormalizedSpecData) => boolean;
|
|
25
|
+
};
|
|
26
|
+
export declare function isValidColumnId(id: unknown): id is PlAdvancedFilterColumnId;
|
|
@@ -1,150 +1,51 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { DEFAULT_FILTERS as
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function s(e) {
|
|
7
|
-
return !("column" in e) || e.type === void 0 || !T(e.type) ? null : e.type === "patternFuzzyContainSubsequence" ? {
|
|
8
|
-
...e,
|
|
9
|
-
value: e.value,
|
|
10
|
-
wildcard: e.wildcard,
|
|
11
|
-
maxEdits: e.maxEdits ?? 2,
|
|
12
|
-
substitutionsOnly: e.substitutionsOnly ?? !1
|
|
13
|
-
} : { ...e };
|
|
1
|
+
import { filterUiMetadata as r } from "@milaboratories/uikit";
|
|
2
|
+
import { getTypeFromPColumnOrAxisSpec as o, parseJson as i, isFilteredPColumn as a, isAnchoredPColumnId as u, isAxisId as s } from "@platforma-sdk/model";
|
|
3
|
+
import { DEFAULT_FILTERS as p, DEFAULT_FILTER_TYPE as d } from "./constants.js";
|
|
4
|
+
function n() {
|
|
5
|
+
return Date.now();
|
|
14
6
|
}
|
|
15
|
-
|
|
16
|
-
function u() {
|
|
17
|
-
return i++, String(i);
|
|
18
|
-
}
|
|
19
|
-
function p(e) {
|
|
20
|
-
if (e.type === "not") {
|
|
21
|
-
const n = p(e.filter);
|
|
22
|
-
return n ? {
|
|
23
|
-
not: !n.not,
|
|
24
|
-
operand: n.operand,
|
|
25
|
-
filters: n.filters,
|
|
26
|
-
id: u(),
|
|
27
|
-
expanded: n.expanded
|
|
28
|
-
} : null;
|
|
29
|
-
}
|
|
30
|
-
if (e.type === "and" || e.type === "or")
|
|
31
|
-
return {
|
|
32
|
-
operand: e.type,
|
|
33
|
-
not: !1,
|
|
34
|
-
filters: e.filters.map((n) => s(n)).filter((n) => n !== null),
|
|
35
|
-
id: u(),
|
|
36
|
-
expanded: e.expanded ?? !0
|
|
37
|
-
};
|
|
38
|
-
if (d.has(e.type)) {
|
|
39
|
-
const n = s(e);
|
|
40
|
-
return {
|
|
41
|
-
operand: "or",
|
|
42
|
-
not: !1,
|
|
43
|
-
filters: n ? [n] : [],
|
|
44
|
-
id: u(),
|
|
45
|
-
expanded: e.expanded ?? !0
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
function z(e) {
|
|
51
|
-
const n = {
|
|
52
|
-
operand: "or",
|
|
53
|
-
groups: []
|
|
54
|
-
};
|
|
55
|
-
if (e.type === "not")
|
|
56
|
-
return n;
|
|
57
|
-
if (e.type === "and" || e.type === "or")
|
|
58
|
-
n.operand = e.type, n.groups = e.filters.map(p).filter((t) => t !== null);
|
|
59
|
-
else if (d.has(e.type)) {
|
|
60
|
-
const t = p(e);
|
|
61
|
-
n.groups = t ? [t] : [];
|
|
62
|
-
}
|
|
63
|
-
return n.groups = n.groups.filter((t) => t.filters.length > 0), n;
|
|
64
|
-
}
|
|
65
|
-
function I(e) {
|
|
66
|
-
if (e.type === "isNA" || e.type === "isNotNA" || e.type === "inSet" || e.type === "notInSet")
|
|
67
|
-
return e;
|
|
68
|
-
if (e.type === "greaterThanOrEqual" || e.type === "lessThanOrEqual" || e.type === "greaterThan" || e.type === "lessThan" || e.type === "equal" || e.type === "notEqual")
|
|
69
|
-
return e.x !== void 0 ? { ...e, x: e.x } : null;
|
|
70
|
-
if (e.type === "patternEquals" || e.type === "patternNotEquals" || e.type === "patternContainSubsequence" || e.type === "patternNotContainSubsequence" || e.type === "patternMatchesRegularExpression" || e.type === "patternFuzzyContainSubsequence")
|
|
71
|
-
return e.value !== void 0 ? { ...e, value: e.value } : null;
|
|
72
|
-
x(e.type);
|
|
73
|
-
}
|
|
74
|
-
function C(e) {
|
|
75
|
-
const n = {
|
|
76
|
-
type: e.operand,
|
|
77
|
-
expanded: e.expanded,
|
|
78
|
-
filters: e.filters.map(I).filter((t) => t !== null)
|
|
79
|
-
};
|
|
80
|
-
return e.not ? {
|
|
81
|
-
type: "not",
|
|
82
|
-
filter: n
|
|
83
|
-
} : n;
|
|
84
|
-
}
|
|
85
|
-
function A(e) {
|
|
86
|
-
return {
|
|
87
|
-
type: e.operand,
|
|
88
|
-
filters: e.groups.map(C)
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
function P(e) {
|
|
7
|
+
function y(t) {
|
|
92
8
|
return {
|
|
93
|
-
id:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
expanded: !0,
|
|
9
|
+
id: n(),
|
|
10
|
+
isExpanded: !0,
|
|
11
|
+
type: "and",
|
|
97
12
|
filters: [{
|
|
98
|
-
|
|
99
|
-
|
|
13
|
+
id: n(),
|
|
14
|
+
isExpanded: !0,
|
|
15
|
+
...p[d],
|
|
16
|
+
column: t
|
|
100
17
|
}]
|
|
101
18
|
};
|
|
102
19
|
}
|
|
103
|
-
function
|
|
104
|
-
return { valueType:
|
|
105
|
-
}
|
|
106
|
-
function w(e) {
|
|
107
|
-
return e.type === "equal" || e.type === "notEqual" || e.type === "lessThan" || e.type === "lessThanOrEqual" || e.type === "greaterThan" || e.type === "greaterThanOrEqual";
|
|
20
|
+
function f(t) {
|
|
21
|
+
return { valueType: o(t), annotations: t.annotations, domain: t.domain };
|
|
108
22
|
}
|
|
109
|
-
function
|
|
110
|
-
return
|
|
23
|
+
function T(t) {
|
|
24
|
+
return t.type === "equal" || t.type === "notEqual" || t.type === "lessThan" || t.type === "lessThanOrEqual" || t.type === "greaterThan" || t.type === "greaterThanOrEqual";
|
|
111
25
|
}
|
|
112
|
-
function
|
|
113
|
-
return
|
|
26
|
+
function E(t) {
|
|
27
|
+
return t.type === "topN" || t.type === "bottomN";
|
|
114
28
|
}
|
|
115
|
-
function
|
|
116
|
-
|
|
117
|
-
function l(r) {
|
|
118
|
-
t.value = n(r);
|
|
119
|
-
}
|
|
120
|
-
function y(r) {
|
|
121
|
-
a.value = e(r);
|
|
122
|
-
}
|
|
123
|
-
return o(() => t.value, (r) => {
|
|
124
|
-
y(r);
|
|
125
|
-
}, { deep: !0 }), o(() => a.value, (r) => {
|
|
126
|
-
l(r);
|
|
127
|
-
}, { deep: !0 }), a;
|
|
29
|
+
function F(t) {
|
|
30
|
+
return r[t];
|
|
128
31
|
}
|
|
129
|
-
function
|
|
130
|
-
if (typeof
|
|
32
|
+
function I(t) {
|
|
33
|
+
if (typeof t != "string")
|
|
131
34
|
return !1;
|
|
132
35
|
try {
|
|
133
|
-
const
|
|
134
|
-
return
|
|
36
|
+
const e = i(t);
|
|
37
|
+
return a(e) || u(e) || s(e);
|
|
135
38
|
} catch {
|
|
136
39
|
return !1;
|
|
137
40
|
}
|
|
138
41
|
}
|
|
139
42
|
export {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
A as toOuterModel,
|
|
148
|
-
G as useInnerModel
|
|
43
|
+
y as createNewGroup,
|
|
44
|
+
F as getFilterInfo,
|
|
45
|
+
n as getNewId,
|
|
46
|
+
f as getNormalizedSpec,
|
|
47
|
+
T as isNumericFilter,
|
|
48
|
+
E as isPositionFilter,
|
|
49
|
+
I as isValidColumnId
|
|
149
50
|
};
|
|
150
51
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/components/PlAdvancedFilter/utils.ts"],"sourcesContent":["import type { AnchoredPColumnId, AxisId, CanonicalizedJson, FilteredPColumnId, ValueType } from '@platforma-sdk/model';\nimport { assertNever, getTypeFromPColumnOrAxisSpec, isAnchoredPColumnId, isFilteredPColumn, parseJson, type AxisSpec, type PColumnSpec, type SUniversalPColumnId } from '@platforma-sdk/model';\nimport { type CommonFilterSpec, isSupportedFilterType, type Filter, type FilterType, type Group, type PlAdvancedFilterUI, type SupportedFilterTypes, type PlAdvancedFilterColumnId } from './types';\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS, SUPPORTED_FILTER_TYPES } from './constants';\nimport { filterUiMetadata } from '@milaboratories/uikit';\nimport { ref, watch, type ModelRef } from 'vue';\nimport { isAxisId } from '@platforma-sdk/model';\n\nfunction toInnerFilter(outerFilter: CommonFilterSpec): Filter | null {\n if (!('column' in outerFilter) || outerFilter.type === undefined || !isSupportedFilterType(outerFilter.type)) {\n return null;\n }\n if (outerFilter.type === 'patternFuzzyContainSubsequence') {\n return {\n ...outerFilter,\n value: outerFilter.value,\n wildcard: outerFilter.wildcard,\n maxEdits: outerFilter.maxEdits ?? 2,\n substitutionsOnly: outerFilter.substitutionsOnly ?? false,\n };\n }\n\n return { ...outerFilter } as Filter;\n}\n\nlet groupIdCounter = 0;\nfunction getNewGroupId() {\n groupIdCounter++;\n return String(groupIdCounter);\n}\n\nfunction toInnerFiltersGroup(f: CommonFilterSpec): Group | null {\n if (f.type === 'not') {\n const group = toInnerFiltersGroup(f.filter);\n return group\n ? {\n not: !group.not,\n operand: group.operand,\n filters: group.filters,\n id: getNewGroupId(),\n expanded: group.expanded,\n }\n : null;\n }\n if (f.type === 'and' || f.type === 'or') {\n return {\n operand: f.type,\n not: false,\n filters: f.filters.map((f) => toInnerFilter(f)).filter((v) => v !== null) as Filter[],\n id: getNewGroupId(),\n expanded: f.expanded ?? true,\n };\n }\n if (SUPPORTED_FILTER_TYPES.has(f.type as SupportedFilterTypes)) {\n const filter = toInnerFilter(f);\n return {\n operand: 'or',\n not: false,\n filters: filter ? [filter] : [],\n id: getNewGroupId(),\n expanded: f.expanded ?? true,\n };\n }\n return null;\n}\n\nexport function toInnerModel(m: CommonFilterSpec): PlAdvancedFilterUI {\n const res: PlAdvancedFilterUI = {\n operand: 'or',\n groups: [],\n };\n if (m.type === 'not') {\n return res; // not supported 'not' for all the groups in ui\n }\n if (m.type === 'and' || m.type === 'or') {\n // group\n res.operand = m.type;\n res.groups = m.filters.map(toInnerFiltersGroup).filter((v) => v !== null) as Group[];\n } else if (SUPPORTED_FILTER_TYPES.has(m.type as SupportedFilterTypes)) {\n // single filter\n const group = toInnerFiltersGroup(m);\n res.groups = group ? [group] : [];\n }\n res.groups = res.groups.filter((gr) => gr.filters.length > 0);\n return res;\n}\n\nfunction toOuterFilter(filter: Filter): CommonFilterSpec | null {\n if (\n filter.type === 'isNA' || filter.type === 'isNotNA'\n || filter.type === 'inSet' || filter.type === 'notInSet'\n ) {\n return filter;\n }\n if (\n filter.type === 'greaterThanOrEqual' || filter.type === 'lessThanOrEqual'\n || filter.type === 'greaterThan' || filter.type === 'lessThan'\n || filter.type === 'equal' || filter.type === 'notEqual'\n ) {\n return filter.x !== undefined ? { ...filter, x: filter.x } : null;\n }\n if (\n filter.type === 'patternEquals' || filter.type === 'patternNotEquals'\n || filter.type === 'patternContainSubsequence' || filter.type === 'patternNotContainSubsequence'\n || filter.type === 'patternMatchesRegularExpression'\n || filter.type === 'patternFuzzyContainSubsequence'\n ) {\n return filter.value !== undefined ? { ...filter, value: filter.value } : null;\n }\n assertNever(filter.type);\n}\n\nfunction toOuterFilterGroup(m: Group): CommonFilterSpec {\n const res: CommonFilterSpec = {\n type: m.operand,\n expanded: m.expanded,\n filters: m.filters.map(toOuterFilter).filter((v): v is CommonFilterSpec => v !== null),\n };\n if (m.not) {\n return {\n type: 'not',\n filter: res,\n } as CommonFilterSpec;\n }\n return res;\n}\nexport function toOuterModel(m: PlAdvancedFilterUI): CommonFilterSpec {\n return {\n type: m.operand,\n filters: m.groups.map(toOuterFilterGroup),\n };\n}\n\nexport function createNewGroup(selectedSourceId: string) {\n return {\n id: getNewGroupId(),\n not: false,\n operand: 'and' as const,\n expanded: true,\n filters: [{\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: selectedSourceId as SUniversalPColumnId,\n }],\n };\n}\n\nexport type NormalizedSpecData = {\n valueType: ValueType;\n annotations: PColumnSpec['annotations'];\n domain: PColumnSpec['domain'];\n};\nexport function getNormalizedSpec(spec: PColumnSpec | AxisSpec): NormalizedSpecData {\n return { valueType: getTypeFromPColumnOrAxisSpec(spec), annotations: spec.annotations, domain: spec.domain };\n}\n\nexport function isNumericValueType(spec?: PColumnSpec | AxisSpec): boolean {\n if (!spec) {\n return false;\n }\n const valueType = getNormalizedSpec(spec).valueType;\n return valueType === 'Int' || valueType === 'Long' || valueType === 'Float' || valueType === 'Double';\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: Filter): filter is Filter & { type: 'equal' | 'notEqual' | 'lessThan' | 'lessThanOrEqual' | 'greaterThan' | 'greaterThanOrEqual' } {\n return filter.type === 'equal' || filter.type === 'notEqual' || filter.type === 'lessThan' || filter.type === 'lessThanOrEqual' || filter.type === 'greaterThan' || filter.type === 'greaterThanOrEqual';\n}\nexport function isStringFilter(filter: Filter): filter is Filter & { type: 'patternEquals' | 'patternNotEquals' | 'patternContainSubsequence' | 'patternNotContainSubsequence' | 'patternMatchesRegularExpression' | 'patternFuzzyContainSubsequence' } {\n return filter.type === 'patternEquals' || filter.type === 'patternNotEquals' || filter.type === 'patternContainSubsequence' || filter.type === 'patternNotContainSubsequence' || filter.type === 'patternMatchesRegularExpression' || filter.type === 'patternFuzzyContainSubsequence';\n}\n\nexport function getFilterInfo(filterType: FilterType): { label: string; supportedFor: (spec: NormalizedSpecData) => boolean } {\n return filterUiMetadata[filterType as keyof typeof filterUiMetadata];\n}\n\nexport function useInnerModel<T, V>(\n toInnerModel: (v: T) => V,\n toOuterModel: (v: V) => T,\n model: ModelRef<T>,\n) {\n const innerModel = ref<V>(toInnerModel(model.value));\n function updateOuterModelValue(v: V) {\n model.value = toOuterModel(v);\n }\n function updateInnerModelValue(v: T) {\n innerModel.value = toInnerModel(v);\n }\n watch(() => model.value, (v: T) => {\n updateInnerModelValue(v);\n }, { deep: true });\n watch(() => innerModel.value, (v: V) => {\n updateOuterModelValue(v);\n }, { deep: true });\n\n return innerModel;\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>(id as CanonicalizedJson<FilteredPColumnId | AnchoredPColumnId | AxisId>);\n return isFilteredPColumn(parsedId) || isAnchoredPColumnId(parsedId) || isAxisId(parsedId);\n } catch {\n return false;\n }\n}\n"],"names":["toInnerFilter","outerFilter","isSupportedFilterType","groupIdCounter","getNewGroupId","toInnerFiltersGroup","f","group","v","SUPPORTED_FILTER_TYPES","filter","toInnerModel","m","res","gr","toOuterFilter","assertNever","toOuterFilterGroup","toOuterModel","createNewGroup","selectedSourceId","DEFAULT_FILTERS","DEFAULT_FILTER_TYPE","getNormalizedSpec","spec","getTypeFromPColumnOrAxisSpec","isNumericFilter","isStringFilter","getFilterInfo","filterType","filterUiMetadata","useInnerModel","model","innerModel","ref","updateOuterModelValue","updateInnerModelValue","watch","isValidColumnId","id","parsedId","parseJson","isFilteredPColumn","isAnchoredPColumnId","isAxisId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/components/PlAdvancedFilter/utils.ts"],"sourcesContent":["import { filterUiMetadata } from '@milaboratories/uikit';\nimport type { AnchoredPColumnId, AxisId, CanonicalizedJson, FilteredPColumnId, ValueType } from '@platforma-sdk/model';\nimport { getTypeFromPColumnOrAxisSpec, isAnchoredPColumnId, isAxisId, isFilteredPColumn, parseJson, type AxisSpec, type PColumnSpec, type SUniversalPColumnId } from '@platforma-sdk/model';\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS } from './constants';\nimport type { NodeFilter } from './types';\nimport { type CommonFilter, type EditableFilter, type PlAdvancedFilterColumnId, type SupportedFilterTypes } 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 id: getNewId(),\n isExpanded: true,\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: selectedSourceId as SUniversalPColumnId,\n } as CommonFilter],\n };\n}\n\nexport type NormalizedSpecData = {\n valueType: ValueType;\n annotations: PColumnSpec['annotations'];\n domain: PColumnSpec['domain'];\n};\nexport function getNormalizedSpec(spec: PColumnSpec | AxisSpec): NormalizedSpecData {\n return { valueType: getTypeFromPColumnOrAxisSpec(spec), annotations: spec.annotations, domain: spec.domain };\n}\n\nexport function isNumericValueType(spec?: PColumnSpec | AxisSpec): boolean {\n if (!spec) {\n return false;\n }\n const valueType = getNormalizedSpec(spec).valueType;\n return valueType === 'Int' || valueType === 'Long' || valueType === 'Float' || valueType === 'Double';\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<EditableFilter, {\n type: 'equal'\n | 'notEqual'\n | 'lessThan'\n | 'lessThanOrEqual'\n | 'greaterThan'\n | 'greaterThanOrEqual';\n}> {\n return 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\nexport function isPositionFilter(filter: EditableFilter): filter is Extract<EditableFilter, { type: 'topN' | 'bottomN' }> {\n return filter.type === 'topN'\n || filter.type === 'bottomN'\n ;\n}\n\nexport function isStringFilter(filter: EditableFilter): filter is Extract<EditableFilter, {\n type: 'patternEquals'\n | 'patternNotEquals'\n | 'patternContainSubsequence'\n | 'patternNotContainSubsequence'\n | 'patternMatchesRegularExpression'\n | 'patternFuzzyContainSubsequence';\n}> {\n return 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\nexport function getFilterInfo(filterType: SupportedFilterTypes): { label: string; supportedFor: (spec: NormalizedSpecData) => boolean } {\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>(id as CanonicalizedJson<FilteredPColumnId | AnchoredPColumnId | AxisId>);\n return isFilteredPColumn(parsedId) || isAnchoredPColumnId(parsedId) || isAxisId(parsedId);\n } catch {\n return false;\n }\n}\n"],"names":["getNewId","createNewGroup","selectedSourceId","DEFAULT_FILTERS","DEFAULT_FILTER_TYPE","getNormalizedSpec","spec","getTypeFromPColumnOrAxisSpec","isNumericFilter","filter","isPositionFilter","getFilterInfo","filterType","filterUiMetadata","isValidColumnId","id","parsedId","parseJson","isFilteredPColumn","isAnchoredPColumnId","isAxisId"],"mappings":";;;AAOO,SAASA,IAAW;AACzB,SAAO,KAAK,IAAA;AACd;AAEO,SAASC,EAAeC,GAAsC;AACnE,SAAO;AAAA,IACL,IAAIF,EAAA;AAAA,IACJ,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,MACR,IAAIA,EAAA;AAAA,MACJ,YAAY;AAAA,MACZ,GAAGG,EAAgBC,CAAmB;AAAA,MACtC,QAAQF;AAAA,IAAA,CACO;AAAA,EAAA;AAErB;AAOO,SAASG,EAAkBC,GAAkD;AAClF,SAAO,EAAE,WAAWC,EAA6BD,CAAI,GAAG,aAAaA,EAAK,aAAa,QAAQA,EAAK,OAAA;AACtG;AAkBO,SAASE,EAAgBC,GAO7B;AACD,SAAOA,EAAO,SAAS,WAClBA,EAAO,SAAS,cAChBA,EAAO,SAAS,cAChBA,EAAO,SAAS,qBAChBA,EAAO,SAAS,iBAChBA,EAAO,SAAS;AACvB;AAEO,SAASC,EAAiBD,GAAyF;AACxH,SAAOA,EAAO,SAAS,UAClBA,EAAO,SAAS;AAEvB;AAkBO,SAASE,EAAcC,GAA0G;AACtI,SAAOC,EAAiBD,CAA2C;AACrE;AAEO,SAASE,EAAgBC,GAA6C;AAC3E,MAAI,OAAOA,KAAO;AAChB,WAAO;AAET,MAAI;AACF,UAAMC,IAAWC,EAA0DF,CAAuE;AAClJ,WAAOG,EAAkBF,CAAQ,KAAKG,EAAoBH,CAAQ,KAAKI,EAASJ,CAAQ;AAAA,EAC1F,QAAQ;AACN,WAAO;AAAA,EACT;AACF;"}
|