admins-components 9.0.28 → 9.0.30

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.
@@ -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":";;;gEAiBa,IAAoB;CAC/B,YAAY,KAAA;CACZ,MAAM;CACN,UAAU;CACV,WAAW;CACX,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,EA2CM,OA3CN,GA2CM,CAzCI,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,EA8BM,OAAA,EA7BJ,OAAK,EAAA,CAAC,eAAa;sBACkB,EAAA,SAAI;sBAAyC,EAAA,SAAI;4BAA+C,EAAA;gBAMrI,EAWE,EAVK,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;GACpC;;;;;;;;;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
+ {"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":""}
@@ -55,7 +55,7 @@ var g = { class: "data-search-wrapper" }, _ = /* @__PURE__ */ d({
55
55
  "onUpdate:modelValue": C
56
56
  }, {
57
57
  label: h(() => [...r[0] ||= [l("span", { class: "data-search-label" }, [
58
- u(" Pontos"),
58
+ u("Pontos"),
59
59
  l("br"),
60
60
  u("egyezés ")
61
61
  ], -1)]]),
@@ -67,8 +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
- icon: "fa-solid fa-magnifying-glass",
71
- iconPosition: "right",
70
+ autocomplete: !1,
72
71
  "onUpdate:modelValue": w
73
72
  }, null, 8, ["model-value", "placeholder"])) : s("", !0)]));
74
73
  }
