admins-components 9.0.21 → 9.0.22

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.
@@ -28,34 +28,34 @@ import { getDefaultPaginator as V } from "./admins-components69.js";
28
28
  import H from "./admins-components71.js";
29
29
  import U from "./admins-components75.js";
30
30
  import { debounce as W } from "./admins-components76.js";
31
- import { filterEmptyValues as G, getDefaultFilters as K, getFilterParams as q } from "./admins-components77.js";
32
- import J from "./admins-components80.js";
33
- import Y from "./admins-components83.js";
34
- import { dataListDefaults as X } from "./admins-components87.js";
35
- import Z from "./admins-components89.js";
36
- import { isIpInUrl as Q } from "./admins-components90.js";
37
- import { getUrlParam as $, joinUrl as ee, removeUrlParam as te, setUrlParam as ne } from "./admins-components91.js";
38
- import { getCurrentSite as re } from "./admins-components92.js";
39
- import { vTooltip as ie } from "./admins-components93.js";
40
- import { createNativeFetch as ae } from "./admins-components94.js";
41
- import { FetchDetails as oe, FetchError as se, Methods as ce, initRequest as le } from "./admins-components95.js";
42
- import { useArticleEditorService as ue } from "./admins-components96.js";
43
- import { useCurrentUser as de } from "./admins-components97.js";
44
- import { BackendService as fe, useBackendService as pe } from "./admins-components98.js";
45
- import { aoeConfig as me, configureArticleOfferElement as he } from "./admins-components151.js";
46
- import ge from "./admins-components153.js";
47
- import { apeConfig as _e, configureArticlePickerElement as ve } from "./admins-components154.js";
48
- import { configureImagePickerElement as ye, ipeConfig as be } from "./admins-components155.js";
49
- import xe from "./admins-components157.js";
50
- import Se from "./admins-components158.js";
51
- import { configureExternalArticleOfferElement as Ce, eaoeConfig as we } from "./admins-components159.js";
52
- import Te from "./admins-components160.js";
53
- import { configureGalleryImageSelectorElement as Ee, gisConfig as De } from "./admins-components161.js";
54
- import Oe from "./admins-components162.js";
55
- import ke from "./admins-components163.js";
56
- import Ae from "./admins-components164.js";
57
- import { configureInternalArticleOfferElement as je, iaoeConfig as Me } from "./admins-components165.js";
58
- import Ne from "./admins-components166.js";
59
- import { configurePartnerPickerElement as Pe, ppeconfig as Fe } from "./admins-components167.js";
60
- import Ie from "./admins-components169.js";
61
- export { ge as ArticleOfferElement, xe as ArticlePickerElement, fe as BackendService, n as Button, o as Calendar, c as Checkbox, h as ConfirmModal, g as CopyToClipboard, R as DataCards, J as DataFilters, Z as DataList, B as DataListOptions, H as DataPaginator, L as DataTable, s as DatePicker, l as DateRangePicker, Se as DateTimePickerElement, d as DropdownMenu, u as DropdownSelect, v as ExternalArticleOffer, Te as ExternalArticleOfferElement, oe as FetchDetails, se as FetchError, Y as FilterTags, U as FiltersHistory, Oe as GalleryImageSelectorElement, p as HeaderComponent, _ as ImagePicker, Ae as ImagePickerDetailsElement, ke as ImagePickerElement, y as InternalArticleOffer, Ne as InternalArticleOfferElement, b as Loader, ce as Methods, m as Modal, Ie as PartnerPickerElement, f as Sidebar, S as ToastNotification, me as aoeConfig, _e as apeConfig, E as booleanToString, r as calendarConfigDefaults, he as configureArticleOfferElement, ve as configureArticlePickerElement, Ce as configureExternalArticleOfferElement, Ee as configureGalleryImageSelectorElement, ye as configureImagePickerElement, je as configureInternalArticleOfferElement, Pe as configurePartnerPickerElement, ae as createNativeFetch, C as dataCardsSettingsDefaults, D as dataListConverters, X as dataListDefaults, w as dataListSettingsDefaults, T as dataTableSettingsDefaults, i as datePickerConfigDefaults, a as dateRangePickerConfigDefaults, W as debounce, z as deepMerge, we as eaoeConfig, O as enumMap, G as filterEmptyValues, k as formatCurrency, e as formatDate, A as formatNumber, re as getCurrentSite, K as getDefaultFilters, V as getDefaultPaginator, q as getFilterParams, $ as getUrlParam, De as gisConfig, Me as iaoeConfig, j as identity, le as initRequest, be as ipeConfig, Q as isIpInUrl, ee as joinUrl, M as listToString, N as localToLocalString, t as parseDate, Fe as ppeconfig, te as removeUrlParam, ne as setUrlParam, P as shortUuid, F as textEllipse, x as toast, ue as useArticleEditorService, pe as useBackendService, de as useCurrentUser, I as utcToLocalString, ie as vTooltip };
31
+ import { filterEmptyValues as G, getDefaultFilters as K, getFilterParams as q, writeFilterParams as J } from "./admins-components77.js";
32
+ import Y from "./admins-components80.js";
33
+ import X from "./admins-components83.js";
34
+ import { dataListDefaults as Z } from "./admins-components87.js";
35
+ import Q from "./admins-components89.js";
36
+ import { isIpInUrl as $ } from "./admins-components90.js";
37
+ import { getUrlParam as ee, joinUrl as te, removeUrlParam as ne, setUrlParam as re } from "./admins-components91.js";
38
+ import { getCurrentSite as ie } from "./admins-components92.js";
39
+ import { vTooltip as ae } from "./admins-components93.js";
40
+ import { createNativeFetch as oe } from "./admins-components94.js";
41
+ import { FetchDetails as se, FetchError as ce, Methods as le, initRequest as ue } from "./admins-components95.js";
42
+ import { useArticleEditorService as de } from "./admins-components96.js";
43
+ import { useCurrentUser as fe } from "./admins-components97.js";
44
+ import { BackendService as pe, useBackendService as me } from "./admins-components98.js";
45
+ import { aoeConfig as he, configureArticleOfferElement as ge } from "./admins-components151.js";
46
+ import _e from "./admins-components153.js";
47
+ import { apeConfig as ve, configureArticlePickerElement as ye } from "./admins-components154.js";
48
+ import { configureImagePickerElement as be, ipeConfig as xe } from "./admins-components155.js";
49
+ import Se from "./admins-components157.js";
50
+ import Ce from "./admins-components158.js";
51
+ import { configureExternalArticleOfferElement as we, eaoeConfig as Te } from "./admins-components159.js";
52
+ import Ee from "./admins-components160.js";
53
+ import { configureGalleryImageSelectorElement as De, gisConfig as Oe } from "./admins-components161.js";
54
+ import ke from "./admins-components162.js";
55
+ import Ae from "./admins-components163.js";
56
+ import je from "./admins-components164.js";
57
+ import { configureInternalArticleOfferElement as Me, iaoeConfig as Ne } from "./admins-components165.js";
58
+ import Pe from "./admins-components166.js";
59
+ import { configurePartnerPickerElement as Fe, ppeconfig as Ie } from "./admins-components167.js";
60
+ import Le from "./admins-components169.js";
61
+ export { _e as ArticleOfferElement, Se as ArticlePickerElement, pe as BackendService, n as Button, o as Calendar, c as Checkbox, h as ConfirmModal, g as CopyToClipboard, R as DataCards, Y as DataFilters, Q as DataList, B as DataListOptions, H as DataPaginator, L as DataTable, s as DatePicker, l as DateRangePicker, Ce as DateTimePickerElement, d as DropdownMenu, u as DropdownSelect, v as ExternalArticleOffer, Ee as ExternalArticleOfferElement, se as FetchDetails, ce as FetchError, X as FilterTags, U as FiltersHistory, ke as GalleryImageSelectorElement, p as HeaderComponent, _ as ImagePicker, je as ImagePickerDetailsElement, Ae as ImagePickerElement, y as InternalArticleOffer, Pe as InternalArticleOfferElement, b as Loader, le as Methods, m as Modal, Le as PartnerPickerElement, f as Sidebar, S as ToastNotification, he as aoeConfig, ve as apeConfig, E as booleanToString, r as calendarConfigDefaults, ge as configureArticleOfferElement, ye as configureArticlePickerElement, we as configureExternalArticleOfferElement, De as configureGalleryImageSelectorElement, be as configureImagePickerElement, Me as configureInternalArticleOfferElement, Fe as configurePartnerPickerElement, oe as createNativeFetch, C as dataCardsSettingsDefaults, D as dataListConverters, Z as dataListDefaults, w as dataListSettingsDefaults, T as dataTableSettingsDefaults, i as datePickerConfigDefaults, a as dateRangePickerConfigDefaults, W as debounce, z as deepMerge, Te as eaoeConfig, O as enumMap, G as filterEmptyValues, k as formatCurrency, e as formatDate, A as formatNumber, ie as getCurrentSite, K as getDefaultFilters, V as getDefaultPaginator, q as getFilterParams, ee as getUrlParam, Oe as gisConfig, Ne as iaoeConfig, j as identity, ue as initRequest, xe as ipeConfig, $ as isIpInUrl, te as joinUrl, M as listToString, N as localToLocalString, t as parseDate, Ie as ppeconfig, ne as removeUrlParam, re as setUrlParam, P as shortUuid, F as textEllipse, x as toast, de as useArticleEditorService, me as useBackendService, fe as useCurrentUser, I as utcToLocalString, ae as vTooltip, J as writeFilterParams };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components78.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\nexport { getFilterParams, getDefaultFilters, filterEmptyValues } from '@/utils/dataFilters'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport { debounce } from '@/utils/debounce'\nimport { filterEmptyValues, getFilterParams, writeFilterParams } from '@/utils/dataFilters'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean\n items: FilterItem[]\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n }>(),\n {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n },\n)\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getFilterParams(props.items) ?? {})\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) {\n filterRefs.value[key] = el\n } else {\n delete filterRefs.value[key]\n }\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nonMounted(() => {\n if (!props.handleUrl) return\n const fromUrl = getFilterParams(props.items)\n if (fromUrl && Object.keys(fromUrl).length > 0) {\n values.value = { ...values.value, ...fromUrl }\n }\n})\n\nfunction update(key: string, value: any) {\n values.value = { ...values.value, [key]: value }\n\n if (!props.lazy) {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n }\n}\n\nfunction buildResponseEmit() {\n const transformedValues = props.items.reduce((acc, item) => {\n const val = values.value[item.key]\n if (item.transformer) {\n return { ...acc, ...(item.transformer(val) ?? {}) }\n }\n return { ...acc, [item.key]: val }\n }, {})\n return {\n values: filterEmptyValues(values.value),\n transformed: filterEmptyValues(transformedValues),\n }\n}\n\nconst debouncedUpdate = debounce((key: string, value: any) => {\n update(key, value)\n})\n\nfunction confirm() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n emit('close')\n}\n\n/* function reset() {\n values.value = getDefaults()\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n} */\n\nfunction clearAll() {\n values.value = {}\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n}\n\nconst hasActiveFilters = ref(false)\nwatch(\n values,\n (v) => {\n hasActiveFilters.value = Object.values(v).some(\n (val) => val !== null && val !== '' && val !== undefined,\n )\n },\n { deep: true, immediate: true },\n)\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\nfunction focusFilter(key: string) {\n const ref = (filterRefs.value as Record<string, any>)[key]\n if (!ref) return\n\n if (typeof ref.focusAndOpen === 'function') {\n ref.focusAndOpen()\n return\n }\n if (typeof ref.focus === 'function') {\n ref.focus()\n }\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) {\n next[item.key] = loaded[item.key] ?? null\n }\n }\n values.value = next\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\ndefineExpose({ clearFilter, focusFilter })\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item.key, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else>\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n\n <input\n v-if=\"item.type === 'text'\"\n type=\"text\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLInputElement).value || null)\"\n v-bind=\"item.config\"\n />\n\n <textarea\n v-else-if=\"item.type === 'textarea'\"\n class=\"c-input-row data-filters__textarea\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLTextAreaElement).value || null)\"\n />\n\n <input\n v-else-if=\"item.type === 'number'\"\n type=\"number\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"\n debouncedUpdate(\n item.key,\n ($event.target as HTMLInputElement).value\n ? Number(($event.target as HTMLInputElement).value)\n : null,\n )\n \"\n />\n\n <DatePicker\n v-else-if=\"item.type === 'date' || item.type === 'datetime'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DateRangePicker\n v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DropdownSelect\n v-else-if=\"item.type === 'dropdown'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @update:model-value=\"update(item.key, $event)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <!-- <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Alaphelyzet visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n /> -->\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <hr v-if=\"historyEnabled\" class=\"separator my-3\" />\n <FiltersHistory\n v-if=\"historyEnabled\"\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n @change=\"onHistoryLoad\"\n />\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components78.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport { debounce } from '@/utils/debounce'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getFilterParams, writeFilterParams } from '@/utils/dataFilters'\n\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean\n items: FilterItem[]\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n }>(),\n {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n },\n)\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getFilterParams(props.items) ?? {})\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) {\n filterRefs.value[key] = el\n } else {\n delete filterRefs.value[key]\n }\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nonMounted(() => {\n if (!props.handleUrl) return\n const fromUrl = getFilterParams(props.items)\n if (fromUrl && Object.keys(fromUrl).length > 0) {\n values.value = { ...values.value, ...fromUrl }\n }\n})\n\nfunction update(key: string, value: any) {\n values.value = { ...values.value, [key]: value }\n\n if (!props.lazy) {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n }\n}\n\nfunction buildResponseEmit() {\n const transformedValues = props.items.reduce((acc, item) => {\n const val = values.value[item.key]\n if (item.transformer) {\n return { ...acc, ...(item.transformer(val) ?? {}) }\n }\n return { ...acc, [item.key]: val }\n }, {})\n return {\n values: filterEmptyValues(values.value),\n transformed: filterEmptyValues(transformedValues),\n }\n}\n\nconst debouncedUpdate = debounce((key: string, value: any) => {\n update(key, value)\n})\n\nfunction confirm() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n emit('close')\n}\n\n/* function reset() {\n values.value = getDefaults()\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n} */\n\nfunction clearAll() {\n values.value = {}\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n}\n\nconst hasActiveFilters = ref(false)\nwatch(\n values,\n (v) => {\n hasActiveFilters.value = Object.values(v).some(\n (val) => val !== null && val !== '' && val !== undefined,\n )\n },\n { deep: true, immediate: true },\n)\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\nfunction focusFilter(key: string) {\n const ref = (filterRefs.value as Record<string, any>)[key]\n if (!ref) return\n\n if (typeof ref.focusAndOpen === 'function') {\n ref.focusAndOpen()\n return\n }\n if (typeof ref.focus === 'function') {\n ref.focus()\n }\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) {\n next[item.key] = loaded[item.key] ?? null\n }\n }\n values.value = next\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\ndefineExpose({ clearFilter, focusFilter })\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item.key, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else>\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n\n <input\n v-if=\"item.type === 'text'\"\n type=\"text\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLInputElement).value || null)\"\n v-bind=\"item.config\"\n />\n\n <textarea\n v-else-if=\"item.type === 'textarea'\"\n class=\"c-input-row data-filters__textarea\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLTextAreaElement).value || null)\"\n />\n\n <input\n v-else-if=\"item.type === 'number'\"\n type=\"number\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"\n debouncedUpdate(\n item.key,\n ($event.target as HTMLInputElement).value\n ? Number(($event.target as HTMLInputElement).value)\n : null,\n )\n \"\n />\n\n <DatePicker\n v-else-if=\"item.type === 'date' || item.type === 'datetime'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DateRangePicker\n v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DropdownSelect\n v-else-if=\"item.type === 'dropdown'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @update:model-value=\"update(item.key, $event)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <!-- <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Alaphelyzet visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n /> -->\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <hr v-if=\"historyEnabled\" class=\"separator my-3\" />\n <FiltersHistory\n v-if=\"historyEnabled\"\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n @change=\"onHistoryLoad\"\n />\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import './src/styles/components/data-table/data-filters.scss_vue_type_style_index_0_src_true_lang.css';
2
- import "./admins-components77.js";
3
2
  import e from "./admins-components78.js";
