admins-components 9.0.76 → 9.0.78

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.
Files changed (57) hide show
  1. package/dist/admins-components100.js.map +1 -1
  2. package/dist/admins-components102.js.map +1 -1
  3. package/dist/admins-components103.js.map +1 -1
  4. package/dist/admins-components105.js.map +1 -1
  5. package/dist/admins-components109.js.map +1 -1
  6. package/dist/admins-components11.js.map +1 -1
  7. package/dist/admins-components112.js.map +1 -1
  8. package/dist/admins-components12.js +44 -29
  9. package/dist/admins-components12.js.map +1 -1
  10. package/dist/admins-components13.js.map +1 -1
  11. package/dist/admins-components14.js.map +1 -1
  12. package/dist/admins-components169.js.map +1 -1
  13. package/dist/admins-components173.js +2 -2
  14. package/dist/admins-components173.js.map +1 -1
  15. package/dist/admins-components174.js.map +1 -1
  16. package/dist/admins-components179.js.map +1 -1
  17. package/dist/admins-components21.js.map +1 -1
  18. package/dist/admins-components22.js.map +1 -1
  19. package/dist/admins-components26.js +88 -82
  20. package/dist/admins-components26.js.map +1 -1
  21. package/dist/admins-components28.js.map +1 -1
  22. package/dist/admins-components31.js.map +1 -1
  23. package/dist/admins-components35.js +25 -23
  24. package/dist/admins-components35.js.map +1 -1
  25. package/dist/admins-components37.js.map +1 -1
  26. package/dist/admins-components46.js.map +1 -1
  27. package/dist/admins-components48.js.map +1 -1
  28. package/dist/admins-components54.js.map +1 -1
  29. package/dist/admins-components56.js.map +1 -1
  30. package/dist/admins-components65.js.map +1 -1
  31. package/dist/admins-components68.js.map +1 -1
  32. package/dist/admins-components70.js.map +1 -1
  33. package/dist/admins-components75.js.map +1 -1
  34. package/dist/admins-components77.js.map +1 -1
  35. package/dist/admins-components79.js.map +1 -1
  36. package/dist/admins-components8.js.map +1 -1
  37. package/dist/admins-components80.js.map +1 -1
  38. package/dist/admins-components82.js.map +1 -1
  39. package/dist/admins-components83.js.map +1 -1
  40. package/dist/admins-components85.js.map +1 -1
  41. package/dist/admins-components86.js.map +1 -1
  42. package/dist/admins-components87.js.map +1 -1
  43. package/dist/admins-components91.js.map +1 -1
  44. package/dist/admins-components93.js.map +1 -1
  45. package/dist/main.css +1 -1
  46. package/dist/main.css.map +1 -1
  47. package/dist/src/components/HeaderComponent.vue.d.ts +3 -0
  48. package/dist/src/composables/useDropdownAnchor.d.ts +2 -0
  49. package/dist/src/composables/useSwipeToClose.d.ts +0 -31
  50. package/dist/src/utils/dataFilters.d.ts +0 -8
  51. package/dist/src/utils/dataListConverters.d.ts +0 -10
  52. package/dist/src/utils/url.d.ts +0 -11
  53. package/dist/styles/components/dropdown-select.scss_vue_type_style_index_0_src_true_lang.css +1 -1
  54. package/dist/styles/components/header.scss_vue_type_style_index_0_src_true_lang.css +1 -1
  55. package/dist/vueformelements/ArticlePickerElement.vue_vue_type_style_index_0_scoped_54217a66_lang.css +1 -0
  56. package/package.json +1 -1
  57. package/dist/vueformelements/ArticlePickerElement.vue_vue_type_style_index_0_scoped_43c54caa_lang.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components14.js","names":[],"sources":["../src/components/DatePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PickedDate } from '@/types/types'\nimport { datePickerConfigDefaults, type DatePickerConfig } from '@/types/datepickers'\n\nexport { datePickerConfigDefaults, type DatePickerConfig, type PickedDate }\n\nexport interface DatePickerProps {\n modelValue?: PickedDate | null\n config: DatePickerConfig\n id?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick, useId } from 'vue'\nimport Calendar from '@/components/Calendar.vue'\nimport { formatDate, parseDate, localToUTCString, castToDate } from '@/utils/date'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\n\nconst props = withDefaults(defineProps<DatePickerProps>(), {\n modelValue: null,\n config: () => ({\n ...datePickerConfigDefaults,\n }),\n id: () => `dp-input-${useId()}`,\n})\n\nconst innerConfig = computed(() => ({\n ...datePickerConfigDefaults,\n ...props.config,\n}))\n\nconst emit = defineEmits<{ 'update:modelValue': [value: PickedDate | null] }>()\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef)\nconst inputRef = ref<HTMLInputElement | null>(null)\nconst DIGITS = 'YMDHms'\nconst format = computed(\n () =>\n innerConfig.value.format ?? (innerConfig.value.showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'),\n)\n\nconst inputValue = ref(\n castToDate(props.modelValue?.local ?? props.modelValue?.utc)\n ? formatDate(castToDate(props.modelValue?.local ?? props.modelValue?.utc)!, format.value)\n : '',\n)\nwatch(\n () => props.modelValue,\n (v) => {\n const d = castToDate(v?.local ?? v?.utc)\n inputValue.value = d ? formatDate(d, format.value) : ''\n },\n)\n\nfunction mask(digits: string): string {\n let r = '',\n di = 0\n for (let i = 0; i < format.value.length && di < digits.length; i++)\n r += DIGITS.includes(format.value[i]!) ? digits[di++] : format.value[i]\n return r\n}\n\nfunction fill(partial: string): string {\n let r = partial\n for (let i = r.length; i < format.value.length; i++)\n r += DIGITS.includes(format.value[i]!) ? '0' : format.value[i]\n return r\n}\n\nfunction valid(val: string): boolean {\n if (val.length !== format.value.length) return false\n for (let i = 0; i < format.value.length; i++) {\n if (DIGITS.includes(format.value[i]!)) {\n if (!/\\d/.test(val[i]!)) return false\n } else if (val[i] !== format.value[i]) return false\n }\n return true\n}\n\nfunction emitParsed(val: string | null) {\n if (!val) {\n inputValue.value = ''\n emit('update:modelValue', null)\n return\n }\n inputValue.value = val\n const local = parseDate(val, format.value)\n emit(\n 'update:modelValue',\n local ? { local, utc: localToUTCString(local, innerConfig.value.showTime) } : null,\n )\n}\n\n// Input handling\nfunction onInput(e: Event) {\n const el = e.target as HTMLInputElement\n const cursor = el.selectionStart ?? 0\n const raw = el.value.replace(/\\D/g, '')\n isOpen.value = false\n\n if (!raw) {\n emitParsed(null)\n el.value = ''\n return\n }\n\n let masked = mask(raw)\n if (masked.length < format.value.length && !DIGITS.includes(format.value[masked.length]!))\n masked += format.value[masked.length]\n\n // Auto-fill time zeros when date portion is complete\n if (\n innerConfig.value.showTime &&\n masked.length >= 10 &&\n masked.length < format.value.length &&\n masked.replace(/\\D/g, '').length <= 8\n ) {\n const filled = fill(masked)\n el.value = filled\n inputValue.value = filled\n const pos = Math.min(cursor, masked.length)\n nextTick(() => el.setSelectionRange(pos, pos))\n if (valid(filled)) emitParsed(filled)\n return\n }\n\n el.value = masked\n inputValue.value = masked\n let pos = Math.min(cursor, masked.length)\n while (pos < masked.length && !DIGITS.includes(format.value[pos]!)) pos++\n nextTick(() => el.setSelectionRange(pos, pos))\n if (valid(masked)) emitParsed(masked)\n}\n\nfunction onBlur() {\n if (inputValue.value && !valid(inputValue.value))\n inputValue.value = props.modelValue?.local\n ? formatDate(props.modelValue.local, format.value)\n : ''\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.ctrlKey || e.metaKey) return\n if (\n !['Backspace', 'Delete', 'Tab', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key) &&\n !/^\\d$/.test(e.key)\n )\n e.preventDefault()\n}\n\nfunction onCalendarUpdate(val: string | null) {\n emitParsed(val)\n if (!innerConfig.value.showTime) isOpen.value = false\n}\n\nfunction focusAndOpen() {\n isOpen.value = true\n nextTick(() => inputRef.value?.focus())\n}\n\ndefineExpose({ focusAndOpen })\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"wrapperRef\" class=\"drp-wrapper\">\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': innerConfig.size === 'small',\n 'c-input-row--lg': innerConfig.size === 'large',\n }\"\n >\n <input\n ref=\"inputRef\"\n type=\"text\"\n :id=\"id\"\n class=\"c-input dp-input pr-0\"\n inputmode=\"numeric\"\n :value=\"inputValue\"\n :placeholder=\"innerConfig.placeholder\"\n :maxlength=\"format.length\"\n @input=\"onInput\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n />\n <button\n type=\"button\"\n class=\"c-icon-btn dp-clear c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !inputValue }\"\n @click=\"emitParsed(null)\"\n aria-label=\"Törlés\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <button\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--calendar\"\n @click=\"isOpen = !isOpen\"\n aria-label=\"Naptár megnyitása\"\n >\n <i class=\"fa-regular fa-fw fa-calendar\"></i>\n </button>\n </div>\n <Teleport to=\"body\">\n <div v-if=\"isOpen\" ref=\"dropdownRef\" class=\"c-dropdown ac-component\" :style=\"dropdownStyle\">\n <Calendar\n :model-value=\"inputValue || null\"\n :config=\"innerConfig\"\n @update:model-value=\"onCalendarUpdate\"\n @confirm=\"isOpen = false\"\n />\n </div>\n </Teleport>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"admins-components14.js","names":[],"sources":["../src/components/DatePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PickedDate } from '@/types/types'\nimport { datePickerConfigDefaults, type DatePickerConfig } from '@/types/datepickers'\n\nexport { datePickerConfigDefaults, type DatePickerConfig, type PickedDate }\n\nexport interface DatePickerProps {\n modelValue?: PickedDate | null\n config: DatePickerConfig\n id?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick, useId } from 'vue'\nimport Calendar from '@/components/Calendar.vue'\nimport { formatDate, parseDate, localToUTCString, castToDate } from '@/utils/date'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\n\nconst props = withDefaults(defineProps<DatePickerProps>(), {\n modelValue: null,\n config: () => ({\n ...datePickerConfigDefaults,\n }),\n id: () => `dp-input-${useId()}`,\n})\n\nconst innerConfig = computed(() => ({\n ...datePickerConfigDefaults,\n ...props.config,\n}))\n\nconst emit = defineEmits<{ 'update:modelValue': [value: PickedDate | null] }>()\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef)\nconst inputRef = ref<HTMLInputElement | null>(null)\nconst DIGITS = 'YMDHms'\nconst format = computed(\n () =>\n innerConfig.value.format ?? (innerConfig.value.showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'),\n)\n\nconst inputValue = ref(\n castToDate(props.modelValue?.local ?? props.modelValue?.utc)\n ? formatDate(castToDate(props.modelValue?.local ?? props.modelValue?.utc)!, format.value)\n : '',\n)\nwatch(\n () => props.modelValue,\n (v) => {\n const d = castToDate(v?.local ?? v?.utc)\n inputValue.value = d ? formatDate(d, format.value) : ''\n },\n)\n\nfunction mask(digits: string): string {\n let r = '',\n di = 0\n for (let i = 0; i < format.value.length && di < digits.length; i++)\n r += DIGITS.includes(format.value[i]!) ? digits[di++] : format.value[i]\n return r\n}\n\nfunction fill(partial: string): string {\n let r = partial\n for (let i = r.length; i < format.value.length; i++)\n r += DIGITS.includes(format.value[i]!) ? '0' : format.value[i]\n return r\n}\n\nfunction valid(val: string): boolean {\n if (val.length !== format.value.length) return false\n for (let i = 0; i < format.value.length; i++) {\n if (DIGITS.includes(format.value[i]!)) {\n if (!/\\d/.test(val[i]!)) return false\n } else if (val[i] !== format.value[i]) return false\n }\n return true\n}\n\nfunction emitParsed(val: string | null) {\n if (!val) {\n inputValue.value = ''\n emit('update:modelValue', null)\n return\n }\n inputValue.value = val\n const local = parseDate(val, format.value)\n emit(\n 'update:modelValue',\n local ? { local, utc: localToUTCString(local, innerConfig.value.showTime) } : null,\n )\n}\n\nfunction onInput(e: Event) {\n const el = e.target as HTMLInputElement\n const cursor = el.selectionStart ?? 0\n const raw = el.value.replace(/\\D/g, '')\n isOpen.value = false\n\n if (!raw) {\n emitParsed(null)\n el.value = ''\n return\n }\n\n let masked = mask(raw)\n if (masked.length < format.value.length && !DIGITS.includes(format.value[masked.length]!))\n masked += format.value[masked.length]\n\n if (\n innerConfig.value.showTime &&\n masked.length >= 10 &&\n masked.length < format.value.length &&\n masked.replace(/\\D/g, '').length <= 8\n ) {\n const filled = fill(masked)\n el.value = filled\n inputValue.value = filled\n const pos = Math.min(cursor, masked.length)\n nextTick(() => el.setSelectionRange(pos, pos))\n if (valid(filled)) emitParsed(filled)\n return\n }\n\n el.value = masked\n inputValue.value = masked\n let pos = Math.min(cursor, masked.length)\n while (pos < masked.length && !DIGITS.includes(format.value[pos]!)) pos++\n nextTick(() => el.setSelectionRange(pos, pos))\n if (valid(masked)) emitParsed(masked)\n}\n\nfunction onBlur() {\n if (inputValue.value && !valid(inputValue.value))\n inputValue.value = props.modelValue?.local\n ? formatDate(props.modelValue.local, format.value)\n : ''\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.ctrlKey || e.metaKey) return\n if (\n !['Backspace', 'Delete', 'Tab', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key) &&\n !/^\\d$/.test(e.key)\n )\n e.preventDefault()\n}\n\nfunction onCalendarUpdate(val: string | null) {\n emitParsed(val)\n if (!innerConfig.value.showTime) isOpen.value = false\n}\n\nfunction focusAndOpen() {\n isOpen.value = true\n nextTick(() => inputRef.value?.focus())\n}\n\ndefineExpose({ focusAndOpen })\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"wrapperRef\" class=\"drp-wrapper\">\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': innerConfig.size === 'small',\n 'c-input-row--lg': innerConfig.size === 'large',\n }\"\n >\n <input\n ref=\"inputRef\"\n type=\"text\"\n :id=\"id\"\n class=\"c-input dp-input pr-0\"\n inputmode=\"numeric\"\n :value=\"inputValue\"\n :placeholder=\"innerConfig.placeholder\"\n :maxlength=\"format.length\"\n @input=\"onInput\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n />\n <button\n type=\"button\"\n class=\"c-icon-btn dp-clear c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !inputValue }\"\n @click=\"emitParsed(null)\"\n aria-label=\"Törlés\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <button\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--calendar\"\n @click=\"isOpen = !isOpen\"\n aria-label=\"Naptár megnyitása\"\n >\n <i class=\"fa-regular fa-fw fa-calendar\"></i>\n </button>\n </div>\n <Teleport to=\"body\">\n <div v-if=\"isOpen\" ref=\"dropdownRef\" class=\"c-dropdown ac-component\" :style=\"dropdownStyle\">\n <Calendar\n :model-value=\"inputValue || null\"\n :config=\"innerConfig\"\n @update:model-value=\"onCalendarUpdate\"\n @confirm=\"isOpen = false\"\n />\n </div>\n </Teleport>\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components169.js","names":[],"sources":["../src/vueformelements/ArticleOfferElement.vue"],"sourcesContent":["<!-- eslint-disable-next-line vue/block-lang -->\n<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, onMounted, onUnmounted, nextTick } from 'vue'\nimport { aoeConfig } from '@/vueformelements/config/ArticleOfferElementConfig'\nimport Button from '@/components/Button.vue'\n\nexport default defineElement({\n components: { Button },\n name: 'ArticleOfferElement',\n\n setup(props, context) {\n const articleEditorUrl = aoeConfig.articleEditorUrl\n const environment = aoeConfig.environment\n const searchImageWidgetUrl = aoeConfig.searchImageWidgetUrl\n const imageBaseUrl = aoeConfig.imageBaseUrl\n const imageViewId = aoeConfig.imageViewId\n const onFetchMetaTags = aoeConfig.onFetchMetaTags\n\n const imageCausationId = ref(new Date().getTime().toString() + 'image')\n\n const EMPTYGUID = '00000000-0000-0000-0000-000000000000'\n\n const { value } = context.element\n\n const gotMetagTags = (url, imageUrl, title, lead) => {\n if (url === value.value['url']) {\n value.value.image = imageUrl\n value.value.title = title\n value.value.lead = lead\n }\n }\n\n aoeConfig.gotMetagTags = gotMetagTags\n const fetchMetaTags = () => {\n if (!value.value['url']) return\n aoeConfig.onFetchMetaTags(value.value['url'])\n }\n\n const selectImage = (event) => {\n // we need this guy, otherwise the form will be saved\n event.preventDefault()\n nextTick(() => {\n document.getElementById(imageCausationId.value).showModal()\n })\n }\n\n const resetImage = (event) => {\n event.preventDefault()\n value.value.imageId = EMPTYGUID\n value.value.image = ''\n }\n\n const addScript = (url) => {\n if (!document.querySelector(`script[src=\"${url}\"]`)) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.src = url\n document.head.appendChild(script)\n }\n }\n\n const ImageSelectedHandler = (e) => {\n if (e.detail.causationid == imageCausationId.value) {\n document.getElementById(imageCausationId.value).close()\n const image = e.detail.image\n value.value.image = image.url\n }\n }\n\n onUnmounted(() => {\n window.removeEventListener('image-selected', ImageSelectedHandler, false)\n })\n\n onMounted(() => {\n window.addEventListener('image-selected', ImageSelectedHandler)\n })\n\n addScript(searchImageWidgetUrl)\n\n return {\n articleEditorUrl,\n environment,\n imageViewId,\n imageBaseUrl,\n imageCausationId: imageCausationId,\n searchImageWidgetUrl,\n selectImage,\n resetImage,\n addScript,\n value,\n fetchMetaTags,\n onFetchMetaTags,\n gotMetagTags,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template v-if=\"value\" #element>\n <div class=\"ac-component\">\n <label for=\"articleUrl\" class=\"c-label\">Cikk url</label>\n <div class=\"c-input-row\">\n <input\n type=\"text\"\n id=\"articleUrl\"\n class=\"c-input\"\n placeholder=\"Cikk url\"\n :value=\"value.url\"\n @input=\"\n (event) => {\n value.url = event.target.value\n }\n \"\n @blur=\"fetchMetaTags\"\n />\n </div>\n </div>\n <div>\n <label for=\"articleTitle\" class=\"c-label\">Címe</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleTitle\"\n class=\"c-input\"\n placeholder=\"Címe\"\n :value=\"value.title\"\n @input=\"value.title = $event.target.value\"\n ></textarea>\n </div>\n </div>\n <div>\n <label for=\"articleLead\" class=\"c-label\">Lead</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleLead\"\n class=\"c-input\"\n placeholder=\"Lead\"\n :value=\"value.lead\"\n @input=\"value.lead = $event.target.value\"\n ></textarea>\n </div>\n </div>\n <div>\n <label class=\"c-label\" style=\"display: block\">Kép</label>\n <img\n alt=\"\"\n :src=\"value.image\"\n @input=\"value.image = $event.target.value\"\n style=\"height: 200px\"\n />\n </div>\n <div v-if=\"value.imageId === '00000000-0000-0000-0000-000000000000'\">\n Nincs kép kiválasztva!\n </div>\n <div class=\"flex-center mt-2 w-100\" role=\"group\" aria-label=\"Képválasztó gombok\">\n <Button\n type=\"dark\"\n label=\"Kép Választás\"\n @click=\"\n (event) => {\n selectImage(event)\n }\n \"\n />\n <Button\n type=\"danger\"\n label=\"Eltávolítás\"\n @click=\"\n (event) => {\n resetImage(event)\n }\n \"\n />\n </div>\n <dialog :id=\"imageCausationId\">\n <hvg-search-image\n :causationid=\"imageCausationId\"\n :viewid=\"imageViewId\"\n :environment=\"environment\"\n :aeurl=\"articleEditorUrl\"\n selectonly=\"true\"\n ></hvg-search-image>\n </dialog>\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components169.js","names":[],"sources":["../src/vueformelements/ArticleOfferElement.vue"],"sourcesContent":["<!-- eslint-disable-next-line vue/block-lang -->\n<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, onMounted, onUnmounted, nextTick } from 'vue'\nimport { aoeConfig } from '@/vueformelements/config/ArticleOfferElementConfig'\nimport Button from '@/components/Button.vue'\n\nexport default defineElement({\n components: { Button },\n name: 'ArticleOfferElement',\n\n setup(props, context) {\n const articleEditorUrl = aoeConfig.articleEditorUrl\n const environment = aoeConfig.environment\n const searchImageWidgetUrl = aoeConfig.searchImageWidgetUrl\n const imageBaseUrl = aoeConfig.imageBaseUrl\n const imageViewId = aoeConfig.imageViewId\n const onFetchMetaTags = aoeConfig.onFetchMetaTags\n\n const imageCausationId = ref(new Date().getTime().toString() + 'image')\n\n const EMPTYGUID = '00000000-0000-0000-0000-000000000000'\n\n const { value } = context.element\n\n const gotMetagTags = (url, imageUrl, title, lead) => {\n if (url === value.value['url']) {\n value.value.image = imageUrl\n value.value.title = title\n value.value.lead = lead\n }\n }\n\n aoeConfig.gotMetagTags = gotMetagTags\n const fetchMetaTags = () => {\n if (!value.value['url']) return\n aoeConfig.onFetchMetaTags(value.value['url'])\n }\n\n const selectImage = (event) => {\n event.preventDefault()\n nextTick(() => {\n document.getElementById(imageCausationId.value).showModal()\n })\n }\n\n const resetImage = (event) => {\n event.preventDefault()\n value.value.imageId = EMPTYGUID\n value.value.image = ''\n }\n\n const addScript = (url) => {\n if (!document.querySelector(`script[src=\"${url}\"]`)) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.src = url\n document.head.appendChild(script)\n }\n }\n\n const ImageSelectedHandler = (e) => {\n if (e.detail.causationid == imageCausationId.value) {\n document.getElementById(imageCausationId.value).close()\n const image = e.detail.image\n value.value.image = image.url\n }\n }\n\n onUnmounted(() => {\n window.removeEventListener('image-selected', ImageSelectedHandler, false)\n })\n\n onMounted(() => {\n window.addEventListener('image-selected', ImageSelectedHandler)\n })\n\n addScript(searchImageWidgetUrl)\n\n return {\n articleEditorUrl,\n environment,\n imageViewId,\n imageBaseUrl,\n imageCausationId: imageCausationId,\n searchImageWidgetUrl,\n selectImage,\n resetImage,\n addScript,\n value,\n fetchMetaTags,\n onFetchMetaTags,\n gotMetagTags,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template v-if=\"value\" #element>\n <div class=\"ac-component\">\n <label for=\"articleUrl\" class=\"c-label\">Cikk url</label>\n <div class=\"c-input-row\">\n <input\n type=\"text\"\n id=\"articleUrl\"\n class=\"c-input\"\n placeholder=\"Cikk url\"\n :value=\"value.url\"\n @input=\"\n (event) => {\n value.url = event.target.value\n }\n \"\n @blur=\"fetchMetaTags\"\n />\n </div>\n </div>\n <div>\n <label for=\"articleTitle\" class=\"c-label\">Címe</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleTitle\"\n class=\"c-input\"\n placeholder=\"Címe\"\n :value=\"value.title\"\n @input=\"value.title = $event.target.value\"\n ></textarea>\n </div>\n </div>\n <div>\n <label for=\"articleLead\" class=\"c-label\">Lead</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleLead\"\n class=\"c-input\"\n placeholder=\"Lead\"\n :value=\"value.lead\"\n @input=\"value.lead = $event.target.value\"\n ></textarea>\n </div>\n </div>\n <div>\n <label class=\"c-label\" style=\"display: block\">Kép</label>\n <img\n alt=\"\"\n :src=\"value.image\"\n @input=\"value.image = $event.target.value\"\n style=\"height: 200px\"\n />\n </div>\n <div v-if=\"value.imageId === '00000000-0000-0000-0000-000000000000'\">\n Nincs kép kiválasztva!\n </div>\n <div class=\"flex-center mt-2 w-100\" role=\"group\" aria-label=\"Képválasztó gombok\">\n <Button\n type=\"dark\"\n label=\"Kép Választás\"\n @click=\"\n (event) => {\n selectImage(event)\n }\n \"\n />\n <Button\n type=\"danger\"\n label=\"Eltávolítás\"\n @click=\"\n (event) => {\n resetImage(event)\n }\n \"\n />\n </div>\n <dialog :id=\"imageCausationId\">\n <hvg-search-image\n :causationid=\"imageCausationId\"\n :viewid=\"imageViewId\"\n :environment=\"environment\"\n :aeurl=\"articleEditorUrl\"\n selectonly=\"true\"\n ></hvg-search-image>\n </dialog>\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import './vueformelements/ArticlePickerElement.vue_vue_type_style_index_0_scoped_43c54caa_lang.css';
1
+ import './vueformelements/ArticlePickerElement.vue_vue_type_style_index_0_scoped_54217a66_lang.css';
2
2
  import e from "./admins-components6.js";
3
3
  import { defineElement as t } from "./admins-components166.js";
4
4
  import n from "./admins-components168.js";
@@ -164,6 +164,6 @@ function K(e, t, n, r, i, d) {
164
164
  fn: b(() => [_(e.$slots, n, { el$: e.el$ }, () => [(m(), a(y(t), { el$: e.el$ }, null, 8, ["el$"]))], !0)])
165
165
  }))]), 1024);
