UNPKG

@extclp/vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 19.9 kB
{"version":3,"file":"date-control.vue2.mjs","sources":["../../../components/date-picker/date-control.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, ref } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { doubleDigits, getLastDayOfMonth } from '@vexip-ui/utils'\r\nimport { handleKeyEnter } from './helper'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { LocaleConfig } from '@vexip-ui/config'\r\nimport type { DateTimeType, DateType } from './symbol'\r\n\r\ndefineOptions({ name: 'DateControl' })\r\n\r\nconst props = defineProps({\r\n unitType: {\r\n type: String as PropType<DateTimeType | ''>,\r\n default: '',\r\n },\r\n enabled: {\r\n type: Object as PropType<Record<DateTimeType, boolean>>,\r\n default: () => ({}),\r\n },\r\n activated: {\r\n type: Object as PropType<Record<DateTimeType, boolean>>,\r\n default: () => ({}),\r\n },\r\n dateValue: {\r\n type: Object as PropType<Record<DateTimeType, number>>,\r\n default: () => ({}),\r\n },\r\n dateSeparator: {\r\n type: String,\r\n default: '/',\r\n },\r\n timeSeparator: {\r\n type: String,\r\n default: ':',\r\n },\r\n visible: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n focused: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n filler: {\r\n type: String,\r\n default: '-',\r\n validator: (value: string) => {\r\n return value.length === 1\r\n },\r\n },\r\n steps: {\r\n type: Array as PropType<number[]>,\r\n default: () => [1, 1, 1],\r\n },\r\n ctrlSteps: {\r\n type: Array as PropType<number[]>,\r\n default: () => [5, 5, 5],\r\n },\r\n labels: {\r\n type: Object as PropType<Partial<Record<DateTimeType, string>>>,\r\n default: () => ({}),\r\n },\r\n hasError: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n placeholder: {\r\n type: String,\r\n default: '',\r\n },\r\n readonly: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n labeledBy: {\r\n type: String,\r\n default: undefined,\r\n },\r\n locale: {\r\n type: Object as PropType<LocaleConfig['calendar'] & LocaleConfig['datePicker']>,\r\n default: () => ({}),\r\n },\r\n dateUnitOrder: {\r\n type: Array as PropType<DateType[]>,\r\n default: () => ['year', 'month', 'date'],\r\n },\r\n})\r\n\r\nconst emit = defineEmits([\r\n 'input',\r\n 'plus',\r\n 'minus',\r\n 'enter',\r\n 'cancel',\r\n 'unit-focus',\r\n 'prev-unit',\r\n 'next-unit',\r\n 'blur',\r\n])\r\n\r\nconst nh = useNameHelper('date-picker')\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst label = computed(() => props.locale.ariaLabel ?? {})\r\nconst isActivated = computed(() => {\r\n return (Object.keys(props.enabled) as DateTimeType[]).every(type => {\r\n return !props.enabled[type] || props.activated[type]\r\n })\r\n})\r\nconst className = computed(() => {\r\n return {\r\n [nh.be('input')]: true,\r\n [nh.bem('input', 'activated')]: isActivated.value,\r\n [nh.bem('input', 'error')]: props.hasError,\r\n }\r\n})\r\nconst showTimeUnits = computed(() => {\r\n return props.enabled.hour || props.enabled.minute || props.enabled.second\r\n})\r\nconst formattedYear = computed(() => {\r\n return formatValue('year')\r\n})\r\nconst formattedMonth = computed(() => {\r\n return formatValue('month')\r\n})\r\nconst formattedDate = computed(() => {\r\n return formatValue('date')\r\n})\r\nconst formattedHour = computed(() => {\r\n return formatValue('hour')\r\n})\r\nconst formattedMinute = computed(() => {\r\n return formatValue('minute')\r\n})\r\nconst formattedSecond = computed(() => {\r\n return formatValue('second')\r\n})\r\nconst maxDateCount = computed(() => {\r\n return getLastDayOfMonth(props.dateValue.year, props.dateValue.month)\r\n})\r\nconst dateUnitOrder = computed(() => {\r\n const [one, two, three] = props.dateUnitOrder\r\n\r\n return {\r\n [one]: -4,\r\n [two]: -2,\r\n [three]: 0,\r\n }\r\n})\r\n\r\ndefineExpose({\r\n isActivated,\r\n wrapper,\r\n focus: () => {\r\n wrapper.value?.focus()\r\n },\r\n blur: () => {\r\n wrapper.value?.blur()\r\n },\r\n})\r\n\r\nfunction formatValue(type: DateTimeType) {\r\n const isYear = type === 'year'\r\n const filler = props.filler\r\n\r\n return props.activated[type]\r\n ? isYear\r\n ? props.dateValue.year.toString().padStart(4, '0')\r\n : doubleDigits(props.dateValue[type])\r\n : `${isYear ? `${filler}${filler}` : ''}${filler}${filler}`\r\n}\r\n\r\nfunction getUnitFocusClass(type: DateTimeType) {\r\n return props.visible && props.unitType === type ? nh.bem('unit', 'focused') : null\r\n}\r\n\r\nfunction handleInputFocus(type: DateTimeType) {\r\n if (props.readonly) return\r\n\r\n emit('unit-focus', type)\r\n}\r\n\r\nfunction handleInput(event: KeyboardEvent) {\r\n if (!props.visible) return\r\n\r\n const type = handleKeyEnter(event)\r\n\r\n if (props.readonly) {\r\n switch (type) {\r\n case 'ok': {\r\n emit('enter')\r\n break\r\n }\r\n case 'esc': {\r\n emit('cancel')\r\n break\r\n }\r\n }\r\n\r\n return\r\n }\r\n\r\n switch (type) {\r\n case 'next': {\r\n emit('next-unit')\r\n break\r\n }\r\n case 'prev': {\r\n emit('prev-unit')\r\n break\r\n }\r\n case 'up': {\r\n emit('minus', event.ctrlKey)\r\n break\r\n }\r\n case 'down': {\r\n emit('plus', event.ctrlKey)\r\n break\r\n }\r\n case 'ok': {\r\n emit('enter')\r\n break\r\n }\r\n case 'esc': {\r\n emit('cancel')\r\n break\r\n }\r\n default: {\r\n if (typeof type === 'number') {\r\n emit('input', type)\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction handleBlur() {\r\n emit('blur')\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n ref=\"wrapper\"\r\n :class=\"className\"\r\n role=\"none\"\r\n tabindex=\"-1\"\r\n @keydown=\"handleInput\"\r\n @blur=\"handleBlur\"\r\n >\r\n <div v-if=\"!focused && !isActivated\" :class=\"nh.be('placeholder')\">\r\n {{ placeholder }}\r\n </div>\r\n <template v-else>\r\n <div\r\n v-if=\"enabled.year\"\r\n :class=\"[nh.be('unit'), getUnitFocusClass('year')]\"\r\n role=\"spinbutton\"\r\n :aria-label=\"label.year\"\r\n :aria-valuenow=\"props.dateValue.year\"\r\n :aria-valuetext=\"formattedYear\"\r\n :aria-valuemin=\"1\"\r\n :aria-valuemax=\"9999\"\r\n :aria-labelledby=\"labeledBy\"\r\n :style=\"{ order: dateUnitOrder['year'] }\"\r\n @click=\"handleInputFocus('year')\"\r\n >\r\n {{ formattedYear }}\r\n </div>\r\n <div\r\n v-if=\"labels.year\"\r\n :class=\"nh.be('label')\"\r\n aria-hidden\r\n :style=\"{ order: dateUnitOrder['year'] }\"\r\n @click=\"handleInputFocus('year')\"\r\n >\r\n {{ labels.year }}\r\n </div>\r\n <template v-if=\"enabled.month\">\r\n <div\r\n v-if=\"enabled.year\"\r\n :class=\"nh.be('separator')\"\r\n aria-hidden\r\n style=\"order: -3\"\r\n >\r\n {{ dateSeparator }}\r\n </div>\r\n <div\r\n :class=\"[nh.be('unit'), getUnitFocusClass('month')]\"\r\n role=\"spinbutton\"\r\n :aria-label=\"label.month\"\r\n :aria-valuenow=\"props.dateValue.month\"\r\n :aria-valuetext=\"formattedMonth\"\r\n :aria-valuemin=\"1\"\r\n :aria-valuemax=\"12\"\r\n :aria-labelledby=\"labeledBy\"\r\n :style=\"{ order: dateUnitOrder['month'] }\"\r\n @click=\"handleInputFocus('month')\"\r\n >\r\n {{ formattedMonth }}\r\n </div>\r\n <div\r\n v-if=\"labels.month\"\r\n :class=\"nh.be('label')\"\r\n aria-hidden\r\n :style=\"{ order: dateUnitOrder['month'] }\"\r\n @click=\"handleInputFocus('month')\"\r\n >\r\n {{ labels.month }}\r\n </div>\r\n </template>\r\n <template v-if=\"enabled.date\">\r\n <div\r\n v-if=\"enabled.month || enabled.year\"\r\n :class=\"nh.be('separator')\"\r\n aria-hidden\r\n style=\"order: -1\"\r\n >\r\n {{ dateSeparator }}\r\n </div>\r\n <div\r\n :class=\"[nh.be('unit'), getUnitFocusClass('date')]\"\r\n role=\"spinbutton\"\r\n :aria-label=\"label.date\"\r\n :aria-valuenow=\"props.dateValue.date\"\r\n :aria-valuetext=\"formattedDate\"\r\n :aria-valuemin=\"1\"\r\n :aria-valuemax=\"maxDateCount || 31\"\r\n :aria-labelledby=\"labeledBy\"\r\n :style=\"{ order: dateUnitOrder['date'] }\"\r\n @click=\"handleInputFocus('date')\"\r\n >\r\n {{ formattedDate }}\r\n </div>\r\n <div\r\n v-if=\"labels.date\"\r\n :class=\"nh.be('label')\"\r\n aria-hidden\r\n :style=\"{ order: dateUnitOrder['date'] }\"\r\n @click=\"handleInputFocus('date')\"\r\n >\r\n {{ labels.date }}\r\n </div>\r\n </template>\r\n\r\n <template v-if=\"showTimeUnits\">\r\n <div :class=\"nh.be('pad')\"></div>\r\n <div\r\n v-if=\"enabled.hour\"\r\n :class=\"[nh.be('unit'), getUnitFocusClass('hour')]\"\r\n role=\"spinbutton\"\r\n :aria-label=\"label.hour\"\r\n :aria-valuenow=\"props.dateValue.hour\"\r\n :aria-valuetext=\"formattedHour\"\r\n :aria-valuemin=\"0\"\r\n :aria-valuemax=\"23\"\r\n :aria-labelledby=\"labeledBy\"\r\n @click=\"handleInputFocus('hour')\"\r\n >\r\n {{ formattedHour }}\r\n </div>\r\n <div\r\n v-if=\"labels.hour\"\r\n :class=\"nh.be('label')\"\r\n aria-hidden\r\n @click=\"handleInputFocus('hour')\"\r\n >\r\n {{ labels.hour }}\r\n </div>\r\n <template v-if=\"enabled.minute\">\r\n <div v-if=\"enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\r\n {{ timeSeparator }}\r\n </div>\r\n <div\r\n :class=\"[nh.be('unit'), getUnitFocusClass('minute')]\"\r\n role=\"spinbutton\"\r\n :aria-label=\"label.minute\"\r\n :aria-valuenow=\"props.dateValue.minute\"\r\n :aria-valuetext=\"formattedMinute\"\r\n :aria-valuemin=\"0\"\r\n :aria-valuemax=\"59\"\r\n :aria-labelledby=\"labeledBy\"\r\n @click=\"handleInputFocus('minute')\"\r\n >\r\n {{ formattedMinute }}\r\n </div>\r\n <div\r\n v-if=\"labels.minute\"\r\n :class=\"nh.be('label')\"\r\n aria-hidden\r\n @click=\"handleInputFocus('minute')\"\r\n >\r\n {{ labels.minute }}\r\n </div>\r\n </template>\r\n <template v-if=\"enabled.second\">\r\n <div v-if=\"enabled.minute || enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\r\n {{ timeSeparator }}\r\n </div>\r\n <div\r\n :class=\"[nh.be('unit'), getUnitFocusClass('second')]\"\r\n role=\"spinbutton\"\r\n :aria-label=\"label.second\"\r\n :aria-valuenow=\"props.dateValue.second\"\r\n :aria-valuetext=\"formattedSecond\"\r\n :aria-valuemin=\"0\"\r\n :aria-valuemax=\"59\"\r\n :aria-labelledby=\"labeledBy\"\r\n @click=\"handleInputFocus('second')\"\r\n >\r\n {{ formattedSecond }}\r\n </div>\r\n <div\r\n v-if=\"labels.second\"\r\n :class=\"nh.be('label')\"\r\n aria-hidden\r\n @click=\"handleInputFocus('second')\"\r\n >\r\n {{ labels.second }}\r\n </div>\r\n </template>\r\n </template>\r\n </template>\r\n </div>\r\n</template>\r\n"],"names":["props","__props","emit","__emit","nh","useNameHelper","wrapper","ref","label","computed","isActivated","type","className","showTimeUnits","formattedYear","formatValue","formattedMonth","formattedDate","formattedHour","formattedMinute","formattedSecond","maxDateCount","getLastDayOfMonth","dateUnitOrder","one","two","three","__expose","_a","isYear","filler","doubleDigits","getUnitFocusClass","handleInputFocus","handleInput","event","handleKeyEnter","handleBlur","_createElementBlock","_normalizeClass","_unref","_Fragment","_hoisted_1","_toDisplayString","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6"],"mappings":"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"}