4
3
  /* empty css */
5
4
  //#region src/components/data-table/DataFilters.vue
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components80.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\nexport { getFilterParams, getDefaultFilters, filterEmptyValues } from '@/utils/dataFilters'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport { debounce } from '@/utils/debounce'\nimport { filterEmptyValues, getFilterParams, writeFilterParams } from '@/utils/dataFilters'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean\n items: FilterItem[]\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n }>(),\n {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n },\n)\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getFilterParams(props.items) ?? {})\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) {\n filterRefs.value[key] = el\n } else {\n delete filterRefs.value[key]\n }\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nonMounted(() => {\n if (!props.handleUrl) return\n const fromUrl = getFilterParams(props.items)\n if (fromUrl && Object.keys(fromUrl).length > 0) {\n values.value = { ...values.value, ...fromUrl }\n }\n})\n\nfunction update(key: string, value: any) {\n values.value = { ...values.value, [key]: value }\n\n if (!props.lazy) {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n }\n}\n\nfunction buildResponseEmit() {\n const transformedValues = props.items.reduce((acc, item) => {\n const val = values.value[item.key]\n if (item.transformer) {\n return { ...acc, ...(item.transformer(val) ?? {}) }\n }\n return { ...acc, [item.key]: val }\n }, {})\n return {\n values: filterEmptyValues(values.value),\n transformed: filterEmptyValues(transformedValues),\n }\n}\n\nconst debouncedUpdate = debounce((key: string, value: any) => {\n update(key, value)\n})\n\nfunction confirm() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n emit('close')\n}\n\n/* function reset() {\n values.value = getDefaults()\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n} */\n\nfunction clearAll() {\n values.value = {}\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n}\n\nconst hasActiveFilters = ref(false)\nwatch(\n values,\n (v) => {\n hasActiveFilters.value = Object.values(v).some(\n (val) => val !== null && val !== '' && val !== undefined,\n )\n },\n { deep: true, immediate: true },\n)\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\nfunction focusFilter(key: string) {\n const ref = (filterRefs.value as Record<string, any>)[key]\n if (!ref) return\n\n if (typeof ref.focusAndOpen === 'function') {\n ref.focusAndOpen()\n return\n }\n if (typeof ref.focus === 'function') {\n ref.focus()\n }\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) {\n next[item.key] = loaded[item.key] ?? null\n }\n }\n values.value = next\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\ndefineExpose({ clearFilter, focusFilter })\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item.key, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else>\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n\n <input\n v-if=\"item.type === 'text'\"\n type=\"text\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLInputElement).value || null)\"\n v-bind=\"item.config\"\n />\n\n <textarea\n v-else-if=\"item.type === 'textarea'\"\n class=\"c-input-row data-filters__textarea\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLTextAreaElement).value || null)\"\n />\n\n <input\n v-else-if=\"item.type === 'number'\"\n type=\"number\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"\n debouncedUpdate(\n item.key,\n ($event.target as HTMLInputElement).value\n ? Number(($event.target as HTMLInputElement).value)\n : null,\n )\n \"\n />\n\n <DatePicker\n v-else-if=\"item.type === 'date' || item.type === 'datetime'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DateRangePicker\n v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DropdownSelect\n v-else-if=\"item.type === 'dropdown'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @update:model-value=\"update(item.key, $event)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <!-- <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Alaphelyzet visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n /> -->\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <hr v-if=\"historyEnabled\" class=\"separator my-3\" />\n <FiltersHistory\n v-if=\"historyEnabled\"\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n @change=\"onHistoryLoad\"\n />\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":""}
1
+ {"version":3,"file":"admins-components80.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport { debounce } from '@/utils/debounce'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getFilterParams, writeFilterParams } from '@/utils/dataFilters'\n\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean\n items: FilterItem[]\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n }>(),\n {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n },\n)\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getFilterParams(props.items) ?? {})\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) {\n filterRefs.value[key] = el\n } else {\n delete filterRefs.value[key]\n }\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nonMounted(() => {\n if (!props.handleUrl) return\n const fromUrl = getFilterParams(props.items)\n if (fromUrl && Object.keys(fromUrl).length > 0) {\n values.value = { ...values.value, ...fromUrl }\n }\n})\n\nfunction update(key: string, value: any) {\n values.value = { ...values.value, [key]: value }\n\n if (!props.lazy) {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n }\n}\n\nfunction buildResponseEmit() {\n const transformedValues = props.items.reduce((acc, item) => {\n const val = values.value[item.key]\n if (item.transformer) {\n return { ...acc, ...(item.transformer(val) ?? {}) }\n }\n return { ...acc, [item.key]: val }\n }, {})\n return {\n values: filterEmptyValues(values.value),\n transformed: filterEmptyValues(transformedValues),\n }\n}\n\nconst debouncedUpdate = debounce((key: string, value: any) => {\n update(key, value)\n})\n\nfunction confirm() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n emit('close')\n}\n\n/* function reset() {\n values.value = getDefaults()\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', filterEmptyValues(values.value))\n} */\n\nfunction clearAll() {\n values.value = {}\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n\n emit('change', buildResponseEmit())\n}\n\nconst hasActiveFilters = ref(false)\nwatch(\n values,\n (v) => {\n hasActiveFilters.value = Object.values(v).some(\n (val) => val !== null && val !== '' && val !== undefined,\n )\n },\n { deep: true, immediate: true },\n)\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\nfunction focusFilter(key: string) {\n const ref = (filterRefs.value as Record<string, any>)[key]\n if (!ref) return\n\n if (typeof ref.focusAndOpen === 'function') {\n ref.focusAndOpen()\n return\n }\n if (typeof ref.focus === 'function') {\n ref.focus()\n }\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) {\n next[item.key] = loaded[item.key] ?? null\n }\n }\n values.value = next\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponseEmit())\n}\n\ndefineExpose({ clearFilter, focusFilter })\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item.key, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else>\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n\n <input\n v-if=\"item.type === 'text'\"\n type=\"text\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLInputElement).value || null)\"\n v-bind=\"item.config\"\n />\n\n <textarea\n v-else-if=\"item.type === 'textarea'\"\n class=\"c-input-row data-filters__textarea\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"debouncedUpdate(item.key, ($event.target as HTMLTextAreaElement).value || null)\"\n />\n\n <input\n v-else-if=\"item.type === 'number'\"\n type=\"number\"\n class=\"c-input-row\"\n :placeholder=\"item.placeholder\"\n :value=\"values[item.key] ?? ''\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n v-bind=\"item.config\"\n @input=\"\n debouncedUpdate(\n item.key,\n ($event.target as HTMLInputElement).value\n ? Number(($event.target as HTMLInputElement).value)\n : null,\n )\n \"\n />\n\n <DatePicker\n v-else-if=\"item.type === 'date' || item.type === 'datetime'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DateRangePicker\n v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"update(item.key, $event)\"\n />\n\n <DropdownSelect\n v-else-if=\"item.type === 'dropdown'\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @update:model-value=\"update(item.key, $event)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <!-- <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Alaphelyzet visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n /> -->\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <hr v-if=\"historyEnabled\" class=\"separator my-3\" />\n <FiltersHistory\n v-if=\"historyEnabled\"\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n @change=\"onHistoryLoad\"\n />\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":""}
@@ -2,7 +2,6 @@ import e from "./admins-components6.js";
2
2
  import t from "./admins-components61.js";