166
166
  }
167
- var q = /*#__PURE__*/ n(x, [["render", K], ["__scopeId", "data-v-43c54caa"]]);
167
+ var q = /*#__PURE__*/ n(x, [["render", K], ["__scopeId", "data-v-54217a66"]]);
168
168
  //#endregion
169
169
  export { q as default };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components173.js","names":[],"sources":["../src/vueformelements/ArticlePickerElement.vue"],"sourcesContent":["<!-- eslint-disable-next-line vue/block-lang -->\n<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, onUnmounted, onMounted, nextTick } from 'vue'\nimport { apeConfig } from '@/vueformelements/config/ArticlePickerElementConfig'\nimport { ipeConfig } from '@/vueformelements/config/ImagePickerElementConfig'\nimport Button from '@/components/Button.vue'\n\nexport default defineElement({\n components: { Button },\n name: 'ArticlePickerElement',\n\n setup(props, context) {\n const environment = ipeConfig.environment\n const searchImageWidgetUrl = ipeConfig.searchImageWidgetUrl\n const imageBaseUrl = ipeConfig.imageBaseUrl\n const imageViewId = ipeConfig.imageViewId\n\n const searchArticleApiUrl = apeConfig.searchArticleApiUrl\n const searchArticleWidgetUrl = apeConfig.searchArticleWidgetUrl\n const showIds = apeConfig.showIds\n\n const imageCausationId = ref(new Date().getTime().toString() + 'image')\n const articleCausationId = ref(new Date().getTime().toString() + 'article')\n\n const EMPTYGUID = '00000000-0000-0000-0000-000000000000'\n\n const { value } = context.element\n\n const selectImage = (event) => {\n // we need this guy, otherwise the form will be saved\n event.preventDefault()\n\n nextTick(() => {\n document.getElementById(imageCausationId.value).showModal()\n })\n }\n\n const selectArticle = () => {\n nextTick(() => {\n document.getElementById(articleCausationId.value).showModal()\n })\n }\n\n const resetImage = (event) => {\n event.preventDefault()\n value.value.imageId = EMPTYGUID\n }\n\n const addScript = (url) => {\n if (!document.querySelector(`script[src=\"${url}\"]`)) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.src = url\n document.head.appendChild(script)\n }\n }\n\n const getImageUrl = () => {\n return `${imageBaseUrl}/${imageViewId}/${value.value.imageId}.img`\n }\n\n addScript(searchImageWidgetUrl)\n addScript(searchArticleWidgetUrl)\n\n const ImageSelectedHandler = (e) => {\n if (e.detail.causationid == imageCausationId.value) {\n document.getElementById(imageCausationId.value).close()\n value.value.imageId = e.detail.image.id\n }\n }\n\n onUnmounted(() => {\n window.removeEventListener('image-selected', ImageSelectedHandler, false)\n })\n\n onMounted(() => {\n window.addEventListener('image-selected', ImageSelectedHandler)\n\n window.addEventListener('search_posts_selected', (e) => {\n if (e.detail.id == articleCausationId.value) {\n if (e.detail.result && e.detail.posts.length > 0) {\n value.value.id = e.detail.posts[0].id\n value.value.siteId = e.detail.posts[0].siteId\n value.value.title = e.detail.posts[0].title\n value.value.lead = e.detail.posts[0].lead\n const imageId = e.detail.posts[0].featuredImage\n value.value.imageId = imageId || EMPTYGUID\n }\n\n document.getElementById(articleCausationId.value).close()\n }\n })\n })\n\n return {\n imageViewId,\n imageBaseUrl,\n imageCausationId: imageCausationId,\n articleCausationId: articleCausationId,\n searchImageWidgetUrl,\n environment,\n searchArticleApiUrl,\n selectImage,\n selectArticle,\n resetImage,\n addScript,\n value,\n getImageUrl,\n showIds,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template v-if=\"value\" #element>\n <div class=\"ac-component\">\n <div class=\"article-picker-container\">\n <div class=\"article-picker-section\">\n <Button type=\"normal\" label=\"Cikk Választás\" @click=\"selectArticle\" />\n </div>\n\n <template v-if=\"showIds\">\n <div class=\"article-picker-ids\">\n <div class=\"article-picker-id-field\">\n <label for=\"articleId\" class=\"c-label\">Cikk azonosító</label>\n <div class=\"c-input-row\">\n <input\n type=\"text\"\n id=\"articleId\"\n class=\"c-input\"\n placeholder=\"Cikk azonosító\"\n disabled\n :value=\"value.id\"\n />\n </div>\n </div>\n <div class=\"article-picker-id-field\">\n <label for=\"articleSiteId\" class=\"c-label\">Site azonosító</label>\n <div class=\"c-input-row\">\n <input\n type=\"text\"\n id=\"articleSiteId\"\n class=\"c-input\"\n placeholder=\"Site azonosító\"\n disabled\n :value=\"value.siteId\"\n />\n </div>\n </div>\n </div>\n </template>\n\n <div class=\"article-picker-section\">\n <label for=\"articleTitle\" class=\"c-label\">Címe</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleTitle\"\n class=\"c-input\"\n placeholder=\"Címe\"\n :value=\"value.title\"\n @input=\"value.title = $event.target.value\"\n ></textarea>\n </div>\n </div>\n\n <div class=\"article-picker-section\">\n <label for=\"articleLead\" class=\"c-label\">Lead</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleLead\"\n class=\"c-input\"\n placeholder=\"Lead\"\n :value=\"value.lead\"\n @input=\"value.lead = $event.target.value\"\n ></textarea>\n </div>\n </div>\n\n <div class=\"article-picker-section\">\n <label class=\"c-label\">Kép</label>\n <img\n alt=\"\"\n :src=\"getImageUrl()\"\n @input=\"value.image = $event.target.value\"\n class=\"article-picker-image\"\n />\n </div>\n\n <div\n v-if=\"value.imageId === '00000000-0000-0000-0000-000000000000'\"\n class=\"article-picker-no-image\"\n >\n Nincs kép kiválasztva!\n </div>\n\n <div class=\"article-picker-buttons\">\n <Button type=\"normal\" label=\"Kép Választás\" @click=\"selectImage\" />\n <Button type=\"error\" label=\"Eltávolítás\" @click=\"resetImage\" />\n </div>\n </div>\n\n <dialog :id=\"imageCausationId\">\n <hvg-search-image\n :causationid=\"imageCausationId\"\n :viewid=\"imageViewId\"\n :aeurl=\"searchArticleApiUrl\"\n :environment=\"environment\"\n selectonly=\"true\"\n ></hvg-search-image>\n </dialog>\n <dialog :id=\"articleCausationId\">\n <search-posts-widget\n :id=\"articleCausationId\"\n selector=\"true\"\n :apiurl=\"searchArticleApiUrl\"\n wpurl=\"\"\n searchurl=\"\"\n style=\"height: 100%\"\n ></search-posts-widget>\n </dialog>\n </div>\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n\n<style scoped>\n.article-picker-container {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.article-picker-section {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n}\n\n.article-picker-ids {\n display: flex;\n gap: 0.5rem;\n width: 100%;\n}\n\n.article-picker-id-field {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n}\n\n.article-picker-image {\n height: 200px;\n max-width: 100%;\n border-radius: var(--ac-field-border-radius);\n object-fit: cover;\n}\n\n.article-picker-no-image {\n padding: var(--ac-input-padding);\n color: var(--neutral-500);\n font-size: var(--ac-field-font-size);\n}\n\n.article-picker-buttons {\n display: flex;\n gap: 0.5rem;\n width: 100%;\n}\n</style>\n"],"mappings":";;;;;;;;AAQA,IAAK,IAAa,EAAW;CAC3B,YAAY,EAAE,QAAA,EAAO;CACrB,MAAM;CAEN,MAAM,GAAO,GAAS;EACpB,IAAM,IAAc,EAAU,aACxB,IAAuB,EAAU,sBACjC,IAAe,EAAU,cACzB,IAAc,EAAU,aAExB,IAAsB,EAAU,qBAChC,IAAyB,EAAU,wBACnC,IAAU,EAAU,SAEpB,IAAmB,mBAAI,IAAI,KAAK,EAAA,CAAE,QAAQ,CAAC,CAAC,SAAS,IAAI,OAAO,GAChE,IAAqB,mBAAI,IAAI,KAAK,EAAA,CAAE,QAAQ,CAAC,CAAC,SAAS,IAAI,SAAS,GAEpE,IAAY,wCAEZ,EAAE,aAAU,EAAQ,SAEpB,KAAe,MAAU;GAI7B,AAFA,EAAM,eAAe,GAErB,QAAe;IACb,SAAS,eAAe,EAAiB,KAAK,CAAC,CAAC,UAAU;GAC5D,CAAC;EACH,GAEM,UAAsB;GAC1B,QAAe;IACb,SAAS,eAAe,EAAmB,KAAK,CAAC,CAAC,UAAU;GAC9D,CAAC;EACH,GAEM,KAAc,MAAU;GAE5B,AADA,EAAM,eAAe,GACrB,EAAM,MAAM,UAAU;EACxB,GAEM,KAAa,MAAQ;GACzB,IAAI,CAAC,SAAS,cAAc,eAAe,EAAI,GAAG,GAAG;IACnD,IAAM,IAAS,SAAS,cAAc,QAAQ;IAG9C,AAFA,EAAO,OAAO,mBACd,EAAO,MAAM,GACb,SAAS,KAAK,YAAY,CAAM;GAClC;EACF,GAEM,UACG,GAAG,EAAa,GAAG,EAAY,GAAG,EAAM,MAAM,QAAQ;EAI/D,AADA,EAAU,CAAoB,GAC9B,EAAU,CAAsB;EAEhC,IAAM,KAAwB,MAAM;GAClC,AAAI,EAAE,OAAO,eAAe,EAAiB,UAC3C,SAAS,eAAe,EAAiB,KAAK,CAAC,CAAC,MAAM,GACtD,EAAM,MAAM,UAAU,EAAE,OAAO,MAAM;EAEzC;EAyBA,OAvBA,QAAkB;GAChB,OAAO,oBAAoB,kBAAkB,GAAsB,EAAK;EAC1E,CAAC,GAED,QAAgB;GAGd,AAFA,OAAO,iBAAiB,kBAAkB,CAAoB,GAE9D,OAAO,iBAAiB,0BAA0B,MAAM;IACtD,IAAI,EAAE,OAAO,MAAM,EAAmB,OAAO;KAC3C,IAAI,EAAE,OAAO,UAAU,EAAE,OAAO,MAAM,SAAS,GAAG;MAIhD,AAHA,EAAM,MAAM,KAAK,EAAE,OAAO,MAAM,EAAE,CAAC,IACnC,EAAM,MAAM,SAAS,EAAE,OAAO,MAAM,EAAE,CAAC,QACvC,EAAM,MAAM,QAAQ,EAAE,OAAO,MAAM,EAAE,CAAC,OACtC,EAAM,MAAM,OAAO,EAAE,OAAO,MAAM,EAAE,CAAC;MACrC,IAAM,IAAU,EAAE,OAAO,MAAM,EAAE,CAAC;MAClC,EAAM,MAAM,UAAU,KAAW;KACnC;KAEA,SAAS,eAAe,EAAmB,KAAK,CAAC,CAAC,MAAM;IAC1D;GACF,CAAC;EACH,CAAC,GAEM;GACL;GACA;GACkB;GACE;GACpB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;AACF,CAAC,GAMU,IAAA,EAAA,OAAM,eAAc,GAClB,IAAA,EAAA,OAAM,2BAA0B,GAC9B,IAAA,EAAA,OAAM,yBAAwB;;CAK5B,OAAM;GACJ,IAAA,EAAA,OAAM,0BAAyB,GAE7B,IAAA,EAAA,OAAM,cAAa,kBAWrB,IAAA,EAAA,OAAM,0BAAyB,GAE7B,IAAA,EAAA,OAAM,cAAa,kBAczB,IAAA,EAAA,OAAM,yBAAwB,GAE5B,IAAA,EAAA,OAAM,cAAa,kBAWrB,IAAA,EAAA,OAAM,yBAAwB,GAE5B,IAAA,EAAA,OAAM,cAAa,kBAWrB,IAAA,EAAA,OAAM,yBAAwB;;CAYjC,OAAM;GAKH,IAAA,EAAA,OAAM,yBAAwB;;;;;;;;CAlF3C,OAAA,EAAA,GAAA,EAoHgB,GAAA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,CAnHE,EAAA,QAAA;EAAQ,MAAA;EACtB,IAAA,QAyGM,CAzGN,EAyGM,OAzGN,GAyGM;GAxGJ,EAmFM,OAnFN,GAmFM;IAlFJ,EAEM,OAFN,GAEM,CADJ,EAAsE,GAAA;KAA9D,MAAK;KAAS,OAAM;KAAkB,SAAO,EAAA;;IAGvC,EAAA,WACd,EAAA,GAAA,EA2BM,OA3BN,GA2BM,CA1BJ,EAYM,OAZN,GAYM,CAXJ,AAAA,EAAA,OAAA,EAA6D,SAAA;KAAtD,KAAI;KAAY,OAAM;IAAU,GAAA,kBAAc,EAAA,GACrD,EASM,OATN,GASM,CARJ,EAOE,SAAA;KANA,MAAK;KACL,IAAG;KACH,OAAM;KACN,aAAY;KACZ,UAAA;KACC,OAAO,EAAA,MAAM;IAIpB,GAAA,MAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAYM,OAZN,GAYM,CAXJ,AAAA,EAAA,OAAA,EAAiE,SAAA;KAA1D,KAAI;KAAgB,OAAM;IAAU,GAAA,kBAAc,EAAA,GACzD,EASM,OATN,GASM,CARJ,EAOE,SAAA;KANA,MAAK;KACL,IAAG;KACH,OAAM;KACN,aAAY;KACZ,UAAA;KACC,OAAO,EAAA,MAAM;;IAOxB,EAWM,OAXN,GAWM,CAVJ,AAAA,EAAA,OAAA,EAAsD,SAAA;KAA/C,KAAI;KAAe,OAAM;IAAU,GAAA,QAAI,EAAA,GAC9C,EAQM,OARN,GAQM,CAPJ,EAMY,YAAA;KALV,IAAG;KACH,OAAM;KACN,aAAY;KACX,OAAO,EAAA,MAAM;KACb,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,MAAM,QAAQ,EAAO,OAAO;;IAK1C,EAWM,OAXN,GAWM,CAVJ,AAAA,EAAA,OAAA,EAAqD,SAAA;KAA9C,KAAI;KAAc,OAAM;IAAU,GAAA,QAAI,EAAA,GAC7C,EAQM,OARN,GAQM,CAPJ,EAMY,YAAA;KALV,IAAG;KACH,OAAM;KACN,aAAY;KACX,OAAO,EAAA,MAAM;KACb,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,MAAM,OAAO,EAAO,OAAO;;IAKzC,EAQM,OARN,GAQM,CAPJ,AAAA,EAAA,OAAA,EAAkC,SAAA,EAA3B,OAAM,UAAS,GAAC,OAAG,EAAA,GAC1B,EAKE,OAAA;KAJA,KAAI;KACH,KAAK,EAAA,YAAW;KAChB,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,MAAM,QAAQ,EAAO,OAAO;KACpC,OAAM;;IAKF,EAAA,MAAM,YAAO,0CADrB,EAAA,GAAA,EAKM,OALN,GAGC,0BAED,KAAA,EAAA,IAAA,EAAA;IAEA,EAGM,OAHN,GAGM,CAFJ,EAAmE,GAAA;KAA3D,MAAK;KAAS,OAAM;KAAiB,SAAO,EAAA;IACpD,GAAA,MAAA,GAAA,CAAA,SAAA,CAAA,GAAA,EAA+D,GAAA;KAAvD,MAAK;KAAQ,OAAM;KAAe,SAAO,EAAA;;;GAIrD,EAQS,UAAA,EARA,IAAI,EAAA,iBAAgB,GAAA,CAC3B,EAMoB,oBAAA;IALjB,aAAa,EAAA;IACb,QAAQ,EAAA;IACR,OAAO,EAAA;IACP,aAAa,EAAA;IACd,YAAW;;GAGf,EASS,UAAA,EATA,IAAI,EAAA,mBAAkB,GAAA,CAC7B,EAOuB,uBAAA;IANpB,IAAI,EAAA;IACL,UAAS;IACR,QAAQ,EAAA;IACT,OAAM;IACN,WAAU;IACV,OAAA,EAAA,QAAA,OAAA;;;;CAM8B,IAAA,KAAA,GAAA,EAAA,EAAA,eAApB,GAAW;EAAwB,MAAA;EAEnD,IAAA,QAEO,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EADL,EAAA,GAAA,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,GAAA,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"admins-components173.js","names":[],"sources":["../src/vueformelements/ArticlePickerElement.vue"],"sourcesContent":["<!-- eslint-disable-next-line vue/block-lang -->\n<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, onUnmounted, onMounted, nextTick } from 'vue'\nimport { apeConfig } from '@/vueformelements/config/ArticlePickerElementConfig'\nimport { ipeConfig } from '@/vueformelements/config/ImagePickerElementConfig'\nimport Button from '@/components/Button.vue'\n\nexport default defineElement({\n components: { Button },\n name: 'ArticlePickerElement',\n\n setup(props, context) {\n const environment = ipeConfig.environment\n const searchImageWidgetUrl = ipeConfig.searchImageWidgetUrl\n const imageBaseUrl = ipeConfig.imageBaseUrl\n const imageViewId = ipeConfig.imageViewId\n\n const searchArticleApiUrl = apeConfig.searchArticleApiUrl\n const searchArticleWidgetUrl = apeConfig.searchArticleWidgetUrl\n const showIds = apeConfig.showIds\n\n const imageCausationId = ref(new Date().getTime().toString() + 'image')\n const articleCausationId = ref(new Date().getTime().toString() + 'article')\n\n const EMPTYGUID = '00000000-0000-0000-0000-000000000000'\n\n const { value } = context.element\n\n const selectImage = (event) => {\n event.preventDefault()\n\n nextTick(() => {\n document.getElementById(imageCausationId.value).showModal()\n })\n }\n\n const selectArticle = () => {\n nextTick(() => {\n document.getElementById(articleCausationId.value).showModal()\n })\n }\n\n const resetImage = (event) => {\n event.preventDefault()\n value.value.imageId = EMPTYGUID\n }\n\n const addScript = (url) => {\n if (!document.querySelector(`script[src=\"${url}\"]`)) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.src = url\n document.head.appendChild(script)\n }\n }\n\n const getImageUrl = () => {\n return `${imageBaseUrl}/${imageViewId}/${value.value.imageId}.img`\n }\n\n addScript(searchImageWidgetUrl)\n addScript(searchArticleWidgetUrl)\n\n const ImageSelectedHandler = (e) => {\n if (e.detail.causationid == imageCausationId.value) {\n document.getElementById(imageCausationId.value).close()\n value.value.imageId = e.detail.image.id\n }\n }\n\n onUnmounted(() => {\n window.removeEventListener('image-selected', ImageSelectedHandler, false)\n })\n\n onMounted(() => {\n window.addEventListener('image-selected', ImageSelectedHandler)\n\n window.addEventListener('search_posts_selected', (e) => {\n if (e.detail.id == articleCausationId.value) {\n if (e.detail.result && e.detail.posts.length > 0) {\n value.value.id = e.detail.posts[0].id\n value.value.siteId = e.detail.posts[0].siteId\n value.value.title = e.detail.posts[0].title\n value.value.lead = e.detail.posts[0].lead\n const imageId = e.detail.posts[0].featuredImage\n value.value.imageId = imageId || EMPTYGUID\n }\n\n document.getElementById(articleCausationId.value).close()\n }\n })\n })\n\n return {\n imageViewId,\n imageBaseUrl,\n imageCausationId: imageCausationId,\n articleCausationId: articleCausationId,\n searchImageWidgetUrl,\n environment,\n searchArticleApiUrl,\n selectImage,\n selectArticle,\n resetImage,\n addScript,\n value,\n getImageUrl,\n showIds,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template v-if=\"value\" #element>\n <div class=\"ac-component\">\n <div class=\"article-picker-container\">\n <div class=\"article-picker-section\">\n <Button type=\"normal\" label=\"Cikk Választás\" @click=\"selectArticle\" />\n </div>\n\n <template v-if=\"showIds\">\n <div class=\"article-picker-ids\">\n <div class=\"article-picker-id-field\">\n <label for=\"articleId\" class=\"c-label\">Cikk azonosító</label>\n <div class=\"c-input-row\">\n <input\n type=\"text\"\n id=\"articleId\"\n class=\"c-input\"\n placeholder=\"Cikk azonosító\"\n disabled\n :value=\"value.id\"\n />\n </div>\n </div>\n <div class=\"article-picker-id-field\">\n <label for=\"articleSiteId\" class=\"c-label\">Site azonosító</label>\n <div class=\"c-input-row\">\n <input\n type=\"text\"\n id=\"articleSiteId\"\n class=\"c-input\"\n placeholder=\"Site azonosító\"\n disabled\n :value=\"value.siteId\"\n />\n </div>\n </div>\n </div>\n </template>\n\n <div class=\"article-picker-section\">\n <label for=\"articleTitle\" class=\"c-label\">Címe</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleTitle\"\n class=\"c-input\"\n placeholder=\"Címe\"\n :value=\"value.title\"\n @input=\"value.title = $event.target.value\"\n ></textarea>\n </div>\n </div>\n\n <div class=\"article-picker-section\">\n <label for=\"articleLead\" class=\"c-label\">Lead</label>\n <div class=\"c-input-row\">\n <textarea\n id=\"articleLead\"\n class=\"c-input\"\n placeholder=\"Lead\"\n :value=\"value.lead\"\n @input=\"value.lead = $event.target.value\"\n ></textarea>\n </div>\n </div>\n\n <div class=\"article-picker-section\">\n <label class=\"c-label\">Kép</label>\n <img\n alt=\"\"\n :src=\"getImageUrl()\"\n @input=\"value.image = $event.target.value\"\n class=\"article-picker-image\"\n />\n </div>\n\n <div\n v-if=\"value.imageId === '00000000-0000-0000-0000-000000000000'\"\n class=\"article-picker-no-image\"\n >\n Nincs kép kiválasztva!\n </div>\n\n <div class=\"article-picker-buttons\">\n <Button type=\"normal\" label=\"Kép Választás\" @click=\"selectImage\" />\n <Button type=\"error\" label=\"Eltávolítás\" @click=\"resetImage\" />\n </div>\n </div>\n\n <dialog :id=\"imageCausationId\">\n <hvg-search-image\n :causationid=\"imageCausationId\"\n :viewid=\"imageViewId\"\n :aeurl=\"searchArticleApiUrl\"\n :environment=\"environment\"\n selectonly=\"true\"\n ></hvg-search-image>\n </dialog>\n <dialog :id=\"articleCausationId\">\n <search-posts-widget\n :id=\"articleCausationId\"\n selector=\"true\"\n :apiurl=\"searchArticleApiUrl\"\n wpurl=\"\"\n searchurl=\"\"\n style=\"height: 100%\"\n ></search-posts-widget>\n </dialog>\n </div>\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n\n<style scoped>\n.article-picker-container {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.article-picker-section {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n}\n\n.article-picker-ids {\n display: flex;\n gap: 0.5rem;\n width: 100%;\n}\n\n.article-picker-id-field {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n}\n\n.article-picker-image {\n height: 200px;\n max-width: 100%;\n border-radius: var(--ac-field-border-radius);\n object-fit: cover;\n}\n\n.article-picker-no-image {\n padding: var(--ac-input-padding);\n color: var(--neutral-500);\n font-size: var(--ac-field-font-size);\n}\n\n.article-picker-buttons {\n display: flex;\n gap: 0.5rem;\n width: 100%;\n}\n</style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components174.js","names":[],"sources":["../src/vueformelements/DateTimePickerElement.vue"],"sourcesContent":["<!-- eslint-disable-next-line vue/block-lang -->\n<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, watch } from 'vue'\nimport DatePicker from '@/components/DatePicker.vue'\n\nexport default defineElement({\n name: 'DateTimePickerElement',\n components: {\n DatePicker,\n },\n setup(props, context) {\n const { value } = context.element\n\n // Only default to \"now\" if no value was provided (create mode).\n // Otherwise keep the pre-filled value intact (edit mode).\n if (value.value == null || value.value === '') {\n value.value = new Date()\n }\n\n // Build the inner DatePicker config.\n // - Anything under `config` attr is forwarded verbatim.\n // - `placeholder` attr is also accepted as a shorthand for convenience.\n // - `showTime` defaults to true (this is the whole point of the element).\n const userConfig = context.attrs.config || {}\n const pickerConfig = {\n showTime: true,\n ...userConfig,\n }\n if (context.attrs.placeholder !== undefined && pickerConfig.placeholder === undefined) {\n pickerConfig.placeholder = context.attrs.placeholder\n }\n\n const initial = ref(null)\n const display = ref(false)\n\n const setValue = (v) => {\n if (v && v.utc) {\n value.value = v.utc\n }\n }\n\n watch(\n value,\n () => {\n initial.value = {\n local: value.value ? new Date(value.value) : null,\n utc: value.value,\n }\n display.value = true\n },\n { deep: true, immediate: true },\n )\n\n return {\n display,\n pickerConfig,\n initial,\n value,\n setValue,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <DatePicker\n v-if=\"display\"\n :model-value=\"initial\"\n :config=\"pickerConfig\"\n @update:model-value=\"setValue($event)\"\n />\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;AAMA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,YAAY,EACV,YAAA,EACF;CACA,MAAM,GAAO,GAAS;EACpB,IAAM,EAAE,aAAU,EAAQ;EAI1B,CAAI,EAAM,SAAS,QAAQ,EAAM,UAAU,QACzC,EAAM,wBAAQ,IAAI,KAAK;EAQzB,IAAM,IAAe;GACnB,UAAU;GACV,GAHiB,EAAQ,MAAM,UAAU,CAAC;EAI5C;EACA,AAAI,EAAQ,MAAM,gBAAgB,KAAA,KAAa,EAAa,gBAAgB,KAAA,MAC1E,EAAa,cAAc,EAAQ,MAAM;EAG3C,IAAM,IAAU,EAAI,IAAI,GAClB,IAAU,EAAI,EAAK;EAoBzB,OAZA,EACE,SACM;GAKJ,AAJA,EAAQ,QAAQ;IACd,OAAO,EAAM,QAAQ,IAAI,KAAK,EAAM,KAAK,IAAI;IAC7C,KAAK,EAAM;GACb,GACA,EAAQ,QAAQ;EAClB,GACA;GAAE,MAAM;GAAM,WAAW;EAAK,CAChC,GAEO;GACL;GACA;GACA;GACA;GACA,WAvBgB,MAAM;IACtB,AAAI,KAAK,EAAE,QACT,EAAM,QAAQ,EAAE;GAEpB;EAoBA;CACF;AACF,CAAC;;;CAIC,OAAA,EAAA,GAAA,EAgBgB,GAAA,MAAA,EAAA;EAfH,SAAO,QAMd,CAJM,EAAA,WADR,EAAA,GAAA,EAKE,GAAA;;GAHC,eAAa,EAAA;GACb,QAAQ,EAAA;GACR,uBAAkB,AAAA,EAAA,QAAA,MAAE,EAAA,SAAS,CAAM;;;CAIF,GAAA,CAAA,EAAA,EAAA,eAApB,GAAW;EAAwB,MAAA;EAEnD,IAAA,QAEO,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EADL,EAAA,GAAA,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"admins-components174.js","names":[],"sources":["../src/vueformelements/DateTimePickerElement.vue"],"sourcesContent":["<!-- eslint-disable-next-line vue/block-lang -->\n<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, watch } from 'vue'\nimport DatePicker from '@/components/DatePicker.vue'\n\nexport default defineElement({\n name: 'DateTimePickerElement',\n components: {\n DatePicker,\n },\n setup(props, context) {\n const { value } = context.element\n\n if (value.value == null || value.value === '') {\n value.value = new Date()\n }\n\n const userConfig = context.attrs.config || {}\n const pickerConfig = {\n showTime: true,\n ...userConfig,\n }\n if (context.attrs.placeholder !== undefined && pickerConfig.placeholder === undefined) {\n pickerConfig.placeholder = context.attrs.placeholder\n }\n\n const initial = ref(null)\n const display = ref(false)\n\n const setValue = (v) => {\n if (v && v.utc) {\n value.value = v.utc\n }\n }\n\n watch(\n value,\n () => {\n initial.value = {\n local: value.value ? new Date(value.value) : null,\n utc: value.value,\n }\n display.value = true\n },\n { deep: true, immediate: true },\n )\n\n return {\n display,\n pickerConfig,\n initial,\n value,\n setValue,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <DatePicker\n v-if=\"display\"\n :model-value=\"initial\"\n :config=\"pickerConfig\"\n @update:model-value=\"setValue($event)\"\n />\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;AAMA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,YAAY,EACV,YAAA,EACF;CACA,MAAM,GAAO,GAAS;EACpB,IAAM,EAAE,aAAU,EAAQ;EAE1B,CAAI,EAAM,SAAS,QAAQ,EAAM,UAAU,QACzC,EAAM,wBAAQ,IAAI,KAAK;EAIzB,IAAM,IAAe;GACnB,UAAU;GACV,GAHiB,EAAQ,MAAM,UAAU,CAAC;EAI5C;EACA,AAAI,EAAQ,MAAM,gBAAgB,KAAA,KAAa,EAAa,gBAAgB,KAAA,MAC1E,EAAa,cAAc,EAAQ,MAAM;EAG3C,IAAM,IAAU,EAAI,IAAI,GAClB,IAAU,EAAI,EAAK;EAoBzB,OAZA,EACE,SACM;GAKJ,AAJA,EAAQ,QAAQ;IACd,OAAO,EAAM,QAAQ,IAAI,KAAK,EAAM,KAAK,IAAI;IAC7C,KAAK,EAAM;GACb,GACA,EAAQ,QAAQ;EAClB,GACA;GAAE,MAAM;GAAM,WAAW;EAAK,CAChC,GAEO;GACL;GACA;GACA;GACA;GACA,WAvBgB,MAAM;IACtB,AAAI,KAAK,EAAE,QACT,EAAM,QAAQ,EAAE;GAEpB;EAoBA;CACF;AACF,CAAC;;;CAIC,OAAA,EAAA,GAAA,EAgBgB,GAAA,MAAA,EAAA;EAfH,SAAO,QAMd,CAJM,EAAA,WADR,EAAA,GAAA,EAKE,GAAA;;GAHC,eAAa,EAAA;GACb,QAAQ,EAAA;GACR,uBAAkB,AAAA,EAAA,QAAA,MAAE,EAAA,SAAS,CAAM;;;CAIF,GAAA,CAAA,EAAA,EAAA,eAApB,GAAW;EAAwB,MAAA;EAEnD,IAAA,QAEO,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EADL,EAAA,GAAA,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components179.js","names":[],"sources":["../src/vueformelements/ImagePickerElement.vue"],"sourcesContent":["<!-- eslint-disable-next-line vue/block-lang -->\n<script>\nimport { defineElement } from '@vueform/vueform'\nimport ImagePicker from '@/components/custom/ImagePicker.vue'\nimport { ref, watch } from 'vue'\nimport { ipeConfig } from '@/vueformelements/config/ImagePickerElementConfig'\n\nexport default defineElement({\n name: 'ImagePickerElement',\n components: { ImagePicker },\n\n setup(props, ctx) {\n const { value } = ctx.element // value is ref. its a string (image id) or undefined\n\n const model = ref({\n id: value.value,\n source: '',\n title: '',\n isAdult: false,\n url: '',\n })\n\n watch(\n () => value,\n (newVal) => {\n model.value.id = newVal.value\n },\n { immediate: true, deep: true },\n )\n\n return { ipeConfig, value, model }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <ImagePicker\n v-model=\"model\"\n @update:modelValue=\"(img) => (value = img?.id)\"\n :editable=\"false\"\n :details=\"false\"\n :environment=\"ipeConfig.environment\"\n :articleEditorUrl=\"ipeConfig.articleEditorUrl\"\n :searchImageWidgetUrl=\"ipeConfig.searchImageWidgetUrl\"\n :imageBaseUrl=\"ipeConfig.imageBaseUrl\"\n :imageViewId=\"ipeConfig.imageViewId\"\n />\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;;AAOA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,YAAY,EAAE,aAAA,EAAY;CAE1B,MAAM,GAAO,GAAK;EAChB,IAAM,EAAE,aAAU,EAAI,SAEhB,IAAQ,EAAI;GAChB,IAAI,EAAM;GACV,QAAQ;GACR,OAAO;GACP,SAAS;GACT,KAAK;EACP,CAAC;EAUD,OARA,QACQ,IACL,MAAW;GACV,EAAM,MAAM,KAAK,EAAO;EAC1B,GACA;GAAE,WAAW;GAAM,MAAM;EAAK,CAChC,GAEO;GAAE;GAAW;GAAO;EAAM;CACnC;AACF,CAAC;;;CAIC,OAAA,EAAA,GAAA,EAqBgB,GAAA,MAAA,EAAA;EApBH,SAAO,QAWd,CAVF,EAUE,GAAA;GATS,YAAA,EAAA;GAAA,uBAAA,CAAA,AAAA,EAAA,QAAA,MAAA,EAAA,QAAK,GACO,AAAA,EAAA,QAAA,MAAS,EAAA,QAAQ,GAAK,EAAA;GAC1C,UAAU;GACV,SAAS;GACT,aAAa,EAAA,UAAU;GACvB,kBAAkB,EAAA,UAAU;GAC5B,sBAAsB,EAAA,UAAU;GAChC,cAAc,EAAA,UAAU;GACxB,aAAa,EAAA,UAAU;;;;;;;;;;CAIU,GAAA,CAAA,EAAA,EAAA,eAApB,GAAW;EAAwB,MAAA;EAEnD,IAAA,QAEO,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EADL,EAAA,GAAA,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"admins-components179.js","names":[],"sources":["../src/vueformelements/ImagePickerElement.vue"],"sourcesContent":["<!-- eslint-disable-next-line vue/block-lang -->\n<script>\nimport { defineElement } from '@vueform/vueform'\nimport ImagePicker from '@/components/custom/ImagePicker.vue'\nimport { ref, watch } from 'vue'\nimport { ipeConfig } from '@/vueformelements/config/ImagePickerElementConfig'\n\nexport default defineElement({\n name: 'ImagePickerElement',\n components: { ImagePicker },\n\n setup(props, ctx) {\n const { value } = ctx.element\n\n const model = ref({\n id: value.value,\n source: '',\n title: '',\n isAdult: false,\n url: '',\n })\n\n watch(\n () => value,\n (newVal) => {\n model.value.id = newVal.value\n },\n { immediate: true, deep: true },\n )\n\n return { ipeConfig, value, model }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <ImagePicker\n v-model=\"model\"\n @update:modelValue=\"(img) => (value = img?.id)\"\n :editable=\"false\"\n :details=\"false\"\n :environment=\"ipeConfig.environment\"\n :articleEditorUrl=\"ipeConfig.articleEditorUrl\"\n :searchImageWidgetUrl=\"ipeConfig.searchImageWidgetUrl\"\n :imageBaseUrl=\"ipeConfig.imageBaseUrl\"\n :imageViewId=\"ipeConfig.imageViewId\"\n />\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;;AAOA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,YAAY,EAAE,aAAA,EAAY;CAE1B,MAAM,GAAO,GAAK;EAChB,IAAM,EAAE,aAAU,EAAI,SAEhB,IAAQ,EAAI;GAChB,IAAI,EAAM;GACV,QAAQ;GACR,OAAO;GACP,SAAS;GACT,KAAK;EACP,CAAC;EAUD,OARA,QACQ,IACL,MAAW;GACV,EAAM,MAAM,KAAK,EAAO;EAC1B,GACA;GAAE,WAAW;GAAM,MAAM;EAAK,CAChC,GAEO;GAAE;GAAW;GAAO;EAAM;CACnC;AACF,CAAC;;;CAIC,OAAA,EAAA,GAAA,EAqBgB,GAAA,MAAA,EAAA;EApBH,SAAO,QAWd,CAVF,EAUE,GAAA;GATS,YAAA,EAAA;GAAA,uBAAA,CAAA,AAAA,EAAA,QAAA,MAAA,EAAA,QAAK,GACO,AAAA,EAAA,QAAA,MAAS,EAAA,QAAQ,GAAK,EAAA;GAC1C,UAAU;GACV,SAAS;GACT,aAAa,EAAA,UAAU;GACvB,kBAAkB,EAAA,UAAU;GAC5B,sBAAsB,EAAA,UAAU;GAChC,cAAc,EAAA,UAAU;GACxB,aAAa,EAAA,UAAU;;;;;;;;;;CAIU,GAAA,CAAA,EAAA,EAAA,eAApB,GAAW;EAAwB,MAAA;EAEnD,IAAA,QAEO,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EADL,EAAA,GAAA,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components21.js","names":[],"sources":["../src/components/DateRangePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PickedUtcRange } from '@/types/types'\nimport type { DateRangePickerConfig } from '@/types/datepickers'\nimport { dateRangePickerConfigDefaults } from '@/types/datepickers'\n\nexport type { PickedUtcRange, DateRangePickerConfig }\nexport { dateRangePickerConfigDefaults }\n\nexport interface DateRangePickerProps {\n modelValue?: PickedUtcRange | null\n config?: DateRangePickerConfig\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, useId } from 'vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport Button from '@/components/Button.vue'\nimport { localToUTCString, formatDate, endOfDay, laterOf, earlierOf } from '@/utils/date'\nimport {\n predefinedRanges,\n applyPredefinedRange,\n matchPredefinedRange,\n isPredefinedRangeInBounds,\n canStepInBounds,\n type PredefinedRangeKey,\n} from '@/utils/predefinedDateRange'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\n\nimport type { PickedDate } from '@/types/types'\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n modelValue: null,\n config: () => ({ ...dateRangePickerConfigDefaults }),\n})\n\nconst emit = defineEmits<{ 'update:modelValue': [value: PickedUtcRange | null] }>()\n\nconst tempId = `drp-input-${useId()}`\n\nconst innerConfig = computed(() => ({ ...dateRangePickerConfigDefaults, ...props.config }))\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef, {\n isOutsideClick: (e, wrapperEl, dropdownEl) => {\n const target = e.target as Node\n return (\n !(wrapperEl?.contains(target) ?? false) &&\n !(dropdownEl?.contains(target) ?? false) &&\n !(target instanceof Element && target.closest('.c-dropdown'))\n )\n },\n})\n\nfunction toPicked(utc: string | null): PickedDate | null {\n return utc ? { local: new Date(utc), utc } : null\n}\n\nfunction makePicked(date: Date): PickedDate {\n return { local: date, utc: localToUTCString(date, innerConfig.value.showTime) }\n}\n\nfunction endOfDayPicked(picked: PickedDate): PickedDate {\n return picked.local ? makePicked(endOfDay(picked.local)) : picked\n}\n\nconst format = computed(\n () =>\n innerConfig.value.format ?? (innerConfig.value.showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'),\n)\n\nfunction formatUtc(utc: string | null | undefined): string {\n return utc ? formatDate(new Date(utc), format.value) : '...'\n}\n\nconst bufferFrom = ref<PickedDate | null>(toPicked(props.modelValue?.fromUtc ?? null))\nconst bufferTo = ref<PickedDate | null>(toPicked(props.modelValue?.toUtc ?? null))\nconst displayFrom = ref<string | null>(props.modelValue?.fromUtc ?? null)\nconst displayTo = ref<string | null>(props.modelValue?.toUtc ?? null)\n\nconst hasValue = computed(() => displayFrom.value != null || displayTo.value != null)\nconst minTo = computed(() => bufferFrom.value?.local ?? null)\nconst maxFrom = computed(() => bufferTo.value?.local ?? null)\n\nconst fromMinDate = computed(() => innerConfig.value.minDate ?? null)\nconst fromMaxDate = computed(() =>\n earlierOf(innerConfig.value.maxDate ?? null, maxFrom.value ?? null),\n)\n\nconst toMinDate = computed(() => laterOf(innerConfig.value.minDate ?? null, minTo.value ?? null))\nconst toMaxDate = computed(() => innerConfig.value.maxDate ?? null)\n\nwatch(\n () => props.modelValue,\n (val) => {\n const from = val?.fromUtc ?? null\n const to = val?.toUtc ?? null\n bufferFrom.value = toPicked(from)\n bufferTo.value = toPicked(to)\n displayFrom.value = from\n displayTo.value = to\n },\n)\n\nwatch(isOpen, (open) => {\n if (!open) return\n if (innerConfig.value.lazy) {\n bufferFrom.value = toPicked(displayFrom.value)\n bufferTo.value = toPicked(displayTo.value)\n }\n //nextTick(positionDropdown)\n})\n\nfunction updateFrom(val: PickedDate | null) {\n bufferFrom.value = val\n if (val && !bufferTo.value)\n bufferTo.value = innerConfig.value.showTime ? endOfDayPicked(val) : val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction updateTo(val: PickedDate | null) {\n bufferTo.value = val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction emitCurrent() {\n const fromUtc = bufferFrom.value?.utc ?? null\n let toUtc = bufferTo.value?.utc ?? null\n\n // If showTime is false, set toUtc to end of day (23:59:59)\n if (toUtc && !innerConfig.value.showTime && bufferTo.value?.local) {\n const toAtEndOfDay = endOfDay(bufferTo.value.local)\n toUtc = localToUTCString(toAtEndOfDay, true)\n }\n\n displayFrom.value = fromUtc\n displayTo.value = toUtc\n emit('update:modelValue', fromUtc || toUtc ? { fromUtc, toUtc } : null)\n}\n\nfunction confirm() {\n if (innerConfig.value.lazy) emitCurrent()\n isOpen.value = false\n}\n\nfunction clear() {\n bufferFrom.value = null\n bufferTo.value = null\n displayFrom.value = null\n displayTo.value = null\n emit('update:modelValue', null)\n}\n\nfunction clearBuffer() {\n bufferFrom.value = null\n bufferTo.value = null\n}\n\nfunction focusAndOpen() {\n isOpen.value = true\n}\n\ndefineExpose({ focusAndOpen })\n\nfunction computeStepOffset(): number | null {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return null\n\n const dayMs = 24 * 60 * 60 * 1000\n return innerConfig.value.showTime\n ? to.getTime() - from.getTime()\n : (Math.round((to.getTime() - from.getTime()) / dayMs) + 1) * dayMs\n}\n\nconst canStepBack = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, -offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nconst canStepForward = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nfunction rangeStep(delta: number) {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return\n\n const offset = computeStepOffset()\n if (offset == null) return\n\n const allowed = canStepInBounds(from, to, offset * delta, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n if (!allowed) return\n\n bufferFrom.value = makePicked(new Date(from.getTime() + offset * delta))\n bufferTo.value = makePicked(new Date(to.getTime() + offset * delta))\n\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nconst activePredefinedRange = computed<PredefinedRangeKey | null>(() => {\n const fromLocal = bufferFrom.value?.local\n const toLocal = bufferTo.value?.local\n if (!fromLocal || !toLocal) return null\n return matchPredefinedRange(fromLocal, toLocal, { showTime: innerConfig.value.showTime ?? false })\n})\n\nconst predefinedRangeDisabled = computed<Record<PredefinedRangeKey, boolean>>(() => {\n const bounds = {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n }\n const out = {} as Record<PredefinedRangeKey, boolean>\n for (const range of predefinedRanges) {\n out[range.key] = !isPredefinedRangeInBounds(range.key, bounds)\n }\n return out\n})\n\nfunction pickPredefinedRange(key: PredefinedRangeKey) {\n const { from, to } = applyPredefinedRange(key, { showTime: innerConfig.value.showTime ?? false })\n bufferFrom.value = from\n bufferTo.value = to\n emitCurrent()\n\n if (innerConfig.value.lazy) {\n isOpen.value = false\n }\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div\n ref=\"wrapperRef\"\n class=\"drp-wrapper\"\n :class=\"{ 'drp-wrapper--compact': innerConfig.compact }\"\n >\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': innerConfig.size === 'small',\n 'c-input-row--lg': innerConfig.size === 'large',\n 'c-input-row--focus': isOpen,\n }\"\n @click=\"isOpen = !isOpen\"\n >\n <div class=\"drp-input\">\n <template v-if=\"hasValue\">\n <span class=\"c-truncate drp-input__single\"\n >{{ formatUtc(displayFrom) }} – {{ formatUtc(displayTo) }}</span\n >\n <span class=\"drp-input__multi\">\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayFrom) }}</span>\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayTo) }}</span>\n </span>\n </template>\n <span v-else class=\"c-placeholder drp-input__placeholder\"\n >{{ innerConfig.placeholderFrom }} – {{ innerConfig.placeholderTo }}</span\n >\n </div>\n <button\n type=\"button\"\n class=\"c-icon-btn dp-clear c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n @click.stop=\"clear\"\n aria-label=\"Törlés\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <button\n v-if=\"innerConfig.showIcon\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--calendar\"\n @click.stop=\"isOpen = !isOpen\"\n aria-label=\"Naptár megnyitása\"\n >\n <i class=\"fa-regular fa-fw fa-calendar\"></i>\n </button>\n </div>\n\n <Teleport to=\"body\">\n <div class=\"ac-component\">\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n class=\"c-dropdown drp-dropdown\"\n :style=\"dropdownStyle\"\n >\n <div class=\"drp-pickers\">\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-from`\">{{\n innerConfig.placeholderFrom\n }}</label>\n <DatePicker\n :id=\"`${tempId}-from`\"\n :model-value=\"bufferFrom\"\n :config=\"{\n ...innerConfig,\n minDate: fromMinDate,\n maxDate: fromMaxDate,\n placeholder: innerConfig.placeholderFrom,\n }\"\n @update:model-value=\"updateFrom\"\n />\n </div>\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-to`\">{{\n innerConfig.placeholderTo\n }}</label>\n <DatePicker\n :id=\"`${tempId}-to`\"\n :model-value=\"bufferTo\"\n :config=\"{\n ...innerConfig,\n minDate: toMinDate,\n maxDate: toMaxDate,\n placeholder: innerConfig.placeholderTo,\n }\"\n @update:model-value=\"updateTo\"\n />\n </div>\n </div>\n <div v-if=\"innerConfig.showPresets\" class=\"drp-toolbar\">\n <span\n class=\"d-flex\"\n v-tooltip=\"\n !canStepBack\n ? 'Nem léphető tovább a minimum dátum miatt'\n : 'Intervallum mozgatása visszafelé'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-left\"\n class=\"drp-toolbar__stepper drp-toolbar__stepper--left\"\n :disabled=\"!canStepBack\"\n @click=\"rangeStep(-1)\"\n />\n </span>\n <div class=\"predefined-ranges\">\n <a\n v-for=\"range in predefinedRanges\"\n :key=\"range.key\"\n class=\"predefined-range\"\n :class=\"{\n 'predefined-range--active': activePredefinedRange === range.key,\n 'predefined-range--disabled': predefinedRangeDisabled[range.key],\n }\"\n :aria-disabled=\"predefinedRangeDisabled[range.key]\"\n @click=\"\n predefinedRangeDisabled[range.key] ? null : pickPredefinedRange(range.key)\n \"\n >\n {{ range.label }}\n </a>\n </div>\n <span\n class=\"d-flex\"\n v-tooltip=\"\n !canStepForward\n ? 'Nem léphető tovább a maximum dátum miatt'\n : 'Intervallum mozgatása előre'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-right\"\n :disabled=\"!canStepForward\"\n @click=\"rangeStep(1)\"\n class=\"drp-toolbar__stepper drp-toolbar__stepper--right\"\n />\n </span>\n </div>\n <div\n v-if=\"innerConfig.showClearButton || innerConfig.showOkButton || innerConfig.lazy\"\n class=\"c-footer\"\n >\n <Button\n v-if=\"innerConfig.showClearButton\"\n label=\"Törlés\"\n outline\n @click=\"innerConfig.lazy ? clearBuffer() : clear()\"\n />\n <Button\n v-if=\"innerConfig.showOkButton || innerConfig.lazy\"\n label=\"OK\"\n type=\"success\"\n @click=\"confirm\"\n />\n </div>\n </div>\n </div>\n </Teleport>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components21.js","names":[],"sources":["../src/components/DateRangePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PickedUtcRange } from '@/types/types'\nimport type { DateRangePickerConfig } from '@/types/datepickers'\nimport { dateRangePickerConfigDefaults } from '@/types/datepickers'\n\nexport type { PickedUtcRange, DateRangePickerConfig }\nexport { dateRangePickerConfigDefaults }\n\nexport interface DateRangePickerProps {\n modelValue?: PickedUtcRange | null\n config?: DateRangePickerConfig\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, useId } from 'vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport Button from '@/components/Button.vue'\nimport { localToUTCString, formatDate, endOfDay, laterOf, earlierOf } from '@/utils/date'\nimport {\n predefinedRanges,\n applyPredefinedRange,\n matchPredefinedRange,\n isPredefinedRangeInBounds,\n canStepInBounds,\n type PredefinedRangeKey,\n} from '@/utils/predefinedDateRange'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\n\nimport type { PickedDate } from '@/types/types'\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n modelValue: null,\n config: () => ({ ...dateRangePickerConfigDefaults }),\n})\n\nconst emit = defineEmits<{ 'update:modelValue': [value: PickedUtcRange | null] }>()\n\nconst tempId = `drp-input-${useId()}`\n\nconst innerConfig = computed(() => ({ ...dateRangePickerConfigDefaults, ...props.config }))\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef, {\n isOutsideClick: (e, wrapperEl, dropdownEl) => {\n const target = e.target as Node\n return (\n !(wrapperEl?.contains(target) ?? false) &&\n !(dropdownEl?.contains(target) ?? false) &&\n !(target instanceof Element && target.closest('.c-dropdown'))\n )\n },\n})\n\nfunction toPicked(utc: string | null): PickedDate | null {\n return utc ? { local: new Date(utc), utc } : null\n}\n\nfunction makePicked(date: Date): PickedDate {\n return { local: date, utc: localToUTCString(date, innerConfig.value.showTime) }\n}\n\nfunction endOfDayPicked(picked: PickedDate): PickedDate {\n return picked.local ? makePicked(endOfDay(picked.local)) : picked\n}\n\nconst format = computed(\n () =>\n innerConfig.value.format ?? (innerConfig.value.showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'),\n)\n\nfunction formatUtc(utc: string | null | undefined): string {\n return utc ? formatDate(new Date(utc), format.value) : '...'\n}\n\nconst bufferFrom = ref<PickedDate | null>(toPicked(props.modelValue?.fromUtc ?? null))\nconst bufferTo = ref<PickedDate | null>(toPicked(props.modelValue?.toUtc ?? null))\nconst displayFrom = ref<string | null>(props.modelValue?.fromUtc ?? null)\nconst displayTo = ref<string | null>(props.modelValue?.toUtc ?? null)\n\nconst hasValue = computed(() => displayFrom.value != null || displayTo.value != null)\nconst minTo = computed(() => bufferFrom.value?.local ?? null)\nconst maxFrom = computed(() => bufferTo.value?.local ?? null)\n\nconst fromMinDate = computed(() => innerConfig.value.minDate ?? null)\nconst fromMaxDate = computed(() =>\n earlierOf(innerConfig.value.maxDate ?? null, maxFrom.value ?? null),\n)\n\nconst toMinDate = computed(() => laterOf(innerConfig.value.minDate ?? null, minTo.value ?? null))\nconst toMaxDate = computed(() => innerConfig.value.maxDate ?? null)\n\nwatch(\n () => props.modelValue,\n (val) => {\n const from = val?.fromUtc ?? null\n const to = val?.toUtc ?? null\n bufferFrom.value = toPicked(from)\n bufferTo.value = toPicked(to)\n displayFrom.value = from\n displayTo.value = to\n },\n)\n\nwatch(isOpen, (open) => {\n if (!open) return\n if (innerConfig.value.lazy) {\n bufferFrom.value = toPicked(displayFrom.value)\n bufferTo.value = toPicked(displayTo.value)\n }\n})\n\nfunction updateFrom(val: PickedDate | null) {\n bufferFrom.value = val\n if (val && !bufferTo.value)\n bufferTo.value = innerConfig.value.showTime ? endOfDayPicked(val) : val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction updateTo(val: PickedDate | null) {\n bufferTo.value = val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction emitCurrent() {\n const fromUtc = bufferFrom.value?.utc ?? null\n let toUtc = bufferTo.value?.utc ?? null\n\n if (toUtc && !innerConfig.value.showTime && bufferTo.value?.local) {\n const toAtEndOfDay = endOfDay(bufferTo.value.local)\n toUtc = localToUTCString(toAtEndOfDay, true)\n }\n\n displayFrom.value = fromUtc\n displayTo.value = toUtc\n emit('update:modelValue', fromUtc || toUtc ? { fromUtc, toUtc } : null)\n}\n\nfunction confirm() {\n if (innerConfig.value.lazy) emitCurrent()\n isOpen.value = false\n}\n\nfunction clear() {\n bufferFrom.value = null\n bufferTo.value = null\n displayFrom.value = null\n displayTo.value = null\n emit('update:modelValue', null)\n}\n\nfunction clearBuffer() {\n bufferFrom.value = null\n bufferTo.value = null\n}\n\nfunction focusAndOpen() {\n isOpen.value = true\n}\n\ndefineExpose({ focusAndOpen })\n\nfunction computeStepOffset(): number | null {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return null\n\n const dayMs = 24 * 60 * 60 * 1000\n return innerConfig.value.showTime\n ? to.getTime() - from.getTime()\n : (Math.round((to.getTime() - from.getTime()) / dayMs) + 1) * dayMs\n}\n\nconst canStepBack = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, -offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nconst canStepForward = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nfunction rangeStep(delta: number) {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return\n\n const offset = computeStepOffset()\n if (offset == null) return\n\n const allowed = canStepInBounds(from, to, offset * delta, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n if (!allowed) return\n\n bufferFrom.value = makePicked(new Date(from.getTime() + offset * delta))\n bufferTo.value = makePicked(new Date(to.getTime() + offset * delta))\n\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nconst activePredefinedRange = computed<PredefinedRangeKey | null>(() => {\n const fromLocal = bufferFrom.value?.local\n const toLocal = bufferTo.value?.local\n if (!fromLocal || !toLocal) return null\n return matchPredefinedRange(fromLocal, toLocal, { showTime: innerConfig.value.showTime ?? false })\n})\n\nconst predefinedRangeDisabled = computed<Record<PredefinedRangeKey, boolean>>(() => {\n const bounds = {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n }\n const out = {} as Record<PredefinedRangeKey, boolean>\n for (const range of predefinedRanges) {\n out[range.key] = !isPredefinedRangeInBounds(range.key, bounds)\n }\n return out\n})\n\nfunction pickPredefinedRange(key: PredefinedRangeKey) {\n const { from, to } = applyPredefinedRange(key, { showTime: innerConfig.value.showTime ?? false })\n bufferFrom.value = from\n bufferTo.value = to\n emitCurrent()\n\n if (innerConfig.value.lazy) {\n isOpen.value = false\n }\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div\n ref=\"wrapperRef\"\n class=\"drp-wrapper\"\n :class=\"{ 'drp-wrapper--compact': innerConfig.compact }\"\n >\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': innerConfig.size === 'small',\n 'c-input-row--lg': innerConfig.size === 'large',\n 'c-input-row--focus': isOpen,\n }\"\n @click=\"isOpen = !isOpen\"\n >\n <div class=\"drp-input\">\n <template v-if=\"hasValue\">\n <span class=\"c-truncate drp-input__single\"\n >{{ formatUtc(displayFrom) }} – {{ formatUtc(displayTo) }}</span\n >\n <span class=\"drp-input__multi\">\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayFrom) }}</span>\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayTo) }}</span>\n </span>\n </template>\n <span v-else class=\"c-placeholder drp-input__placeholder\"\n >{{ innerConfig.placeholderFrom }} – {{ innerConfig.placeholderTo }}</span\n >\n </div>\n <button\n type=\"button\"\n class=\"c-icon-btn dp-clear c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n @click.stop=\"clear\"\n aria-label=\"Törlés\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <button\n v-if=\"innerConfig.showIcon\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--calendar\"\n @click.stop=\"isOpen = !isOpen\"\n aria-label=\"Naptár megnyitása\"\n >\n <i class=\"fa-regular fa-fw fa-calendar\"></i>\n </button>\n </div>\n\n <Teleport to=\"body\">\n <div class=\"ac-component\">\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n class=\"c-dropdown drp-dropdown\"\n :style=\"dropdownStyle\"\n >\n <div class=\"drp-pickers\">\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-from`\">{{\n innerConfig.placeholderFrom\n }}</label>\n <DatePicker\n :id=\"`${tempId}-from`\"\n :model-value=\"bufferFrom\"\n :config=\"{\n ...innerConfig,\n minDate: fromMinDate,\n maxDate: fromMaxDate,\n placeholder: innerConfig.placeholderFrom,\n }\"\n @update:model-value=\"updateFrom\"\n />\n </div>\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-to`\">{{\n innerConfig.placeholderTo\n }}</label>\n <DatePicker\n :id=\"`${tempId}-to`\"\n :model-value=\"bufferTo\"\n :config=\"{\n ...innerConfig,\n minDate: toMinDate,\n maxDate: toMaxDate,\n placeholder: innerConfig.placeholderTo,\n }\"\n @update:model-value=\"updateTo\"\n />\n </div>\n </div>\n <div v-if=\"innerConfig.showPresets\" class=\"drp-toolbar\">\n <span\n class=\"d-flex\"\n v-tooltip=\"\n !canStepBack\n ? 'Nem léphető tovább a minimum dátum miatt'\n : 'Intervallum mozgatása visszafelé'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-left\"\n class=\"drp-toolbar__stepper drp-toolbar__stepper--left\"\n :disabled=\"!canStepBack\"\n @click=\"rangeStep(-1)\"\n />\n </span>\n <div class=\"predefined-ranges\">\n <a\n v-for=\"range in predefinedRanges\"\n :key=\"range.key\"\n class=\"predefined-range\"\n :class=\"{\n 'predefined-range--active': activePredefinedRange === range.key,\n 'predefined-range--disabled': predefinedRangeDisabled[range.key],\n }\"\n :aria-disabled=\"predefinedRangeDisabled[range.key]\"\n @click=\"\n predefinedRangeDisabled[range.key] ? null : pickPredefinedRange(range.key)\n \"\n >\n {{ range.label }}\n </a>\n </div>\n <span\n class=\"d-flex\"\n v-tooltip=\"\n !canStepForward\n ? 'Nem léphető tovább a maximum dátum miatt'\n : 'Intervallum mozgatása előre'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-right\"\n :disabled=\"!canStepForward\"\n @click=\"rangeStep(1)\"\n class=\"drp-toolbar__stepper drp-toolbar__stepper--right\"\n />\n </span>\n </div>\n <div\n v-if=\"innerConfig.showClearButton || innerConfig.showOkButton || innerConfig.lazy\"\n class=\"c-footer\"\n >\n <Button\n v-if=\"innerConfig.showClearButton\"\n label=\"Törlés\"\n outline\n @click=\"innerConfig.lazy ? clearBuffer() : clear()\"\n />\n <Button\n v-if=\"innerConfig.showOkButton || innerConfig.lazy\"\n label=\"OK\"\n type=\"success\"\n @click=\"confirm\"\n />\n </div>\n </div>\n </div>\n </Teleport>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components22.js","names":[],"sources":["../src/components/DateRangePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PickedUtcRange } from '@/types/types'\nimport type { DateRangePickerConfig } from '@/types/datepickers'\nimport { dateRangePickerConfigDefaults } from '@/types/datepickers'\n\nexport type { PickedUtcRange, DateRangePickerConfig }\nexport { dateRangePickerConfigDefaults }\n\nexport interface DateRangePickerProps {\n modelValue?: PickedUtcRange | null\n config?: DateRangePickerConfig\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, useId } from 'vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport Button from '@/components/Button.vue'\nimport { localToUTCString, formatDate, endOfDay, laterOf, earlierOf } from '@/utils/date'\nimport {\n predefinedRanges,\n applyPredefinedRange,\n matchPredefinedRange,\n isPredefinedRangeInBounds,\n canStepInBounds,\n type PredefinedRangeKey,\n} from '@/utils/predefinedDateRange'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\n\nimport type { PickedDate } from '@/types/types'\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n modelValue: null,\n config: () => ({ ...dateRangePickerConfigDefaults }),\n})\n\nconst emit = defineEmits<{ 'update:modelValue': [value: PickedUtcRange | null] }>()\n\nconst tempId = `drp-input-${useId()}`\n\nconst innerConfig = computed(() => ({ ...dateRangePickerConfigDefaults, ...props.config }))\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef, {\n isOutsideClick: (e, wrapperEl, dropdownEl) => {\n const target = e.target as Node\n return (\n !(wrapperEl?.contains(target) ?? false) &&\n !(dropdownEl?.contains(target) ?? false) &&\n !(target instanceof Element && target.closest('.c-dropdown'))\n )\n },\n})\n\nfunction toPicked(utc: string | null): PickedDate | null {\n return utc ? { local: new Date(utc), utc } : null\n}\n\nfunction makePicked(date: Date): PickedDate {\n return { local: date, utc: localToUTCString(date, innerConfig.value.showTime) }\n}\n\nfunction endOfDayPicked(picked: PickedDate): PickedDate {\n return picked.local ? makePicked(endOfDay(picked.local)) : picked\n}\n\nconst format = computed(\n () =>\n innerConfig.value.format ?? (innerConfig.value.showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'),\n)\n\nfunction formatUtc(utc: string | null | undefined): string {\n return utc ? formatDate(new Date(utc), format.value) : '...'\n}\n\nconst bufferFrom = ref<PickedDate | null>(toPicked(props.modelValue?.fromUtc ?? null))\nconst bufferTo = ref<PickedDate | null>(toPicked(props.modelValue?.toUtc ?? null))\nconst displayFrom = ref<string | null>(props.modelValue?.fromUtc ?? null)\nconst displayTo = ref<string | null>(props.modelValue?.toUtc ?? null)\n\nconst hasValue = computed(() => displayFrom.value != null || displayTo.value != null)\nconst minTo = computed(() => bufferFrom.value?.local ?? null)\nconst maxFrom = computed(() => bufferTo.value?.local ?? null)\n\nconst fromMinDate = computed(() => innerConfig.value.minDate ?? null)\nconst fromMaxDate = computed(() =>\n earlierOf(innerConfig.value.maxDate ?? null, maxFrom.value ?? null),\n)\n\nconst toMinDate = computed(() => laterOf(innerConfig.value.minDate ?? null, minTo.value ?? null))\nconst toMaxDate = computed(() => innerConfig.value.maxDate ?? null)\n\nwatch(\n () => props.modelValue,\n (val) => {\n const from = val?.fromUtc ?? null\n const to = val?.toUtc ?? null\n bufferFrom.value = toPicked(from)\n bufferTo.value = toPicked(to)\n displayFrom.value = from\n displayTo.value = to\n },\n)\n\nwatch(isOpen, (open) => {\n if (!open) return\n if (innerConfig.value.lazy) {\n bufferFrom.value = toPicked(displayFrom.value)\n bufferTo.value = toPicked(displayTo.value)\n }\n //nextTick(positionDropdown)\n})\n\nfunction updateFrom(val: PickedDate | null) {\n bufferFrom.value = val\n if (val && !bufferTo.value)\n bufferTo.value = innerConfig.value.showTime ? endOfDayPicked(val) : val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction updateTo(val: PickedDate | null) {\n bufferTo.value = val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction emitCurrent() {\n const fromUtc = bufferFrom.value?.utc ?? null\n let toUtc = bufferTo.value?.utc ?? null\n\n // If showTime is false, set toUtc to end of day (23:59:59)\n if (toUtc && !innerConfig.value.showTime && bufferTo.value?.local) {\n const toAtEndOfDay = endOfDay(bufferTo.value.local)\n toUtc = localToUTCString(toAtEndOfDay, true)\n }\n\n displayFrom.value = fromUtc\n displayTo.value = toUtc\n emit('update:modelValue', fromUtc || toUtc ? { fromUtc, toUtc } : null)\n}\n\nfunction confirm() {\n if (innerConfig.value.lazy) emitCurrent()\n isOpen.value = false\n}\n\nfunction clear() {\n bufferFrom.value = null\n bufferTo.value = null\n displayFrom.value = null\n displayTo.value = null\n emit('update:modelValue', null)\n}\n\nfunction clearBuffer() {\n bufferFrom.value = null\n bufferTo.value = null\n}\n\nfunction focusAndOpen() {\n isOpen.value = true\n}\n\ndefineExpose({ focusAndOpen })\n\nfunction computeStepOffset(): number | null {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return null\n\n const dayMs = 24 * 60 * 60 * 1000\n return innerConfig.value.showTime\n ? to.getTime() - from.getTime()\n : (Math.round((to.getTime() - from.getTime()) / dayMs) + 1) * dayMs\n}\n\nconst canStepBack = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, -offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nconst canStepForward = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nfunction rangeStep(delta: number) {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return\n\n const offset = computeStepOffset()\n if (offset == null) return\n\n const allowed = canStepInBounds(from, to, offset * delta, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n if (!allowed) return\n\n bufferFrom.value = makePicked(new Date(from.getTime() + offset * delta))\n bufferTo.value = makePicked(new Date(to.getTime() + offset * delta))\n\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nconst activePredefinedRange = computed<PredefinedRangeKey | null>(() => {\n const fromLocal = bufferFrom.value?.local\n const toLocal = bufferTo.value?.local\n if (!fromLocal || !toLocal) return null\n return matchPredefinedRange(fromLocal, toLocal, { showTime: innerConfig.value.showTime ?? false })\n})\n\nconst predefinedRangeDisabled = computed<Record<PredefinedRangeKey, boolean>>(() => {\n const bounds = {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n }\n const out = {} as Record<PredefinedRangeKey, boolean>\n for (const range of predefinedRanges) {\n out[range.key] = !isPredefinedRangeInBounds(range.key, bounds)\n }\n return out\n})\n\nfunction pickPredefinedRange(key: PredefinedRangeKey) {\n const { from, to } = applyPredefinedRange(key, { showTime: innerConfig.value.showTime ?? false })\n bufferFrom.value = from\n bufferTo.value = to\n emitCurrent()\n\n if (innerConfig.value.lazy) {\n isOpen.value = false\n }\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div\n ref=\"wrapperRef\"\n class=\"drp-wrapper\"\n :class=\"{ 'drp-wrapper--compact': innerConfig.compact }\"\n >\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': innerConfig.size === 'small',\n 'c-input-row--lg': innerConfig.size === 'large',\n 'c-input-row--focus': isOpen,\n }\"\n @click=\"isOpen = !isOpen\"\n >\n <div class=\"drp-input\">\n <template v-if=\"hasValue\">\n <span class=\"c-truncate drp-input__single\"\n >{{ formatUtc(displayFrom) }} – {{ formatUtc(displayTo) }}</span\n >\n <span class=\"drp-input__multi\">\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayFrom) }}</span>\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayTo) }}</span>\n </span>\n </template>\n <span v-else class=\"c-placeholder drp-input__placeholder\"\n >{{ innerConfig.placeholderFrom }} – {{ innerConfig.placeholderTo }}</span\n >\n </div>\n <button\n type=\"button\"\n class=\"c-icon-btn dp-clear c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n @click.stop=\"clear\"\n aria-label=\"Törlés\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <button\n v-if=\"innerConfig.showIcon\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--calendar\"\n @click.stop=\"isOpen = !isOpen\"\n aria-label=\"Naptár megnyitása\"\n >\n <i class=\"fa-regular fa-fw fa-calendar\"></i>\n </button>\n </div>\n\n <Teleport to=\"body\">\n <div class=\"ac-component\">\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n class=\"c-dropdown drp-dropdown\"\n :style=\"dropdownStyle\"\n >\n <div class=\"drp-pickers\">\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-from`\">{{\n innerConfig.placeholderFrom\n }}</label>\n <DatePicker\n :id=\"`${tempId}-from`\"\n :model-value=\"bufferFrom\"\n :config=\"{\n ...innerConfig,\n minDate: fromMinDate,\n maxDate: fromMaxDate,\n placeholder: innerConfig.placeholderFrom,\n }\"\n @update:model-value=\"updateFrom\"\n />\n </div>\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-to`\">{{\n innerConfig.placeholderTo\n }}</label>\n <DatePicker\n :id=\"`${tempId}-to`\"\n :model-value=\"bufferTo\"\n :config=\"{\n ...innerConfig,\n minDate: toMinDate,\n maxDate: toMaxDate,\n placeholder: innerConfig.placeholderTo,\n }\"\n @update:model-value=\"updateTo\"\n />\n </div>\n </div>\n <div v-if=\"innerConfig.showPresets\" class=\"drp-toolbar\">\n <span\n class=\"d-flex\"\n v-tooltip=\"\n !canStepBack\n ? 'Nem léphető tovább a minimum dátum miatt'\n : 'Intervallum mozgatása visszafelé'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-left\"\n class=\"drp-toolbar__stepper drp-toolbar__stepper--left\"\n :disabled=\"!canStepBack\"\n @click=\"rangeStep(-1)\"\n />\n </span>\n <div class=\"predefined-ranges\">\n <a\n v-for=\"range in predefinedRanges\"\n :key=\"range.key\"\n class=\"predefined-range\"\n :class=\"{\n 'predefined-range--active': activePredefinedRange === range.key,\n 'predefined-range--disabled': predefinedRangeDisabled[range.key],\n }\"\n :aria-disabled=\"predefinedRangeDisabled[range.key]\"\n @click=\"\n predefinedRangeDisabled[range.key] ? null : pickPredefinedRange(range.key)\n \"\n >\n {{ range.label }}\n </a>\n </div>\n <span\n class=\"d-flex\"\n v-tooltip=\"\n !canStepForward\n ? 'Nem léphető tovább a maximum dátum miatt'\n : 'Intervallum mozgatása előre'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-right\"\n :disabled=\"!canStepForward\"\n @click=\"rangeStep(1)\"\n class=\"drp-toolbar__stepper drp-toolbar__stepper--right\"\n />\n </span>\n </div>\n <div\n v-if=\"innerConfig.showClearButton || innerConfig.showOkButton || innerConfig.lazy\"\n class=\"c-footer\"\n >\n <Button\n v-if=\"innerConfig.showClearButton\"\n label=\"Törlés\"\n outline\n @click=\"innerConfig.lazy ? clearBuffer() : clear()\"\n />\n <Button\n v-if=\"innerConfig.showOkButton || innerConfig.lazy\"\n label=\"OK\"\n type=\"success\"\n @click=\"confirm\"\n />\n </div>\n </div>\n </div>\n </Teleport>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"admins-components22.js","names":[],"sources":["../src/components/DateRangePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PickedUtcRange } from '@/types/types'\nimport type { DateRangePickerConfig } from '@/types/datepickers'\nimport { dateRangePickerConfigDefaults } from '@/types/datepickers'\n\nexport type { PickedUtcRange, DateRangePickerConfig }\nexport { dateRangePickerConfigDefaults }\n\nexport interface DateRangePickerProps {\n modelValue?: PickedUtcRange | null\n config?: DateRangePickerConfig\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, useId } from 'vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport Button from '@/components/Button.vue'\nimport { localToUTCString, formatDate, endOfDay, laterOf, earlierOf } from '@/utils/date'\nimport {\n predefinedRanges,\n applyPredefinedRange,\n matchPredefinedRange,\n isPredefinedRangeInBounds,\n canStepInBounds,\n type PredefinedRangeKey,\n} from '@/utils/predefinedDateRange'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\n\nimport type { PickedDate } from '@/types/types'\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n modelValue: null,\n config: () => ({ ...dateRangePickerConfigDefaults }),\n})\n\nconst emit = defineEmits<{ 'update:modelValue': [value: PickedUtcRange | null] }>()\n\nconst tempId = `drp-input-${useId()}`\n\nconst innerConfig = computed(() => ({ ...dateRangePickerConfigDefaults, ...props.config }))\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef, {\n isOutsideClick: (e, wrapperEl, dropdownEl) => {\n const target = e.target as Node\n return (\n !(wrapperEl?.contains(target) ?? false) &&\n !(dropdownEl?.contains(target) ?? false) &&\n !(target instanceof Element && target.closest('.c-dropdown'))\n )\n },\n})\n\nfunction toPicked(utc: string | null): PickedDate | null {\n return utc ? { local: new Date(utc), utc } : null\n}\n\nfunction makePicked(date: Date): PickedDate {\n return { local: date, utc: localToUTCString(date, innerConfig.value.showTime) }\n}\n\nfunction endOfDayPicked(picked: PickedDate): PickedDate {\n return picked.local ? makePicked(endOfDay(picked.local)) : picked\n}\n\nconst format = computed(\n () =>\n innerConfig.value.format ?? (innerConfig.value.showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'),\n)\n\nfunction formatUtc(utc: string | null | undefined): string {\n return utc ? formatDate(new Date(utc), format.value) : '...'\n}\n\nconst bufferFrom = ref<PickedDate | null>(toPicked(props.modelValue?.fromUtc ?? null))\nconst bufferTo = ref<PickedDate | null>(toPicked(props.modelValue?.toUtc ?? null))\nconst displayFrom = ref<string | null>(props.modelValue?.fromUtc ?? null)\nconst displayTo = ref<string | null>(props.modelValue?.toUtc ?? null)\n\nconst hasValue = computed(() => displayFrom.value != null || displayTo.value != null)\nconst minTo = computed(() => bufferFrom.value?.local ?? null)\nconst maxFrom = computed(() => bufferTo.value?.local ?? null)\n\nconst fromMinDate = computed(() => innerConfig.value.minDate ?? null)\nconst fromMaxDate = computed(() =>\n earlierOf(innerConfig.value.maxDate ?? null, maxFrom.value ?? null),\n)\n\nconst toMinDate = computed(() => laterOf(innerConfig.value.minDate ?? null, minTo.value ?? null))\nconst toMaxDate = computed(() => innerConfig.value.maxDate ?? null)\n\nwatch(\n () => props.modelValue,\n (val) => {\n const from = val?.fromUtc ?? null\n const to = val?.toUtc ?? null\n bufferFrom.value = toPicked(from)\n bufferTo.value = toPicked(to)\n displayFrom.value = from\n displayTo.value = to\n },\n)\n\nwatch(isOpen, (open) => {\n if (!open) return\n if (innerConfig.value.lazy) {\n bufferFrom.value = toPicked(displayFrom.value)\n bufferTo.value = toPicked(displayTo.value)\n }\n})\n\nfunction updateFrom(val: PickedDate | null) {\n bufferFrom.value = val\n if (val && !bufferTo.value)\n bufferTo.value = innerConfig.value.showTime ? endOfDayPicked(val) : val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction updateTo(val: PickedDate | null) {\n bufferTo.value = val\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nfunction emitCurrent() {\n const fromUtc = bufferFrom.value?.utc ?? null\n let toUtc = bufferTo.value?.utc ?? null\n\n if (toUtc && !innerConfig.value.showTime && bufferTo.value?.local) {\n const toAtEndOfDay = endOfDay(bufferTo.value.local)\n toUtc = localToUTCString(toAtEndOfDay, true)\n }\n\n displayFrom.value = fromUtc\n displayTo.value = toUtc\n emit('update:modelValue', fromUtc || toUtc ? { fromUtc, toUtc } : null)\n}\n\nfunction confirm() {\n if (innerConfig.value.lazy) emitCurrent()\n isOpen.value = false\n}\n\nfunction clear() {\n bufferFrom.value = null\n bufferTo.value = null\n displayFrom.value = null\n displayTo.value = null\n emit('update:modelValue', null)\n}\n\nfunction clearBuffer() {\n bufferFrom.value = null\n bufferTo.value = null\n}\n\nfunction focusAndOpen() {\n isOpen.value = true\n}\n\ndefineExpose({ focusAndOpen })\n\nfunction computeStepOffset(): number | null {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return null\n\n const dayMs = 24 * 60 * 60 * 1000\n return innerConfig.value.showTime\n ? to.getTime() - from.getTime()\n : (Math.round((to.getTime() - from.getTime()) / dayMs) + 1) * dayMs\n}\n\nconst canStepBack = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, -offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nconst canStepForward = computed(() => {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return false\n const offset = computeStepOffset()\n if (offset == null) return false\n return canStepInBounds(from, to, offset, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n})\n\nfunction rangeStep(delta: number) {\n const from = bufferFrom.value?.local\n const to = bufferTo.value?.local\n if (!from || !to) return\n\n const offset = computeStepOffset()\n if (offset == null) return\n\n const allowed = canStepInBounds(from, to, offset * delta, {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n })\n if (!allowed) return\n\n bufferFrom.value = makePicked(new Date(from.getTime() + offset * delta))\n bufferTo.value = makePicked(new Date(to.getTime() + offset * delta))\n\n if (!innerConfig.value.lazy) emitCurrent()\n}\n\nconst activePredefinedRange = computed<PredefinedRangeKey | null>(() => {\n const fromLocal = bufferFrom.value?.local\n const toLocal = bufferTo.value?.local\n if (!fromLocal || !toLocal) return null\n return matchPredefinedRange(fromLocal, toLocal, { showTime: innerConfig.value.showTime ?? false })\n})\n\nconst predefinedRangeDisabled = computed<Record<PredefinedRangeKey, boolean>>(() => {\n const bounds = {\n minDate: innerConfig.value.minDate ?? null,\n maxDate: innerConfig.value.maxDate ?? null,\n showTime: innerConfig.value.showTime ?? false,\n }\n const out = {} as Record<PredefinedRangeKey, boolean>\n for (const range of predefinedRanges) {\n out[range.key] = !isPredefinedRangeInBounds(range.key, bounds)\n }\n return out\n})\n\nfunction pickPredefinedRange(key: PredefinedRangeKey) {\n const { from, to } = applyPredefinedRange(key, { showTime: innerConfig.value.showTime ?? false })\n bufferFrom.value = from\n bufferTo.value = to\n emitCurrent()\n\n if (innerConfig.value.lazy) {\n isOpen.value = false\n }\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div\n ref=\"wrapperRef\"\n class=\"drp-wrapper\"\n :class=\"{ 'drp-wrapper--compact': innerConfig.compact }\"\n >\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': innerConfig.size === 'small',\n 'c-input-row--lg': innerConfig.size === 'large',\n 'c-input-row--focus': isOpen,\n }\"\n @click=\"isOpen = !isOpen\"\n >\n <div class=\"drp-input\">\n <template v-if=\"hasValue\">\n <span class=\"c-truncate drp-input__single\"\n >{{ formatUtc(displayFrom) }} – {{ formatUtc(displayTo) }}</span\n >\n <span class=\"drp-input__multi\">\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayFrom) }}</span>\n <span class=\"c-truncate drp-input__line\">{{ formatUtc(displayTo) }}</span>\n </span>\n </template>\n <span v-else class=\"c-placeholder drp-input__placeholder\"\n >{{ innerConfig.placeholderFrom }} – {{ innerConfig.placeholderTo }}</span\n >\n </div>\n <button\n type=\"button\"\n class=\"c-icon-btn dp-clear c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n @click.stop=\"clear\"\n aria-label=\"Törlés\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <button\n v-if=\"innerConfig.showIcon\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--calendar\"\n @click.stop=\"isOpen = !isOpen\"\n aria-label=\"Naptár megnyitása\"\n >\n <i class=\"fa-regular fa-fw fa-calendar\"></i>\n </button>\n </div>\n\n <Teleport to=\"body\">\n <div class=\"ac-component\">\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n class=\"c-dropdown drp-dropdown\"\n :style=\"dropdownStyle\"\n >\n <div class=\"drp-pickers\">\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-from`\">{{\n innerConfig.placeholderFrom\n }}</label>\n <DatePicker\n :id=\"`${tempId}-from`\"\n :model-value=\"bufferFrom\"\n :config=\"{\n ...innerConfig,\n minDate: fromMinDate,\n maxDate: fromMaxDate,\n placeholder: innerConfig.placeholderFrom,\n }\"\n @update:model-value=\"updateFrom\"\n />\n </div>\n <div class=\"drp-picker-group\">\n <label class=\"drp-label\" :for=\"`${tempId}-to`\">{{\n innerConfig.placeholderTo\n }}</label>\n <DatePicker\n :id=\"`${tempId}-to`\"\n :model-value=\"bufferTo\"\n :config=\"{\n ...innerConfig,\n minDate: toMinDate,\n maxDate: toMaxDate,\n placeholder: innerConfig.placeholderTo,\n }\"\n @update:model-value=\"updateTo\"\n />\n </div>\n </div>\n <div v-if=\"innerConfig.showPresets\" class=\"drp-toolbar\">\n <span\n class=\"d-flex\"\n v-tooltip=\"\n !canStepBack\n ? 'Nem léphető tovább a minimum dátum miatt'\n : 'Intervallum mozgatása visszafelé'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-left\"\n class=\"drp-toolbar__stepper drp-toolbar__stepper--left\"\n :disabled=\"!canStepBack\"\n @click=\"rangeStep(-1)\"\n />\n </span>\n <div class=\"predefined-ranges\">\n <a\n v-for=\"range in predefinedRanges\"\n :key=\"range.key\"\n class=\"predefined-range\"\n :class=\"{\n 'predefined-range--active': activePredefinedRange === range.key,\n 'predefined-range--disabled': predefinedRangeDisabled[range.key],\n }\"\n :aria-disabled=\"predefinedRangeDisabled[range.key]\"\n @click=\"\n predefinedRangeDisabled[range.key] ? null : pickPredefinedRange(range.key)\n \"\n >\n {{ range.label }}\n </a>\n </div>\n <span\n class=\"d-flex\"\n v-tooltip=\"\n !canStepForward\n ? 'Nem léphető tovább a maximum dátum miatt'\n : 'Intervallum mozgatása előre'\n \"\n >\n <Button\n icon=\"fa-solid fa-chevron-right\"\n :disabled=\"!canStepForward\"\n @click=\"rangeStep(1)\"\n class=\"drp-toolbar__stepper drp-toolbar__stepper--right\"\n />\n </span>\n </div>\n <div\n v-if=\"innerConfig.showClearButton || innerConfig.showOkButton || innerConfig.lazy\"\n class=\"c-footer\"\n >\n <Button\n v-if=\"innerConfig.showClearButton\"\n label=\"Törlés\"\n outline\n @click=\"innerConfig.lazy ? clearBuffer() : clear()\"\n />\n <Button\n v-if=\"innerConfig.showOkButton || innerConfig.lazy\"\n label=\"OK\"\n type=\"success\"\n @click=\"confirm\"\n />\n </div>\n </div>\n </div>\n </Teleport>\n </div>\n </div>\n</template>\n"],"mappings":""}