admins-components 9.0.28 → 9.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admins-components16.js +5 -1
- package/dist/admins-components16.js.map +1 -1
- package/dist/admins-components17.js.map +1 -1
- package/dist/admins-components91.js +1 -0
- package/dist/admins-components91.js.map +1 -1
- package/dist/admins-components93.js.map +1 -1
- package/dist/admins-components94.js +4 -4
- package/dist/admins-components94.js.map +1 -1
- package/dist/admins-components96.js.map +1 -1
- package/dist/src/components/TextInput.vue.d.ts +2 -0
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@ var h = { class: "ac-component c-input-wrapper" }, g = ["for"], _ = {
|
|
|
6
6
|
type: "text",
|
|
7
7
|
disabled: !1,
|
|
8
8
|
clearable: !0,
|
|
9
|
+
autocomplete: !0,
|
|
9
10
|
labelOnBorder: void 0,
|
|
10
11
|
size: "normal"
|
|
11
12
|
}, v = /* @__PURE__ */ o({
|
|
@@ -18,6 +19,7 @@ var h = { class: "ac-component c-input-wrapper" }, g = ["for"], _ = {
|
|
|
18
19
|
placeholder: {},
|
|
19
20
|
disabled: { type: Boolean },
|
|
20
21
|
clearable: { type: Boolean },
|
|
22
|
+
autocomplete: { type: Boolean },
|
|
21
23
|
size: {},
|
|
22
24
|
id: {}
|
|
23
25
|
}, _),
|
|
@@ -64,6 +66,7 @@ var h = { class: "ac-component c-input-wrapper" }, g = ["for"], _ = {
|
|
|
64
66
|
placeholder: o.placeholder,
|
|
65
67
|
disabled: o.disabled,
|
|
66
68
|
inputmode: o.type === "number" ? "decimal" : void 0,
|
|
69
|
+
autocomplete: o.autocomplete ? "on" : "off",
|
|
67
70
|
onInput: w
|
|
68
71
|
}, null, 40, [
|
|
69
72
|
"id",
|
|
@@ -72,7 +75,8 @@ var h = { class: "ac-component c-input-wrapper" }, g = ["for"], _ = {
|
|
|
72
75
|
"value",
|
|
73
76
|
"placeholder",
|
|
74
77
|
"disabled",
|
|
75
|
-
"inputmode"
|
|
78
|
+
"inputmode",
|
|
79
|
+
"autocomplete"
|
|
76
80
|
])), o.clearable && !o.disabled ? (l(), i("button", {
|
|
77
81
|
key: 0,
|
|
78
82
|
type: "button",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components16.js","names":[],"sources":["../src/components/TextInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ControlSize } from '@/types/types'\nimport { debounce } from '@/utils/debounce'\n\nexport type TextInputType = 'text' | 'number' | 'textarea'\nexport interface TextInputProps {\n modelValue?: string | number | null\n type?: TextInputType\n label?: string\n labelOnBorder?: string\n placeholder?: string\n disabled?: boolean\n clearable?: boolean\n size?: ControlSize\n id?: string\n}\n\nexport const textInputDefaults = {\n modelValue: undefined,\n type: 'text',\n disabled: false,\n clearable: true,\n labelOnBorder: undefined,\n size: 'normal' as ControlSize,\n} as TextInputProps\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useId, watch } from 'vue'\n\nconst props = withDefaults(defineProps<TextInputProps>(), textInputDefaults)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null]\n}>()\n\nconst inputId = computed(() => props.id ?? `c-input-${useId()}`)\n\nconst localValue = ref<string | number | null | undefined>(props.modelValue)\n\nconst hasValue = computed(() => {\n const v = localValue.value\n return v !== null && v !== undefined && String(v) !== ''\n})\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (val === localValue.value) return\n localValue.value = val\n },\n)\n\nconst hasLabelOnBorder = computed(\n () => !!props.labelOnBorder && props.labelOnBorder.trim() !== '',\n)\n\nconst borderLabelVisible = computed(() => hasLabelOnBorder.value && hasValue.value || props.label )\n\nfunction onInput(e: Event) {\n const raw = (e.target as HTMLInputElement).value\n localValue.value = raw\n debouncedEmit(raw)\n}\n\nconst debouncedEmit = debounce((raw: string) => {\n emit(\n 'update:modelValue',\n props.type === 'number' ? (raw === '' ? null : Number(raw)) : raw,\n )\n})\n\nfunction clear() {\n const next = props.type === 'number' ? null : ''\n localValue.value = next\n emit('update:modelValue', next)\n}\n</script>\n\n<template>\n <div class=\"ac-component c-input-wrapper\">\n <label\n v-if=\"hasLabelOnBorder || label\"\n class=\"c-label pointer\"\n :class=\"{\n 'c-label--on-border': hasLabelOnBorder,\n 'hide': !borderLabelVisible,\n }\"\n :for=\"inputId\"\n >\n {{ hasLabelOnBorder ? labelOnBorder : label }}\n </label>\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': size === 'small',\n 'c-input-row--lg': size === 'large',\n 'c-input-row--disabled': disabled,\n }\"\n >\n <component\n :is=\"type === 'textarea' ? 'textarea' : 'input'\"\n :id=\"inputId\"\n :type=\"type\"\n class=\"c-input\"\n :class=\"{ 'c-textarea': type === 'textarea', 'c-input--disabled': disabled }\"\n :value=\"localValue == null ? '' : String(localValue)\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :inputmode=\"type === 'number' ? 'decimal' : undefined\"\n @input=\"onInput\"\n />\n <button\n v-if=\"clearable && !disabled\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n aria-label=\"Mező törlése\"\n @click=\"clear\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n </div>\n </div>\n</template>\n"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"admins-components16.js","names":[],"sources":["../src/components/TextInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ControlSize } from '@/types/types'\nimport { debounce } from '@/utils/debounce'\n\nexport type TextInputType = 'text' | 'number' | 'textarea'\nexport interface TextInputProps {\n modelValue?: string | number | null\n type?: TextInputType\n label?: string\n labelOnBorder?: string\n placeholder?: string\n disabled?: boolean\n clearable?: boolean\n autocomplete?: boolean\n size?: ControlSize\n id?: string\n}\n\nexport const textInputDefaults = {\n modelValue: undefined,\n type: 'text',\n disabled: false,\n clearable: true,\n autocomplete: true,\n labelOnBorder: undefined,\n size: 'normal' as ControlSize,\n} as TextInputProps\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useId, watch } from 'vue'\n\nconst props = withDefaults(defineProps<TextInputProps>(), textInputDefaults)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null]\n}>()\n\nconst inputId = computed(() => props.id ?? `c-input-${useId()}`)\n\nconst localValue = ref<string | number | null | undefined>(props.modelValue)\n\nconst hasValue = computed(() => {\n const v = localValue.value\n return v !== null && v !== undefined && String(v) !== ''\n})\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (val === localValue.value) return\n localValue.value = val\n },\n)\n\nconst hasLabelOnBorder = computed(\n () => !!props.labelOnBorder && props.labelOnBorder.trim() !== '',\n)\n\nconst borderLabelVisible = computed(() => hasLabelOnBorder.value && hasValue.value || props.label )\n\nfunction onInput(e: Event) {\n const raw = (e.target as HTMLInputElement).value\n localValue.value = raw\n debouncedEmit(raw)\n}\n\nconst debouncedEmit = debounce((raw: string) => {\n emit(\n 'update:modelValue',\n props.type === 'number' ? (raw === '' ? null : Number(raw)) : raw,\n )\n})\n\nfunction clear() {\n const next = props.type === 'number' ? null : ''\n localValue.value = next\n emit('update:modelValue', next)\n}\n</script>\n\n<template>\n <div class=\"ac-component c-input-wrapper\">\n <label\n v-if=\"hasLabelOnBorder || label\"\n class=\"c-label pointer\"\n :class=\"{\n 'c-label--on-border': hasLabelOnBorder,\n 'hide': !borderLabelVisible,\n }\"\n :for=\"inputId\"\n >\n {{ hasLabelOnBorder ? labelOnBorder : label }}\n </label>\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': size === 'small',\n 'c-input-row--lg': size === 'large',\n 'c-input-row--disabled': disabled,\n }\"\n >\n <component\n :is=\"type === 'textarea' ? 'textarea' : 'input'\"\n :id=\"inputId\"\n :type=\"type\"\n class=\"c-input\"\n :class=\"{ 'c-textarea': type === 'textarea', 'c-input--disabled': disabled }\"\n :value=\"localValue == null ? '' : String(localValue)\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :inputmode=\"type === 'number' ? 'decimal' : undefined\"\n :autocomplete=\"autocomplete ? 'on' : 'off'\"\n @input=\"onInput\"\n />\n <button\n v-if=\"clearable && !disabled\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n aria-label=\"Mező törlése\"\n @click=\"clear\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n </div>\n </div>\n</template>\n"],"mappings":";;;gEAkBa,IAAoB;CAC/B,YAAY,KAAA;CACZ,MAAM;CACN,UAAU;CACV,WAAW;CACX,cAAc;CACd,eAAe,KAAA;CACf,MAAM;AACR;;;;;;;;;;;;;;;;EAMA,IAAM,IAAQ,GAER,IAAO,GAIP,IAAU,QAAe,EAAM,MAAM,WAAW,EAAM,GAAG,GAEzD,IAAa,EAAwC,EAAM,UAAU,GAErE,IAAW,QAAe;GAC9B,IAAM,IAAI,EAAW;GACrB,OAAO,KAAM,QAA2B,OAAO,CAAC,MAAM;EACxD,CAAC;EAED,QACQ,EAAM,aACX,MAAQ;GACH,MAAQ,EAAW,UACvB,EAAW,QAAQ;EACrB,CACF;EAEA,IAAM,IAAmB,QACjB,CAAC,CAAC,EAAM,iBAAiB,EAAM,cAAc,KAAK,MAAM,EAChE,GAEM,IAAqB,QAAe,EAAiB,SAAS,EAAS,SAAS,EAAM,KAAM;EAElG,SAAS,EAAQ,GAAU;GACzB,IAAM,IAAO,EAAE,OAA4B;GAE3C,AADA,EAAW,QAAQ,GACnB,EAAc,CAAG;EACnB;EAEA,IAAM,IAAgB,GAAU,MAAgB;GAC9C,EACE,qBACA,EAAM,SAAS,WAAY,MAAQ,KAAK,OAAO,OAAO,CAAG,IAAK,CAChE;EACF,CAAC;EAED,SAAS,IAAQ;GACf,IAAM,IAAO,EAAM,SAAS,WAAW,OAAO;GAE9C,AADA,EAAW,QAAQ,GACnB,EAAK,qBAAqB,CAAI;EAChC;yBAIE,EA4CM,OA5CN,GA4CM,CA1CI,EAAA,SAAoB,EAAA,SAAA,EAAA,GAD5B,EAUQ,SAAA;;GARN,OAAK,EAAA,CAAC,mBAAiB;0BACiB,EAAA;WAAmC,EAAA;;GAI1E,KAAK,EAAA;OAEH,EAAA,QAAmB,EAAA,gBAAgB,EAAA,KAAK,GAAA,IAAA,CAAA,KAAA,EAAA,IAAA,EAAA,GAE7C,EA+BM,OAAA,EA9BJ,OAAK,EAAA,CAAC,eAAa;sBACkB,EAAA,SAAI;sBAAyC,EAAA,SAAI;4BAA+C,EAAA;gBAMrI,EAYE,EAXK,EAAA,SAAI,aAAA,aAAA,OAAA,GAAA;GACR,IAAI,EAAA;GACJ,MAAM,EAAA;GACP,OAAK,EAAA,CAAC,WAAS;IAAA,cACS,EAAA,SAAI;IAAA,qBAAsC,EAAA;GAAQ,CAAA,CAAA;GACzE,OAAO,EAAA,SAAU,OAAA,KAAgB,OAAO,EAAA,KAAU;GAClD,aAAa,EAAA;GACb,UAAU,EAAA;GACV,WAAW,EAAA,SAAI,WAAA,YAA4B,KAAA;GAC3C,cAAc,EAAA,eAAY,OAAA;GACnB;;;;;;;;;;OAGF,EAAA,aAAS,CAAK,EAAA,YAAA,EAAA,GADtB,EASS,UAAA;;GAPP,MAAK;GACL,OAAK,EAAA,CAAC,gCAA8B,EAAA,sBAAA,CACH,EAAA,MAAQ,CAAA,CAAA;GACzC,cAAW;GACV,SAAO;mBAER,EAAuC,KAAA,EAApC,OAAM,0BAAyB,GAAA,MAAA,EAAA,CAAA,CAAA,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components17.js","names":[],"sources":["../src/components/TextInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ControlSize } from '@/types/types'\nimport { debounce } from '@/utils/debounce'\n\nexport type TextInputType = 'text' | 'number' | 'textarea'\nexport interface TextInputProps {\n modelValue?: string | number | null\n type?: TextInputType\n label?: string\n labelOnBorder?: string\n placeholder?: string\n disabled?: boolean\n clearable?: boolean\n size?: ControlSize\n id?: string\n}\n\nexport const textInputDefaults = {\n modelValue: undefined,\n type: 'text',\n disabled: false,\n clearable: true,\n labelOnBorder: undefined,\n size: 'normal' as ControlSize,\n} as TextInputProps\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useId, watch } from 'vue'\n\nconst props = withDefaults(defineProps<TextInputProps>(), textInputDefaults)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null]\n}>()\n\nconst inputId = computed(() => props.id ?? `c-input-${useId()}`)\n\nconst localValue = ref<string | number | null | undefined>(props.modelValue)\n\nconst hasValue = computed(() => {\n const v = localValue.value\n return v !== null && v !== undefined && String(v) !== ''\n})\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (val === localValue.value) return\n localValue.value = val\n },\n)\n\nconst hasLabelOnBorder = computed(\n () => !!props.labelOnBorder && props.labelOnBorder.trim() !== '',\n)\n\nconst borderLabelVisible = computed(() => hasLabelOnBorder.value && hasValue.value || props.label )\n\nfunction onInput(e: Event) {\n const raw = (e.target as HTMLInputElement).value\n localValue.value = raw\n debouncedEmit(raw)\n}\n\nconst debouncedEmit = debounce((raw: string) => {\n emit(\n 'update:modelValue',\n props.type === 'number' ? (raw === '' ? null : Number(raw)) : raw,\n )\n})\n\nfunction clear() {\n const next = props.type === 'number' ? null : ''\n localValue.value = next\n emit('update:modelValue', next)\n}\n</script>\n\n<template>\n <div class=\"ac-component c-input-wrapper\">\n <label\n v-if=\"hasLabelOnBorder || label\"\n class=\"c-label pointer\"\n :class=\"{\n 'c-label--on-border': hasLabelOnBorder,\n 'hide': !borderLabelVisible,\n }\"\n :for=\"inputId\"\n >\n {{ hasLabelOnBorder ? labelOnBorder : label }}\n </label>\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': size === 'small',\n 'c-input-row--lg': size === 'large',\n 'c-input-row--disabled': disabled,\n }\"\n >\n <component\n :is=\"type === 'textarea' ? 'textarea' : 'input'\"\n :id=\"inputId\"\n :type=\"type\"\n class=\"c-input\"\n :class=\"{ 'c-textarea': type === 'textarea', 'c-input--disabled': disabled }\"\n :value=\"localValue == null ? '' : String(localValue)\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :inputmode=\"type === 'number' ? 'decimal' : undefined\"\n @input=\"onInput\"\n />\n <button\n v-if=\"clearable && !disabled\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n aria-label=\"Mező törlése\"\n @click=\"clear\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n </div>\n </div>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"admins-components17.js","names":[],"sources":["../src/components/TextInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ControlSize } from '@/types/types'\nimport { debounce } from '@/utils/debounce'\n\nexport type TextInputType = 'text' | 'number' | 'textarea'\nexport interface TextInputProps {\n modelValue?: string | number | null\n type?: TextInputType\n label?: string\n labelOnBorder?: string\n placeholder?: string\n disabled?: boolean\n clearable?: boolean\n autocomplete?: boolean\n size?: ControlSize\n id?: string\n}\n\nexport const textInputDefaults = {\n modelValue: undefined,\n type: 'text',\n disabled: false,\n clearable: true,\n autocomplete: true,\n labelOnBorder: undefined,\n size: 'normal' as ControlSize,\n} as TextInputProps\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useId, watch } from 'vue'\n\nconst props = withDefaults(defineProps<TextInputProps>(), textInputDefaults)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null]\n}>()\n\nconst inputId = computed(() => props.id ?? `c-input-${useId()}`)\n\nconst localValue = ref<string | number | null | undefined>(props.modelValue)\n\nconst hasValue = computed(() => {\n const v = localValue.value\n return v !== null && v !== undefined && String(v) !== ''\n})\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (val === localValue.value) return\n localValue.value = val\n },\n)\n\nconst hasLabelOnBorder = computed(\n () => !!props.labelOnBorder && props.labelOnBorder.trim() !== '',\n)\n\nconst borderLabelVisible = computed(() => hasLabelOnBorder.value && hasValue.value || props.label )\n\nfunction onInput(e: Event) {\n const raw = (e.target as HTMLInputElement).value\n localValue.value = raw\n debouncedEmit(raw)\n}\n\nconst debouncedEmit = debounce((raw: string) => {\n emit(\n 'update:modelValue',\n props.type === 'number' ? (raw === '' ? null : Number(raw)) : raw,\n )\n})\n\nfunction clear() {\n const next = props.type === 'number' ? null : ''\n localValue.value = next\n emit('update:modelValue', next)\n}\n</script>\n\n<template>\n <div class=\"ac-component c-input-wrapper\">\n <label\n v-if=\"hasLabelOnBorder || label\"\n class=\"c-label pointer\"\n :class=\"{\n 'c-label--on-border': hasLabelOnBorder,\n 'hide': !borderLabelVisible,\n }\"\n :for=\"inputId\"\n >\n {{ hasLabelOnBorder ? labelOnBorder : label }}\n </label>\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': size === 'small',\n 'c-input-row--lg': size === 'large',\n 'c-input-row--disabled': disabled,\n }\"\n >\n <component\n :is=\"type === 'textarea' ? 'textarea' : 'input'\"\n :id=\"inputId\"\n :type=\"type\"\n class=\"c-input\"\n :class=\"{ 'c-textarea': type === 'textarea', 'c-input--disabled': disabled }\"\n :value=\"localValue == null ? '' : String(localValue)\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :inputmode=\"type === 'number' ? 'decimal' : undefined\"\n :autocomplete=\"autocomplete ? 'on' : 'off'\"\n @input=\"onInput\"\n />\n <button\n v-if=\"clearable && !disabled\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n aria-label=\"Mező törlése\"\n @click=\"clear\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n </div>\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -67,6 +67,7 @@ var g = { class: "data-search-wrapper" }, _ = /* @__PURE__ */ d({
|
|
|
67
67
|
"model-value": b.value,
|
|
68
68
|
"label-on-border": "Keresés",
|
|
69
69
|
placeholder: d.placeholder,
|
|
70
|
+
autocomplete: !1,
|
|
70
71
|
icon: "fa-solid fa-magnifying-glass",
|
|
71
72
|
iconPosition: "right",
|
|
72
73
|
"onUpdate:modelValue": w
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components91.js","names":[],"sources":["../src/components/data-table/DataSearch.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface DataSearchProps {\n showExactMatch?: boolean\n showSearch?: boolean\n placeholder?: string\n handleUrl?: boolean\n searchKey?: string\n exactMatchKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport Checkbox from '@/components/Checkbox.vue'\nimport TextInput from '@/components/TextInput.vue'\nimport { debounce } from '@/utils/debounce'\nimport { getUrlParam, removeUrlParam, setUrlParam } from '@/utils/url'\nimport { onMounted, ref } from 'vue'\n\nconst props = withDefaults(\n defineProps<DataSearchProps>(),\n {\n showExactMatch: true,\n showSearch: true,\n placeholder: 'Keresés...',\n handleUrl: false,\n searchKey: 'search',\n exactMatchKey: 'exactMatch',\n },\n)\n\ntype SearchFilterPayload = { [k: string]: string | boolean }\n\nconst exactMatch = ref<boolean | undefined>(false)\nconst search = ref<string>('')\n\nconst emit = defineEmits<{\n 'search-change': [filters: SearchFilterPayload]\n}>()\n\nfunction emitChange() {\n const filters: SearchFilterPayload = {}\n if (props.showSearch) filters[props.searchKey] = search.value\n if (props.showExactMatch) filters[props.exactMatchKey] = exactMatch.value ?? false\n emit('search-change', filters)\n}\n\nfunction onCheckboxChange(value: boolean | undefined) {\n exactMatch.value = value\n emitChange()\n debouncedSyncToUrl()\n}\n\nfunction onSearchChange(value: string | number | null) {\n search.value = value == null ? '' : String(value)\n emitChange()\n debouncedSyncToUrl()\n}\n\nfunction readUrlOnMount() {\n const rawSearch = getUrlParam(props.searchKey)\n if (rawSearch && rawSearch !== '') search.value = rawSearch\n\n const rawExact = getUrlParam(props.exactMatchKey)\n if (rawExact === 'true' || rawExact === '1') exactMatch.value = true\n else if (rawExact === 'false' || rawExact === '0') exactMatch.value = false\n}\n\nfunction syncToUrl() {\n if (!props.handleUrl) return\n\n if (search.value === '') removeUrlParam(props.searchKey)\n else setUrlParam(props.searchKey, search.value)\n\n const exact = exactMatch.value ?? false\n if (!exact) removeUrlParam(props.exactMatchKey)\n else setUrlParam(props.exactMatchKey, 'true')\n}\n\nconst debouncedSyncToUrl = debounce(syncToUrl, 300)\n\nonMounted(() => {\n if (!props.handleUrl) return\n readUrlOnMount()\n\n emitChange()\n})\n</script>\n<template>\n <div class=\"data-search-wrapper\">\n <Checkbox\n v-if=\"showExactMatch\"\n :model-value=\"exactMatch\"\n class=\"gap-1\"\n @update:model-value=\"onCheckboxChange\"\n >\n <template #label>\n <span class=\"data-search-label\"> Pontos<br />egyezés </span>\n </template>\n </Checkbox>\n <TextInput\n v-if=\"showSearch\"\n type=\"text\"\n clearable\n :model-value=\"search\"\n label-on-border=\"Keresés\"\n :placeholder=\"placeholder\"\n icon=\"fa-solid fa-magnifying-glass\"\n iconPosition=\"right\"\n @update:model-value=\"onSearchChange\"\n />\n </div>\n</template>\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-search.scss\"></style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBA,IAAM,IAAQ,GAcR,IAAa,EAAyB,EAAK,GAC3C,IAAS,EAAY,EAAE,GAEvB,IAAO;EAIb,SAAS,IAAa;GACpB,IAAM,IAA+B,CAAC;GAGtC,AAFI,EAAM,eAAY,EAAQ,EAAM,aAAa,EAAO,QACpD,EAAM,mBAAgB,EAAQ,EAAM,iBAAiB,EAAW,SAAS,KAC7E,EAAK,iBAAiB,CAAO;EAC/B;EAEA,SAAS,EAAiB,GAA4B;GAGpD,AAFA,EAAW,QAAQ,GACnB,EAAW,GACX,EAAmB;EACrB;EAEA,SAAS,EAAe,GAA+B;GAGrD,AAFA,EAAO,QAAQ,KAAS,OAAO,KAAK,OAAO,CAAK,GAChD,EAAW,GACX,EAAmB;EACrB;EAEA,SAAS,IAAiB;GACxB,IAAM,IAAY,EAAY,EAAM,SAAS;GAC7C,AAAI,KAAa,MAAc,OAAI,EAAO,QAAQ;GAElD,IAAM,IAAW,EAAY,EAAM,aAAa;GAChD,AAAI,MAAa,UAAU,MAAa,MAAK,EAAW,QAAQ,MACvD,MAAa,WAAW,MAAa,SAAK,EAAW,QAAQ;EACxE;EAEA,SAAS,IAAY;GACd,EAAM,cAEP,EAAO,UAAU,KAAI,EAAe,EAAM,SAAS,IAClD,EAAY,EAAM,WAAW,EAAO,KAAK,GAEhC,EAAW,SAAS,KAE7B,EAAY,EAAM,eAAe,MAAM,IADhC,EAAe,EAAM,aAAa;EAEhD;EAEA,IAAM,IAAqB,EAAS,GAAW,GAAG;SAElD,QAAgB;GACT,EAAM,cACX,EAAe,GAEf,EAAW;EACb,CAAC,mBAGC,
|
|
1
|
+
{"version":3,"file":"admins-components91.js","names":[],"sources":["../src/components/data-table/DataSearch.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface DataSearchProps {\n showExactMatch?: boolean\n showSearch?: boolean\n placeholder?: string\n handleUrl?: boolean\n searchKey?: string\n exactMatchKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport Checkbox from '@/components/Checkbox.vue'\nimport TextInput from '@/components/TextInput.vue'\nimport { debounce } from '@/utils/debounce'\nimport { getUrlParam, removeUrlParam, setUrlParam } from '@/utils/url'\nimport { onMounted, ref } from 'vue'\n\nconst props = withDefaults(\n defineProps<DataSearchProps>(),\n {\n showExactMatch: true,\n showSearch: true,\n placeholder: 'Keresés...',\n handleUrl: false,\n searchKey: 'search',\n exactMatchKey: 'exactMatch',\n },\n)\n\ntype SearchFilterPayload = { [k: string]: string | boolean }\n\nconst exactMatch = ref<boolean | undefined>(false)\nconst search = ref<string>('')\n\nconst emit = defineEmits<{\n 'search-change': [filters: SearchFilterPayload]\n}>()\n\nfunction emitChange() {\n const filters: SearchFilterPayload = {}\n if (props.showSearch) filters[props.searchKey] = search.value\n if (props.showExactMatch) filters[props.exactMatchKey] = exactMatch.value ?? false\n emit('search-change', filters)\n}\n\nfunction onCheckboxChange(value: boolean | undefined) {\n exactMatch.value = value\n emitChange()\n debouncedSyncToUrl()\n}\n\nfunction onSearchChange(value: string | number | null) {\n search.value = value == null ? '' : String(value)\n emitChange()\n debouncedSyncToUrl()\n}\n\nfunction readUrlOnMount() {\n const rawSearch = getUrlParam(props.searchKey)\n if (rawSearch && rawSearch !== '') search.value = rawSearch\n\n const rawExact = getUrlParam(props.exactMatchKey)\n if (rawExact === 'true' || rawExact === '1') exactMatch.value = true\n else if (rawExact === 'false' || rawExact === '0') exactMatch.value = false\n}\n\nfunction syncToUrl() {\n if (!props.handleUrl) return\n\n if (search.value === '') removeUrlParam(props.searchKey)\n else setUrlParam(props.searchKey, search.value)\n\n const exact = exactMatch.value ?? false\n if (!exact) removeUrlParam(props.exactMatchKey)\n else setUrlParam(props.exactMatchKey, 'true')\n}\n\nconst debouncedSyncToUrl = debounce(syncToUrl, 300)\n\nonMounted(() => {\n if (!props.handleUrl) return\n readUrlOnMount()\n\n emitChange()\n})\n</script>\n<template>\n <div class=\"data-search-wrapper\">\n <Checkbox\n v-if=\"showExactMatch\"\n :model-value=\"exactMatch\"\n class=\"gap-1\"\n @update:model-value=\"onCheckboxChange\"\n >\n <template #label>\n <span class=\"data-search-label\"> Pontos<br />egyezés </span>\n </template>\n </Checkbox>\n <TextInput\n v-if=\"showSearch\"\n type=\"text\"\n clearable\n :model-value=\"search\"\n label-on-border=\"Keresés\"\n :placeholder=\"placeholder\"\n :autocomplete=\"false\"\n icon=\"fa-solid fa-magnifying-glass\"\n iconPosition=\"right\"\n @update:model-value=\"onSearchChange\"\n />\n </div>\n</template>\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-search.scss\"></style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBA,IAAM,IAAQ,GAcR,IAAa,EAAyB,EAAK,GAC3C,IAAS,EAAY,EAAE,GAEvB,IAAO;EAIb,SAAS,IAAa;GACpB,IAAM,IAA+B,CAAC;GAGtC,AAFI,EAAM,eAAY,EAAQ,EAAM,aAAa,EAAO,QACpD,EAAM,mBAAgB,EAAQ,EAAM,iBAAiB,EAAW,SAAS,KAC7E,EAAK,iBAAiB,CAAO;EAC/B;EAEA,SAAS,EAAiB,GAA4B;GAGpD,AAFA,EAAW,QAAQ,GACnB,EAAW,GACX,EAAmB;EACrB;EAEA,SAAS,EAAe,GAA+B;GAGrD,AAFA,EAAO,QAAQ,KAAS,OAAO,KAAK,OAAO,CAAK,GAChD,EAAW,GACX,EAAmB;EACrB;EAEA,SAAS,IAAiB;GACxB,IAAM,IAAY,EAAY,EAAM,SAAS;GAC7C,AAAI,KAAa,MAAc,OAAI,EAAO,QAAQ;GAElD,IAAM,IAAW,EAAY,EAAM,aAAa;GAChD,AAAI,MAAa,UAAU,MAAa,MAAK,EAAW,QAAQ,MACvD,MAAa,WAAW,MAAa,SAAK,EAAW,QAAQ;EACxE;EAEA,SAAS,IAAY;GACd,EAAM,cAEP,EAAO,UAAU,KAAI,EAAe,EAAM,SAAS,IAClD,EAAY,EAAM,WAAW,EAAO,KAAK,GAEhC,EAAW,SAAS,KAE7B,EAAY,EAAM,eAAe,MAAM,IADhC,EAAe,EAAM,aAAa;EAEhD;EAEA,IAAM,IAAqB,EAAS,GAAW,GAAG;SAElD,QAAgB;GACT,EAAM,cACX,EAAe,GAEf,EAAW;EACb,CAAC,mBAGC,EAuBM,OAvBN,GAuBM,CArBI,EAAA,kBAAA,EAAA,GADR,EASW,GAAA;;GAPR,eAAa,EAAA;GACd,OAAM;GACL,uBAAoB;;GAEV,OAAK,QAC8C,CAAA,GAAA,AAAA,EAAA,OAAA,CAA5D,EAA4D,QAAA,EAAtD,OAAM,oBAAmB,GAAA;MAAC,SAAO;IAAA,EAAM,IAAA;MAAA,UAAQ;;;uCAIjD,EAAA,cAAA,EAAA,GADR,EAWE,GAAA;;GATA,MAAK;GACL,WAAA;GACC,eAAa,EAAA;GACd,mBAAgB;GACf,aAAa,EAAA;GACb,cAAc;GACf,MAAK;GACL,cAAa;GACZ,uBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components93.js","names":[],"sources":["../src/components/data-table/DataSearch.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface DataSearchProps {\n showExactMatch?: boolean\n showSearch?: boolean\n placeholder?: string\n handleUrl?: boolean\n searchKey?: string\n exactMatchKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport Checkbox from '@/components/Checkbox.vue'\nimport TextInput from '@/components/TextInput.vue'\nimport { debounce } from '@/utils/debounce'\nimport { getUrlParam, removeUrlParam, setUrlParam } from '@/utils/url'\nimport { onMounted, ref } from 'vue'\n\nconst props = withDefaults(\n defineProps<DataSearchProps>(),\n {\n showExactMatch: true,\n showSearch: true,\n placeholder: 'Keresés...',\n handleUrl: false,\n searchKey: 'search',\n exactMatchKey: 'exactMatch',\n },\n)\n\ntype SearchFilterPayload = { [k: string]: string | boolean }\n\nconst exactMatch = ref<boolean | undefined>(false)\nconst search = ref<string>('')\n\nconst emit = defineEmits<{\n 'search-change': [filters: SearchFilterPayload]\n}>()\n\nfunction emitChange() {\n const filters: SearchFilterPayload = {}\n if (props.showSearch) filters[props.searchKey] = search.value\n if (props.showExactMatch) filters[props.exactMatchKey] = exactMatch.value ?? false\n emit('search-change', filters)\n}\n\nfunction onCheckboxChange(value: boolean | undefined) {\n exactMatch.value = value\n emitChange()\n debouncedSyncToUrl()\n}\n\nfunction onSearchChange(value: string | number | null) {\n search.value = value == null ? '' : String(value)\n emitChange()\n debouncedSyncToUrl()\n}\n\nfunction readUrlOnMount() {\n const rawSearch = getUrlParam(props.searchKey)\n if (rawSearch && rawSearch !== '') search.value = rawSearch\n\n const rawExact = getUrlParam(props.exactMatchKey)\n if (rawExact === 'true' || rawExact === '1') exactMatch.value = true\n else if (rawExact === 'false' || rawExact === '0') exactMatch.value = false\n}\n\nfunction syncToUrl() {\n if (!props.handleUrl) return\n\n if (search.value === '') removeUrlParam(props.searchKey)\n else setUrlParam(props.searchKey, search.value)\n\n const exact = exactMatch.value ?? false\n if (!exact) removeUrlParam(props.exactMatchKey)\n else setUrlParam(props.exactMatchKey, 'true')\n}\n\nconst debouncedSyncToUrl = debounce(syncToUrl, 300)\n\nonMounted(() => {\n if (!props.handleUrl) return\n readUrlOnMount()\n\n emitChange()\n})\n</script>\n<template>\n <div class=\"data-search-wrapper\">\n <Checkbox\n v-if=\"showExactMatch\"\n :model-value=\"exactMatch\"\n class=\"gap-1\"\n @update:model-value=\"onCheckboxChange\"\n >\n <template #label>\n <span class=\"data-search-label\"> Pontos<br />egyezés </span>\n </template>\n </Checkbox>\n <TextInput\n v-if=\"showSearch\"\n type=\"text\"\n clearable\n :model-value=\"search\"\n label-on-border=\"Keresés\"\n :placeholder=\"placeholder\"\n icon=\"fa-solid fa-magnifying-glass\"\n iconPosition=\"right\"\n @update:model-value=\"onSearchChange\"\n />\n </div>\n</template>\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-search.scss\"></style>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"admins-components93.js","names":[],"sources":["../src/components/data-table/DataSearch.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface DataSearchProps {\n showExactMatch?: boolean\n showSearch?: boolean\n placeholder?: string\n handleUrl?: boolean\n searchKey?: string\n exactMatchKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport Checkbox from '@/components/Checkbox.vue'\nimport TextInput from '@/components/TextInput.vue'\nimport { debounce } from '@/utils/debounce'\nimport { getUrlParam, removeUrlParam, setUrlParam } from '@/utils/url'\nimport { onMounted, ref } from 'vue'\n\nconst props = withDefaults(\n defineProps<DataSearchProps>(),\n {\n showExactMatch: true,\n showSearch: true,\n placeholder: 'Keresés...',\n handleUrl: false,\n searchKey: 'search',\n exactMatchKey: 'exactMatch',\n },\n)\n\ntype SearchFilterPayload = { [k: string]: string | boolean }\n\nconst exactMatch = ref<boolean | undefined>(false)\nconst search = ref<string>('')\n\nconst emit = defineEmits<{\n 'search-change': [filters: SearchFilterPayload]\n}>()\n\nfunction emitChange() {\n const filters: SearchFilterPayload = {}\n if (props.showSearch) filters[props.searchKey] = search.value\n if (props.showExactMatch) filters[props.exactMatchKey] = exactMatch.value ?? false\n emit('search-change', filters)\n}\n\nfunction onCheckboxChange(value: boolean | undefined) {\n exactMatch.value = value\n emitChange()\n debouncedSyncToUrl()\n}\n\nfunction onSearchChange(value: string | number | null) {\n search.value = value == null ? '' : String(value)\n emitChange()\n debouncedSyncToUrl()\n}\n\nfunction readUrlOnMount() {\n const rawSearch = getUrlParam(props.searchKey)\n if (rawSearch && rawSearch !== '') search.value = rawSearch\n\n const rawExact = getUrlParam(props.exactMatchKey)\n if (rawExact === 'true' || rawExact === '1') exactMatch.value = true\n else if (rawExact === 'false' || rawExact === '0') exactMatch.value = false\n}\n\nfunction syncToUrl() {\n if (!props.handleUrl) return\n\n if (search.value === '') removeUrlParam(props.searchKey)\n else setUrlParam(props.searchKey, search.value)\n\n const exact = exactMatch.value ?? false\n if (!exact) removeUrlParam(props.exactMatchKey)\n else setUrlParam(props.exactMatchKey, 'true')\n}\n\nconst debouncedSyncToUrl = debounce(syncToUrl, 300)\n\nonMounted(() => {\n if (!props.handleUrl) return\n readUrlOnMount()\n\n emitChange()\n})\n</script>\n<template>\n <div class=\"data-search-wrapper\">\n <Checkbox\n v-if=\"showExactMatch\"\n :model-value=\"exactMatch\"\n class=\"gap-1\"\n @update:model-value=\"onCheckboxChange\"\n >\n <template #label>\n <span class=\"data-search-label\"> Pontos<br />egyezés </span>\n </template>\n </Checkbox>\n <TextInput\n v-if=\"showSearch\"\n type=\"text\"\n clearable\n :model-value=\"search\"\n label-on-border=\"Keresés\"\n :placeholder=\"placeholder\"\n :autocomplete=\"false\"\n icon=\"fa-solid fa-magnifying-glass\"\n iconPosition=\"right\"\n @update:model-value=\"onSearchChange\"\n />\n </div>\n</template>\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-search.scss\"></style>\n"],"mappings":""}
|
|
@@ -106,7 +106,7 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
|
|
|
106
106
|
}, [
|
|
107
107
|
m("template", null, [m("div", w, [
|
|
108
108
|
g.searchConfig ? (x(), d(l, v({ key: 0 }, j.value, { onSearchChange: Y }), null, 16)) : f("", !0),
|
|
109
|
-
|
|
109
|
+
g.filterConfig?.items && g.filterConfig.items.length > 0 ? (x(), d(e, {
|
|
110
110
|
key: 1,
|
|
111
111
|
label: "Szűrők",
|
|
112
112
|
icon: "fa-solid fa-filter",
|
|
@@ -115,9 +115,9 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
|
|
|
115
115
|
type: q.value > 0 ? "info" : "normal",
|
|
116
116
|
indicator: q.value > 0 ? q.value : void 0
|
|
117
117
|
}, null, 8, ["type", "indicator"])) : f("", !0),
|
|
118
|
-
|
|
118
|
+
g.filterConfig?.items && g.filterConfig.items.length > 0 ? (x(), p("div", T, [h(s, {
|
|
119
119
|
filters: B.value,
|
|
120
|
-
items:
|
|
120
|
+
items: g.filterConfig.items,
|
|
121
121
|
onRemove: u[1] ||= (e) => O.value?.clearFilter(e),
|
|
122
122
|
onOpenFilter: G
|
|
123
123
|
}, null, 8, ["filters", "items"])])) : f("", !0),
|
|
@@ -128,7 +128,7 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
|
|
|
128
128
|
icon: "fa-solid fa-question",
|
|
129
129
|
onClick: u[3] ||= (e) => F.value = !0
|
|
130
130
|
})])
|
|
131
|
-
]),
|
|
131
|
+
]), g.filterConfig?.items && g.filterConfig.items.length > 0 ? (x(), d(o, v({
|
|
132
132
|
key: 0,
|
|
133
133
|
ref_key: "dataFiltersRef",
|
|
134
134
|
ref: O
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components94.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\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 loading?: boolean\n handleUrl?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: 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 FilterResponse,\n type DataFiltersProps,\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'\nimport DataSearch, { type DataSearchProps } from './DataSearch.vue'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\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 'search-change': [filters: Record<string, string | boolean>]\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 activeFilters = ref<Record<string, any>>(\n props.filterConfig?.items ? (getFilterParams(props.filterConfig.items) ?? {}) : {},\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\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template>\n <div class=\"flex-center gap-2 mb-2 wrap-on-small\">\n <DataSearch\n v-if=\"searchConfig\"\n v-bind=\"mergedSearchConfig\"\n @search-change=\"searchChange\"\n />\n <Button\n v-if=\"props.filterConfig?.items && props.filterConfig.items.length > 0\"\n label=\"Szűrők\"\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\n class=\"flex-center gap-1\"\n v-if=\"props.filterConfig?.items && props.filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"props.filterConfig.items\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"ml-auto mr-2\">\n <Button icon=\"fa-solid fa-gear\" @click=\"showOptions = true\" />\n <Button icon=\"fa-solid fa-question\" @click=\"showGuide = true\" />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n v-if=\"props.filterConfig?.items && props.filterConfig.items.length > 0\"\n v-bind=\"mergedFilterConfig\"\n :storage-key=\"id\"\n :open=\"showFilters\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <!-- <div class=\"c-data-list__toolbar\">\n <Button\n\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n\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-components94.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\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 loading?: boolean\n handleUrl?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: 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 FilterResponse,\n type DataFiltersProps,\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'\nimport DataSearch, { type DataSearchProps } from './DataSearch.vue'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\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 'search-change': [filters: Record<string, string | boolean>]\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 activeFilters = ref<Record<string, any>>(\n props.filterConfig?.items ? (getFilterParams(props.filterConfig.items) ?? {}) : {},\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\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template>\n <div class=\"flex-center gap-2 mb-2 wrap-on-small\">\n <DataSearch\n v-if=\"searchConfig\"\n v-bind=\"mergedSearchConfig\"\n @search-change=\"searchChange\"\n />\n <Button\n v-if=\"filterConfig?.items && filterConfig.items.length > 0\"\n label=\"Szűrők\"\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\n class=\"flex-center gap-1\"\n v-if=\"filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"ml-auto mr-2\">\n <Button icon=\"fa-solid fa-gear\" @click=\"showOptions = true\" />\n <Button icon=\"fa-solid fa-question\" @click=\"showGuide = true\" />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n v-if=\"filterConfig?.items && filterConfig.items.length > 0\"\n v-bind=\"mergedFilterConfig\"\n :storage-key=\"id\"\n :open=\"showFilters\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <!-- <div class=\"c-data-list__toolbar\">\n <Button\n\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components96.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\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 loading?: boolean\n handleUrl?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: 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 FilterResponse,\n type DataFiltersProps,\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'\nimport DataSearch, { type DataSearchProps } from './DataSearch.vue'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\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 'search-change': [filters: Record<string, string | boolean>]\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 activeFilters = ref<Record<string, any>>(\n props.filterConfig?.items ? (getFilterParams(props.filterConfig.items) ?? {}) : {},\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\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template>\n <div class=\"flex-center gap-2 mb-2 wrap-on-small\">\n <DataSearch\n v-if=\"searchConfig\"\n v-bind=\"mergedSearchConfig\"\n @search-change=\"searchChange\"\n />\n <Button\n v-if=\"
|
|
1
|
+
{"version":3,"file":"admins-components96.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\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 loading?: boolean\n handleUrl?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: 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 FilterResponse,\n type DataFiltersProps,\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'\nimport DataSearch, { type DataSearchProps } from './DataSearch.vue'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\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 'search-change': [filters: Record<string, string | boolean>]\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 activeFilters = ref<Record<string, any>>(\n props.filterConfig?.items ? (getFilterParams(props.filterConfig.items) ?? {}) : {},\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\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <template>\n <div class=\"flex-center gap-2 mb-2 wrap-on-small\">\n <DataSearch\n v-if=\"searchConfig\"\n v-bind=\"mergedSearchConfig\"\n @search-change=\"searchChange\"\n />\n <Button\n v-if=\"filterConfig?.items && filterConfig.items.length > 0\"\n label=\"Szűrők\"\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\n class=\"flex-center gap-1\"\n v-if=\"filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"ml-auto mr-2\">\n <Button icon=\"fa-solid fa-gear\" @click=\"showOptions = true\" />\n <Button icon=\"fa-solid fa-question\" @click=\"showGuide = true\" />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n v-if=\"filterConfig?.items && filterConfig.items.length > 0\"\n v-bind=\"mergedFilterConfig\"\n :storage-key=\"id\"\n :open=\"showFilters\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n </template>\n\n <!-- <div class=\"c-data-list__toolbar\">\n <Button\n\n icon=\"fa-solid fa-gear\"\n class=\"c-data-list__toolbar__item\"\n size=\"small\"\n @click=\"showOptions = true\"\n />\n <Button\n\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":""}
|
|
@@ -8,6 +8,7 @@ export interface TextInputProps {
|
|
|
8
8
|
placeholder?: string;
|
|
9
9
|
disabled?: boolean;
|
|
10
10
|
clearable?: boolean;
|
|
11
|
+
autocomplete?: boolean;
|
|
11
12
|
size?: ControlSize;
|
|
12
13
|
id?: string;
|
|
13
14
|
}
|
|
@@ -28,4 +29,5 @@ declare const __VLS_export: import('vue').DefineComponent<TextInputProps, {}, {}
|
|
|
28
29
|
id: string;
|
|
29
30
|
labelOnBorder: string;
|
|
30
31
|
clearable: boolean;
|
|
32
|
+
autocomplete: boolean;
|
|
31
33
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|