3
3
  import n from "./admins-components64.js";
4
4
  import r from "./admins-components68.js";
5
- import "./admins-components69.js";
6
5
  import i from "./admins-components71.js";
7
6
  import { getFilterParams as a } from "./admins-components77.js";
8
7
  import o from "./admins-components80.js";
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components87.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n getFilterParams,\n type FilterItem,\n type FilterResponse,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst hasTextFilter = computed(() =>\n props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n)\n\nconst exactMatchFilterItem: FilterItem = {\n type: 'checkbox',\n key: 'exactMatch',\n label: 'Pontos egyezés',\n fullWidth: true,\n config: {\n labelAlignmentFix: true,\n },\n displayClass: 'highlight-chip',\n}\n\nfunction ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n if (!hasTextFilter.value) return items\n if (items.some((i) => i.key === 'exactMatch')) return items\n\n return [exactMatchFilterItem, ...items]\n}\n\nconst resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(resolvedFilters.value) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"resolvedFilters && resolvedFilters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"resolvedFilters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"resolvedFilters\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components87.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterItem,\n type FilterResponse,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport { getFilterParams } from '@/utils/dataFilters'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst hasTextFilter = computed(() =>\n props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n)\n\nconst exactMatchFilterItem: FilterItem = {\n type: 'checkbox',\n key: 'exactMatch',\n label: 'Pontos egyezés',\n fullWidth: true,\n config: {\n labelAlignmentFix: true,\n },\n displayClass: 'highlight-chip',\n}\n\nfunction ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n if (!hasTextFilter.value) return items\n if (items.some((i) => i.key === 'exactMatch')) return items\n\n return [exactMatchFilterItem, ...items]\n}\n\nconst resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(resolvedFilters.value) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"resolvedFilters && resolvedFilters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"resolvedFilters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"resolvedFilters\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":";;;;;;;;;;;qKAiBa,IAAmB;CAC9B,kBAAkB;CAClB,WAAW;CACX,gBAAgB;CAChB,SAAS;CACT,WAAW;AACb;;;;;;;;;;;;;;;;;;;;;;;EAyBA,IAAM,IAAiB,EAA6C,IAAI,GAElE,IAAQ,GAIR,IAAO,GAQP,IAAc,EAAI,EAAK,GACvB,IAAY,EAAI,EAAK,GACrB,IAAmB,EAA6B,IAAI,GACpD,IAAW,EAAI,EAAK,GACpB,IAAO,EAAwB,IAAI,GACnC,IAAc,EAAI,EAAK,GAEvB,IAAgB,QACpB,EAAM,SAAS,MAAM,MAAS,EAAK,SAAS,UAAU,EAAK,SAAS,UAAU,CAChF,GAEM,IAAmC;GACvC,MAAM;GACN,KAAK;GACL,OAAO;GACP,WAAW;GACX,QAAQ,EACN,mBAAmB,GACrB;GACA,cAAc;EAChB;EAEA,SAAS,EAAqB,GAAmC;GAI/D,OAHI,CAAC,EAAc,SACf,EAAM,MAAM,MAAM,EAAE,QAAQ,YAAY,IAAU,IAE/C,CAAC,GAAsB,GAAG,CAAK;EACxC;EAEA,IAAM,IAAkB,QAA6B,EAAqB,EAAM,WAAW,CAAC,CAAC,CAAC,GAExF,IAAgB,EACpB,EAAM,UAAW,EAAgB,EAAgB,KAAK,KAAK,CAAC,IAAK,CAAC,CACpE,GAEI,IAAwC;EAS5C,AAPA,QAAgB;GAId,AAHA,IAAiB,IAAI,gBAAgB,MAAY;IAC/C,EAAS,SAAS,EAAQ,IAAI,YAAY,SAAS,KAAK,EAAM;GAChE,CAAC,GACG,EAAK,SAAO,EAAe,QAAQ,EAAK,KAAK;EACnD,CAAC,GAED,QAAsB,GAAgB,WAAW,CAAC;EAElD,IAAM,IAAkB,QAAkC;GACxD,IAAM,IAAS,EAAiB,OAAO;GAEvC,OADI,MAAW,WAAW,MAAW,UAAgB,IAC9C,EAAS,QAAQ,UAAU;EACpC,CAAC,GAEK,IAAiB,QAA+B;GACpD,IAAI,CAAC,EAAiB,OAAO,OAAO,EAAM;GAC1C,IAAM,IAAQ,EAAiB,MAAM,aAC/B,IAAS,EAAM,OAAO,QAAQ,KAAK,OAAO;IAC9C,GAAG;IACH,SAAS,EAAiB,MAAO,QAAQ,EAAE,aAAa,EAAE,YAAY;GACxE,EAAE;GAQF,OAPI,GAAO,UACT,EAAO,MAAM,GAAG,MAAM;IACpB,IAAM,IAAK,EAAM,QAAQ,EAAE,QAAQ,GAC7B,IAAK,EAAM,QAAQ,EAAE,QAAQ;IACnC,QAAQ,MAAO,KAAK,MAAM,MAAO,MAAO,KAAK,MAAM;GACrD,CAAC,GAEI;IAAE,GAAG,EAAM;IAAQ,SAAS;GAAO;EAC5C,CAAC;EAED,SAAS,EAAiB,GAAqB;GAE7C,AADA,EAAiB,QAAQ,GACzB,EAAK,mBAAmB,CAAC;EAC3B;EAEA,EAAa;GACX,mBAAoB,EAAY,QAAQ;GACxC,oBAAqB,EAAY,QAAQ;GACzC,mBAAoB,EAAY,QAAQ;GACxC,oBAAqB,EAAY,QAAQ;EAC3C,CAAC;EAED,eAAe,EAAW,GAAa;GAErC,AADA,EAAY,QAAQ,IACpB,iBAAiB;IACf,EAAe,OAAO,YAAY,CAAG;GACvC,GAAG,GAAG;EACR;EAEA,SAAS,EAAe,GAA0B;GAEhD,AADA,EAAc,QAAQ,EAAS,QAC/B,EAAK,iBAAiB,EAAS,WAAW;EAC5C;EAEA,IAAM,IAAqB,QACnB,OAAO,OAAO,EAAc,KAAK,EAAE,QAAQ,MAAM,KAAK,QAAQ,MAAM,EAAE,EAAE,MAChF,GAEM,IAAgB,QACd,CAAC,CAAC,EAAM,eAAe,EAAM,MAAM,SAAS,KAAK,CAAC,EAAM,QAChE;yBAIE,EAyFM,OAzFN,GAyFM,CAxFJ,EAuFM,OAAA;YAvFG;GAAJ,KAAI;GAAO,OAAM;;GACJ,EAAA,SAAmB,EAAA,MAAgB,SAAM,KAAA,EAAA,GAAzD,EA6BW,GAAA,EAAA,KAAA,EAAA,GAAA,CA5BT,EAiBM,OAjBN,GAiBM,CAhBJ,EAOE,GAAA;IANA,OAAM;IACN,MAAK;IACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAW;IACnB,OAAA,EAAA,eAAA,IAAA;IACC,MAAM,EAAA,QAAkB,IAAA,SAAA;IACxB,WAAW,EAAA,QAAkB,IAAO,EAAA,QAAqB,KAAA;uCAE5D,EAOM,OAPN,GAOM,CANJ,EAKE,GAAA;IAJC,SAAS,EAAA;IACT,OAAO,EAAA;IACP,UAAM,AAAA,EAAA,QAAG,MAAgB,EAAA,OAAgB,YAAY,CAAG;IACxD,cAAY;0CAInB,EASE,GAAA;aARI;IAAJ,KAAI;IACH,MAAM,EAAA;IACN,OAAO,EAAA;IACR,MAAA;IACC,cAAY,EAAA;IACZ,eAAa,EAAA;IACb,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAW;IAClB,UAAQ;;;;;;;GAIb,EAiBM,OAjBN,GAiBM,CAhBJ,EAME,GAAA;IALA,OAAM;IACN,MAAK;IACL,OAAM;IACN,MAAK;IACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAW;OAErB,EAQE,GAAA;IAPA,OAAM;IACN,MAAK;IACL,iBAAc;IACd,OAAM;IACN,uBAAA;IACA,MAAK;IACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAS;;GAGrB,EAA8D,GAAA;IAA9C,MAAM,EAAA;IAAY,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAS;;GAE1C,EAAA,UAAe,WAAA,EAAA,GADvB,EASE,GAAA;;IAPC,QAAQ,EAAA;IACR,SAAS,EAAA;IACT,OAAO,EAAA;IACP,UAAU,EAAA,SAAoB,KAAA;IAC9B,gBAAa,AAAA,EAAA,QAAA,MAAE,EAAI,iBAAkB,CAAM;IAC3C,mBAAgB,AAAA,EAAA,QAAA,MAAE,EAAI,oBAAqB,CAAM;IACjD,cAAW,AAAA,EAAA,QAAA,MAAE,EAAI,eAAgB,CAAM;;;;;;eAG1C,EAOE,GAAA;;IALC,QAAQ,EAAA;IACR,SAAS,EAAA;IACT,OAAO,EAAA;IACP,UAAU,EAAA,SAAoB,KAAA;IAC9B,mBAAgB,AAAA,EAAA,QAAA,MAAE,EAAI,oBAAqB,CAAM;;;;;;;GAI5C,EAAA,cAAc,EAAA,SAAA,EAAA,GADtB,EAKE,GAAA;;IAHC,UAAU,EAAA;IACV,eAAa,EAAA;IACb,uBAAiB,AAAA,EAAA,SAAA,MAAE,EAAI,qBAAsB,CAAM;;GAGtD,EAQE,GAAA;IAPC,MAAM,EAAA;IACN,SAAS,EAAA,OAAO;IAChB,UAAU,EAAA,YAAQ,CAAA;IAClB,eAAa,EAAA;IACb,WAAW,EAAA;IACX,SAAK,AAAA,EAAA,SAAA,MAAE,EAAA,QAAW;IAClB,UAAQ"}
@@ -1,5 +1,4 @@
1
1
  import './src/styles/components/data-table/data-list.scss_vue_type_style_index_0_src_true_lang.css';
