vue-efko-data-view 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-view.cjs.js","sources":["../dataview/table/ui/filter/FilterTagCloud.vue","../dataview/table/ui/table-cell/TableCellStatus.vue","../dataview/card/ui/CardCellActions.vue","../dataview/card/TheCard.vue","../dataview/lazyload/LazyLoadTrigger.vue","../dataview/card/CardGrid.vue","../dataview/table/enum/table.ts","../dataview/ui/TheSelect.vue","../dataview/table/ui/filter/FilterDropdown.vue","../dataview/table/ui/table-cell/TableCellActions.vue","../dataview/table/ui/table-cell/TableBodyCell.vue","../dataview/table/TheTable.vue","../dataview/table/ui/ColumnSettingsDrawer.vue","../dataview/card/FilterInput.vue","../dataview/card/CardFiltersDrawer.vue","../dataview/card/CardFiltersModal.vue","../dataview/table/ui/ColumnSettingsDrawer.ts","../dataview/DataView.vue","../dataview/lazyload/LazyLoadContainer.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-wrap tag-cloud\">\n <div class=\"flex flex-wrap\">\n <template\n v-for=\"[filterKey, filterValue] in Object.entries(filters)\"\n :key=\"filterKey\"\n >\n <a-tag\n v-for=\"value in parseFilterValues(filterValue)\"\n :key=\"value.key\"\n class=\"filter-tag\"\n :closable=\"true\"\n :style=\"tagStyle\"\n @close=\"() => removeFilter(filterKey, filterValue, value.original)\"\n >\n {{ value.label }}\n </a-tag>\n </template>\n </div>\n <a-button v-if=\"hasFilters\" type=\"link\" @click=\"clearAllFilters\">\n Очистить все\n </a-button>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { theme } from 'efko-ui-library';\nimport type {\n FilterItem,\n FilterValue,\n} from '../../interface/table.d';\n\nconst props = defineProps<{\n filters: Partial<Record<string, FilterValue>>,\n}>();\n\nconst emit = defineEmits<{(event: 'update:filters', value: Partial<Record<string, FilterValue>>): void,\n (\n event: 'remove',\n key: string,\n filterValue: FilterValue | undefined,\n valueToRemove: FilterItem\n ): void,\n (event: 'clear'): void,\n}>();\n\nconst { token } = theme.useToken();\n\nconst tagStyle = computed(() => {\n console.log(token);\n return {\n color: token.value.colorSelectedMenu,\n borderColor: token.value.colorBorderSecondary,\n backgroundColor: token.value.mainBgColor || token.value.colorPrimaryBg,\n }\n});\n\nconst hasValidFilter = (value: FilterValue | undefined): boolean => {\n if (value === null || value === undefined) {\n return false;\n }\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n return Boolean(value);\n};\n\nconst hasFilters = computed(() => Object.values(props.filters).some(hasValidFilter));\n\nfunction hasNameField(obj: unknown): obj is { name: string } {\n return (\n typeof obj === 'object'\n && obj !== null\n && 'name' in obj\n && typeof (obj as { name: unknown }).name === 'string'\n );\n}\n\nconst formatFilterItem = (\n item: FilterItem,\n): { key: string, label: string, original: FilterItem } => {\n if (typeof item === 'string') {\n return {\n key: item,\n label: item,\n original: item,\n };\n }\n if (Array.isArray(item)) {\n if (\n item.length === 2\n && typeof item[0] === 'string'\n && typeof item[1] === 'string'\n ) {\n const intervalLabel = `${item[0]} - ${item[1]}`;\n return {\n key: intervalLabel,\n label: intervalLabel,\n original: item,\n };\n }\n const joinedLabel = item.join(', ');\n return {\n key: joinedLabel,\n label: joinedLabel,\n original: item,\n };\n }\n\n if (hasNameField(item)) {\n const nameLabel = item.name;\n return {\n key: nameLabel,\n label: nameLabel,\n original: item,\n };\n }\n const jsonLabel = JSON.stringify(item);\n return {\n key: jsonLabel,\n label: jsonLabel,\n original: item,\n };\n};\n\nconst parseFilterValues = (\n value: FilterValue | undefined,\n): { key: string, label: string, original: FilterItem }[] => {\n if (value === undefined || value === null) {\n return [];\n }\n if (Array.isArray(value)) {\n return value.map((item: FilterItem) => formatFilterItem(item));\n }\n return [\n formatFilterItem(value),\n ];\n};\n\nconst isFilterItemEqual = (a: FilterItem, b: FilterItem): boolean => {\n if (typeof a === 'string' || typeof b === 'string') {\n return a === b;\n }\n return JSON.stringify(a) === JSON.stringify(b);\n};\n\nconst removeFilter = (\n key: string,\n fullValue: FilterValue | undefined,\n itemToRemove: FilterItem,\n): void => {\n if (Array.isArray(fullValue)) {\n const updated = fullValue.filter(\n (value: FilterItem) => !isFilterItemEqual(value, itemToRemove),\n );\n emit('update:filters', {\n ...props.filters,\n [key]: updated,\n });\n } else {\n emit('update:filters', {\n ...props.filters,\n [key]: null,\n });\n }\n emit('remove', key, fullValue, itemToRemove);\n};\n\nconst clearAllFilters = (): void => {\n emit('update:filters', {});\n emit('clear');\n};\n</script>\n\n<style scoped>\n.tag-cloud {\n display: flex;\n flex-wrap: wrap;\n}\n.filter-tag {\n padding: 5px 10px;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n margin: 4px;\n}\n</style>\n","<template>\n <div class=\"flex items-center justify-center text-lg\">\n <check-circle-two-tone\n v-if=\"!Boolean(value)\"\n two-tone-color=\"#4ade80\"\n />\n <check-circle-two-tone\n v-else\n two-tone-color=\"#bfbfbf\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { CheckCircleTwoTone } from '@ant-design/icons-vue';\n\ndefineProps<{\n value: unknown,\n}>();\n</script>\n","<template>\n <div class=\"flex items-center justify-center gap-2\">\n <a-tooltip v-if=\"canEdit === false\" title=\"Смотреть\">\n <a-button :icon=\"h(EyeOutlined)\" @click=\"editHandler(record)\" />\n </a-tooltip>\n\n <template v-if=\"canEdit !== false\">\n <a-tooltip v-if=\"editAction !== false\" title=\"Редактировать\">\n <a-button :icon=\"h(EditOutlined)\" @click=\"editHandler(record)\" />\n </a-tooltip>\n\n <a-tooltip :title=\"record.deletedAt ? 'Восстановить' : 'Удалить'\">\n <a-button\n :icon=\"h(record.deletedAt ? RedoOutlined : DeleteOutlined)\"\n @click=\"\n record.deletedAt ? restoreHandler(record) : deleteHandler(record)\n \"\n />\n </a-tooltip>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { h } from 'vue';\n\nimport {\n EditOutlined,\n DeleteOutlined,\n RedoOutlined,\n EyeOutlined,\n} from '@ant-design/icons-vue';\n\ninterface TableRecord {\n deletedAt?: string | null,\n [key: string]: unknown,\n}\n\nconst props = defineProps<{\n record: TableRecord,\n canEdit?: boolean,\n editAction?: boolean,\n}>();\n\nconst emit = defineEmits<{(event: 'edit' | 'delete' | 'restore', record: TableRecord): void,\n}>();\n\nconst canEdit = props.canEdit ?? true;\nconst editAction = props.editAction ?? true;\n\nconst deleteHandler = (record: TableRecord): void => emit('delete', record);\nconst restoreHandler = (record: TableRecord): void => emit('restore', record);\nconst editHandler = (record: TableRecord): void => emit('edit', record);\n</script>\n","<template>\n <a-card\n :loading=\"loading\"\n :bordered=\"false\"\n class=\"data-card bg-white rounded-3 shadow-sm\"\n >\n <template #title>\n <div class=\"data-card__header\">\n <slot name=\"title\" />\n </div>\n </template>\n\n <div class=\"data-card__body\">\n <slot name=\"body\" :record=\"record\" :columns=\"columns\">\n <div\n v-for=\"column in columns\"\n :key=\"column.dataIndex\"\n class=\"data-card__row\"\n >\n <span class=\"data-card__label\">\n {{ column.title }}:\n </span>\n\n <span class=\"data-card__value\">\n <span v-if=\"column.dataIndex === 'deletedAt'\">\n <table-cell-status :value=\"record.deletedAt\" />\n </span>\n\n <template v-else-if=\"Array.isArray(recordValue(column))\">\n <template v-if=\"column.tag === true\">\n <a-tag\n v-for=\"item in tagItems(column)\"\n :key=\"item.key\"\n class=\"mr-1 mb-1\"\n >\n {{ item.label }}\n </a-tag>\n </template>\n\n <template v-else>\n <span\n v-for=\"(item, index) in displayItems(column)\"\n :key=\"index\"\n >\n {{ item }}\n\n <template v-if=\"index < displayItems(column).length - 1\">\n ,\n </template>\n </span>\n </template>\n </template>\n\n <span v-else-if=\"typeof recordValue(column) === 'boolean'\">\n <table-cell-status :value=\"!Boolean(recordValue(column))\" />\n </span>\n\n <span v-else-if=\"recordValue(column) !== null && typeof recordValue(column) === 'object'\">\n {{ getNameOrEmpty(recordValue(column)) }}\n </span>\n\n <span v-else-if=\"column.tag === true\">\n <a-tag v-if=\"!isEmptyTagValue(recordValue(column))\">\n {{ recordValue(column) }}\n </a-tag>\n </span>\n\n <span v-else>\n {{ recordValue(column) }}\n </span>\n </span>\n </div>\n </slot>\n </div>\n\n <div v-if=\"$slots.footer\" class=\"data-card__footer\">\n <slot name=\"footer\" :record=\"record\" :columns=\"columns\" />\n </div>\n\n <template v-if=\"showActionsColumn\" #actions>\n <card-cell-actions\n :record=\"record\"\n :can-edit=\"canEdit\"\n :edit-action=\"editAction\"\n @edit=\"editHandler\"\n @delete=\"deleteHandler\"\n @restore=\"restoreHandler\"\n />\n </template>\n </a-card>\n</template>\n\n<script lang=\"ts\" setup>\nimport TableCellStatus from '../table/ui/table-cell/TableCellStatus.vue';\nimport CardCellActions from './ui/CardCellActions.vue';\n\nimport type { ColumnConfig } from '../table/interface/table.d';\nimport type { TableRecord } from './TheCard.d';\n\nconst props = defineProps<{\n loading: boolean,\n record: TableRecord,\n columns: ColumnConfig[],\n canEdit?: boolean,\n editAction?: boolean,\n showActionsColumn?: boolean,\n}>();\n\nconst recordValue = (column: ColumnConfig): unknown =>\n (props.record as Record<string, unknown>)[String(column.dataIndex)];\n\nconst recordArray = (column: ColumnConfig): unknown[] => {\n const value = recordValue(column);\n return Array.isArray(value) ? value : [];\n};\n\nconst getNameOrEmpty = (value: unknown): string => {\n if (value === null || typeof value !== 'object') {\n return '';\n }\n if ('name' in (value as Record<string, unknown>)) {\n const name = (value as { name?: unknown }).name;\n return typeof name === 'string' ? name : '';\n }\n return '';\n};\n\nconst isEmptyTagValue = (value: unknown): boolean => {\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === 'string') {\n return value.trim().length === 0;\n }\n return false;\n};\n\nconst normalizeItemLabel = (item: unknown): string => {\n if (item === null || item === undefined) {\n return '';\n }\n if (typeof item === 'string') {\n return item.trim();\n }\n if (typeof item === 'object') {\n return getNameOrEmpty(item);\n }\n return String(item);\n};\n\nconst displayItems = (column: ColumnConfig): string[] => {\n const value = recordValue(column);\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((item) => normalizeItemLabel(item))\n .filter((label) => label.trim().length > 0);\n};\n\nconst tagItems = (column: ColumnConfig): { key: string; label: string }[] =>\n displayItems(column).map((label, index) => ({\n key: `${label}-${index}`,\n label,\n }));\n\nconst emit = defineEmits<{(e: 'delete' | 'restore' | 'edit', record: TableRecord): void,\n}>();\n\nconst canEdit = props.canEdit ?? true;\nconst editAction = props.editAction ?? true;\nconst showActionsColumn = props.showActionsColumn ?? true;\n\nconst deleteHandler = (record: TableRecord): void => emit('delete', record);\nconst restoreHandler = (record: TableRecord): void => emit('restore', record);\nconst editHandler = (record: TableRecord): void => emit('edit', record);\n</script>\n\n<style scoped>\n.data-card {\n transition: box-shadow 0.18s ease-out, transform 0.18s ease-out;\n}\n\n.data-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 12px 30px rgba(33, 37, 41, 0.08);\n}\n\n.data-card__header {\n display: flex;\n align-items: center;\n min-height: 32px;\n}\n\n.data-card__body {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.data-card__row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 2px 0;\n}\n\n.data-card__label {\n flex: 0 0 auto;\n font-weight: 500;\n font-size: 12px;\n color: #6c757d;\n}\n\n.data-card__value {\n flex: 1 1 auto;\n font-size: 13px;\n word-break: break-word;\n}\n\n.data-card__footer {\n display: flex;\n justify-content: flex-end;\n margin-top: 12px;\n}\n</style>\n","<template>\n <div class=\"efko-dataview\">\n <div\n ref=\"container\"\n style=\"height: 1px\"\n class=\"flex items-center justify-center py-5\"\n >\n <a-spin :spinning=\"loading\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n onMounted,\n onBeforeUnmount,\n} from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n onIntersect:() => void,\n threshold?: number,\n once?: boolean,\n loading: boolean,\n }>(),\n {\n threshold: 0.1,\n once: false,\n },\n);\n\nconst container = ref<HTMLElement | null>(null);\nlet observer: IntersectionObserver | null = null;\n\nconst handleIntersection = (entries: IntersectionObserverEntry[]): void => {\n const entry = entries[0];\n if (entry.isIntersecting) {\n props.onIntersect?.();\n if (props.once && observer) {\n observer.disconnect();\n }\n }\n};\n\nonMounted(() => {\n observer = new IntersectionObserver(handleIntersection, {\n threshold: props.threshold,\n });\n if (container.value) {\n observer.observe(container.value);\n }\n});\n\nonBeforeUnmount(() => {\n if (observer) observer.disconnect();\n});\n</script>\n","<template>\n <div class=\"efko-dataview\">\n <div class=\"flex flex-col gap-4\">\n <div :class=\"gridClass\">\n <the-card\n v-for=\"(record, index) in internalData\"\n :key=\"String(record.id ?? `card-${index}`)\"\n :loading=\"loading\"\n :record=\"record\"\n :columns=\"preparedColumns\"\n :can-edit=\"canEdit\"\n :edit-action=\"editAction\"\n :show-actions-column=\"showActionsColumn\"\n @edit=\"(rec) => emit('edit', rec)\"\n @delete=\"(rec) => emit('delete', rec)\"\n @restore=\"(rec) => emit('restore', rec)\"\n >\n <template v-if=\"$slots.titleCard\" #title>\n <slot\n name=\"titleCard\"\n :record=\"record\"\n :columns=\"preparedColumns\"\n />\n </template>\n\n <template v-if=\"$slots.bodyCard\" #body=\"{ record: bodyRecord, columns: bodyColumns }\">\n <slot\n name=\"bodyCard\"\n :record=\"bodyRecord\"\n :columns=\"bodyColumns\"\n />\n </template>\n\n <template v-if=\"$slots.footerCard\" #footer=\"{ record: footerRecord, columns: footerColumns }\">\n <slot\n name=\"footerCard\"\n :record=\"footerRecord\"\n :columns=\"footerColumns\"\n />\n </template>\n </the-card>\n </div>\n\n <LazyLoadTrigger\n v-if=\"pagination && !isLastPage\"\n :loading=\"loading\"\n :once=\"false\"\n :on-intersect=\"loadNextPage\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, computed, watch, onMounted,\n} from 'vue';\nimport autoAnimate from '@formkit/auto-animate';\nimport TheCard from './TheCard.vue';\nimport type { ColumnConfig, Meta } from '../table/interface/table.d';\nimport type { TableRecord } from './TheCard.d';\nimport LazyLoadTrigger from '../lazyload/LazyLoadTrigger.vue';\n\nconst props = defineProps<{\n loading: boolean,\n columns: ColumnConfig[],\n dataSource: TableRecord[],\n cardLayout: 'grid' | 'row',\n canEdit: boolean,\n editAction: boolean,\n showActionsColumn?: boolean,\n pagination: boolean,\n meta: Meta | undefined,\n}>();\n\nconst emit = defineEmits<{(event: 'delete' | 'restore' | 'edit', record: Record<string, unknown>): void,\n (event: 'pageChange', page: number): void,\n (event: 'sizeChange', page: number, size: number): void,\n}>();\n\nonMounted(() => {\n const container = document.querySelector<HTMLElement>('.card-grid');\n if (container !== null) {\n autoAnimate(container);\n }\n});\n\nconst gridClass = computed(\n () => (props.cardLayout === 'row'\n ? 'card-grid card-grid--row'\n : 'card-grid card-grid--grid'),\n);\n\nconst preparedColumns = computed(() => props.columns);\n\nconst internalData = ref<TableRecord[]>([]);\n\nconst mergeData = (): void => {\n if (props.meta?.currentPage === 1) {\n internalData.value = [\n ...props.dataSource,\n ];\n return;\n }\n\n const existingIds = new Set(internalData.value.map((record: Record<string, unknown>) => record.id));\n const toAdd = props.dataSource.filter((record: TableRecord) => !existingIds.has(record.id));\n internalData.value.push(...toAdd);\n};\n\nmergeData();\n\nwatch(() => [\n props.dataSource,\n props.meta?.currentPage,\n], mergeData, {\n deep: true,\n});\n\nconst isLastPage = computed(() => {\n if (props.meta === undefined) {\n return true;\n }\n return (\n props.meta.currentPage * props.meta.pageSize\n >= props.meta.total\n );\n});\n\nconst loadNextPage = (): void => {\n if (props.loading || isLastPage.value || !props.meta) {\n return;\n }\n emit('pageChange', props.meta.currentPage + 1);\n};\n</script>\n\n<style scoped>\n.card-grid {\n display: grid;\n gap: 24px;\n}\n\n.card-grid--row {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.card-grid--grid {\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n}\n</style>\n","export const PAGE_SIZE_SMALL = '10';\nexport const PAGE_SIZE_MEDIUM = '20';\nexport const PAGE_SIZE_LARGE = '50';\nexport const PAGE_SIZE_EXTRA_LARGE = '100';\nexport const PAGE_SIZE_ULTRA = '1000';\nexport const DEFAULT_PAGE_NUMBER = 1;\n\nexport const DEFAULT_PAGE_SIZE = PAGE_SIZE_SMALL;\n\nexport enum FilterMode {\n SEARCH = 'search',\n SELECT = 'select',\n DATE = 'date',\n}\n\nexport enum PageSizes {\n SMALL = '10',\n MEDIUM = '20',\n LARGE = '50',\n EXTRA_LARGE = '100',\n ULTRA = '1000'\n}\n\nexport const PAGE_SIZE_OPTIONS = [\n PageSizes.SMALL,\n PageSizes.MEDIUM,\n PageSizes.LARGE,\n PageSizes.EXTRA_LARGE,\n];\n\nexport enum SkipSizes {\n NONE = 0,\n SMALL = 10,\n MEDIUM = 20,\n LARGE = 50\n}\n\nexport enum TableDefaults {\n DEFAULT_CURRENT_PAGE = 1\n}\n\nexport enum TableSortOrder {\n ASCEND = 'ascend',\n DESCEND = 'descend'\n}\n\nexport enum SortOrder {\n ASC = 'asc',\n DESC = 'desc',\n}\n","<template>\n <VueMultiselect\n v-bind=\"$attrs\"\n class=\"filter-select\"\n :modelValue=\"modelValue\"\n @update:modelValue=\"$emit('update:modelValue', $event)\"\n label=\"name\"\n value-prop=\"id\"\n >\n <template #nooptions>\n <a-empty :image=\"simpleImage\" />\n </template>\n </VueMultiselect>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport VueMultiselect from '@vueform/multiselect';\nimport { Empty } from 'efko-ui-library';\n\nexport default defineComponent({\n name: 'MultiselectWrapper',\n components: { VueMultiselect },\n props: {\n modelValue: {\n type: [Array, String, Number, Object, Boolean, null],\n default: null,\n },\n },\n emits: ['update:modelValue'],\n data() {\n return { simpleImage: Empty.PRESENTED_IMAGE_SIMPLE };\n },\n});\n</script>\n\n<style scoped>\n.filter-select :deep(.multiselect-placeholder) {\n font-size: 12px;\n}\n</style>\n","<template>\n <div class=\"efko-dataview\">\n <div class=\"flex items-center gap-2 p-2\">\n <component\n v-bind=\"componentProps\"\n :is=\"filterComponent\"\n v-model:value=\"localValue\"\n v-model=\"localValue\"\n :placeholder=\"placeholder\"\n style=\"min-width: 240px; max-width: 300px; font-size: 14px\"\n object\n />\n <a-button type=\"primary\" size=\"small\" @click=\"handleApply\">\n Добавить\n </a-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed, ref,\n} from 'vue';\nimport Multiselect from '../../../ui/TheSelect.vue';\nimport { FilterMode } from '../../enum/table';\n\ntype FilterValue =\n | string\n | number\n | boolean\n | object\n | (string | number | boolean | object)[]\n | null;\n\nconst props = defineProps<{\n placeholder: string,\n filterMode?: FilterMode,\n componentProps?: Record<string, unknown>,\n}>();\n\nconst emit = defineEmits<{(event: 'update:modelValue', value: FilterValue): void,\n (event: 'apply'): void,\n}>();\n\nconst filterComponent = computed(() => {\n if (props.filterMode === FilterMode.SEARCH) {\n return 'a-input';\n }\n\n if (props.filterMode === FilterMode.SELECT) {\n return Multiselect;\n }\n\n if (props.filterMode === FilterMode.DATE) {\n return 'a-range-picker';\n }\n\n return null;\n});\n\nconst localValue = ref(null);\n\nconst handleApply = (): void => {\n emit('update:modelValue', localValue.value);\n emit('apply');\n localValue.value = null;\n};\n</script>\n","<template>\n <div class=\"flex items-center justify-center gap-2\">\n <a-tooltip v-if=\"props.canEdit === false\" title=\"Смотреть\">\n <a-button :icon=\"h(EyeOutlined)\" @click=\"editHandler(record)\" />\n </a-tooltip>\n\n <template v-if=\"canEdit !== false\">\n <a-tooltip v-if=\"props.editAction !== false\" title=\"Редактировать\">\n <a-button :icon=\"h(EditOutlined)\" @click=\"editHandler(record)\" />\n </a-tooltip>\n\n <a-tooltip v-if=\"deleteAction !== false\" :title=\"record.isDeleted ? 'Восстановить' : 'Удалить'\">\n <a-button\n :icon=\"h(record.isDeleted ? RedoOutlined : DeleteOutlined)\"\n @click=\"\n record.isDeleted ? restoreHandler(record) : deleteHandler(record)\n \"\n />\n </a-tooltip>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { h } from 'vue';\n\nimport {\n EditOutlined,\n DeleteOutlined,\n RedoOutlined,\n EyeOutlined,\n} from '@ant-design/icons-vue';\n\ninterface TableRecord {\n name?: string,\n isDeleted?: string | null,\n}\n\nconst props = defineProps<{\n record: TableRecord,\n canEdit: boolean,\n editAction: boolean,\n deleteAction: boolean,\n}>();\n\nconst emit = defineEmits<{(event: 'edit' | 'delete' | 'restore', record: TableRecord): void,\n}>();\n\nconst deleteHandler = (record: TableRecord): void => {\n emit('delete', record);\n};\n\nconst restoreHandler = (record: TableRecord): void => {\n emit('restore', record);\n};\n\nconst editHandler = (record: TableRecord): void => {\n emit('edit', record);\n};\n</script>\n","<template>\n <a-skeleton\n v-if=\"loading\"\n :active=\"true\"\n :loading=\"true\"\n :title=\"false\"\n :paragraph=\"{ rows: 1 }\"\n />\n\n <template v-else>\n <span v-if=\"column.dataIndex === 'isDeleted'\">\n <table-cell-status :value=\"(record as any).isDeleted\" />\n </span>\n\n <span v-else-if=\"Array.isArray(cellValue)\">\n <template v-if=\"column.tag === true\">\n <a-tag\n v-for=\"item in tagItems\"\n :key=\"item.key\"\n :style=\"tagStyle\"\n class=\"mr-1 mb-1\"\n >\n {{ item.label }}\n </a-tag>\n </template>\n\n <template v-else>\n <span v-for=\"(item, index) in displayItems\" :key=\"index\">\n {{ item }}\n <template v-if=\"index < displayItems.length - 1\">, </template>\n </span>\n </template>\n </span>\n\n <span v-else-if=\"typeof cellValue === 'boolean'\">\n <table-cell-status :value=\"!Boolean(cellValue)\" />\n </span>\n\n <span v-else-if=\"cellValue !== null && typeof cellValue === 'object'\">\n {{ getNameOrEmpty(cellValue) }}\n </span>\n\n <span v-else-if=\"column.tag === true\">\n <a-tag v-if=\"hasTagValue\" :style=\"tagStyle\">\n {{ String(cellValue) }}\n </a-tag>\n <template v-else />\n </span>\n\n <span v-else>{{ cellValue }}</span>\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { CSSProperties } from 'vue';\n\nimport TableCellStatus from './TableCellStatus.vue';\nimport type { ColumnConfig } from '../../interface/table.d';\n\nconst props = defineProps<{\n loading: boolean;\n column: ColumnConfig;\n record: Record<string, unknown>;\n tagStyle?: CSSProperties;\n}>();\n\nconst cellValue = computed<unknown>(() => props.record[String(props.column.dataIndex)]);\n\nconst isEmptyTagValue = (value: unknown): boolean => {\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === 'string') {\n return value.trim().length === 0;\n }\n return false;\n};\n\nconst getNameOrEmpty = (value: unknown): string => {\n if (value === null || typeof value !== 'object') {\n return '';\n }\n if ('name' in (value as Record<string, unknown>)) {\n const nameValue = (value as { name?: unknown }).name;\n return typeof nameValue === 'string' ? nameValue : '';\n }\n return '';\n};\n\nconst normalizeItemLabel = (item: unknown): string => {\n if (item === null || item === undefined) {\n return '';\n }\n if (typeof item === 'string') {\n return item.trim();\n }\n if (typeof item === 'object') {\n return getNameOrEmpty(item);\n }\n return String(item);\n};\n\nconst displayItems = computed<string[]>(() => {\n const value = cellValue.value;\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((item) => normalizeItemLabel(item))\n .filter((label) => label.trim().length > 0);\n});\n\nconst tagItems = computed<{ key: string; label: string }[]>(() =>\n displayItems.value.map((label, index) => ({\n key: `${label}-${index}`,\n label,\n })));\n\nconst hasTagValue = computed(() => !isEmptyTagValue(cellValue.value));\n</script>\n","<template>\n <div class=\"efko-dataview\">\n <a-table\n bordered\n table-layout=\"fixed\"\n class=\"the-table\"\n :loading=\"loading\"\n :columns=\"computedColumns\"\n :data-source=\"dataSource\"\n :row-key=\"(record: Record<string, unknown>) => record.id\"\n :pagination=\"false\"\n :scroll=\"{ x: 'max-content'}\"\n :row-class-name=\"rowClassName\"\n @change=\"onTableChange\"\n @resize-column=\"resizeColumn\"\n >\n <template #title>\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <a-badge dot :count=\"hiddenColumnCount\">\n <a-button\n class=\"flex items-center justify-center p-2\"\n @click=\"$emit('openColumnDrawer')\"\n >\n <Icon name=\"solar:settings-outline\" class=\"text-lg\" />\n </a-button>\n </a-badge>\n\n <a-button\n v-if=\"showFilterButton\"\n class=\"flex items-center justify-center p-2\"\n @click=\"$emit('openFilterDrawer')\"\n >\n <Icon name=\"ant-design:filter-outlined\" class=\"text-lg\" />\n </a-button>\n </div>\n\n <slot name=\"title\" />\n </div>\n </template>\n\n <template\n v-for=\"column in filterableColumns\"\n :key=\"String(column.dataIndex)\"\n #[`filter${String(column.dataIndex)}Dropdown`]\n >\n <filter-dropdown\n v-model=\"inputFilters[column.dataIndex]\"\n :filter-mode=\"column.filterMode\"\n :component-props=\"column.componentProps\"\n :placeholder=\"column.title\"\n @update:model-value=\"(value) => applyFilter(column, value)\"\n />\n </template>\n\n <template #bodyCell=\"{ column, record }\">\n <slot name=\"bodyCell\" :column=\"column\" :record=\"record\">\n <table-body-cell\n :loading=\"loading\"\n :column=\"column\"\n :record=\"record\"\n :tag-style=\"tagStyle\"\n />\n </slot>\n </template>\n\n <template #actionColumn=\"{ record }\">\n <slot name=\"actionColumn\" :record=\"record\">\n <table-cell-actions\n :edit-action=\"editAction\"\n :delete-action=\"deleteAction\"\n :can-edit=\"canEdit\"\n :record=\"record\"\n @edit=\"() => $emit('edit', record)\"\n @delete=\"() => $emit('delete', record)\"\n @restore=\"() => $emit('restore', record)\"\n />\n </slot>\n </template>\n </a-table>\n\n <a-pagination\n v-if=\"pagination\"\n class=\"mt-4 text-right\"\n :current=\"meta?.currentPage\"\n :page-size=\"meta?.pageSize\"\n :total=\"meta?.total\"\n :show-total=\"(total: string) => `Всего ${total} элементов`\"\n :page-size-options=\"meta?.pageSizeOptions\"\n :show-size-changer=\"true\"\n @change=\"(page: number) => $emit('pageChange', page)\"\n @show-size-change=\"(page: number, size: number) => $emit('sizeChange', page, size)\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, computed, watch, onMounted,\n} from 'vue';\nimport autoAnimate from '@formkit/auto-animate';\nimport { isEqual } from 'lodash';\n\nimport { FilterMode, TableSortOrder } from './enum/table';\nimport FilterDropdown from './ui/filter/FilterDropdown.vue';\nimport TableCellActions from './ui/table-cell/TableCellActions.vue';\nimport TableBodyCell from './ui/table-cell/TableBodyCell.vue';\nimport type {\n ColumnConfig,\n FilterItem,\n FilterValue,\n Meta,\n SortPayload,\n} from './interface/table.d';\nimport type { TableRecord } from '../card/TheCard.d';\nimport { theme } from 'efko-ui-library';\n\nconst { token } = theme.useToken();\n\ntype TableColumnDefinition = Record<string, unknown> & ColumnConfig & {\n slots?: Record<string, string>;\n};\n\nconst props = defineProps<{\n loading: boolean,\n pagination: boolean,\n columns: ColumnConfig[],\n dataSource: TableRecord[],\n filterValues?: Partial<Record<string, FilterValue>>,\n meta: Meta | undefined,\n canEdit: boolean,\n editAction: boolean,\n deleteAction: boolean,\n showActionsColumn?: boolean,\n columnsVisibility: Record<string, boolean>,\n disableColumnFilterDropdowns?: boolean,\n showFilterButton?: boolean,\n multiColumnFilters?: boolean,\n}>();\n\nconst emit = defineEmits<{(event: 'update:filterValues',\n values: Partial<Record<string, FilterValue>>,\n ): void,\n (event: 'filterApply', payload: { key: string, value: FilterItem[] }): void,\n (event: 'restore' | 'edit' | 'delete', record: Record<string, unknown>): void,\n (event: 'sortChange', payload: SortPayload): void,\n (event: 'pageChange', page: number): void,\n (event: 'sizeChange', page: number, pageSize: number): void,\n (event: 'openColumnDrawer'): void,\n (event: 'openFilterDrawer'): void,\n}>();\n\nconst showFilterButton = computed<boolean>(() => props.showFilterButton === true);\n\nconst localFilterValues = ref<Partial<Record<string, FilterValue>>>(\n props.filterValues || {},\n);\nconst localColumns = ref<ColumnConfig[]>([\n ...props.columns,\n]);\nconst inputFilters = ref<Record<string, unknown | null>>({});\n\nconst filterableColumns = computed(() => {\n if (props.disableColumnFilterDropdowns === true) {\n return [];\n }\n\n return localColumns.value.filter(\n (column: ColumnConfig) => column.filterable,\n );\n});\n\nconst computedColumns = computed(() => {\n const visible = localColumns.value.filter((column: ColumnConfig) => {\n if (column.filterOnly) {\n return false;\n }\n\n const key = column.key || String(column.dataIndex);\n return props.columnsVisibility[key] !== false;\n });\n\n const result: TableColumnDefinition[] = visible.map((column: ColumnConfig) => {\n const { headerAlign, cellAlign, ...rest } = column;\n\n return {\n ...rest,\n sorter: Boolean(rest.sortable),\n sortDirections: rest.sortable\n ? [\n TableSortOrder.ASCEND,\n TableSortOrder.DESCEND,\n ]\n : undefined,\n customHeaderCell: (): { style: { textAlign: string } } | undefined => (headerAlign ? {\n style: {\n textAlign: headerAlign,\n },\n } : undefined),\n customCell: (): { style: { textAlign: string } } | undefined => (cellAlign ? {\n style: {\n textAlign: cellAlign,\n },\n } : undefined),\n customFilterDropdown: Boolean(rest.filterable),\n slots: rest.filterable\n ? {\n filterDropdown: `filter${String(rest.dataIndex)}Dropdown`,\n }\n : undefined,\n } as TableColumnDefinition;\n });\n\n if (\n props.showActionsColumn !== false\n && props.columnsVisibility.actions !== false\n ) {\n result.push({\n title: 'Действия',\n key: 'actions',\n dataIndex: 'actions' as keyof TableRecord,\n width: 100,\n slots: {\n customRender: 'actionColumn',\n },\n } as TableColumnDefinition);\n }\n\n return result;\n});\n\nconst hiddenColumnCount = computed(\n () => Object.keys(props.columnsVisibility).filter(\n (key: string) => props.columnsVisibility[key] === false,\n ).length,\n);\n\nconst tagStyle = computed(() => ({\n color: token.value.colorSelectedMenu,\n borderColor: token.value.colorBorderSecondary,\n backgroundColor: token.value.mainBgColor || token.value.colorPrimaryBg,\n}));\n\nconst getFilterArray = (key: string): FilterItem[] => {\n const value = localFilterValues.value[key];\n if (Array.isArray(value)) {\n return value;\n }\n if (value !== null && value !== undefined) {\n return [value];\n }\n return [];\n};\n\nconst isRangeTuple = (value: unknown): value is [string, string] => (\n Array.isArray(value)\n && value.length === 2\n && typeof value[0] === 'string'\n && typeof value[1] === 'string'\n);\n\nconst formatDateLike = (value: unknown): string => {\n if (typeof value === 'string') {\n return value;\n }\n if (value !== null && typeof value === 'object') {\n const maybeFormat = (value as { format?: unknown }).format;\n if (typeof maybeFormat === 'function') {\n return (maybeFormat as (pattern: string) => string)('YYYY-MM-DD');\n }\n const maybeToISOString = (value as { toISOString?: unknown }).toISOString;\n if (typeof maybeToISOString === 'function') {\n return (maybeToISOString as () => string)();\n }\n }\n return String(value);\n};\n\nconst normalizeCandidates = (column: ColumnConfig, raw: unknown): FilterItem[] => {\n if (raw === null || raw === undefined) {\n return [];\n }\n\n if (column.filterMode === FilterMode.SEARCH) {\n if (typeof raw !== 'string') {\n return [];\n }\n const trimmed = raw.trim();\n return trimmed.length === 0 ? [] : [trimmed];\n }\n\n if (column.filterMode === FilterMode.DATE) {\n if (!Array.isArray(raw) || raw.length !== 2) {\n return [];\n }\n const tuple: [string, string] = [\n formatDateLike(raw[0]),\n formatDateLike(raw[1]),\n ];\n return [tuple];\n }\n\n if (Array.isArray(raw)) {\n return raw as FilterItem[];\n }\n\n return [raw as FilterItem];\n};\n\nconst setFilterValue = (key: string, value: FilterItem[] | FilterItem | null): void => {\n const next = { ...localFilterValues.value };\n\n if (value === null) {\n next[key] = null;\n emit('filterApply', { key, value: [] });\n } else if (Array.isArray(value)) {\n const compact = value.filter((v) => v !== null && v !== undefined);\n if (compact.length === 0) {\n next[key] = null;\n emit('filterApply', { key, value: [] });\n } else if (compact.length === 1 && !isRangeTuple(compact[0])) {\n next[key] = compact[0];\n emit('filterApply', { key, value: compact });\n } else {\n next[key] = compact;\n emit('filterApply', { key, value: compact });\n }\n } else {\n next[key] = value;\n emit('filterApply', { key, value: [value] });\n }\n\n emit('update:filterValues', next);\n localFilterValues.value = next;\n inputFilters.value[key] = null;\n};\n\nconst applyFilter = (column: ColumnConfig, newValue: unknown): void => {\n const key = String(column.dataIndex);\n\n const candidates = normalizeCandidates(column, newValue);\n if (candidates.length === 0) {\n inputFilters.value[key] = null;\n return;\n }\n\n const isMultiple = (column.filterMultiple ?? props.multiColumnFilters ?? true) !== false;\n if (!isMultiple) {\n if (column.filterMode === FilterMode.DATE) {\n setFilterValue(key, candidates);\n return;\n }\n\n if (Array.isArray(newValue)) {\n setFilterValue(key, candidates[candidates.length - 1] as FilterItem);\n return;\n }\n\n setFilterValue(key, candidates[0] as FilterItem);\n return;\n }\n\n const current = getFilterArray(key);\n const next = [\n ...current,\n ];\n let changed = false;\n\n candidates.forEach((candidate) => {\n if (next.some((item) => isEqual(item, candidate))) {\n return;\n }\n next.push(candidate);\n changed = true;\n });\n\n if (!changed) {\n inputFilters.value[key] = null;\n return;\n }\n\n setFilterValue(key, next);\n};\n\nconst rowClassName = (record: Record<string, unknown>): string => (record.isGroup ? 'parent-row' : '');\n\nconst onTableChange = (\n _pagination: unknown,\n _filters: unknown,\n sorter: { columnKey?: string, order?: TableSortOrder | null },\n): void => {\n emit('sortChange', {\n columnKey: sorter.columnKey || '',\n order: sorter.order || null,\n });\n};\n\nconst resizeColumn = (width: number, col: ColumnConfig): void => {\n const key = col.key || String(col.dataIndex);\n const index = localColumns.value.findIndex(\n (column: ColumnConfig) => (column.key || String(column.dataIndex)) === key,\n );\n if (index === -1) {\n return;\n }\n localColumns.value.splice(index, 1, {\n ...col,\n width,\n });\n};\n\nwatch(\n () => props.filterValues,\n (newVal: Partial<Record<string, FilterValue>> | undefined) => {\n localFilterValues.value = newVal || {};\n },\n);\n\nwatch(\n () => props.columns,\n (newColumns: ColumnConfig[]) => {\n localColumns.value = [\n ...newColumns,\n ];\n },\n {\n immediate: true,\n },\n);\n\nonMounted(() => {\n const tbody = document.querySelector<HTMLElement>('.the-table tbody');\n if (tbody !== null) {\n autoAnimate(tbody);\n }\n});\n</script>\n","<template>\n <a-drawer\n v-model:open=\"drawerOpen\"\n class=\"efko-dataview\"\n title=\"Настройки представления\"\n placement=\"right\"\n >\n <section class=\"mb-4\">\n <h3 class=\"font-bold text-base mb-2\">Отображение колонок</h3>\n\n <div class=\"flex flex-col gap-1\">\n <div v-for=\"col in columns\" :key=\"col.key ?? col.dataIndex\">\n <a-checkbox\n v-model:checked=\"visibility[col.key ?? col.dataIndex]\"\n :disabled=\"isCardMode\"\n class=\"flex\"\n >\n {{ col.title }}\n </a-checkbox>\n </div>\n </div>\n </section>\n\n <section>\n <h3 class=\"font-bold text-base mb-2\">Вид</h3>\n\n <a-radio-group\n v-model:value=\"localViewMode\"\n button-style=\"solid\"\n class=\"mb-3\"\n :disabled=\"disabledViewMode\"\n >\n <a-radio value=\"table\">Таблица</a-radio>\n <a-radio value=\"grid\">Карточки</a-radio>\n </a-radio-group>\n\n <a-radio-group\n v-model:value=\"localCardLayout\"\n button-style=\"solid\"\n :disabled=\"!isCardMode\"\n >\n <a-radio-button value=\"grid\">\n <AppstoreOutlined class=\"mr-2\" />Сетка\n </a-radio-button>\n\n <a-radio-button value=\"row\">\n <PicCenterOutlined class=\"mr-2\" />Строка\n </a-radio-button>\n </a-radio-group>\n </section>\n </a-drawer>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, watch, computed, reactive,\n} from 'vue';\nimport { AppstoreOutlined, PicCenterOutlined } from '@ant-design/icons-vue';\nimport type { ColumnConfig } from '../interface/table.d';\nimport { CardLayout, ViewMode } from './ColumnSettingsDrawer';\n\nconst props = defineProps<{\n visible: boolean,\n columns: ColumnConfig[],\n modelValue: Record<string, boolean>,\n showActionsColumn?: boolean,\n disableViewMode?: boolean,\n viewMode: ViewMode,\n cardLayout: CardLayout,\n}>();\n\nconst emit = defineEmits<{(e: 'update:visible', value: boolean): void,\n (e: 'update:modelValue', value: Record<string, boolean>): void,\n (e: 'update:viewMode', value: ViewMode): void,\n (e: 'update:cardLayout', value: CardLayout): void,\n}>();\n\nconst drawerOpen = ref(props.visible);\nconst localViewMode = ref(props.viewMode);\nconst localCardLayout = ref(props.cardLayout);\nconst visibility = reactive<Record<string, boolean>>({\n ...props.modelValue,\n});\n\nconst isCardMode = computed(() => localViewMode.value === 'grid');\nconst disabledViewMode = props.disableViewMode || false;\n\nwatch(\n () => props.visible,\n (value: boolean) => {\n drawerOpen.value = value;\n },\n);\n\nwatch(drawerOpen, (value: boolean) => {\n emit('update:visible', value);\n});\n\nwatch(\n () => props.viewMode,\n (mode: ViewMode) => {\n localViewMode.value = mode;\n },\n);\n\nwatch(localViewMode, (mode: ViewMode) => {\n emit('update:viewMode', mode);\n});\n\nwatch(\n () => props.cardLayout,\n (layout: CardLayout) => {\n localCardLayout.value = layout;\n },\n);\n\nwatch(localCardLayout, (layout: CardLayout) => {\n emit('update:cardLayout', layout);\n});\n\nwatch(\n () => props.modelValue,\n (view: Record<string, boolean>) => Object.assign(visibility, view),\n {\n deep: true,\n },\n);\n\nwatch(visibility, (view: Record<string, boolean>) => emit('update:modelValue', {\n ...view,\n}), {\n deep: true,\n});\n\nif (props.showActionsColumn && visibility.actions === undefined) {\n visibility.actions = true;\n}\n</script>\n","<template>\n <component\n v-bind=\"componentProps\"\n :is=\"inputComponent\"\n v-model:value=\"inputValue\"\n v-model=\"inputValue\"\n :placeholder=\"placeholder\"\n class=\"w-full text-sm\"\n />\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed, ref, watch,\n} from 'vue';\nimport Multiselect from '../ui/TheSelect.vue';\nimport { FilterMode } from '../table/enum/table';\n\ntype Mode = 'search' | 'select' | 'date'\ntype Value =\n | string\n | number\n | boolean\n | object\n | (string | number | boolean | object)[]\n | null\n | undefined\n\nconst props = defineProps<{\n modelValue: Value,\n filterMode?: Mode,\n componentProps?: Record<string, unknown>,\n placeholder: string,\n}>();\n\nconst emit = defineEmits<{(event:'update:modelValue', value:Value): void }>();\n\nconst inputComponent = computed(() => {\n if (props.filterMode === FilterMode.SEARCH) {\n return 'a-input';\n }\n if (props.filterMode === FilterMode.SELECT) {\n return Multiselect;\n }\n if (props.filterMode === FilterMode.DATE) {\n return 'a-range-picker';\n }\n return 'a-input';\n});\n\nconst inputValue = ref<Value>(props.modelValue);\n\nwatch(() => props.modelValue, (value: Value) => {\n inputValue.value = value;\n});\nwatch(inputValue, (value: Value) => emit('update:modelValue', value));\n</script>\n","<template>\n <a-drawer\n v-model:open=\"drawerOpen\"\n class=\"efko-dataview\"\n placement=\"right\"\n width=\"360\"\n title=\"Фильтры\"\n body-style=\"padding: 24px\"\n >\n <section\n v-for=\"column in filterableColumns\"\n :key=\"columnKey(column)\"\n class=\"mb-4 flex flex-col gap-2\"\n >\n <span class=\"text-sm font-medium\">{{ column.title }}</span>\n\n <filter-input\n v-model=\"draft[columnKey(column)]\"\n :filter-mode=\"column.filterMode\"\n :component-props=\"column.componentProps\"\n :placeholder=\"column.title\"\n />\n </section>\n\n <div class=\"mt-2 flex flex-col gap-2\">\n <a-button block @click=\"resetFilters\">\n Сбросить\n </a-button>\n <a-button\n type=\"primary\"\n block\n :disabled=\"!hasModifications\"\n @click=\"applyFilters\"\n >\n Применить\n </a-button>\n </div>\n </a-drawer>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, reactive, watch, computed,\n} from 'vue';\nimport { isEqual } from 'lodash';\nimport FilterInput from './FilterInput.vue';\nimport { FilterMode } from '../table/enum/table';\nimport type {\n ColumnConfig,\n FilterItem,\n FilterValue,\n} from '../table/interface/table.d';\n\nconst props = defineProps<{\n visible: boolean,\n columns: ColumnConfig[],\n filterValues: Record<string, FilterValue | undefined>,\n}>();\n\nconst emit = defineEmits<{(event: 'update:visible', value: boolean): void,\n (\n event: 'update:filterValues',\n value: Record<string, FilterValue | undefined>,\n ): void,\n (event: 'filterApply', payload: { key: string, value: FilterItem[] }): void,\n}>();\n\nconst drawerOpen = ref(props.visible);\nconst draft = reactive<Record<string, FilterValue | undefined>>({\n ...props.filterValues,\n});\n\nconst columnKey = (column: ColumnConfig): string | number => column.key ?? String(column.dataIndex);\n\nconst formatDateLike = (value: unknown): string => {\n if (typeof value === 'string') {\n return value;\n }\n if (value !== null && typeof value === 'object') {\n const maybeFormat = (value as { format?: unknown }).format;\n if (typeof maybeFormat === 'function') {\n return (maybeFormat as (pattern: string) => string)('YYYY-MM-DD');\n }\n const maybeToISOString = (value as { toISOString?: unknown }).toISOString;\n if (typeof maybeToISOString === 'function') {\n return (maybeToISOString as () => string)();\n }\n }\n return String(value);\n};\n\nconst normalizeToStoredValue = (\n column: ColumnConfig,\n candidate: FilterValue | undefined,\n): FilterValue | undefined => {\n if (candidate === undefined) {\n return undefined;\n }\n if (column.filterMode === FilterMode.DATE) {\n if (Array.isArray(candidate) && candidate.length === 2) {\n return [[formatDateLike(candidate[0]), formatDateLike(candidate[1])]] as unknown as FilterValue;\n }\n return candidate;\n }\n return candidate;\n};\n\nconst toArray = (val: FilterValue | undefined): FilterItem[] => {\n if (Array.isArray(val)) {\n return val as FilterItem[];\n }\n if (val !== null && val !== undefined) {\n return [val as FilterItem];\n }\n return [];\n};\n\nconst valueIsEmpty = (val: FilterValue | undefined): boolean => {\n if (val === null || val === undefined) {\n return true;\n }\n if (Array.isArray(val)) {\n return val.length === 0;\n }\n if (typeof val === 'string') {\n return val.trim() === '';\n }\n return false;\n};\n\nconst filterableColumns = computed(() => props.columns.filter((column: ColumnConfig) => column.filterable));\n\nconst hasModifications = computed(() => Object.keys(draft).some(\n (key: string) => !isEqual(draft[key], props.filterValues[key]),\n));\n\nconst syncDraft = (values: Record<string, FilterValue | undefined>): void => {\n Object.keys(draft).forEach((key: string) => {\n delete draft[key];\n });\n Object.assign(draft, values);\n};\n\nwatch(\n () => props.visible,\n (view: boolean) => {\n drawerOpen.value = view;\n if (view) {\n syncDraft(props.filterValues);\n }\n },\n);\nwatch(drawerOpen, (view: boolean) => {\n emit('update:visible', view);\n});\n\nwatch(\n () => props.filterValues,\n (newVal: Record<string, FilterValue | undefined>) => {\n syncDraft(newVal);\n },\n {\n deep: true,\n },\n);\n\nconst applyFilters = (): void => {\n const updated: Record<string, FilterValue | undefined> = {\n ...props.filterValues,\n };\n\n Object.entries(draft).forEach(([key, candidate]) => {\n const column = props.columns.find((c) => String(columnKey(c)) === key);\n const normalized = column ? normalizeToStoredValue(column, candidate as FilterValue | undefined) : candidate;\n\n if (valueIsEmpty(candidate)) {\n updated[key] = null;\n emit('filterApply', {\n key,\n value: [],\n });\n return;\n }\n updated[key] = normalized as FilterValue;\n emit('filterApply', {\n key,\n value: toArray(normalized as FilterValue),\n });\n });\n\n emit('update:filterValues', updated);\n drawerOpen.value = false;\n};\n\nconst resetFilters = (): void => {\n Object.keys(draft).forEach((key: string) => {\n delete draft[key];\n });\n\n const cleared: Record<string, FilterValue | undefined> = {};\n emit('update:filterValues', cleared);\n};\n</script>\n\n<style scoped>\nspan {\n line-height: 1;\n}\n</style>\n","<template>\n <a-modal\n v-model:visible=\"modalOpen\"\n class=\"efko-dataview\"\n title=\"Фильтры\"\n destroy-on-close\n :ok-text=\"'Применить'\"\n :cancel-text=\"'Сбросить'\"\n :ok-button-props=\"{ disabled: !hasModifications }\"\n @ok=\"applyFilters\"\n @cancel=\"handleCancel\"\n >\n <section\n v-for=\"column in filterableColumns\"\n :key=\"columnKey(column)\"\n class=\"mb-4 flex flex-col gap-2\"\n >\n <span class=\"text-sm font-medium\">{{ column.title }}</span>\n\n <filter-input\n v-model=\"draft[columnKey(column)]\"\n :filter-mode=\"column.filterMode\"\n :component-props=\"column.componentProps\"\n :placeholder=\"column.title\"\n />\n </section>\n </a-modal>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, reactive, watch, computed,\n} from 'vue';\nimport { isEqual } from 'lodash';\nimport FilterInput from './FilterInput.vue';\nimport { FilterMode } from '../table/enum/table';\nimport type {\n ColumnConfig,\n FilterItem,\n FilterValue,\n} from '../table/interface/table.d';\n\nconst props = defineProps<{\n visible: boolean,\n columns: ColumnConfig[],\n filterValues: Record<string, FilterValue | undefined>,\n}>();\n\nconst emit = defineEmits<{(event: 'update:visible', value: boolean): void,\n (\n event: 'update:filterValues',\n value: Record<string, FilterValue | undefined>,\n ): void,\n (event: 'filterApply', payload: { key: string, value: FilterItem[] }): void,\n}>();\n\nconst modalOpen = ref(props.visible);\nconst draft = reactive<Record<string, FilterValue | undefined>>({\n ...props.filterValues,\n});\n\nconst columnKey = (column: ColumnConfig): string | number => column.key ?? String(column.dataIndex);\n\nconst formatDateLike = (value: unknown): string => {\n if (typeof value === 'string') {\n return value;\n }\n if (value !== null && typeof value === 'object') {\n const maybeFormat = (value as { format?: unknown }).format;\n if (typeof maybeFormat === 'function') {\n return (maybeFormat as (pattern: string) => string)('YYYY-MM-DD');\n }\n const maybeToISOString = (value as { toISOString?: unknown }).toISOString;\n if (typeof maybeToISOString === 'function') {\n return (maybeToISOString as () => string)();\n }\n }\n return String(value);\n};\n\nconst normalizeToStoredValue = (\n column: ColumnConfig,\n candidate: FilterValue | undefined,\n): FilterValue | undefined => {\n if (candidate === undefined) {\n return undefined;\n }\n if (column.filterMode === FilterMode.DATE) {\n if (Array.isArray(candidate) && candidate.length === 2) {\n return [[formatDateLike(candidate[0]), formatDateLike(candidate[1])]] as unknown as FilterValue;\n }\n return candidate;\n }\n return candidate;\n};\n\nconst toArray = (val: FilterValue | undefined): FilterItem[] => {\n if (Array.isArray(val)) {\n return val as FilterItem[];\n }\n if (val !== null && val !== undefined) {\n return [val as FilterItem];\n }\n return [];\n};\n\nconst valueIsEmpty = (val: FilterValue | undefined): boolean => {\n if (val === null || val === undefined) {\n return true;\n }\n if (Array.isArray(val)) {\n return val.length === 0;\n }\n if (typeof val === 'string') {\n return val.trim() === '';\n }\n return false;\n};\n\nconst filterableColumns = computed(\n () => props.columns.filter((column: ColumnConfig) => column.filterable),\n);\n\nconst hasModifications = computed(() => Object.keys(draft).some(\n (key: string) => !isEqual(draft[key], props.filterValues[key]),\n));\n\nconst syncDraft = (values: Record<string, FilterValue | undefined>): void => {\n Object.keys(draft).forEach((key: string) => {\n delete draft[key];\n });\n Object.assign(draft, values);\n};\n\nwatch(\n () => props.visible,\n (view: boolean) => {\n modalOpen.value = view;\n if (view) {\n syncDraft(props.filterValues);\n }\n },\n);\nwatch(modalOpen, (view: boolean) => {\n emit('update:visible', view);\n});\n\nwatch(\n () => props.filterValues,\n (newVal: Record<string, FilterValue | undefined>) => {\n syncDraft(newVal);\n },\n {\n deep: true,\n },\n);\n\nconst applyFilters = (): void => {\n const updated: Record<string, FilterValue | undefined> = {\n ...props.filterValues,\n };\n\n Object.entries(draft).forEach(([key, candidate]) => {\n const column = props.columns.find((c) => String(columnKey(c)) === key);\n const normalized = column ? normalizeToStoredValue(column, candidate as FilterValue | undefined) : candidate;\n\n if (valueIsEmpty(candidate)) {\n updated[key] = null;\n emit('filterApply', {\n key,\n value: [],\n });\n return;\n }\n updated[key] = normalized as FilterValue;\n emit('filterApply', {\n key,\n value: toArray(normalized as FilterValue),\n });\n });\n\n emit('update:filterValues', updated);\n modalOpen.value = false;\n};\n\nconst handleCancel = (): void => {\n modalOpen.value = false;\n};\n</script>\n\n<style scoped>\nspan {\n line-height: 1;\n}\n</style>\n","export enum ViewMode {\n Table = 'table',\n Grid = 'grid',\n}\nexport enum CardLayout {\n Grid = 'grid',\n Row = 'row',\n}\n","<template>\n <div class=\"efko-dataview\">\n <div ref=\"tagCloudContainer\">\n <filter-tag-cloud\n :filters=\"activeFilters\"\n @update:filters=\"updateFilters\"\n @remove=\"removeFilter\"\n @clear=\"clearFilters\"\n />\n </div>\n\n <template v-if=\"isCardMode\">\n <div class=\"flex items-center justify-between gap-2 mb-2\">\n <div class=\"flex items-center gap-1\">\n <a-badge dot :count=\"hiddenColumnCount\">\n <a-button\n class=\"flex items-center justify-center p-2\"\n @click=\"isColumnDrawerOpen = true\"\n >\n <Icon name=\"solar:settings-outline\" class=\"text-lg\" />\n </a-button>\n </a-badge>\n <a-button\n class=\"flex items-center justify-center p-2\"\n @click=\"isFilterDrawerOpen = true\"\n >\n <Icon name=\"ant-design:filter-outlined\" class=\"text-lg\" />\n </a-button>\n </div>\n\n <slot name=\"headerCardContainer\" />\n <slot name=\"title\" />\n </div>\n\n <card-grid\n v-if=\"isCardMode\"\n :loading=\"loading\"\n :columns=\"columns\"\n :data-source=\"dataSource\"\n :card-layout=\"cardLayout\"\n :can-edit=\"canEdit\"\n :edit-action=\"editAction\"\n :show-actions-column=\"showActionsColumn\"\n :pagination=\"pagination\"\n :meta=\"meta\"\n @restore=\"(r) => emit('restore', r)\"\n @edit=\"(r) => emit('edit', r)\"\n @delete=\"(r) => emit('delete', r)\"\n @page-change=\"(p) => emit('pageChange', p)\"\n @size-change=\"(p, s) => emit('sizeChange', p, s)\"\n >\n <template v-if=\"$slots.titleCard\" #titleCard=\"p\">\n <slot name=\"titleCard\" v-bind=\"p\" />\n </template>\n\n <template v-if=\"$slots.body\" #bodyCard=\"p\">\n <slot name=\"body\" v-bind=\"p\" />\n </template>\n\n <template v-if=\"$slots.footer\" #footerCard=\"p\">\n <slot name=\"footer\" v-bind=\"p\" />\n </template>\n </card-grid>\n </template>\n\n <data-table\n v-else\n :loading=\"loading\"\n :pagination=\"pagination\"\n :columns=\"columns\"\n :data-source=\"dataSource\"\n :filter-values=\"activeFilters\"\n :meta=\"meta\"\n :can-edit=\"canEdit\"\n :edit-action=\"editAction\"\n :delete-action=\"deleteAction\"\n :show-actions-column=\"showActionsColumn\"\n :columns-visibility=\"columnVisibility\"\n :disable-column-filter-dropdowns=\"props.disableColumnFilterDropdowns === true\"\n :show-filter-button=\"props.enableTableFilterDrawer === true\"\n :multi-column-filters=\"props.multiColumnFilters\"\n @open-column-drawer=\"isColumnDrawerOpen = true\"\n @open-filter-drawer=\"isFilterDrawerOpen = true\"\n @update:filter-values=\"updateFilters\"\n @filter-apply=\"(payload) => emit('filterApply', payload)\"\n @restore=\"(record) => emit('restore', record)\"\n @edit=\"(record) => emit('edit', record)\"\n @delete=\"(record) => emit('delete', record)\"\n @sort-change=\"(payload) => emit('sortChange', payload)\"\n @page-change=\"(page) => emit('pageChange', page)\"\n @size-change=\"(page, size) => emit('sizeChange', page, size)\"\n >\n <template #title>\n <slot name=\"title\" />\n </template>\n <template #bodyCell=\"p\"><slot name=\"bodyCell\" v-bind=\"p\" /></template>\n <template #actionColumn=\"p\"><slot name=\"actionColumn\" v-bind=\"p\" /></template>\n </data-table>\n\n <slot\n name=\"filtersDrawer\"\n :visible=\"isFilterDrawerOpen\"\n :set-visible=\"(value: boolean) => { isFilterDrawerOpen = value; }\"\n :filters=\"activeFilters\"\n :update-filters=\"updateFilters\"\n :emit-filter-apply=\"emitFilterApply\"\n >\n <card-filters-modal\n v-if=\"props.useFilterModal === true\"\n v-model:visible=\"isFilterDrawerOpen\"\n :columns=\"columns\"\n :filter-values=\"activeFilters\"\n @update:filter-values=\"updateFilters\"\n @filter-apply=\"(payload) => emit('filterApply', payload)\"\n />\n <card-filters-drawer\n v-else\n v-model:visible=\"isFilterDrawerOpen\"\n :columns=\"columns\"\n :filter-values=\"activeFilters\"\n @update:filter-values=\"updateFilters\"\n @filter-apply=\"(payload) => emit('filterApply', payload)\"\n />\n </slot>\n\n <column-settings-drawer\n v-model:visible=\"isColumnDrawerOpen\"\n v-model:model-value=\"columnVisibility\"\n v-model:view-mode=\"currentViewMode\"\n v-model:card-layout=\"cardLayout\"\n :columns=\"columns\"\n :show-actions-column=\"showActionsColumn\"\n :disable-view-mode=\"disableViewMode\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, watch, computed, onMounted,\n} from 'vue';\nimport { isEqual } from 'lodash';\nimport autoAnimate from '@formkit/auto-animate';\n\nimport FilterTagCloud from './table/ui/filter/FilterTagCloud.vue';\nimport CardGrid from './card/CardGrid.vue';\nimport DataTable from './table/TheTable.vue';\nimport ColumnSettingsDrawer from './table/ui/ColumnSettingsDrawer.vue';\nimport CardFiltersDrawer from './card/CardFiltersDrawer.vue';\nimport CardFiltersModal from './card/CardFiltersModal.vue';\nimport type {\n ColumnConfig,\n FilterItem,\n FilterValue,\n Meta,\n SortPayload,\n} from './table/interface/table.d';\nimport { CardLayout, ViewMode } from './table/ui/ColumnSettingsDrawer';\nimport type { FilterValues } from './DataView.d';\nimport type { TableRecord } from './card/TheCard.d';\n\nconst props = withDefaults(\n defineProps<{\n viewMode?: ViewMode;\n loading: boolean;\n pagination?: boolean;\n columns: ColumnConfig[];\n dataSource: TableRecord[];\n filterValues?: Partial<Record<string, FilterValue>>;\n meta?: Meta;\n canEdit?: boolean;\n editAction?: boolean;\n deleteAction?: boolean;\n showActionsColumn?: boolean;\n disableViewMode?: boolean;\n enableTableFilterDrawer?: boolean;\n disableColumnFilterDropdowns?: boolean;\n useFilterModal?: boolean;\n multiColumnFilters?: boolean;\n }>(),\n {\n pagination: false,\n canEdit: true,\n editAction: true,\n deleteAction: true,\n showActionsColumn: true,\n disableViewMode: false,\n enableTableFilterDrawer: false,\n disableColumnFilterDropdowns: false,\n useFilterModal: false,\n multiColumnFilters: true,\n },\n);\n\nconst emit = defineEmits<{(e: 'update:viewMode', value: ViewMode): void,\n (e: 'update:filterValues', value: Partial<Record<string, FilterValue>>): void,\n (e: 'filterApply', payload: { key: string, value: FilterItem[] }): void,\n (e: 'edit' | 'delete' | 'restore', record: Record<string, unknown>): void,\n (e: 'sortChange', payload: SortPayload): void,\n (e: 'pageChange', page: number): void,\n (e: 'sizeChange', page: number, pageSize: number): void,\n}>();\n\nconst currentViewMode = ref<ViewMode>(props.viewMode || ViewMode.Table);\nconst isCardMode = computed(() => currentViewMode?.value === ViewMode.Grid);\nconst cardLayout = ref<CardLayout>(CardLayout.Grid);\nconst activeFilters = ref<Partial<Record<string, FilterValue>>>(\n props.filterValues || {},\n);\n\nconst tagCloudContainer = ref<HTMLElement | null>(null);\n\nconst updateFilters = (filters: Partial<Record<string, FilterValue>>): void => {\n activeFilters.value = filters;\n emit('update:filterValues', filters);\n};\n\nconst removeFilter = (\n key: string,\n value: FilterValue | undefined,\n target: FilterItem,\n): void => {\n const next = { ...activeFilters.value };\n\n if (value === undefined) {\n return;\n }\n\n if (Array.isArray(value)) {\n const remaining = value.filter((item: FilterItem) => !isEqual(item, target));\n if (remaining.length === 0) {\n next[key] = null;\n } else if (remaining.length === 1 && !Array.isArray(remaining[0])) {\n next[key] = remaining[0];\n } else {\n next[key] = remaining;\n }\n updateFilters(next);\n return;\n }\n\n if (isEqual(value, target)) {\n next[key] = null;\n updateFilters(next);\n }\n};\n\nconst clearFilters = (): void => updateFilters({});\n\nconst emitFilterApply = (payload: { key: string; value: FilterItem[] }): void => {\n emit('filterApply', payload);\n};\n\nconst isFilterDrawerOpen = ref(false);\nconst isColumnDrawerOpen = ref(false);\n\nconst columnVisibility = ref<Record<string, boolean>>({});\n\nconst hiddenColumnCount = computed(() => (currentViewMode.value === 'table'\n ? Object.keys(columnVisibility.value).filter(\n (key: string) => columnVisibility.value[key] === false,\n ).length\n : 0));\n\nconst initVisibility = (cols: ColumnConfig[]): void => {\n cols.forEach((col: ColumnConfig) => {\n const key = col.key ?? String(col.dataIndex);\n if (columnVisibility.value[key] === undefined) {\n columnVisibility.value[key] = true;\n }\n });\n\n if (props.showActionsColumn && columnVisibility.value.actions === undefined) {\n columnVisibility.value.actions = true;\n }\n};\n\nwatch(\n () => props.filterValues,\n (value: FilterValues) => {\n activeFilters.value = value || {};\n },\n);\n\nwatch(\n () => props.viewMode,\n (mode: ViewMode | undefined) => {\n if (mode !== undefined) {\n currentViewMode.value = mode;\n }\n },\n);\n\nwatch(() => props.columns, initVisibility);\n\nwatch(currentViewMode, (mode: ViewMode) => emit('update:viewMode', mode));\n\nonMounted(() => initVisibility(props.columns));\n\nonMounted(() => {\n if (tagCloudContainer.value) {\n autoAnimate(tagCloudContainer.value);\n }\n});\n</script>\n","<template>\n <div ref=\"container\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n onMounted,\n onBeforeUnmount,\n} from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n onIntersect?:() => void,\n threshold?: number,\n once?: boolean,\n rootMargin?: string,\n }>(),\n {\n threshold: 0.1,\n once: false,\n rootMargin: '0px',\n },\n);\n\nconst container = ref<HTMLElement | null>(null);\nlet observer: IntersectionObserver | null = null;\n\nconst handleIntersection = (entries: IntersectionObserverEntry[]): void => {\n const entry = entries[0];\n if (entry.isIntersecting && props.onIntersect) {\n props.onIntersect();\n if (props.once && observer) {\n observer.disconnect();\n }\n }\n};\n\nonMounted(() => {\n observer = new IntersectionObserver(handleIntersection, {\n threshold: props.threshold,\n rootMargin: props.rootMargin,\n });\n\n if (container.value) {\n observer.observe(container.value);\n }\n});\n\nonBeforeUnmount(() => {\n observer?.disconnect();\n});\n</script>\n"],"names":["props","__props","emit","__emit","token","theme","tagStyle","computed","hasValidFilter","value","hasFilters","hasNameField","obj","formatFilterItem","item","intervalLabel","joinedLabel","nameLabel","jsonLabel","parseFilterValues","isFilterItemEqual","a","b","removeFilter","key","fullValue","itemToRemove","updated","clearAllFilters","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_Fragment","_renderList","filterKey","filterValue","_createBlock","_component_a_tag","_createTextVNode","_toDisplayString","_component_a_button","_cache","_unref","CheckCircleTwoTone","canEdit","editAction","deleteHandler","record","restoreHandler","editHandler","_component_a_tooltip","_createVNode","h","EyeOutlined","$event","EditOutlined","RedoOutlined","DeleteOutlined","recordValue","column","getNameOrEmpty","name","isEmptyTagValue","normalizeItemLabel","displayItems","label","tagItems","index","showActionsColumn","_component_a_card","_renderSlot","_ctx","_hoisted_3","_hoisted_4","_hoisted_5","TableCellStatus","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","$slots","_hoisted_10","CardCellActions","container","ref","observer","handleIntersection","entries","_a","onMounted","onBeforeUnmount","_component_a_spin","autoAnimate","gridClass","preparedColumns","internalData","mergeData","existingIds","toAdd","watch","isLastPage","loadNextPage","TheCard","rec","bodyRecord","bodyColumns","footerRecord","footerColumns","LazyLoadTrigger","PAGE_SIZE_SMALL","PAGE_SIZE_MEDIUM","PAGE_SIZE_LARGE","PAGE_SIZE_EXTRA_LARGE","PAGE_SIZE_ULTRA","DEFAULT_PAGE_NUMBER","DEFAULT_PAGE_SIZE","FilterMode","PageSizes","PAGE_SIZE_OPTIONS","SkipSizes","TableDefaults","TableSortOrder","SortOrder","_sfc_main$a","defineComponent","VueMultiselect","Empty","_component_VueMultiselect","_mergeProps","_withCtx","_component_a_empty","filterComponent","Multiselect","localValue","handleApply","_resolveDynamicComponent","cellValue","nameValue","hasTagValue","_component_a_skeleton","showFilterButton","localFilterValues","localColumns","inputFilters","filterableColumns","computedColumns","result","headerAlign","cellAlign","rest","hiddenColumnCount","getFilterArray","isRangeTuple","formatDateLike","maybeFormat","maybeToISOString","normalizeCandidates","raw","trimmed","setFilterValue","next","compact","v","applyFilter","newValue","candidates","changed","candidate","isEqual","rowClassName","onTableChange","_pagination","_filters","sorter","resizeColumn","width","col","newVal","newColumns","tbody","_component_a_table","_component_a_badge","$emit","_component_Icon","TableBodyCell","TableCellActions","FilterDropdown","_component_a_pagination","_b","_c","total","_d","page","size","drawerOpen","localViewMode","localCardLayout","visibility","reactive","isCardMode","disabledViewMode","mode","layout","view","_component_a_drawer","_component_a_checkbox","_component_a_radio_group","_component_a_radio","_component_a_radio_button","AppstoreOutlined","PicCenterOutlined","inputComponent","inputValue","draft","columnKey","normalizeToStoredValue","toArray","val","valueIsEmpty","hasModifications","syncDraft","values","applyFilters","c","normalized","resetFilters","FilterInput","modalOpen","handleCancel","_component_a_modal","ViewMode","CardLayout","currentViewMode","cardLayout","activeFilters","tagCloudContainer","updateFilters","filters","target","remaining","clearFilters","emitFilterApply","payload","isFilterDrawerOpen","isColumnDrawerOpen","columnVisibility","initVisibility","cols","FilterTagCloud","CardGrid","r","p","s","DataTable","CardFiltersModal","CardFiltersDrawer","ColumnSettingsDrawer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-view.cjs.js","sources":["../dataview/table/ui/filter/FilterTagCloud.vue","../dataview/table/ui/table-cell/TableCellStatus.vue","../dataview/card/ui/CardCellActions.vue","../dataview/card/TheCard.vue","../dataview/lazyload/LazyLoadTrigger.vue","../dataview/card/CardGrid.vue","../dataview/table/enum/table.ts","../dataview/ui/TheSelect.vue","../dataview/table/ui/filter/FilterDropdown.vue","../dataview/table/ui/table-cell/TableCellActions.vue","../dataview/table/ui/table-cell/TableBodyCell.vue","../dataview/table/TheTable.vue","../dataview/table/ui/ColumnSettingsDrawer.vue","../dataview/card/FilterInput.vue","../dataview/card/CardFiltersDrawer.vue","../dataview/card/CardFiltersModal.vue","../dataview/table/ui/ColumnSettingsDrawer.ts","../dataview/DataView.vue","../dataview/lazyload/LazyLoadContainer.vue"],"sourcesContent":["<template>\n <a-flex align=\"center\" wrap=\"wrap\" class=\"tag-cloud\">\n <a-flex wrap=\"wrap\">\n <template\n v-for=\"[filterKey, filterValue] in Object.entries(filters)\"\n :key=\"filterKey\"\n >\n <a-tag\n v-for=\"value in parseFilterValues(filterValue)\"\n :key=\"value.key\"\n class=\"filter-tag\"\n :closable=\"true\"\n :style=\"tagStyle\"\n @close=\"() => removeFilter(filterKey, filterValue, value.original)\"\n >\n {{ value.label }}\n </a-tag>\n </template>\n </a-flex>\n <a-button v-if=\"hasFilters\" type=\"link\" @click=\"clearAllFilters\">\n Очистить все\n </a-button>\n </a-flex>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { theme } from 'efko-ui-library';\nimport type {\n FilterItem,\n FilterValue,\n} from '../../interface/table.d';\n\nconst props = defineProps<{\n filters: Partial<Record<string, FilterValue>>,\n}>();\n\nconst emit = defineEmits<{(event: 'update:filters', value: Partial<Record<string, FilterValue>>): void,\n (\n event: 'remove',\n key: string,\n filterValue: FilterValue | undefined,\n valueToRemove: FilterItem\n ): void,\n (event: 'clear'): void,\n}>();\n\nconst { token } = theme.useToken();\n\nconst tagStyle = computed(() => {\n return {\n color: token.value.colorSelectedMenu,\n borderColor: token.value.colorBorderSecondary,\n backgroundColor: token.value.mainBgColor || token.value.colorPrimaryBg,\n }\n});\n\nconst hasValidFilter = (value: FilterValue | undefined): boolean => {\n if (value === null || value === undefined) {\n return false;\n }\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n return Boolean(value);\n};\n\nconst hasFilters = computed(() => Object.values(props.filters).some(hasValidFilter));\n\nfunction hasNameField(obj: unknown): obj is { name: string } {\n return (\n typeof obj === 'object'\n && obj !== null\n && 'name' in obj\n && typeof (obj as { name: unknown }).name === 'string'\n );\n}\n\nconst formatFilterItem = (\n item: FilterItem,\n): { key: string, label: string, original: FilterItem } => {\n if (typeof item === 'string') {\n return {\n key: item,\n label: item,\n original: item,\n };\n }\n if (Array.isArray(item)) {\n if (\n item.length === 2\n && typeof item[0] === 'string'\n && typeof item[1] === 'string'\n ) {\n const intervalLabel = `${item[0]} - ${item[1]}`;\n return {\n key: intervalLabel,\n label: intervalLabel,\n original: item,\n };\n }\n const joinedLabel = item.join(', ');\n return {\n key: joinedLabel,\n label: joinedLabel,\n original: item,\n };\n }\n\n if (hasNameField(item)) {\n const nameLabel = item.name;\n return {\n key: nameLabel,\n label: nameLabel,\n original: item,\n };\n }\n const jsonLabel = JSON.stringify(item);\n return {\n key: jsonLabel,\n label: jsonLabel,\n original: item,\n };\n};\n\nconst parseFilterValues = (\n value: FilterValue | undefined,\n): { key: string, label: string, original: FilterItem }[] => {\n if (value === undefined || value === null) {\n return [];\n }\n if (Array.isArray(value)) {\n return value.map((item: FilterItem) => formatFilterItem(item));\n }\n return [\n formatFilterItem(value),\n ];\n};\n\nconst isFilterItemEqual = (a: FilterItem, b: FilterItem): boolean => {\n if (typeof a === 'string' || typeof b === 'string') {\n return a === b;\n }\n return JSON.stringify(a) === JSON.stringify(b);\n};\n\nconst removeFilter = (\n key: string,\n fullValue: FilterValue | undefined,\n itemToRemove: FilterItem,\n): void => {\n if (Array.isArray(fullValue)) {\n const updated = fullValue.filter(\n (value: FilterItem) => !isFilterItemEqual(value, itemToRemove),\n );\n emit('update:filters', {\n ...props.filters,\n [key]: updated,\n });\n } else {\n emit('update:filters', {\n ...props.filters,\n [key]: null,\n });\n }\n emit('remove', key, fullValue, itemToRemove);\n};\n\nconst clearAllFilters = (): void => {\n emit('update:filters', {});\n emit('clear');\n};\n</script>\n\n<style scoped>\n.tag-cloud {\n display: flex;\n flex-wrap: wrap;\n}\n.filter-tag {\n padding: 5px 10px;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n margin: 4px;\n}\n</style>\n","<template>\n <div class=\"flex items-center justify-center text-lg\">\n <check-circle-two-tone\n v-if=\"!Boolean(value)\"\n two-tone-color=\"#4ade80\"\n />\n <check-circle-two-tone\n v-else\n two-tone-color=\"#bfbfbf\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { CheckCircleTwoTone } from '@ant-design/icons-vue';\n\ndefineProps<{\n value: unknown,\n}>();\n</script>\n","<template>\n <div class=\"flex items-center justify-center gap-2\">\n <a-tooltip v-if=\"canEdit === false\" title=\"Смотреть\">\n <a-button :icon=\"h(EyeOutlined)\" @click=\"editHandler(record)\" />\n </a-tooltip>\n\n <template v-if=\"canEdit !== false\">\n <a-tooltip v-if=\"editAction !== false\" title=\"Редактировать\">\n <a-button :icon=\"h(EditOutlined)\" @click=\"editHandler(record)\" />\n </a-tooltip>\n\n <a-tooltip :title=\"record.deletedAt ? 'Восстановить' : 'Удалить'\">\n <a-button\n :icon=\"h(record.deletedAt ? RedoOutlined : DeleteOutlined)\"\n @click=\"\n record.deletedAt ? restoreHandler(record) : deleteHandler(record)\n \"\n />\n </a-tooltip>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { h } from 'vue';\n\nimport {\n EditOutlined,\n DeleteOutlined,\n RedoOutlined,\n EyeOutlined,\n} from '@ant-design/icons-vue';\n\ninterface TableRecord {\n deletedAt?: string | null,\n [key: string]: unknown,\n}\n\nconst props = defineProps<{\n record: TableRecord,\n canEdit?: boolean,\n editAction?: boolean,\n}>();\n\nconst emit = defineEmits<{(event: 'edit' | 'delete' | 'restore', record: TableRecord): void,\n}>();\n\nconst canEdit = props.canEdit ?? true;\nconst editAction = props.editAction ?? true;\n\nconst deleteHandler = (record: TableRecord): void => emit('delete', record);\nconst restoreHandler = (record: TableRecord): void => emit('restore', record);\nconst editHandler = (record: TableRecord): void => emit('edit', record);\n</script>\n","<template>\n <a-card\n :loading=\"loading\"\n :bordered=\"false\"\n class=\"data-card bg-white rounded-3 shadow-sm\"\n >\n <template #title>\n <div class=\"data-card__header\">\n <slot name=\"title\" />\n </div>\n </template>\n\n <div class=\"data-card__body\">\n <slot name=\"body\" :record=\"record\" :columns=\"columns\">\n <div\n v-for=\"column in columns\"\n :key=\"column.dataIndex\"\n class=\"data-card__row\"\n >\n <span class=\"data-card__label\">\n {{ column.title }}:\n </span>\n\n <span class=\"data-card__value\">\n <span v-if=\"column.dataIndex === 'deletedAt'\">\n <table-cell-status :value=\"record.deletedAt\" />\n </span>\n\n <template v-else-if=\"Array.isArray(recordValue(column))\">\n <template v-if=\"column.tag === true\">\n <a-tag\n v-for=\"item in tagItems(column)\"\n :key=\"item.key\"\n class=\"mr-1 mb-1\"\n >\n {{ item.label }}\n </a-tag>\n </template>\n\n <template v-else>\n <span\n v-for=\"(item, index) in displayItems(column)\"\n :key=\"index\"\n >\n {{ item }}\n\n <template v-if=\"index < displayItems(column).length - 1\">\n ,\n </template>\n </span>\n </template>\n </template>\n\n <span v-else-if=\"typeof recordValue(column) === 'boolean'\">\n <table-cell-status :value=\"!Boolean(recordValue(column))\" />\n </span>\n\n <span v-else-if=\"recordValue(column) !== null && typeof recordValue(column) === 'object'\">\n {{ getNameOrEmpty(recordValue(column)) }}\n </span>\n\n <span v-else-if=\"column.tag === true\">\n <a-tag v-if=\"!isEmptyTagValue(recordValue(column))\">\n {{ recordValue(column) }}\n </a-tag>\n </span>\n\n <span v-else>\n {{ recordValue(column) }}\n </span>\n </span>\n </div>\n </slot>\n </div>\n\n <div v-if=\"$slots.footer\" class=\"data-card__footer\">\n <slot name=\"footer\" :record=\"record\" :columns=\"columns\" />\n </div>\n\n <template v-if=\"showActionsColumn\" #actions>\n <card-cell-actions\n :record=\"record\"\n :can-edit=\"canEdit\"\n :edit-action=\"editAction\"\n @edit=\"editHandler\"\n @delete=\"deleteHandler\"\n @restore=\"restoreHandler\"\n />\n </template>\n </a-card>\n</template>\n\n<script lang=\"ts\" setup>\nimport TableCellStatus from '../table/ui/table-cell/TableCellStatus.vue';\nimport CardCellActions from './ui/CardCellActions.vue';\n\nimport type { ColumnConfig } from '../table/interface/table.d';\nimport type { TableRecord } from './TheCard.d';\n\nconst props = defineProps<{\n loading: boolean,\n record: TableRecord,\n columns: ColumnConfig[],\n canEdit?: boolean,\n editAction?: boolean,\n showActionsColumn?: boolean,\n}>();\n\nconst recordValue = (column: ColumnConfig): unknown =>\n (props.record as Record<string, unknown>)[String(column.dataIndex)];\n\nconst recordArray = (column: ColumnConfig): unknown[] => {\n const value = recordValue(column);\n return Array.isArray(value) ? value : [];\n};\n\nconst getNameOrEmpty = (value: unknown): string => {\n if (value === null || typeof value !== 'object') {\n return '';\n }\n if ('name' in (value as Record<string, unknown>)) {\n const name = (value as { name?: unknown }).name;\n return typeof name === 'string' ? name : '';\n }\n return '';\n};\n\nconst isEmptyTagValue = (value: unknown): boolean => {\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === 'string') {\n return value.trim().length === 0;\n }\n return false;\n};\n\nconst normalizeItemLabel = (item: unknown): string => {\n if (item === null || item === undefined) {\n return '';\n }\n if (typeof item === 'string') {\n return item.trim();\n }\n if (typeof item === 'object') {\n return getNameOrEmpty(item);\n }\n return String(item);\n};\n\nconst displayItems = (column: ColumnConfig): string[] => {\n const value = recordValue(column);\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((item) => normalizeItemLabel(item))\n .filter((label) => label.trim().length > 0);\n};\n\nconst tagItems = (column: ColumnConfig): { key: string; label: string }[] =>\n displayItems(column).map((label, index) => ({\n key: `${label}-${index}`,\n label,\n }));\n\nconst emit = defineEmits<{(e: 'delete' | 'restore' | 'edit', record: TableRecord): void,\n}>();\n\nconst canEdit = props.canEdit ?? true;\nconst editAction = props.editAction ?? true;\nconst showActionsColumn = props.showActionsColumn ?? true;\n\nconst deleteHandler = (record: TableRecord): void => emit('delete', record);\nconst restoreHandler = (record: TableRecord): void => emit('restore', record);\nconst editHandler = (record: TableRecord): void => emit('edit', record);\n</script>\n\n<style scoped>\n.data-card {\n transition: box-shadow 0.18s ease-out, transform 0.18s ease-out;\n}\n\n.data-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 12px 30px rgba(33, 37, 41, 0.08);\n}\n\n.data-card__header {\n display: flex;\n align-items: center;\n min-height: 32px;\n}\n\n.data-card__body {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.data-card__row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 2px 0;\n}\n\n.data-card__label {\n flex: 0 0 auto;\n font-weight: 500;\n font-size: 12px;\n color: #6c757d;\n}\n\n.data-card__value {\n flex: 1 1 auto;\n font-size: 13px;\n word-break: break-word;\n}\n\n.data-card__footer {\n display: flex;\n justify-content: flex-end;\n margin-top: 12px;\n}\n</style>\n","<template>\n <div class=\"efko-dataview\">\n <div\n ref=\"container\"\n style=\"height: 1px\"\n class=\"flex items-center justify-center py-5\"\n >\n <a-spin :spinning=\"loading\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n onMounted,\n onBeforeUnmount,\n} from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n onIntersect:() => void,\n threshold?: number,\n once?: boolean,\n loading: boolean,\n }>(),\n {\n threshold: 0.1,\n once: false,\n },\n);\n\nconst container = ref<HTMLElement | null>(null);\nlet observer: IntersectionObserver | null = null;\n\nconst handleIntersection = (entries: IntersectionObserverEntry[]): void => {\n const entry = entries[0];\n if (entry.isIntersecting) {\n props.onIntersect?.();\n if (props.once && observer) {\n observer.disconnect();\n }\n }\n};\n\nonMounted(() => {\n observer = new IntersectionObserver(handleIntersection, {\n threshold: props.threshold,\n });\n if (container.value) {\n observer.observe(container.value);\n }\n});\n\nonBeforeUnmount(() => {\n if (observer) observer.disconnect();\n});\n</script>\n","<template>\n <div class=\"efko-dataview\">\n <div class=\"flex flex-col gap-4\">\n <div :class=\"gridClass\">\n <the-card\n v-for=\"(record, index) in internalData\"\n :key=\"String(record.id ?? `card-${index}`)\"\n :loading=\"loading\"\n :record=\"record\"\n :columns=\"preparedColumns\"\n :can-edit=\"canEdit\"\n :edit-action=\"editAction\"\n :show-actions-column=\"showActionsColumn\"\n @edit=\"(rec) => emit('edit', rec)\"\n @delete=\"(rec) => emit('delete', rec)\"\n @restore=\"(rec) => emit('restore', rec)\"\n >\n <template v-if=\"$slots.titleCard\" #title>\n <slot\n name=\"titleCard\"\n :record=\"record\"\n :columns=\"preparedColumns\"\n />\n </template>\n\n <template v-if=\"$slots.bodyCard\" #body=\"{ record: bodyRecord, columns: bodyColumns }\">\n <slot\n name=\"bodyCard\"\n :record=\"bodyRecord\"\n :columns=\"bodyColumns\"\n />\n </template>\n\n <template v-if=\"$slots.footerCard\" #footer=\"{ record: footerRecord, columns: footerColumns }\">\n <slot\n name=\"footerCard\"\n :record=\"footerRecord\"\n :columns=\"footerColumns\"\n />\n </template>\n </the-card>\n </div>\n\n <LazyLoadTrigger\n v-if=\"pagination && !isLastPage\"\n :loading=\"loading\"\n :once=\"false\"\n :on-intersect=\"loadNextPage\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, computed, watch, onMounted,\n} from 'vue';\nimport autoAnimate from '@formkit/auto-animate';\nimport TheCard from './TheCard.vue';\nimport type { ColumnConfig, Meta } from '../table/interface/table.d';\nimport type { TableRecord } from './TheCard.d';\nimport LazyLoadTrigger from '../lazyload/LazyLoadTrigger.vue';\n\nconst props = defineProps<{\n loading: boolean,\n columns: ColumnConfig[],\n dataSource: TableRecord[],\n cardLayout: 'grid' | 'row',\n canEdit: boolean,\n editAction: boolean,\n showActionsColumn?: boolean,\n pagination: boolean,\n meta: Meta | undefined,\n}>();\n\nconst emit = defineEmits<{(event: 'delete' | 'restore' | 'edit', record: Record<string, unknown>): void,\n (event: 'pageChange', page: number): void,\n (event: 'sizeChange', page: number, size: number): void,\n}>();\n\nonMounted(() => {\n const container = document.querySelector<HTMLElement>('.card-grid');\n if (container !== null) {\n autoAnimate(container);\n }\n});\n\nconst gridClass = computed(\n () => (props.cardLayout === 'row'\n ? 'card-grid card-grid--row'\n : 'card-grid card-grid--grid'),\n);\n\nconst preparedColumns = computed(() => props.columns);\n\nconst internalData = ref<TableRecord[]>([]);\n\nconst mergeData = (): void => {\n if (props.meta?.currentPage === 1) {\n internalData.value = [\n ...props.dataSource,\n ];\n return;\n }\n\n const existingIds = new Set(internalData.value.map((record: Record<string, unknown>) => record.id));\n const toAdd = props.dataSource.filter((record: TableRecord) => !existingIds.has(record.id));\n internalData.value.push(...toAdd);\n};\n\nmergeData();\n\nwatch(() => [\n props.dataSource,\n props.meta?.currentPage,\n], mergeData, {\n deep: true,\n});\n\nconst isLastPage = computed(() => {\n if (props.meta === undefined) {\n return true;\n }\n return (\n props.meta.currentPage * props.meta.pageSize\n >= props.meta.total\n );\n});\n\nconst loadNextPage = (): void => {\n if (props.loading || isLastPage.value || !props.meta) {\n return;\n }\n emit('pageChange', props.meta.currentPage + 1);\n};\n</script>\n\n<style scoped>\n.card-grid {\n display: grid;\n gap: 24px;\n}\n\n.card-grid--row {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.card-grid--grid {\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n}\n</style>\n","export const PAGE_SIZE_SMALL = '10';\nexport const PAGE_SIZE_MEDIUM = '20';\nexport const PAGE_SIZE_LARGE = '50';\nexport const PAGE_SIZE_EXTRA_LARGE = '100';\nexport const PAGE_SIZE_ULTRA = '1000';\nexport const DEFAULT_PAGE_NUMBER = 1;\n\nexport const DEFAULT_PAGE_SIZE = PAGE_SIZE_SMALL;\n\nexport enum FilterMode {\n SEARCH = 'search',\n SELECT = 'select',\n DATE = 'date',\n}\n\nexport enum PageSizes {\n SMALL = '10',\n MEDIUM = '20',\n LARGE = '50',\n EXTRA_LARGE = '100',\n ULTRA = '1000'\n}\n\nexport const PAGE_SIZE_OPTIONS = [\n PageSizes.SMALL,\n PageSizes.MEDIUM,\n PageSizes.LARGE,\n PageSizes.EXTRA_LARGE,\n];\n\nexport enum SkipSizes {\n NONE = 0,\n SMALL = 10,\n MEDIUM = 20,\n LARGE = 50\n}\n\nexport enum TableDefaults {\n DEFAULT_CURRENT_PAGE = 1\n}\n\nexport enum TableSortOrder {\n ASCEND = 'ascend',\n DESCEND = 'descend'\n}\n\nexport enum SortOrder {\n ASC = 'asc',\n DESC = 'desc',\n}\n","<template>\n <VueMultiselect\n v-bind=\"$attrs\"\n class=\"filter-select\"\n :modelValue=\"modelValue\"\n @update:modelValue=\"$emit('update:modelValue', $event)\"\n label=\"name\"\n value-prop=\"id\"\n >\n <template #nooptions>\n <a-empty :image=\"simpleImage\" />\n </template>\n </VueMultiselect>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport VueMultiselect from '@vueform/multiselect';\nimport { Empty } from 'efko-ui-library';\n\nexport default defineComponent({\n name: 'MultiselectWrapper',\n components: { VueMultiselect },\n props: {\n modelValue: {\n type: [Array, String, Number, Object, Boolean, null],\n default: null,\n },\n },\n emits: ['update:modelValue'],\n data() {\n return { simpleImage: Empty.PRESENTED_IMAGE_SIMPLE };\n },\n});\n</script>\n\n<style scoped>\n.filter-select :deep(.multiselect-placeholder) {\n font-size: 12px;\n}\n</style>\n","<template>\n <div class=\"efko-dataview\">\n <div class=\"flex items-center gap-2 p-2\">\n <component\n v-bind=\"componentProps\"\n :is=\"filterComponent\"\n v-model:value=\"localValue\"\n v-model=\"localValue\"\n :placeholder=\"placeholder\"\n style=\"min-width: 240px; max-width: 300px; font-size: 14px\"\n object\n />\n <a-button type=\"primary\" size=\"small\" @click=\"handleApply\">\n Добавить\n </a-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed, ref,\n} from 'vue';\nimport Multiselect from '../../../ui/TheSelect.vue';\nimport { FilterMode } from '../../enum/table';\n\ntype FilterValue =\n | string\n | number\n | boolean\n | object\n | (string | number | boolean | object)[]\n | null;\n\nconst props = defineProps<{\n placeholder: string,\n filterMode?: FilterMode,\n componentProps?: Record<string, unknown>,\n}>();\n\nconst emit = defineEmits<{(event: 'update:modelValue', value: FilterValue): void,\n (event: 'apply'): void,\n}>();\n\nconst filterComponent = computed(() => {\n if (props.filterMode === FilterMode.SEARCH) {\n return 'a-input';\n }\n\n if (props.filterMode === FilterMode.SELECT) {\n return Multiselect;\n }\n\n if (props.filterMode === FilterMode.DATE) {\n return 'a-range-picker';\n }\n\n return null;\n});\n\nconst localValue = ref(null);\n\nconst handleApply = (): void => {\n emit('update:modelValue', localValue.value);\n emit('apply');\n localValue.value = null;\n};\n</script>\n","<template>\n <div class=\"flex items-center justify-center gap-2\">\n <a-tooltip v-if=\"props.canEdit === false\" title=\"Смотреть\">\n <a-button :icon=\"h(EyeOutlined)\" @click=\"editHandler(record)\" />\n </a-tooltip>\n\n <template v-if=\"canEdit !== false\">\n <a-tooltip v-if=\"props.editAction !== false\" title=\"Редактировать\">\n <a-button :icon=\"h(EditOutlined)\" @click=\"editHandler(record)\" />\n </a-tooltip>\n\n <a-tooltip v-if=\"deleteAction !== false\" :title=\"record.isDeleted ? 'Восстановить' : 'Удалить'\">\n <a-button\n :icon=\"h(record.isDeleted ? RedoOutlined : DeleteOutlined)\"\n @click=\"\n record.isDeleted ? restoreHandler(record) : deleteHandler(record)\n \"\n />\n </a-tooltip>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { h } from 'vue';\n\nimport {\n EditOutlined,\n DeleteOutlined,\n RedoOutlined,\n EyeOutlined,\n} from '@ant-design/icons-vue';\n\ninterface TableRecord {\n name?: string,\n isDeleted?: string | null,\n}\n\nconst props = defineProps<{\n record: TableRecord,\n canEdit: boolean,\n editAction: boolean,\n deleteAction: boolean,\n}>();\n\nconst emit = defineEmits<{(event: 'edit' | 'delete' | 'restore', record: TableRecord): void,\n}>();\n\nconst deleteHandler = (record: TableRecord): void => {\n emit('delete', record);\n};\n\nconst restoreHandler = (record: TableRecord): void => {\n emit('restore', record);\n};\n\nconst editHandler = (record: TableRecord): void => {\n emit('edit', record);\n};\n</script>\n","<template>\n <a-skeleton\n v-if=\"loading\"\n :active=\"true\"\n :loading=\"true\"\n :title=\"false\"\n :paragraph=\"{ rows: 1 }\"\n />\n\n <template v-else>\n <span v-if=\"column.dataIndex === 'isDeleted'\">\n <table-cell-status :value=\"(record as any).isDeleted\" />\n </span>\n\n <span v-else-if=\"Array.isArray(cellValue)\">\n <template v-if=\"column.tag === true\">\n <a-tag\n v-for=\"item in tagItems\"\n :key=\"item.key\"\n :style=\"tagStyle\"\n class=\"mr-1 mb-1\"\n >\n {{ item.label }}\n </a-tag>\n </template>\n\n <template v-else>\n <span v-for=\"(item, index) in displayItems\" :key=\"index\">\n {{ item }}\n <template v-if=\"index < displayItems.length - 1\">, </template>\n </span>\n </template>\n </span>\n\n <span v-else-if=\"typeof cellValue === 'boolean'\">\n <table-cell-status :value=\"!Boolean(cellValue)\" />\n </span>\n\n <span v-else-if=\"cellValue !== null && typeof cellValue === 'object'\">\n {{ getNameOrEmpty(cellValue) }}\n </span>\n\n <span v-else-if=\"column.tag === true\">\n <a-tag v-if=\"hasTagValue\" :style=\"tagStyle\">\n {{ String(cellValue) }}\n </a-tag>\n <template v-else />\n </span>\n\n <span v-else>{{ cellValue }}</span>\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { CSSProperties } from 'vue';\n\nimport TableCellStatus from './TableCellStatus.vue';\nimport type { ColumnConfig } from '../../interface/table.d';\n\nconst props = defineProps<{\n loading: boolean;\n column: ColumnConfig;\n record: Record<string, unknown>;\n tagStyle?: CSSProperties;\n}>();\n\nconst cellValue = computed<unknown>(() => props.record[String(props.column.dataIndex)]);\n\nconst isEmptyTagValue = (value: unknown): boolean => {\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === 'string') {\n return value.trim().length === 0;\n }\n return false;\n};\n\nconst getNameOrEmpty = (value: unknown): string => {\n if (value === null || typeof value !== 'object') {\n return '';\n }\n if ('name' in (value as Record<string, unknown>)) {\n const nameValue = (value as { name?: unknown }).name;\n return typeof nameValue === 'string' ? nameValue : '';\n }\n return '';\n};\n\nconst normalizeItemLabel = (item: unknown): string => {\n if (item === null || item === undefined) {\n return '';\n }\n if (typeof item === 'string') {\n return item.trim();\n }\n if (typeof item === 'object') {\n return getNameOrEmpty(item);\n }\n return String(item);\n};\n\nconst displayItems = computed<string[]>(() => {\n const value = cellValue.value;\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((item) => normalizeItemLabel(item))\n .filter((label) => label.trim().length > 0);\n});\n\nconst tagItems = computed<{ key: string; label: string }[]>(() =>\n displayItems.value.map((label, index) => ({\n key: `${label}-${index}`,\n label,\n })));\n\nconst hasTagValue = computed(() => !isEmptyTagValue(cellValue.value));\n</script>\n","<template>\n <div class=\"efko-dataview\">\n <a-table\n bordered\n table-layout=\"fixed\"\n class=\"the-table\"\n :loading=\"loading\"\n :columns=\"computedColumns\"\n :data-source=\"dataSource\"\n :row-key=\"(record: Record<string, unknown>) => record.id\"\n :pagination=\"false\"\n :scroll=\"{ x: 'max-content'}\"\n :row-class-name=\"rowClassName\"\n @change=\"onTableChange\"\n @resize-column=\"resizeColumn\"\n >\n <template #title>\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <a-badge dot :count=\"hiddenColumnCount\">\n <a-button\n class=\"flex items-center justify-center p-2\"\n @click=\"$emit('openColumnDrawer')\"\n >\n <Icon name=\"solar:settings-outline\" class=\"text-lg\" />\n </a-button>\n </a-badge>\n\n <a-button\n v-if=\"showFilterButton\"\n class=\"flex items-center justify-center p-2\"\n @click=\"$emit('openFilterDrawer')\"\n >\n <Icon name=\"ant-design:filter-outlined\" class=\"text-lg\" />\n </a-button>\n </div>\n\n <slot name=\"title\" />\n </div>\n </template>\n\n <template\n v-for=\"column in filterableColumns\"\n :key=\"String(column.dataIndex)\"\n #[`filter${String(column.dataIndex)}Dropdown`]\n >\n <filter-dropdown\n v-model=\"inputFilters[column.dataIndex]\"\n :filter-mode=\"column.filterMode\"\n :component-props=\"column.componentProps\"\n :placeholder=\"column.title\"\n @update:model-value=\"(value) => applyFilter(column, value)\"\n />\n </template>\n\n <template #bodyCell=\"{ column, record }\">\n <slot name=\"bodyCell\" :column=\"column\" :record=\"record\">\n <table-body-cell\n :loading=\"loading\"\n :column=\"column\"\n :record=\"record\"\n :tag-style=\"tagStyle\"\n />\n </slot>\n </template>\n\n <template #actionColumn=\"{ record }\">\n <slot name=\"actionColumn\" :record=\"record\">\n <table-cell-actions\n :edit-action=\"editAction\"\n :delete-action=\"deleteAction\"\n :can-edit=\"canEdit\"\n :record=\"record\"\n @edit=\"() => $emit('edit', record)\"\n @delete=\"() => $emit('delete', record)\"\n @restore=\"() => $emit('restore', record)\"\n />\n </slot>\n </template>\n </a-table>\n\n <a-pagination\n v-if=\"pagination\"\n class=\"mt-4 text-right\"\n :current=\"meta?.currentPage\"\n :page-size=\"meta?.pageSize\"\n :total=\"meta?.total\"\n :show-total=\"(total: string) => `Всего ${total} элементов`\"\n :page-size-options=\"meta?.pageSizeOptions\"\n :show-size-changer=\"true\"\n @change=\"(page: number) => $emit('pageChange', page)\"\n @show-size-change=\"(page: number, size: number) => $emit('sizeChange', page, size)\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, computed, watch, onMounted,\n} from 'vue';\nimport autoAnimate from '@formkit/auto-animate';\nimport { isEqual } from 'lodash';\n\nimport { FilterMode, TableSortOrder } from './enum/table';\nimport FilterDropdown from './ui/filter/FilterDropdown.vue';\nimport TableCellActions from './ui/table-cell/TableCellActions.vue';\nimport TableBodyCell from './ui/table-cell/TableBodyCell.vue';\nimport type {\n ColumnConfig,\n FilterItem,\n FilterValue,\n Meta,\n SortPayload,\n} from './interface/table.d';\nimport type { TableRecord } from '../card/TheCard.d';\nimport { theme } from 'efko-ui-library';\n\nconst { token } = theme.useToken();\n\ntype TableColumnDefinition = Record<string, unknown> & ColumnConfig & {\n slots?: Record<string, string>;\n};\n\nconst props = defineProps<{\n loading: boolean,\n pagination: boolean,\n columns: ColumnConfig[],\n dataSource: TableRecord[],\n filterValues?: Partial<Record<string, FilterValue>>,\n meta: Meta | undefined,\n canEdit: boolean,\n editAction: boolean,\n deleteAction: boolean,\n showActionsColumn?: boolean,\n columnsVisibility: Record<string, boolean>,\n disableColumnFilterDropdowns?: boolean,\n showFilterButton?: boolean,\n multiColumnFilters?: boolean,\n}>();\n\nconst emit = defineEmits<{(event: 'update:filterValues',\n values: Partial<Record<string, FilterValue>>,\n ): void,\n (event: 'filterApply', payload: { key: string, value: FilterItem[] }): void,\n (event: 'restore' | 'edit' | 'delete', record: Record<string, unknown>): void,\n (event: 'sortChange', payload: SortPayload): void,\n (event: 'pageChange', page: number): void,\n (event: 'sizeChange', page: number, pageSize: number): void,\n (event: 'openColumnDrawer'): void,\n (event: 'openFilterDrawer'): void,\n}>();\n\nconst showFilterButton = computed<boolean>(() => props.showFilterButton === true);\n\nconst localFilterValues = ref<Partial<Record<string, FilterValue>>>(\n props.filterValues || {},\n);\nconst localColumns = ref<ColumnConfig[]>([\n ...props.columns,\n]);\nconst inputFilters = ref<Record<string, unknown | null>>({});\n\nconst filterableColumns = computed(() => {\n if (props.disableColumnFilterDropdowns === true) {\n return [];\n }\n\n return localColumns.value.filter(\n (column: ColumnConfig) => column.filterable,\n );\n});\n\nconst computedColumns = computed(() => {\n const visible = localColumns.value.filter((column: ColumnConfig) => {\n if (column.filterOnly) {\n return false;\n }\n\n const key = column.key || String(column.dataIndex);\n return props.columnsVisibility[key] !== false;\n });\n\n const result: TableColumnDefinition[] = visible.map((column: ColumnConfig) => {\n const { headerAlign, cellAlign, ...rest } = column;\n\n return {\n ...rest,\n sorter: Boolean(rest.sortable),\n sortDirections: rest.sortable\n ? [\n TableSortOrder.ASCEND,\n TableSortOrder.DESCEND,\n ]\n : undefined,\n customHeaderCell: (): { style: { textAlign: string } } | undefined => (headerAlign ? {\n style: {\n textAlign: headerAlign,\n },\n } : undefined),\n customCell: (): { style: { textAlign: string } } | undefined => (cellAlign ? {\n style: {\n textAlign: cellAlign,\n },\n } : undefined),\n customFilterDropdown: Boolean(rest.filterable),\n slots: rest.filterable\n ? {\n filterDropdown: `filter${String(rest.dataIndex)}Dropdown`,\n }\n : undefined,\n } as TableColumnDefinition;\n });\n\n if (\n props.showActionsColumn !== false\n && props.columnsVisibility.actions !== false\n ) {\n result.push({\n title: 'Действия',\n key: 'actions',\n dataIndex: 'actions' as keyof TableRecord,\n width: 100,\n slots: {\n customRender: 'actionColumn',\n },\n } as TableColumnDefinition);\n }\n\n return result;\n});\n\nconst hiddenColumnCount = computed(\n () => Object.keys(props.columnsVisibility).filter(\n (key: string) => props.columnsVisibility[key] === false,\n ).length,\n);\n\nconst tagStyle = computed(() => ({\n color: token.value.colorSelectedMenu,\n borderColor: token.value.colorBorderSecondary,\n backgroundColor: token.value.mainBgColor || token.value.colorPrimaryBg,\n}));\n\nconst getFilterArray = (key: string): FilterItem[] => {\n const value = localFilterValues.value[key];\n if (Array.isArray(value)) {\n return value;\n }\n if (value !== null && value !== undefined) {\n return [value];\n }\n return [];\n};\n\nconst isRangeTuple = (value: unknown): value is [string, string] => (\n Array.isArray(value)\n && value.length === 2\n && typeof value[0] === 'string'\n && typeof value[1] === 'string'\n);\n\nconst formatDateLike = (value: unknown): string => {\n if (typeof value === 'string') {\n return value;\n }\n if (value !== null && typeof value === 'object') {\n const maybeFormat = (value as { format?: unknown }).format;\n if (typeof maybeFormat === 'function') {\n return (maybeFormat as (pattern: string) => string)('YYYY-MM-DD');\n }\n const maybeToISOString = (value as { toISOString?: unknown }).toISOString;\n if (typeof maybeToISOString === 'function') {\n return (maybeToISOString as () => string)();\n }\n }\n return String(value);\n};\n\nconst normalizeCandidates = (column: ColumnConfig, raw: unknown): FilterItem[] => {\n if (raw === null || raw === undefined) {\n return [];\n }\n\n if (column.filterMode === FilterMode.SEARCH) {\n if (typeof raw !== 'string') {\n return [];\n }\n const trimmed = raw.trim();\n return trimmed.length === 0 ? [] : [trimmed];\n }\n\n if (column.filterMode === FilterMode.DATE) {\n if (!Array.isArray(raw) || raw.length !== 2) {\n return [];\n }\n const tuple: [string, string] = [\n formatDateLike(raw[0]),\n formatDateLike(raw[1]),\n ];\n return [tuple];\n }\n\n if (Array.isArray(raw)) {\n return raw as FilterItem[];\n }\n\n return [raw as FilterItem];\n};\n\nconst setFilterValue = (key: string, value: FilterItem[] | FilterItem | null): void => {\n const next = { ...localFilterValues.value };\n\n if (value === null) {\n next[key] = null;\n emit('filterApply', { key, value: [] });\n } else if (Array.isArray(value)) {\n const compact = value.filter((v) => v !== null && v !== undefined);\n if (compact.length === 0) {\n next[key] = null;\n emit('filterApply', { key, value: [] });\n } else if (compact.length === 1 && !isRangeTuple(compact[0])) {\n next[key] = compact[0];\n emit('filterApply', { key, value: compact });\n } else {\n next[key] = compact;\n emit('filterApply', { key, value: compact });\n }\n } else {\n next[key] = value;\n emit('filterApply', { key, value: [value] });\n }\n\n emit('update:filterValues', next);\n localFilterValues.value = next;\n inputFilters.value[key] = null;\n};\n\nconst applyFilter = (column: ColumnConfig, newValue: unknown): void => {\n const key = String(column.dataIndex);\n\n const candidates = normalizeCandidates(column, newValue);\n if (candidates.length === 0) {\n inputFilters.value[key] = null;\n return;\n }\n\n const isMultiple = (column.filterMultiple ?? props.multiColumnFilters ?? true) !== false;\n if (!isMultiple) {\n if (column.filterMode === FilterMode.DATE) {\n setFilterValue(key, candidates);\n return;\n }\n\n if (Array.isArray(newValue)) {\n setFilterValue(key, candidates[candidates.length - 1] as FilterItem);\n return;\n }\n\n setFilterValue(key, candidates[0] as FilterItem);\n return;\n }\n\n const current = getFilterArray(key);\n const next = [\n ...current,\n ];\n let changed = false;\n\n candidates.forEach((candidate) => {\n if (next.some((item) => isEqual(item, candidate))) {\n return;\n }\n next.push(candidate);\n changed = true;\n });\n\n if (!changed) {\n inputFilters.value[key] = null;\n return;\n }\n\n setFilterValue(key, next);\n};\n\nconst rowClassName = (record: Record<string, unknown>): string => (record.isGroup ? 'parent-row' : '');\n\nconst onTableChange = (\n _pagination: unknown,\n _filters: unknown,\n sorter: { columnKey?: string, order?: TableSortOrder | null },\n): void => {\n emit('sortChange', {\n columnKey: sorter.columnKey || '',\n order: sorter.order || null,\n });\n};\n\nconst resizeColumn = (width: number, col: ColumnConfig): void => {\n const key = col.key || String(col.dataIndex);\n const index = localColumns.value.findIndex(\n (column: ColumnConfig) => (column.key || String(column.dataIndex)) === key,\n );\n if (index === -1) {\n return;\n }\n localColumns.value.splice(index, 1, {\n ...col,\n width,\n });\n};\n\nwatch(\n () => props.filterValues,\n (newVal: Partial<Record<string, FilterValue>> | undefined) => {\n localFilterValues.value = newVal || {};\n },\n);\n\nwatch(\n () => props.columns,\n (newColumns: ColumnConfig[]) => {\n localColumns.value = [\n ...newColumns,\n ];\n },\n {\n immediate: true,\n },\n);\n\nonMounted(() => {\n const tbody = document.querySelector<HTMLElement>('.the-table tbody');\n if (tbody !== null) {\n autoAnimate(tbody);\n }\n});\n</script>\n","<template>\n <a-drawer\n v-model:open=\"drawerOpen\"\n class=\"efko-dataview\"\n title=\"Настройки представления\"\n placement=\"right\"\n >\n <section class=\"mb-4\">\n <h3 class=\"font-bold text-base mb-2\">Отображение колонок</h3>\n\n <div class=\"flex flex-col gap-1\">\n <div v-for=\"col in columns\" :key=\"col.key ?? col.dataIndex\">\n <a-checkbox\n v-model:checked=\"visibility[col.key ?? col.dataIndex]\"\n :disabled=\"isCardMode\"\n class=\"flex\"\n >\n {{ col.title }}\n </a-checkbox>\n </div>\n </div>\n </section>\n\n <section>\n <h3 class=\"font-bold text-base mb-2\">Вид</h3>\n\n <a-radio-group\n v-model:value=\"localViewMode\"\n button-style=\"solid\"\n class=\"mb-3\"\n :disabled=\"disabledViewMode\"\n >\n <a-radio value=\"table\">Таблица</a-radio>\n <a-radio value=\"grid\">Карточки</a-radio>\n </a-radio-group>\n\n <a-radio-group\n v-model:value=\"localCardLayout\"\n button-style=\"solid\"\n :disabled=\"!isCardMode\"\n >\n <a-radio-button value=\"grid\">\n <AppstoreOutlined class=\"mr-2\" />Сетка\n </a-radio-button>\n\n <a-radio-button value=\"row\">\n <PicCenterOutlined class=\"mr-2\" />Строка\n </a-radio-button>\n </a-radio-group>\n </section>\n </a-drawer>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, watch, computed, reactive,\n} from 'vue';\nimport { AppstoreOutlined, PicCenterOutlined } from '@ant-design/icons-vue';\nimport type { ColumnConfig } from '../interface/table.d';\nimport { CardLayout, ViewMode } from './ColumnSettingsDrawer';\n\nconst props = defineProps<{\n visible: boolean,\n columns: ColumnConfig[],\n modelValue: Record<string, boolean>,\n showActionsColumn?: boolean,\n disableViewMode?: boolean,\n viewMode: ViewMode,\n cardLayout: CardLayout,\n}>();\n\nconst emit = defineEmits<{(e: 'update:visible', value: boolean): void,\n (e: 'update:modelValue', value: Record<string, boolean>): void,\n (e: 'update:viewMode', value: ViewMode): void,\n (e: 'update:cardLayout', value: CardLayout): void,\n}>();\n\nconst drawerOpen = ref(props.visible);\nconst localViewMode = ref(props.viewMode);\nconst localCardLayout = ref(props.cardLayout);\nconst visibility = reactive<Record<string, boolean>>({\n ...props.modelValue,\n});\n\nconst isCardMode = computed(() => localViewMode.value === 'grid');\nconst disabledViewMode = props.disableViewMode || false;\n\nwatch(\n () => props.visible,\n (value: boolean) => {\n drawerOpen.value = value;\n },\n);\n\nwatch(drawerOpen, (value: boolean) => {\n emit('update:visible', value);\n});\n\nwatch(\n () => props.viewMode,\n (mode: ViewMode) => {\n localViewMode.value = mode;\n },\n);\n\nwatch(localViewMode, (mode: ViewMode) => {\n emit('update:viewMode', mode);\n});\n\nwatch(\n () => props.cardLayout,\n (layout: CardLayout) => {\n localCardLayout.value = layout;\n },\n);\n\nwatch(localCardLayout, (layout: CardLayout) => {\n emit('update:cardLayout', layout);\n});\n\nwatch(\n () => props.modelValue,\n (view: Record<string, boolean>) => Object.assign(visibility, view),\n {\n deep: true,\n },\n);\n\nwatch(visibility, (view: Record<string, boolean>) => emit('update:modelValue', {\n ...view,\n}), {\n deep: true,\n});\n\nif (props.showActionsColumn && visibility.actions === undefined) {\n visibility.actions = true;\n}\n</script>\n","<template>\n <component\n v-bind=\"componentProps\"\n :is=\"inputComponent\"\n v-model:value=\"inputValue\"\n v-model=\"inputValue\"\n :placeholder=\"placeholder\"\n class=\"w-full text-sm\"\n />\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed, ref, watch,\n} from 'vue';\nimport Multiselect from '../ui/TheSelect.vue';\nimport { FilterMode } from '../table/enum/table';\n\ntype Mode = 'search' | 'select' | 'date'\ntype Value =\n | string\n | number\n | boolean\n | object\n | (string | number | boolean | object)[]\n | null\n | undefined\n\nconst props = defineProps<{\n modelValue: Value,\n filterMode?: Mode,\n componentProps?: Record<string, unknown>,\n placeholder: string,\n}>();\n\nconst emit = defineEmits<{(event:'update:modelValue', value:Value): void }>();\n\nconst inputComponent = computed(() => {\n if (props.filterMode === FilterMode.SEARCH) {\n return 'a-input';\n }\n if (props.filterMode === FilterMode.SELECT) {\n return Multiselect;\n }\n if (props.filterMode === FilterMode.DATE) {\n return 'a-range-picker';\n }\n return 'a-input';\n});\n\nconst inputValue = ref<Value>(props.modelValue);\n\nwatch(() => props.modelValue, (value: Value) => {\n inputValue.value = value;\n});\nwatch(inputValue, (value: Value) => emit('update:modelValue', value));\n</script>\n","<template>\n <a-drawer\n v-model:open=\"drawerOpen\"\n class=\"efko-dataview\"\n placement=\"right\"\n width=\"360\"\n title=\"Фильтры\"\n body-style=\"padding: 24px\"\n >\n <section\n v-for=\"column in filterableColumns\"\n :key=\"columnKey(column)\"\n class=\"mb-4 flex flex-col gap-2\"\n >\n <span class=\"text-sm font-medium\">{{ column.title }}</span>\n\n <filter-input\n v-model=\"draft[columnKey(column)]\"\n :filter-mode=\"column.filterMode\"\n :component-props=\"column.componentProps\"\n :placeholder=\"column.title\"\n />\n </section>\n\n <div class=\"mt-2 flex flex-col gap-2\">\n <a-button block @click=\"resetFilters\">\n Сбросить\n </a-button>\n <a-button\n type=\"primary\"\n block\n :disabled=\"!hasModifications\"\n @click=\"applyFilters\"\n >\n Применить\n </a-button>\n </div>\n </a-drawer>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, reactive, watch, computed,\n} from 'vue';\nimport { isEqual } from 'lodash';\nimport FilterInput from './FilterInput.vue';\nimport { FilterMode } from '../table/enum/table';\nimport type {\n ColumnConfig,\n FilterItem,\n FilterValue,\n} from '../table/interface/table.d';\n\nconst props = defineProps<{\n visible: boolean,\n columns: ColumnConfig[],\n filterValues: Record<string, FilterValue | undefined>,\n}>();\n\nconst emit = defineEmits<{(event: 'update:visible', value: boolean): void,\n (\n event: 'update:filterValues',\n value: Record<string, FilterValue | undefined>,\n ): void,\n (event: 'filterApply', payload: { key: string, value: FilterItem[] }): void,\n}>();\n\nconst drawerOpen = ref(props.visible);\nconst draft = reactive<Record<string, FilterValue | undefined>>({\n ...props.filterValues,\n});\n\nconst columnKey = (column: ColumnConfig): string | number => column.key ?? String(column.dataIndex);\n\nconst formatDateLike = (value: unknown): string => {\n if (typeof value === 'string') {\n return value;\n }\n if (value !== null && typeof value === 'object') {\n const maybeFormat = (value as { format?: unknown }).format;\n if (typeof maybeFormat === 'function') {\n return (maybeFormat as (pattern: string) => string)('YYYY-MM-DD');\n }\n const maybeToISOString = (value as { toISOString?: unknown }).toISOString;\n if (typeof maybeToISOString === 'function') {\n return (maybeToISOString as () => string)();\n }\n }\n return String(value);\n};\n\nconst normalizeToStoredValue = (\n column: ColumnConfig,\n candidate: FilterValue | undefined,\n): FilterValue | undefined => {\n if (candidate === undefined) {\n return undefined;\n }\n if (column.filterMode === FilterMode.DATE) {\n if (Array.isArray(candidate) && candidate.length === 2) {\n return [[formatDateLike(candidate[0]), formatDateLike(candidate[1])]] as unknown as FilterValue;\n }\n return candidate;\n }\n return candidate;\n};\n\nconst toArray = (val: FilterValue | undefined): FilterItem[] => {\n if (Array.isArray(val)) {\n return val as FilterItem[];\n }\n if (val !== null && val !== undefined) {\n return [val as FilterItem];\n }\n return [];\n};\n\nconst valueIsEmpty = (val: FilterValue | undefined): boolean => {\n if (val === null || val === undefined) {\n return true;\n }\n if (Array.isArray(val)) {\n return val.length === 0;\n }\n if (typeof val === 'string') {\n return val.trim() === '';\n }\n return false;\n};\n\nconst filterableColumns = computed(() => props.columns.filter((column: ColumnConfig) => column.filterable));\n\nconst hasModifications = computed(() => Object.keys(draft).some(\n (key: string) => !isEqual(draft[key], props.filterValues[key]),\n));\n\nconst syncDraft = (values: Record<string, FilterValue | undefined>): void => {\n Object.keys(draft).forEach((key: string) => {\n delete draft[key];\n });\n Object.assign(draft, values);\n};\n\nwatch(\n () => props.visible,\n (view: boolean) => {\n drawerOpen.value = view;\n if (view) {\n syncDraft(props.filterValues);\n }\n },\n);\nwatch(drawerOpen, (view: boolean) => {\n emit('update:visible', view);\n});\n\nwatch(\n () => props.filterValues,\n (newVal: Record<string, FilterValue | undefined>) => {\n syncDraft(newVal);\n },\n {\n deep: true,\n },\n);\n\nconst applyFilters = (): void => {\n const updated: Record<string, FilterValue | undefined> = {\n ...props.filterValues,\n };\n\n Object.entries(draft).forEach(([key, candidate]) => {\n const column = props.columns.find((c) => String(columnKey(c)) === key);\n const normalized = column ? normalizeToStoredValue(column, candidate as FilterValue | undefined) : candidate;\n\n if (valueIsEmpty(candidate)) {\n updated[key] = null;\n emit('filterApply', {\n key,\n value: [],\n });\n return;\n }\n updated[key] = normalized as FilterValue;\n emit('filterApply', {\n key,\n value: toArray(normalized as FilterValue),\n });\n });\n\n emit('update:filterValues', updated);\n drawerOpen.value = false;\n};\n\nconst resetFilters = (): void => {\n Object.keys(draft).forEach((key: string) => {\n delete draft[key];\n });\n\n const cleared: Record<string, FilterValue | undefined> = {};\n emit('update:filterValues', cleared);\n};\n</script>\n\n<style scoped>\nspan {\n line-height: 1;\n}\n</style>\n","<template>\n <a-modal\n v-model:visible=\"modalOpen\"\n class=\"efko-dataview\"\n title=\"Фильтры\"\n destroy-on-close\n :ok-text=\"'Применить'\"\n :cancel-text=\"'Сбросить'\"\n :ok-button-props=\"{ disabled: !hasModifications }\"\n @ok=\"applyFilters\"\n @cancel=\"handleCancel\"\n >\n <section\n v-for=\"column in filterableColumns\"\n :key=\"columnKey(column)\"\n class=\"mb-4 flex flex-col gap-2\"\n >\n <span class=\"text-sm font-medium\">{{ column.title }}</span>\n\n <filter-input\n v-model=\"draft[columnKey(column)]\"\n :filter-mode=\"column.filterMode\"\n :component-props=\"column.componentProps\"\n :placeholder=\"column.title\"\n />\n </section>\n </a-modal>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, reactive, watch, computed,\n} from 'vue';\nimport { isEqual } from 'lodash';\nimport FilterInput from './FilterInput.vue';\nimport { FilterMode } from '../table/enum/table';\nimport type {\n ColumnConfig,\n FilterItem,\n FilterValue,\n} from '../table/interface/table.d';\n\nconst props = defineProps<{\n visible: boolean,\n columns: ColumnConfig[],\n filterValues: Record<string, FilterValue | undefined>,\n}>();\n\nconst emit = defineEmits<{(event: 'update:visible', value: boolean): void,\n (\n event: 'update:filterValues',\n value: Record<string, FilterValue | undefined>,\n ): void,\n (event: 'filterApply', payload: { key: string, value: FilterItem[] }): void,\n}>();\n\nconst modalOpen = ref(props.visible);\nconst draft = reactive<Record<string, FilterValue | undefined>>({\n ...props.filterValues,\n});\n\nconst columnKey = (column: ColumnConfig): string | number => column.key ?? String(column.dataIndex);\n\nconst formatDateLike = (value: unknown): string => {\n if (typeof value === 'string') {\n return value;\n }\n if (value !== null && typeof value === 'object') {\n const maybeFormat = (value as { format?: unknown }).format;\n if (typeof maybeFormat === 'function') {\n return (maybeFormat as (pattern: string) => string)('YYYY-MM-DD');\n }\n const maybeToISOString = (value as { toISOString?: unknown }).toISOString;\n if (typeof maybeToISOString === 'function') {\n return (maybeToISOString as () => string)();\n }\n }\n return String(value);\n};\n\nconst normalizeToStoredValue = (\n column: ColumnConfig,\n candidate: FilterValue | undefined,\n): FilterValue | undefined => {\n if (candidate === undefined) {\n return undefined;\n }\n if (column.filterMode === FilterMode.DATE) {\n if (Array.isArray(candidate) && candidate.length === 2) {\n return [[formatDateLike(candidate[0]), formatDateLike(candidate[1])]] as unknown as FilterValue;\n }\n return candidate;\n }\n return candidate;\n};\n\nconst toArray = (val: FilterValue | undefined): FilterItem[] => {\n if (Array.isArray(val)) {\n return val as FilterItem[];\n }\n if (val !== null && val !== undefined) {\n return [val as FilterItem];\n }\n return [];\n};\n\nconst valueIsEmpty = (val: FilterValue | undefined): boolean => {\n if (val === null || val === undefined) {\n return true;\n }\n if (Array.isArray(val)) {\n return val.length === 0;\n }\n if (typeof val === 'string') {\n return val.trim() === '';\n }\n return false;\n};\n\nconst filterableColumns = computed(\n () => props.columns.filter((column: ColumnConfig) => column.filterable),\n);\n\nconst hasModifications = computed(() => Object.keys(draft).some(\n (key: string) => !isEqual(draft[key], props.filterValues[key]),\n));\n\nconst syncDraft = (values: Record<string, FilterValue | undefined>): void => {\n Object.keys(draft).forEach((key: string) => {\n delete draft[key];\n });\n Object.assign(draft, values);\n};\n\nwatch(\n () => props.visible,\n (view: boolean) => {\n modalOpen.value = view;\n if (view) {\n syncDraft(props.filterValues);\n }\n },\n);\nwatch(modalOpen, (view: boolean) => {\n emit('update:visible', view);\n});\n\nwatch(\n () => props.filterValues,\n (newVal: Record<string, FilterValue | undefined>) => {\n syncDraft(newVal);\n },\n {\n deep: true,\n },\n);\n\nconst applyFilters = (): void => {\n const updated: Record<string, FilterValue | undefined> = {\n ...props.filterValues,\n };\n\n Object.entries(draft).forEach(([key, candidate]) => {\n const column = props.columns.find((c) => String(columnKey(c)) === key);\n const normalized = column ? normalizeToStoredValue(column, candidate as FilterValue | undefined) : candidate;\n\n if (valueIsEmpty(candidate)) {\n updated[key] = null;\n emit('filterApply', {\n key,\n value: [],\n });\n return;\n }\n updated[key] = normalized as FilterValue;\n emit('filterApply', {\n key,\n value: toArray(normalized as FilterValue),\n });\n });\n\n emit('update:filterValues', updated);\n modalOpen.value = false;\n};\n\nconst handleCancel = (): void => {\n modalOpen.value = false;\n};\n</script>\n\n<style scoped>\nspan {\n line-height: 1;\n}\n</style>\n","export enum ViewMode {\n Table = 'table',\n Grid = 'grid',\n}\nexport enum CardLayout {\n Grid = 'grid',\n Row = 'row',\n}\n","<template>\n <div class=\"efko-dataview\">\n <div ref=\"tagCloudContainer\">\n <filter-tag-cloud\n :filters=\"activeFilters\"\n @update:filters=\"updateFilters\"\n @remove=\"removeFilter\"\n @clear=\"clearFilters\"\n />\n </div>\n\n <template v-if=\"isCardMode\">\n <div class=\"flex items-center justify-between gap-2 mb-2\">\n <div class=\"flex items-center gap-1\">\n <a-badge dot :count=\"hiddenColumnCount\">\n <a-button\n class=\"flex items-center justify-center p-2\"\n @click=\"isColumnDrawerOpen = true\"\n >\n <Icon name=\"solar:settings-outline\" class=\"text-lg\" />\n </a-button>\n </a-badge>\n <a-button\n class=\"flex items-center justify-center p-2\"\n @click=\"isFilterDrawerOpen = true\"\n >\n <Icon name=\"ant-design:filter-outlined\" class=\"text-lg\" />\n </a-button>\n </div>\n\n <slot name=\"headerCardContainer\" />\n <slot name=\"title\" />\n </div>\n\n <card-grid\n v-if=\"isCardMode\"\n :loading=\"loading\"\n :columns=\"columns\"\n :data-source=\"dataSource\"\n :card-layout=\"cardLayout\"\n :can-edit=\"canEdit\"\n :edit-action=\"editAction\"\n :show-actions-column=\"showActionsColumn\"\n :pagination=\"pagination\"\n :meta=\"meta\"\n @restore=\"(r) => emit('restore', r)\"\n @edit=\"(r) => emit('edit', r)\"\n @delete=\"(r) => emit('delete', r)\"\n @page-change=\"(p) => emit('pageChange', p)\"\n @size-change=\"(p, s) => emit('sizeChange', p, s)\"\n >\n <template v-if=\"$slots.titleCard\" #titleCard=\"p\">\n <slot name=\"titleCard\" v-bind=\"p\" />\n </template>\n\n <template v-if=\"$slots.body\" #bodyCard=\"p\">\n <slot name=\"body\" v-bind=\"p\" />\n </template>\n\n <template v-if=\"$slots.footer\" #footerCard=\"p\">\n <slot name=\"footer\" v-bind=\"p\" />\n </template>\n </card-grid>\n </template>\n\n <data-table\n v-else\n :loading=\"loading\"\n :pagination=\"pagination\"\n :columns=\"columns\"\n :data-source=\"dataSource\"\n :filter-values=\"activeFilters\"\n :meta=\"meta\"\n :can-edit=\"canEdit\"\n :edit-action=\"editAction\"\n :delete-action=\"deleteAction\"\n :show-actions-column=\"showActionsColumn\"\n :columns-visibility=\"columnVisibility\"\n :disable-column-filter-dropdowns=\"props.disableColumnFilterDropdowns === true\"\n :show-filter-button=\"props.enableTableFilterDrawer === true\"\n :multi-column-filters=\"props.multiColumnFilters\"\n @open-column-drawer=\"isColumnDrawerOpen = true\"\n @open-filter-drawer=\"isFilterDrawerOpen = true\"\n @update:filter-values=\"updateFilters\"\n @filter-apply=\"(payload) => emit('filterApply', payload)\"\n @restore=\"(record) => emit('restore', record)\"\n @edit=\"(record) => emit('edit', record)\"\n @delete=\"(record) => emit('delete', record)\"\n @sort-change=\"(payload) => emit('sortChange', payload)\"\n @page-change=\"(page) => emit('pageChange', page)\"\n @size-change=\"(page, size) => emit('sizeChange', page, size)\"\n >\n <template #title>\n <slot name=\"title\" />\n </template>\n <template #bodyCell=\"p\"><slot name=\"bodyCell\" v-bind=\"p\" /></template>\n <template #actionColumn=\"p\"><slot name=\"actionColumn\" v-bind=\"p\" /></template>\n </data-table>\n\n <slot\n name=\"filtersDrawer\"\n :visible=\"isFilterDrawerOpen\"\n :set-visible=\"(value: boolean) => { isFilterDrawerOpen = value; }\"\n :filters=\"activeFilters\"\n :update-filters=\"updateFilters\"\n :emit-filter-apply=\"emitFilterApply\"\n >\n <card-filters-modal\n v-if=\"props.useFilterModal === true\"\n v-model:visible=\"isFilterDrawerOpen\"\n :columns=\"columns\"\n :filter-values=\"activeFilters\"\n @update:filter-values=\"updateFilters\"\n @filter-apply=\"(payload) => emit('filterApply', payload)\"\n />\n <card-filters-drawer\n v-else\n v-model:visible=\"isFilterDrawerOpen\"\n :columns=\"columns\"\n :filter-values=\"activeFilters\"\n @update:filter-values=\"updateFilters\"\n @filter-apply=\"(payload) => emit('filterApply', payload)\"\n />\n </slot>\n\n <column-settings-drawer\n v-model:visible=\"isColumnDrawerOpen\"\n v-model:model-value=\"columnVisibility\"\n v-model:view-mode=\"currentViewMode\"\n v-model:card-layout=\"cardLayout\"\n :columns=\"columns\"\n :show-actions-column=\"showActionsColumn\"\n :disable-view-mode=\"disableViewMode\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n ref, watch, computed, onMounted,\n} from 'vue';\nimport { isEqual } from 'lodash';\nimport autoAnimate from '@formkit/auto-animate';\n\nimport FilterTagCloud from './table/ui/filter/FilterTagCloud.vue';\nimport CardGrid from './card/CardGrid.vue';\nimport DataTable from './table/TheTable.vue';\nimport ColumnSettingsDrawer from './table/ui/ColumnSettingsDrawer.vue';\nimport CardFiltersDrawer from './card/CardFiltersDrawer.vue';\nimport CardFiltersModal from './card/CardFiltersModal.vue';\nimport type {\n ColumnConfig,\n FilterItem,\n FilterValue,\n Meta,\n SortPayload,\n} from './table/interface/table.d';\nimport { CardLayout, ViewMode } from './table/ui/ColumnSettingsDrawer';\nimport type { FilterValues } from './DataView.d';\nimport type { TableRecord } from './card/TheCard.d';\n\nconst props = withDefaults(\n defineProps<{\n viewMode?: ViewMode;\n loading: boolean;\n pagination?: boolean;\n columns: ColumnConfig[];\n dataSource: TableRecord[];\n filterValues?: Partial<Record<string, FilterValue>>;\n meta?: Meta;\n canEdit?: boolean;\n editAction?: boolean;\n deleteAction?: boolean;\n showActionsColumn?: boolean;\n disableViewMode?: boolean;\n enableTableFilterDrawer?: boolean;\n disableColumnFilterDropdowns?: boolean;\n useFilterModal?: boolean;\n multiColumnFilters?: boolean;\n }>(),\n {\n pagination: false,\n canEdit: true,\n editAction: true,\n deleteAction: true,\n showActionsColumn: true,\n disableViewMode: false,\n enableTableFilterDrawer: false,\n disableColumnFilterDropdowns: false,\n useFilterModal: false,\n multiColumnFilters: true,\n },\n);\n\nconst emit = defineEmits<{(e: 'update:viewMode', value: ViewMode): void,\n (e: 'update:filterValues', value: Partial<Record<string, FilterValue>>): void,\n (e: 'filterApply', payload: { key: string, value: FilterItem[] }): void,\n (e: 'edit' | 'delete' | 'restore', record: Record<string, unknown>): void,\n (e: 'sortChange', payload: SortPayload): void,\n (e: 'pageChange', page: number): void,\n (e: 'sizeChange', page: number, pageSize: number): void,\n}>();\n\nconst currentViewMode = ref<ViewMode>(props.viewMode || ViewMode.Table);\nconst isCardMode = computed(() => currentViewMode?.value === ViewMode.Grid);\nconst cardLayout = ref<CardLayout>(CardLayout.Grid);\nconst activeFilters = ref<Partial<Record<string, FilterValue>>>(\n props.filterValues || {},\n);\n\nconst tagCloudContainer = ref<HTMLElement | null>(null);\n\nconst updateFilters = (filters: Partial<Record<string, FilterValue>>): void => {\n activeFilters.value = filters;\n emit('update:filterValues', filters);\n};\n\nconst removeFilter = (\n key: string,\n value: FilterValue | undefined,\n target: FilterItem,\n): void => {\n const next = { ...activeFilters.value };\n\n if (value === undefined) {\n return;\n }\n\n if (Array.isArray(value)) {\n const remaining = value.filter((item: FilterItem) => !isEqual(item, target));\n if (remaining.length === 0) {\n next[key] = null;\n } else if (remaining.length === 1 && !Array.isArray(remaining[0])) {\n next[key] = remaining[0];\n } else {\n next[key] = remaining;\n }\n updateFilters(next);\n return;\n }\n\n if (isEqual(value, target)) {\n next[key] = null;\n updateFilters(next);\n }\n};\n\nconst clearFilters = (): void => updateFilters({});\n\nconst emitFilterApply = (payload: { key: string; value: FilterItem[] }): void => {\n emit('filterApply', payload);\n};\n\nconst isFilterDrawerOpen = ref(false);\nconst isColumnDrawerOpen = ref(false);\n\nconst columnVisibility = ref<Record<string, boolean>>({});\n\nconst hiddenColumnCount = computed(() => (currentViewMode.value === 'table'\n ? Object.keys(columnVisibility.value).filter(\n (key: string) => columnVisibility.value[key] === false,\n ).length\n : 0));\n\nconst initVisibility = (cols: ColumnConfig[]): void => {\n cols.forEach((col: ColumnConfig) => {\n const key = col.key ?? String(col.dataIndex);\n if (columnVisibility.value[key] === undefined) {\n columnVisibility.value[key] = true;\n }\n });\n\n if (props.showActionsColumn && columnVisibility.value.actions === undefined) {\n columnVisibility.value.actions = true;\n }\n};\n\nwatch(\n () => props.filterValues,\n (value: FilterValues) => {\n activeFilters.value = value || {};\n },\n);\n\nwatch(\n () => props.viewMode,\n (mode: ViewMode | undefined) => {\n if (mode !== undefined) {\n currentViewMode.value = mode;\n }\n },\n);\n\nwatch(() => props.columns, initVisibility);\n\nwatch(currentViewMode, (mode: ViewMode) => emit('update:viewMode', mode));\n\nonMounted(() => initVisibility(props.columns));\n\nonMounted(() => {\n if (tagCloudContainer.value) {\n autoAnimate(tagCloudContainer.value);\n }\n});\n</script>\n","<template>\n <div ref=\"container\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n onMounted,\n onBeforeUnmount,\n} from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n onIntersect?:() => void,\n threshold?: number,\n once?: boolean,\n rootMargin?: string,\n }>(),\n {\n threshold: 0.1,\n once: false,\n rootMargin: '0px',\n },\n);\n\nconst container = ref<HTMLElement | null>(null);\nlet observer: IntersectionObserver | null = null;\n\nconst handleIntersection = (entries: IntersectionObserverEntry[]): void => {\n const entry = entries[0];\n if (entry.isIntersecting && props.onIntersect) {\n props.onIntersect();\n if (props.once && observer) {\n observer.disconnect();\n }\n }\n};\n\nonMounted(() => {\n observer = new IntersectionObserver(handleIntersection, {\n threshold: props.threshold,\n rootMargin: props.rootMargin,\n });\n\n if (container.value) {\n observer.observe(container.value);\n }\n});\n\nonBeforeUnmount(() => {\n observer?.disconnect();\n});\n</script>\n"],"names":["props","__props","emit","__emit","token","theme","tagStyle","computed","hasValidFilter","value","hasFilters","hasNameField","obj","formatFilterItem","item","intervalLabel","joinedLabel","nameLabel","jsonLabel","parseFilterValues","isFilterItemEqual","a","b","removeFilter","key","fullValue","itemToRemove","updated","clearAllFilters","_createBlock","_component_a_flex","_createVNode","_createElementBlock","_Fragment","_renderList","filterKey","filterValue","_openBlock","_component_a_tag","_createTextVNode","_toDisplayString","_component_a_button","_cache","_hoisted_1","_unref","CheckCircleTwoTone","canEdit","editAction","deleteHandler","record","restoreHandler","editHandler","_component_a_tooltip","h","EyeOutlined","$event","EditOutlined","RedoOutlined","DeleteOutlined","recordValue","column","getNameOrEmpty","name","isEmptyTagValue","normalizeItemLabel","displayItems","label","tagItems","index","showActionsColumn","_component_a_card","_createElementVNode","_renderSlot","_ctx","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","TableCellStatus","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","$slots","_hoisted_10","CardCellActions","container","ref","observer","handleIntersection","entries","_a","onMounted","onBeforeUnmount","_component_a_spin","autoAnimate","gridClass","preparedColumns","internalData","mergeData","existingIds","toAdd","watch","isLastPage","loadNextPage","TheCard","rec","bodyRecord","bodyColumns","footerRecord","footerColumns","LazyLoadTrigger","PAGE_SIZE_SMALL","PAGE_SIZE_MEDIUM","PAGE_SIZE_LARGE","PAGE_SIZE_EXTRA_LARGE","PAGE_SIZE_ULTRA","DEFAULT_PAGE_NUMBER","DEFAULT_PAGE_SIZE","FilterMode","PageSizes","PAGE_SIZE_OPTIONS","SkipSizes","TableDefaults","TableSortOrder","SortOrder","_sfc_main$a","defineComponent","VueMultiselect","Empty","_component_VueMultiselect","_mergeProps","_withCtx","_component_a_empty","filterComponent","Multiselect","localValue","handleApply","_resolveDynamicComponent","cellValue","nameValue","hasTagValue","_component_a_skeleton","showFilterButton","localFilterValues","localColumns","inputFilters","filterableColumns","computedColumns","result","headerAlign","cellAlign","rest","hiddenColumnCount","getFilterArray","isRangeTuple","formatDateLike","maybeFormat","maybeToISOString","normalizeCandidates","raw","trimmed","setFilterValue","next","compact","v","applyFilter","newValue","candidates","changed","candidate","isEqual","rowClassName","onTableChange","_pagination","_filters","sorter","resizeColumn","width","col","newVal","newColumns","tbody","_component_a_table","_component_a_badge","$emit","_component_Icon","TableBodyCell","TableCellActions","FilterDropdown","_component_a_pagination","_b","_c","total","_d","page","size","drawerOpen","localViewMode","localCardLayout","visibility","reactive","isCardMode","disabledViewMode","mode","layout","view","_component_a_drawer","_component_a_checkbox","_component_a_radio_group","_component_a_radio","_component_a_radio_button","AppstoreOutlined","PicCenterOutlined","inputComponent","inputValue","draft","columnKey","normalizeToStoredValue","toArray","val","valueIsEmpty","hasModifications","syncDraft","values","applyFilters","c","normalized","resetFilters","FilterInput","modalOpen","handleCancel","_component_a_modal","ViewMode","CardLayout","currentViewMode","cardLayout","activeFilters","tagCloudContainer","updateFilters","filters","target","remaining","clearFilters","emitFilterApply","payload","isFilterDrawerOpen","isColumnDrawerOpen","columnVisibility","initVisibility","cols","FilterTagCloud","CardGrid","r","p","s","DataTable","CardFiltersModal","CardFiltersDrawer","ColumnSettingsDrawer"],"mappings":"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"}
|