@@ -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,EAsBM,OAtBN,GAsBM,CApBI,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,EAUE,GAAA;;GARA,MAAK;GACL,WAAA;GACC,eAAa,EAAA;GACd,mBAAgB;GACf,aAAa,EAAA;GACd,MAAK;GACL,cAAa;GACZ,uBAAoB"}
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 @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,EAqBM,OArBN,GAqBM,CAnBI,EAAA,kBAAA,EAAA,GADR,EASW,GAAA;;GAPR,eAAa,EAAA;GACd,OAAM;GACL,uBAAoB;;GAEV,OAAK,QAC6C,CAAA,GAAA,AAAA,EAAA,OAAA,CAA3D,EAA2D,QAAA,EAArD,OAAM,oBAAmB,GAAA;MAAC,QAAM;IAAA,EAAM,IAAA;MAAA,UAAQ;;;uCAIhD,EAAA,cAAA,EAAA,GADR,EASE,GAAA;;GAPA,MAAK;GACL,WAAA;GACC,eAAa,EAAA;GACd,mBAAgB;GACf,aAAa,EAAA;GACb,cAAc;GACd,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 @update:model-value=\"onSearchChange\"\n />\n </div>\n</template>\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-search.scss\"></style>\n"],"mappings":""}
@@ -16,7 +16,9 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
16
16
  }, E = { class: "ml-auto mr-2" }, D = {
17
17
  layoutBreakpoint: 768,
18
18
  orderable: !0,
19
- loading: !1
19
+ loading: !1,
20
+ useSearch: !0,
21
+ useFilters: !0
20
22
  }, O = /* @__PURE__ */ g({
21
23
  __name: "DataList",
22
24
  props: /* @__PURE__ */ _({
@@ -29,6 +31,8 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
29
31
  pagination: {},
30
32
  loading: { type: Boolean },
31
33
  handleUrl: { type: Boolean },
34
+ useSearch: { type: Boolean },
35
+ useFilters: { type: Boolean },
32
36
  searchConfig: {},
33
37
  filterConfig: {}
34
38
  }, {
@@ -104,9 +108,9 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
104
108
  ref: R,
105
109
  class: "c-data-list"
106
110
  }, [
107
- m("template", null, [m("div", w, [
108
- g.searchConfig ? (x(), d(l, v({ key: 0 }, j.value, { onSearchChange: Y }), null, 16)) : f("", !0),
109
- k.filterConfig?.items && k.filterConfig.items.length > 0 ? (x(), d(e, {
111
+ m("div", w, [
112
+ g.useSearch ? (x(), d(l, v({ key: 0 }, j.value, { onSearchChange: Y }), null, 16)) : f("", !0),
113
+ g.useFilters && g.filterConfig?.items && g.filterConfig.items.length > 0 ? (x(), d(e, {
110
114
  key: 1,
111
115
  label: "Szűrők",
112
116
  icon: "fa-solid fa-filter",
@@ -115,9 +119,9 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
115
119
  type: q.value > 0 ? "info" : "normal",
116
120
  indicator: q.value > 0 ? q.value : void 0
117
121
  }, null, 8, ["type", "indicator"])) : f("", !0),
118
- k.filterConfig?.items && k.filterConfig.items.length > 0 ? (x(), p("div", T, [h(s, {
122
+ g.useFilters && g.filterConfig?.items && g.filterConfig.items.length > 0 ? (x(), p("div", T, [h(s, {
119
123
  filters: B.value,
120
- items: k.filterConfig.items,
124
+ items: g.filterConfig.items,
121
125
  onRemove: u[1] ||= (e) => O.value?.clearFilter(e),
122
126
  onOpenFilter: G
123
127
  }, null, 8, ["filters", "items"])])) : f("", !0),
@@ -128,7 +132,8 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
128
132
  icon: "fa-solid fa-question",
129
133
  onClick: u[3] ||= (e) => F.value = !0
130
134
  })])
131
- ]), k.filterConfig?.items && k.filterConfig.items.length > 0 ? (x(), d(o, v({
135
+ ]),
136
+ g.useFilters && g.filterConfig?.items && g.filterConfig.items.length > 0 ? (x(), d(o, v({
132
137
  key: 0,
133
138
  ref_key: "dataFiltersRef",
134
139
  ref: O
@@ -137,13 +142,13 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
137
142
  open: z.value,
138
143
  onClose: u[4] ||= (e) => z.value = !1,
139
144
  onChange: K
140
- }), null, 16, ["storage-key", "open"])) : f("", !0)]),
145
+ }), null, 16, ["storage-key", "open"])) : f("", !0),
141
146
  h(c, {
142
147
  open: F.value,
143
148
  onClose: u[5] ||= (e) => F.value = !1
144
149
  }, null, 8, ["open"]),
145
150
  H.value === "table" ? (x(), d(t, {
146
- key: 0,
151
+ key: 1,
147
152
  config: U.value,
148
153
  loading: g.loading,
149
154
  items: g.items,
@@ -157,7 +162,7 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
157
162
  "items",
158
163
  "settings"
159
164
  ])) : (x(), d(n, {
160
- key: 1,
165
+ key: 2,
161
166
  config: U.value,
162
167
  loading: g.loading,
163
168
  items: g.items,
@@ -170,7 +175,7 @@ var C = { class: "ac-component" }, w = { class: "flex-center gap-2 mb-2 wrap-on-
170
175
  "settings"
171
176
  ])),
172
177
  g.pagination && J.value ? (x(), d(i, {
173
- key: 2,
178
+ key: 3,
174
179
  settings: g.pagination,
175
180
  "storage-key": g.id,
176
181
  "onUpdate:pagination": u[10] ||= (e) => N("pagination-change", e)
@@ -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 useSearch?: boolean\n useFilters?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\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 <div class=\"flex-center gap-2 mb-2 wrap-on-small\">\n <DataSearch v-if=\"useSearch\" v-bind=\"mergedSearchConfig\" @search-change=\"searchChange\" />\n <Button\n v-if=\"useFilters && 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=\"useFilters && 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=\"useFilters && 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\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=\"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":""}
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 useSearch?: boolean\n useFilters?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\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 <div class=\"flex-center gap-2 mb-2 wrap-on-small\">\n <DataSearch v-if=\"useSearch\" v-bind=\"mergedSearchConfig\" @search-change=\"searchChange\" />\n <Button\n v-if=\"useFilters && 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=\"useFilters && 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=\"useFilters && 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\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>;
@@ -14,6 +14,8 @@ export interface DataListProps {
14
14
  pagination?: PaginatorSettings;
15
15
  loading?: boolean;
16
16
  handleUrl?: boolean;
17
+ useSearch?: boolean;
18
+ useFilters?: boolean;
17
19
  searchConfig?: DataSearchProps;
18
20
  filterConfig?: DataFiltersProps;
19
21
  }
@@ -21,6 +23,8 @@ export declare const dataListDefaults: {
21
23
  layoutBreakpoint: number;
22
24
  orderable: boolean;
23
25
  loading: boolean;
26
+ useSearch: boolean;
27
+ useFilters: boolean;
24
28
  };
25
29
  declare const _default: typeof __VLS_export;
26
30
  export default _default;
@@ -53,6 +57,8 @@ declare const __VLS_export: import('vue').DefineComponent<DataListProps, {
53
57
  loading: boolean;
54
58
  orderable: boolean;
55
59
  layoutBreakpoint: number;
60
+ useSearch: boolean;
61
+ useFilters: boolean;
56
62
  searchConfig: DataSearchProps;
57
63
  filterConfig: DataFiltersProps;
58
64
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "admins-components",
3
- "version": "9.0.28",
3
+ "version": "9.0.30",
4
4
  "type": "module",
5
5
  "module": "./dist/admins-components.js",
6
6
  "types": "./dist/index.d.ts",