2
- import "./admins-components69.js";
3
2
  import e from "./admins-components87.js";
4
3
  /* empty css */
5
4
  //#region src/components/data-table/DataList.vue
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components89.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n getFilterParams,\n type FilterItem,\n type FilterResponse,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst hasTextFilter = computed(() =>\n props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n)\n\nconst exactMatchFilterItem: FilterItem = {\n type: 'checkbox',\n key: 'exactMatch',\n label: 'Pontos egyezés',\n fullWidth: true,\n config: {\n labelAlignmentFix: true,\n },\n displayClass: 'highlight-chip',\n}\n\nfunction ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n if (!hasTextFilter.value) return items\n if (items.some((i) => i.key === 'exactMatch')) return items\n\n return [exactMatchFilterItem, ...items]\n}\n\nconst resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(resolvedFilters.value) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"resolvedFilters && resolvedFilters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"resolvedFilters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"resolvedFilters\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
1
+ {"version":3,"file":"admins-components89.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n filters?: FilterItem[]\n historyEnabled?: boolean\n loading?: boolean\n handleUrl?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n historyEnabled: true,\n loading: false,\n handleUrl: false,\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterItem,\n type FilterResponse,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport { getFilterParams } from '@/utils/dataFilters'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n})\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst hasTextFilter = computed(() =>\n props.filters?.some((item) => item.type === 'text' || item.type === 'textarea'),\n)\n\nconst exactMatchFilterItem: FilterItem = {\n type: 'checkbox',\n key: 'exactMatch',\n label: 'Pontos egyezés',\n fullWidth: true,\n config: {\n labelAlignmentFix: true,\n },\n displayClass: 'highlight-chip',\n}\n\nfunction ensureExactMatchItem(items: FilterItem[]): FilterItem[] {\n if (!hasTextFilter.value) return items\n if (items.some((i) => i.key === 'exactMatch')) return items\n\n return [exactMatchFilterItem, ...items]\n}\n\nconst resolvedFilters = computed<FilterItem[]>(() => ensureExactMatchItem(props.filters ?? []))\n\nconst activeFilters = ref<Record<string, any>>(\n props.filters ? (getFilterParams(resolvedFilters.value) ?? {}) : {},\n)\n\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template v-if=\"resolvedFilters && resolvedFilters.length > 0\">\n <div class=\"flex-center gap-2 mb-3 wrap-on-small\">\n <Button\n label=\"Szűrők megnyitása\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div class=\"flex-center gap-1\">\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"resolvedFilters\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n :open=\"showFilters\"\n :items=\"resolvedFilters\"\n lazy\n :handle-url=\"handleUrl\"\n :storage-key=\"id\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <div class=\"c-data-list__toolbar\">\n <Button\n label=\"Beállítások\"\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n label=\"Súgó\"\n icon=\"fa-solid fa-question\"\n icon-position=\"right\"\n class=\"c-data-list__toolbar__item ml-auto\"\n label-alignment-fix\n size=\"small\"\n @click=\"showGuide = true\"\n />\n </div>\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
@@ -1,7 +1,6 @@
1
1
  import { SidebarPosition } from '../Sidebar.vue';
2
2
  import { FilterItemType } from '../../types/types';
3
3
  import { DropdownOption } from '../DropdownSelect.vue';
4
- export { getFilterParams, getDefaultFilters, filterEmptyValues } from '../../utils/dataFilters';
5
4
  export interface FilterItem {
6
5
  type: FilterItemType;
7
6
  key: string;
@@ -1,6 +1,5 @@
1
1
  import { DataListConfig, DataListSettings, PageSettings, PaginatorSettings, FilterValue } from '../../types/data-list';
2
2
  import { FilterItem } from './DataFilters.vue';
3
- export { getDefaultPaginator } from './DataPaginator.vue';
4
3
  export type { PaginatorSettings } from '../../types/data-list';
5
4
  export interface DataListProps {
6
5
  config: DataListConfig;
@@ -15,8 +15,9 @@ export { default as ImagePicker } from './components/custom/ImagePicker.vue';
15
15
  export { default as InternalArticleOffer } from './components/custom/InternalArticleOffer.vue';
16
16
  export { default as Loader } from './components/Loader.vue';
17
17
  export { default as ToastNotification } from './components/ToastNotification.vue';
18
- export { default as DataList, dataListDefaults, getDefaultPaginator, } from './components/data-table/DataList.vue';
19
- export { getFilterParams, getDefaultFilters, filterEmptyValues, } from './components/data-table/DataFilters.vue';
18
+ export { default as DataList, dataListDefaults } from './components/data-table/DataList.vue';
19
+ export { getDefaultPaginator } from './components/data-table/DataPaginator.vue';
20
+ export { getFilterParams, getDefaultFilters, filterEmptyValues, writeFilterParams, } from './utils/dataFilters';
20
21
  export { default as DataTable } from './components/data-table/DataTable.vue';
21
22
  export { default as DataCards } from './components/data-table/DataCards.vue';
22
23
  export { default as DataFilters } from './components/data-table/DataFilters.vue';
@@ -0,0 +1 @@
1
+ export declare const getCurrentSite: () => string | undefined;
@@ -0,0 +1,5 @@
1
+ import { FilterItem } from '../components/data-table/DataFilters.vue';
2
+ export declare function getFilterParams(items: FilterItem[]): Record<string, unknown> | null;
3
+ export declare function getDefaultFilters(items: FilterItem[]): Record<string, unknown>;
4
+ export declare function filterEmptyValues(filters: Record<string, any>): Record<string, any>;
5
+ export declare function writeFilterParams(items: FilterItem[], vals: Record<string, unknown>): void;
@@ -0,0 +1,6 @@
1
+ import { Column, Action, ActionGroup } from '../types/data-list';
2
+ import { DropdownMenuItem } from '../components/DropdownMenu.vue';
3
+ export declare function getColumnValue(item: Record<string, unknown>, col: Column | undefined): any;
4
+ export declare function isUuid(str: string): boolean;
5
+ export declare function isActionGroup(entry: Action | ActionGroup): entry is ActionGroup;
6
+ export declare function buildActionGroupMenuItems(group: ActionGroup, item: Record<string, unknown>): DropdownMenuItem[];
@@ -0,0 +1,24 @@
1
+ type Converter = (value: unknown, item?: unknown) => unknown;
2
+ export declare function utcToLocalString(time?: boolean, format?: string): Converter;
3
+ export declare function shortUuid(length?: number): Converter;
4
+ export declare function localToLocalString(format?: string): Converter;
5
+ export declare function textEllipse(max?: number, suffix?: string): Converter;
6
+ export declare function booleanToString(trueLabel?: string, falseLabel?: string, fallback?: string): Converter;
7
+ export declare function enumMap<T = unknown>(map: Record<string, T>, fallback?: T): Converter;
8
+ export declare function formatNumber(decimals?: number, locale?: string): Converter;
9
+ export declare function formatCurrency(currencyCode?: string, locale?: string, decimals?: number): Converter;
10
+ export declare function listToString(separator?: string): Converter;
11
+ export declare const identity: Converter;
12
+ export declare const dataListConverters: {
13
+ readonly utcToLocalString: typeof utcToLocalString;
14
+ readonly localToLocalString: typeof localToLocalString;
15
+ readonly shortUuid: typeof shortUuid;
16
+ readonly textEllipse: typeof textEllipse;
17
+ readonly booleanToString: typeof booleanToString;
18
+ readonly enumMap: typeof enumMap;
19
+ readonly formatNumber: typeof formatNumber;
20
+ readonly formatCurrency: typeof formatCurrency;
21
+ readonly listToString: typeof listToString;
22
+ readonly identity: Converter;
23
+ };
24
+ export {};
@@ -0,0 +1,10 @@
1
+ export declare function formatDate(date: Date, format: string): string;
2
+ export declare function parseDate(value: string, format: string): Date | null;
3
+ export declare function localToUTCString(date: Date, includeTime?: boolean): string;
4
+ export declare function castToDate(v: any): Date | null;
5
+ export declare function startOfDay(date: Date): Date;
6
+ export declare function endOfDay(date: Date): Date;
7
+ export declare function startOfWeek(date: Date): Date;
8
+ export declare function isSameCalendarDay(a: Date, b: Date): boolean;
9
+ export declare function laterOf(a: Date | null | undefined, b: Date | null | undefined): Date | null;
10
+ export declare function earlierOf(a: Date | null | undefined, b: Date | null | undefined): Date | null;
@@ -0,0 +1 @@
1
+ export declare function debounce<T extends (...args: any[]) => any>(fn: T, delay?: number): (...args: Parameters<T>) => void;
@@ -0,0 +1,3 @@
1
+ import { ControlSize } from '../types/types';
2
+ export declare function sizeToClass(size: ControlSize | undefined, prefix?: string): string;
3
+ export declare function typeToClass(type: string | undefined, prefix?: string): string;
@@ -0,0 +1,10 @@
1
+ import { FilterItem } from '../components/data-table/DataFilters.vue';
2
+ export declare function displayFilterValue(items: FilterItem[], key: string, value: any): string;
3
+ export declare function parseDropdownValue(value: any): unknown;
4
+ export interface FilterDisplayPart {
5
+ key: string;
6
+ text: string;
7
+ displayClass?: string;
8
+ }
9
+ export declare function buildFilterDisplay(items: FilterItem[], values: Record<string, any>): FilterDisplayPart[];
10
+ export declare function buildFilterValues(items: FilterItem[], values: Record<string, any>): string[];
@@ -0,0 +1 @@
1
+ export declare const isIpInUrl: (url: string) => boolean;
@@ -0,0 +1,3 @@
1
+ export declare function deepMerge(target: Record<string, any>, source: Record<string, any>): {
2
+ [x: string]: any;
3
+ };
@@ -0,0 +1,33 @@
1
+ import { PickedDate } from '../types/types';
2
+ export type PredefinedRangeKey = 'lastDay' | 'thisDay' | 'lastWeek' | 'thisWeek' | 'lastMonth' | 'thisMonth';
3
+ export interface PredefinedRange {
4
+ key: PredefinedRangeKey;
5
+ label: string;
6
+ }
7
+ export declare const predefinedRanges: PredefinedRange[];
8
+ export declare function computePredefinedRange(key: PredefinedRangeKey, now?: Date): {
9
+ from: Date;
10
+ to: Date;
11
+ };
12
+ export declare function applyPredefinedRange(key: PredefinedRangeKey, options: {
13
+ showTime: boolean;
14
+ now?: Date;
15
+ }): {
16
+ from: PickedDate;
17
+ to: PickedDate;
18
+ };
19
+ export declare function matchPredefinedRange(fromLocal: Date, toLocal: Date, options: {
20
+ showTime: boolean;
21
+ now?: Date;
22
+ }): PredefinedRangeKey | null;
23
+ export declare function isPredefinedRangeInBounds(key: PredefinedRangeKey, bounds: {
24
+ minDate?: Date | null;
25
+ maxDate?: Date | null;
26
+ showTime: boolean;
27
+ now?: Date;
28
+ }): boolean;
29
+ export declare function canStepInBounds(from: Date, to: Date, delta: number, bounds: {
30
+ minDate?: Date | null;
31
+ maxDate?: Date | null;
32
+ showTime: boolean;
33
+ }): boolean;
@@ -0,0 +1,4 @@
1
+ export declare function getUrlParam(key: string): string | null;
2
+ export declare function setUrlParam(key: string, value: string | number): void;
3
+ export declare function removeUrlParam(key?: string): void;
4
+ export declare function joinUrl(...parts: string[]): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "admins-components",
3
- "version": "9.0.21",
3
+ "version": "9.0.22",
4
4
  "type": "module",
5
5
  "module": "./dist/admins-components.js",
6
6
  "types": "./dist/index.d.ts",