admins-components 9.0.80 → 9.0.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admins-components103.js +2 -1
- package/dist/admins-components103.js.map +1 -1
- package/dist/admins-components105.js.map +1 -1
- package/dist/admins-components16.js +18 -10
- package/dist/admins-components16.js.map +1 -1
- package/dist/admins-components17.js.map +1 -1
- package/dist/admins-components21.js +43 -39
- package/dist/admins-components21.js.map +1 -1
- package/dist/admins-components22.js.map +1 -1
- package/dist/admins-components60.js +2 -1
- package/dist/admins-components60.js.map +1 -1
- package/dist/admins-components75.js +179 -161
- package/dist/admins-components75.js.map +1 -1
- package/dist/admins-components77.js.map +1 -1
- package/dist/admins-components91.js +2 -0
- package/dist/admins-components91.js.map +1 -1
- package/dist/admins-components93.js.map +1 -1
- package/dist/src/components/TextInput.vue.d.ts +8 -0
- package/dist/src/types/data-list.d.ts +3 -2
- package/dist/styles/components/data-table/data-list-options.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/styles/components/data-table/data-table.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/styles/components/data-table/filter-tags.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/package.json +1 -1
|
@@ -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})\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
|
+
{"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 fromPickedRef = bufferFrom.value\n const toPickedRef = bufferTo.value\n if (!fromPickedRef?.local || !toPickedRef?.local) return null\n\n const dayMs = 24 * 60 * 60 * 1000\n const from = fromPickedRef.local\n const to = toPickedRef.local\n\n // \"Whole-day-aligned\" detection runs on local-clock fields because\n // the user's intent is encoded in what they picked on the calendar:\n // start of a day (00:00) and end of a day (23:59). UTC strings are\n // not reliable for this check — a value the user picked at local\n // 00:00 in a +02:00 timezone gets stored as `T22:00:00.000Z` of\n // the previous day.\n const fromMidnight = new Date(from)\n fromMidnight.setHours(0, 0, 0, 0)\n const toMidnight = new Date(to)\n toMidnight.setHours(0, 0, 0, 0)\n const fromIsStartOfDay = from.getTime() === fromMidnight.getTime()\n const toIsEndOfDay = to.getTime() === toMidnight.getTime() + (23 * 60 + 59) * 60 * 1000\n\n if (!innerConfig.value.showTime) {\n // Date-only range: shift by the inclusive calendar-day count.\n // For a single-day selection this is 1 day, for a 7-day range\n // this is 7 days, etc.\n const calendarDays = Math.round((toMidnight.getTime() - fromMidnight.getTime()) / dayMs) + 1\n return calendarDays * dayMs\n }\n\n if (fromIsStartOfDay && toIsEndOfDay) {\n // \"Whole-day-aligned\" time range (e.g. 00:00 → 23:59, possibly\n // spanning multiple days). Shift by the inclusive calendar-day\n // count, so a single full day shifts by 24h and a 7-day span\n // shifts by 7 × 24h.\n const calendarDays = Math.round((toMidnight.getTime() - fromMidnight.getTime()) / dayMs) + 1\n return calendarDays * dayMs\n }\n\n // Otherwise the range is partial (e.g. 10:00 → 12:45 on the same\n // day, or 00:00 → 10:00 on the same day). Shift by the exact\n // duration so the new range starts where the old one ended.\n return to.getTime() - from.getTime()\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})\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":""}
|
|
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 fromPickedRef = bufferFrom.value\n const toPickedRef = bufferTo.value\n if (!fromPickedRef?.local || !toPickedRef?.local) return null\n\n const dayMs = 24 * 60 * 60 * 1000\n const from = fromPickedRef.local\n const to = toPickedRef.local\n\n // \"Whole-day-aligned\" detection runs on local-clock fields because\n // the user's intent is encoded in what they picked on the calendar:\n // start of a day (00:00) and end of a day (23:59). UTC strings are\n // not reliable for this check — a value the user picked at local\n // 00:00 in a +02:00 timezone gets stored as `T22:00:00.000Z` of\n // the previous day.\n const fromMidnight = new Date(from)\n fromMidnight.setHours(0, 0, 0, 0)\n const toMidnight = new Date(to)\n toMidnight.setHours(0, 0, 0, 0)\n const fromIsStartOfDay = from.getTime() === fromMidnight.getTime()\n const toIsEndOfDay = to.getTime() === toMidnight.getTime() + (23 * 60 + 59) * 60 * 1000\n\n if (!innerConfig.value.showTime) {\n // Date-only range: shift by the inclusive calendar-day count.\n // For a single-day selection this is 1 day, for a 7-day range\n // this is 7 days, etc.\n const calendarDays = Math.round((toMidnight.getTime() - fromMidnight.getTime()) / dayMs) + 1\n return calendarDays * dayMs\n }\n\n if (fromIsStartOfDay && toIsEndOfDay) {\n // \"Whole-day-aligned\" time range (e.g. 00:00 → 23:59, possibly\n // spanning multiple days). Shift by the inclusive calendar-day\n // count, so a single full day shifts by 24h and a 7-day span\n // shifts by 7 × 24h.\n const calendarDays = Math.round((toMidnight.getTime() - fromMidnight.getTime()) / dayMs) + 1\n return calendarDays * dayMs\n }\n\n // Otherwise the range is partial (e.g. 10:00 → 12:45 on the same\n // day, or 00:00 → 10:00 on the same day). Shift by the exact\n // duration so the new range starts where the old one ended.\n return to.getTime() - from.getTime()\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components60.js","names":[],"sources":["../src/types/data-list.ts"],"sourcesContent":["import type { DropdownOption } from '@/components/DropdownSelect.vue'\nimport type { PickedDate, PickedUtcRange } from '@/types/types'\nimport type { ButtonType } from '@/components/Button.vue'\nimport type { ConfirmModalProps } from '@/components/ConfirmModal.vue'\n\nexport type FilterValue = string | PickedDate | PickedUtcRange | string[] | null | undefined\n\nexport interface FilterConfig {\n type: 'text' | 'date' | 'date-range' | 'select' | 'multi-select'\n key: string\n placeholder?: string\n options?: DropdownOption[]\n}\n\nexport type LayoutMode = 'table' | 'cards' | 'screen'\n\nexport interface DataTableSettings {\n striped: boolean\n compact: boolean\n}\n\nexport interface DataCardsSettings {\n compact: boolean\n}\n\nexport interface DataListSettings extends DataTableSettings, DataCardsSettings {\n layout: LayoutMode\n columns: Record<string, boolean>\n cardHeaderColumns: Record<string, boolean>\n columnOrder: string[]\n cardHeaderOrder: string[]\n}\n\nexport interface PageSettings {\n page: number\n pageSize: number\n}\n\nexport interface PaginatorSettings extends PageSettings {\n total: number\n}\n\nexport interface DataListConfig {\n selectableAttr?: string\n columns: Column[]\n\n actions?: Array<Action | ActionGroup>\n actionHeader?: string\n}\n\nexport type ColumnType = 'normal' | 'uuid' | 'date' | 'datetime'\n\nexport interface Column {\n visible?: boolean\n primary?: boolean\n hideable?: boolean\n defaultCardHeader?: boolean\n label: string\n property: string\n sort?: Sort | boolean\n type?: ColumnType\n class?: string\n headerClass?: string\n hideCopyToClipboard?: boolean\n hideHeader?: boolean\n\n converter?: (
|
|
1
|
+
{"version":3,"file":"admins-components60.js","names":[],"sources":["../src/types/data-list.ts"],"sourcesContent":["import type { DropdownOption } from '@/components/DropdownSelect.vue'\nimport type { PickedDate, PickedUtcRange } from '@/types/types'\nimport type { ButtonType } from '@/components/Button.vue'\nimport type { ConfirmModalProps } from '@/components/ConfirmModal.vue'\n\nexport type FilterValue = string | PickedDate | PickedUtcRange | string[] | null | undefined\n\nexport interface FilterConfig {\n type: 'text' | 'date' | 'date-range' | 'select' | 'multi-select'\n key: string\n placeholder?: string\n options?: DropdownOption[]\n}\n\nexport type LayoutMode = 'table' | 'cards' | 'screen'\n\nexport interface DataTableSettings {\n striped: boolean\n compact: boolean\n}\n\nexport interface DataCardsSettings {\n compact: boolean\n}\n\nexport interface DataListSettings extends DataTableSettings, DataCardsSettings {\n layout: LayoutMode\n columns: Record<string, boolean>\n cardHeaderColumns: Record<string, boolean>\n columnOrder: string[]\n cardHeaderOrder: string[]\n filtersEager: boolean\n}\n\nexport interface PageSettings {\n page: number\n pageSize: number\n}\n\nexport interface PaginatorSettings extends PageSettings {\n total: number\n}\n\nexport interface DataListConfig {\n selectableAttr?: string\n columns: Column[]\n\n actions?: Array<Action | ActionGroup>\n actionHeader?: string\n}\n\nexport type ColumnType = 'normal' | 'uuid' | 'date' | 'datetime'\n\nexport interface Column {\n visible?: boolean\n primary?: boolean\n hideable?: boolean\n defaultCardHeader?: boolean\n label: string\n property: string\n sort?: Sort | boolean\n type?: ColumnType\n class?: string\n headerClass?: string\n hideCopyToClipboard?: boolean\n hideHeader?: boolean\n\n converter?: (v: any, item: any) => any\n loading?: () => boolean\n}\n\nexport type SortDirection = 'asc' | 'desc' | null\n\nexport interface Sort {\n label: string\n callback: (property: string, direction: SortDirection) => any\n}\n\nexport interface Action {\n icon: string\n label?: string\n ariaLabel?: string\n cardLabel?: string\n type?: ButtonType\n class?: string\n config?: Record<string, any>\n disabled?: (item: any) => boolean\n hidden?: (item: any) => boolean\n callback: (item: any) => any\n withConfirm?: boolean\n withConfirmConfig?: (item: any) => ConfirmModalProps\n}\n\nexport interface ActionGroup {\n isGroup: true\n icon?: string\n label?: string\n ariaLabel?: string\n cardLabel?: string\n class?: string\n config?: Record<string, any>\n items: Action[]\n disabled?: (item: any) => boolean\n hidden?: (item: any) => boolean\n}\n\nexport const dataTableSettingsDefaults: DataTableSettings = {\n striped: true,\n compact: false,\n}\n\nexport const dataCardsSettingsDefaults: DataCardsSettings = {\n compact: false,\n}\n\nexport const dataListSettingsDefaults: Partial<DataListSettings> = {\n layout: 'screen',\n compact: false,\n // Default is lazy / batched: the filter sidebar only emits when the\n // user clicks \"Szűrés\". Users can opt into eager mode via the\n // \"Azonnali szűrés\" toggle in `DataListOptions`, which flips this\n // to `true` so every filter change emits immediately.\n filtersEager: false,\n}\n"],"mappings":";AA0GA,IAAa,IAA+C;CAC1D,SAAS;CACT,SAAS;AACX,GAEa,IAA+C,EAC1D,SAAS,GACX,GAEa,IAAsD;CACjE,QAAQ;CACR,SAAS;CAKT,cAAc;AAChB"}
|