@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 41.1 kB
Source Map (JSON)
{"version":3,"file":"time-picker.vue2.mjs","sources":["../../../components/date-picker/time-picker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Popper } from '@/components/popper'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, nextTick, reactive, ref, toRef, watch } from 'vue'\n\nimport TimeWheel from './time-wheel.vue'\nimport TimeControl from './time-control.vue'\nimport {\n createIconProp,\n createSizeProp,\n createStateProp,\n emitEvent,\n makeSentence,\n useIcons,\n useLocale,\n useNameHelper,\n useProps,\n useWordSpace\n} from '@vexip-ui/config'\nimport {\n placementWhileList,\n useClickOutside,\n useHover,\n usePopper,\n useSetTimeout\n} from '@vexip-ui/hooks'\nimport { USE_TOUCH, boundRange, callIfFunc, doubleDigits, toAttrValue } from '@vexip-ui/utils'\nimport { timePickerProps } from './props'\nimport { useColumn, useTimeBound } from './helper'\nimport { TIME_REG } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { TimePickerChangeEvent, TimePickerSlots, TimeType } from './symbol'\n\ndefineOptions({ name: 'TimePicker' })\n\nconst {\n idFor,\n labelId,\n state,\n disabled,\n loading,\n size,\n validateField,\n clearField,\n getFieldValue,\n setFieldValue\n} = useFieldStore<string | string[]>(() => reference.value?.focus())\n\nconst nh = useNameHelper('time-picker')\n\nconst _props = defineProps(timePickerProps)\nconst props = useProps('timePicker', _props, {\n size: createSizeProp(size),\n state: createStateProp(state),\n locale: null,\n visible: false,\n placement: {\n default: 'bottom-start',\n validator: value => placementWhileList.includes(value)\n },\n transfer: false,\n format: 'HH:mm:ss',\n separator: ':',\n value: {\n default: () => getFieldValue(),\n static: true\n },\n filler: {\n default: '-',\n validator: value => value.length === 1\n },\n clearable: false,\n noAction: false,\n noArrow: false,\n pointer: USE_TOUCH,\n candidate: {\n default: 3,\n validator: value => [0, 1, 2, 3].includes(value)\n },\n steps: () => [1, 1, 1],\n labels: () => ({}),\n shortcuts: () => [],\n range: null,\n disabled: () => disabled.value,\n transitionName: () => nh.ns('drop'),\n confirmText: null,\n cancelText: null,\n ctrlSteps: () => [5, 5, 5],\n prefix: createIconProp(),\n prefixColor: '',\n suffix: createIconProp(),\n suffixColor: '',\n noSuffix: false,\n exchange: false,\n loading: () => loading.value,\n loadingIcon: createIconProp(),\n loadingLock: false,\n loadingEffect: null,\n min: null,\n max: null,\n outsideClose: true,\n outsideCancel: false,\n placeholder: null,\n unitReadonly: false,\n popperAlive: null,\n shortcutsPlacement: 'left',\n slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value', 'update:visible'])\n\nconst slots = defineSlots<TimePickerSlots>()\n\nconst locale = useLocale('timePicker', toRef(props, 'locale'))\nconst icons = useIcons()\nconst wordSpace = useWordSpace()\n\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\nconst currentVisible = ref(props.visible)\nconst focused = ref(false)\nconst lastValue = ref('')\nconst startState = createTimeState()\nconst endState = createTimeState()\nconst currentState = ref<'start' | 'end'>('start')\nconst staticWheel = ref(false)\n\nconst { timer } = useSetTimeout()\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n placement,\n transfer,\n wrapper,\n popper: computed(() => popper.value?.wrapper),\n isDrop: true\n})\nconst { isHover } = useHover(reference)\nconst { isTimeDisabled } = useTimeBound(toRef(props, 'min'), toRef(props, 'max'))\n\nconst startInput = ref<InstanceType<typeof TimeControl>>()\nconst endInput = ref<InstanceType<typeof TimeControl>>()\n\nconst startPlaceholder = computed(() => {\n if (props.placeholder) {\n return Array.isArray(props.placeholder) ? props.placeholder[0] : props.placeholder\n }\n\n const { select, start, time } = locale.value.placeholder\n\n return makeSentence(props.range ? `${start} ${time}` : `${select} ${time}`, wordSpace.value)\n})\nconst endPlaceholder = computed(() => {\n if (props.placeholder) {\n return Array.isArray(props.placeholder)\n ? props.placeholder[1] || props.placeholder[0]\n : props.placeholder\n }\n\n const { end, time } = locale.value.placeholder\n\n return makeSentence(`${end} ${time}`, wordSpace.value)\n})\nconst className = computed(() => {\n return [\n nh.b(),\n nh.ns('input-vars'),\n nh.bs('vars'),\n {\n [nh.bm('inherit')]: props.inherit,\n [nh.bm('disabled')]: props.disabled,\n [nh.bm(props.size)]: props.size !== 'default',\n [nh.bm('no-hour')]: !startState.enabled.hour,\n [nh.bm('no-minute')]: !startState.enabled.minute,\n [nh.bm('no-second')]: !startState.enabled.second,\n [nh.bm('visible')]: currentVisible.value,\n [nh.bm(props.state)]: props.state !== 'default',\n [nh.bm('is-range')]: props.range\n }\n ]\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n const baseCls = nh.be('selector')\n\n return {\n [baseCls]: true,\n [`${baseCls}--disabled`]: props.disabled,\n [`${baseCls}--readonly`]: readonly.value,\n [`${baseCls}--loading`]: props.loading,\n [`${baseCls}--${props.size}`]: props.size !== 'default',\n [`${baseCls}--focused`]: focused.value,\n [`${baseCls}--${props.state}`]: props.state !== 'default'\n }\n})\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst currentValue = computed(() => {\n const values = [startState, endState].map(state => {\n return Object.values(state.timeValue).map(doubleDigits).join(':')\n })\n\n return props.range ? values : values[0]\n})\nconst showClear = computed(() => {\n return !props.disabled && !readonly.value && props.clearable && isHover.value && !!lastValue.value\n})\nconst startError = computed(() => {\n const { hour, minute, second } = startState.timeValue\n\n return (\n isTimeDisabled.hour(hour) ||\n isTimeDisabled.minute(hour, minute) ||\n isTimeDisabled.second(hour, minute, second)\n )\n})\nconst endError = computed(() => {\n if (!props.range) return false\n\n const { hour, minute, second } = endState.timeValue\n\n return (\n isTimeDisabled.hour(hour) ||\n isTimeDisabled.minute(hour, minute) ||\n isTimeDisabled.second(hour, minute, second)\n )\n})\n\nwatch(\n () => props.value,\n value => {\n parseValue(value)\n lastValue.value = (Array.isArray(value) ? value[0] || value[1] : value) ? getStringValue() : ''\n },\n { immediate: true }\n)\nwatch(() => props.format, parseFormat, { immediate: true })\nwatch(\n () => props.visible,\n value => {\n currentVisible.value = value\n }\n)\nwatch(currentVisible, value => {\n if (value) {\n updatePopper()\n }\n})\nwatch(focused, value => {\n if (value) {\n emitEvent(props.onFocus)\n } else {\n emitEvent(props.onBlur)\n }\n})\nwatch(currentState, value => {\n if (!props.unitReadonly && currentVisible.value) {\n emitEvent(props.onChangeCol, getCurrentState().column, value)\n }\n})\nwatch(\n () => startState.column,\n value => {\n if (!props.unitReadonly && currentVisible.value && currentState.value === 'start') {\n emitEvent(props.onChangeCol, value, 'start')\n }\n }\n)\nwatch(\n () => endState.column,\n value => {\n if (!props.unitReadonly && currentVisible.value && currentState.value === 'end') {\n emitEvent(props.onChangeCol, value, 'end')\n }\n }\n)\nwatch(\n () => props.disabled,\n value => {\n if (value) {\n setVisible(false)\n handleBlur()\n }\n }\n)\nwatch(readonly, value => {\n if (value) {\n setVisible(false)\n }\n})\n\ndefineExpose({\n idFor,\n isHover,\n currentVisible,\n focused,\n startState,\n endState,\n currentState,\n currentValue,\n startError,\n endError,\n wrapper,\n reference,\n popper,\n start: startInput,\n end: endInput,\n updatePopper,\n focus: (options?: FocusOptions) => reference.value?.focus(options),\n blur: () => reference.value?.blur()\n})\n\nfunction createTimeState() {\n const { currentColumn, enabled, resetColumn, enterColumn } = useColumn([\n 'hour',\n 'minute',\n 'second'\n ] as TimeType[])\n\n const timeValue = reactive({\n hour: 0,\n minute: 0,\n second: 0\n })\n const activated = reactive({\n hour: false,\n minute: false,\n second: false\n })\n\n return reactive({\n column: currentColumn,\n enabled,\n activated,\n timeValue,\n resetColumn,\n enterColumn\n })\n}\n\nfunction getCurrentState() {\n return currentState.value === 'start' ? startState : endState\n}\n\nfunction parseValue<T extends string | null>(value: T | T[]) {\n if (!Array.isArray(value)) {\n value = [value, value]\n }\n\n const defaultDate = new Date()\n\n for (let i = 0; i < 2; ++i) {\n const match = TIME_REG.exec(value[i] || '')\n const state = i === 0 ? startState : endState\n const { timeValue } = state\n\n if (match) {\n toggleActivated(true, i === 0 ? 'start' : 'end')\n\n const hour = parseInt(match[1])\n const minute = match[2] ? parseInt(match[2].slice(1)) : 0\n const second = match[3] ? parseInt(match[3].slice(1)) : 0\n\n const date = new Date(2000, 1, 1, hour, minute, second)\n\n timeValue.hour = date.getHours()\n timeValue.minute = date.getMinutes()\n timeValue.second = date.getSeconds()\n } else {\n timeValue.hour = defaultDate.getHours()\n timeValue.minute = defaultDate.getMinutes()\n timeValue.second = defaultDate.getSeconds()\n\n toggleActivated(false, i === 0 ? 'start' : 'end')\n }\n\n if (!props.range) break\n }\n}\n\nfunction parseFormat() {\n ;[startState, endState].forEach(state => {\n state.enabled.hour = props.format.includes('H')\n state.enabled.minute = props.format.includes('m')\n state.enabled.second = props.format.includes('s')\n })\n}\n\nfunction toggleActivated(value: boolean, valueType?: 'start' | 'end') {\n const states = valueType\n ? valueType === 'start'\n ? [startState]\n : [endState]\n : [startState, endState]\n\n states.forEach(state => {\n ;(Object.keys(state.activated) as TimeType[]).forEach(type => {\n state.activated[type] = value\n })\n })\n}\n\nfunction getStringValue() {\n return Array.isArray(currentValue.value) ? currentValue.value.join('|') : currentValue.value\n}\n\nfunction verifyTime() {\n if (startError.value || (props.range && endError.value)) {\n parseValue(props.value)\n }\n}\n\nfunction setVisible(visible: boolean) {\n if (currentVisible.value === visible) return\n\n currentVisible.value = visible\n\n emit('update:visible', visible)\n emitEvent(props.onToggle, visible)\n}\n\nfunction emitChange() {\n verifyTime()\n\n if (lastValue.value !== getStringValue()) {\n lastValue.value = getStringValue()\n\n toggleActivated(true)\n emit('update:value', currentValue.value)\n setFieldValue(currentValue.value)\n emitEvent(props.onChange as TimePickerChangeEvent, currentValue.value)\n validateField()\n }\n}\n\nfunction handleFocused() {\n if (props.disabled) return\n\n focused.value = true\n\n timer.focus = setTimeout(() => {\n if (focused.value) {\n if (currentState.value === 'start') {\n startInput.value?.focus()\n } else {\n endInput.value?.focus()\n }\n }\n }, 120)\n}\n\nfunction handleBlur() {\n clearTimeout(timer.focus)\n\n focused.value = false\n startInput.value?.blur()\n endInput.value?.blur()\n}\n\nfunction showPanel(event: Event) {\n if (props.disabled || readonly.value) return\n\n const target = event.target as Node\n\n setVisible(true)\n handleFocused()\n\n if (wrapper.value && target) {\n const units = Array.from(wrapper.value.querySelectorAll(`.${nh.be('unit')}`))\n\n if (!units.some(unit => unit === target || unit.contains(target))) {\n startState.column = null\n endState.column = null\n }\n }\n}\n\nfunction finishInput(shouldChange = true) {\n setVisible(false)\n\n shouldChange && emitChange()\n startState.resetColumn()\n endState.resetColumn()\n}\n\nfunction handleClear(finish = true) {\n if (props.disabled || readonly.value) return\n\n if (props.clearable) {\n nextTick(() => {\n const emitValue = props.range ? ([] as string[]) : ''\n\n parseValue(null)\n finish && finishInput(false)\n emit('update:value', emitValue)\n emitEvent(props.onChange as TimePickerChangeEvent, emitValue)\n emitEvent(props.onClear)\n clearField(emitValue)\n finish && handleBlur()\n\n lastValue.value = ''\n\n nextTick(() => {\n toggleActivated(false)\n })\n })\n }\n}\n\nfunction handleWheelChange(type: TimeType) {\n if (currentVisible.value) {\n getCurrentState().activated[type] = true\n }\n}\n\nfunction handleInputFocus(type: TimeType) {\n getCurrentState().column = type\n}\n\nfunction handleInput(value: number) {\n const state = getCurrentState()\n const type = state.column\n\n if (!type) return\n\n handleInputNumber(type, value)\n\n if (state.column !== 'second' && state.timeValue[type] >= 10) {\n state.enterColumn('next', false)\n }\n}\n\nfunction handleInputNumber(type: TimeType, number: number) {\n const state = getCurrentState()\n const prev = state.timeValue[type]\n\n if (state.activated[type] && prev > 0 && prev < 10) {\n state.timeValue[type] = prev * 10 + number\n } else {\n state.timeValue[type] = number\n }\n\n verifyValue(type)\n\n state.activated[type] = true\n emitEvent(props.onInput, type, state.timeValue[type])\n}\n\nfunction verifyValue(type: TimeType) {\n const timeValue = getCurrentState().timeValue\n\n timeValue[type] = boundRange(timeValue[type], 0, type === 'hour' ? 23 : 59)\n timeValue[type] = Math.round(timeValue[type] / getStep(type)) * getStep(type)\n}\n\nfunction handlePlus(ctrlKey: boolean) {\n const state = getCurrentState()\n const type = state.column\n\n if (!type) return\n\n if (state.enabled[type]) {\n state.timeValue[type] += ctrlKey ? getCtrlStep(type) : getStep(type)\n\n verifyValue(type)\n emitEvent(props.onPlus, type, state.timeValue[type])\n }\n}\n\nfunction handleMinus(ctrlKey: boolean) {\n const state = getCurrentState()\n const type = state.column\n\n if (!type) return\n\n if (state.enabled[type]) {\n state.timeValue[type] -= ctrlKey ? getCtrlStep(type) : getStep(type)\n\n verifyValue(type)\n emitEvent(props.onMinus, type, state.timeValue[type])\n }\n}\n\nfunction getStep(type: TimeType) {\n return props.steps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\n}\n\nfunction getCtrlStep(type: TimeType) {\n return props.ctrlSteps[type === 'hour' ? 0 : type === 'minute' ? 1 : 2] || 1\n}\n\nfunction fallbackFocus() {\n requestAnimationFrame(() => {\n handleBlur()\n reference.value?.focus()\n })\n}\n\nfunction handleEnter() {\n fallbackFocus()\n finishInput()\n emitEvent(props.onEnter)\n}\n\nfunction handleCancel() {\n fallbackFocus()\n parseValue(props.value)\n finishInput(false)\n emitEvent(props.onCancel)\n}\n\nfunction handleShortcut(index: number) {\n const { value, name } = props.shortcuts[index]\n const parsedValue = callIfFunc(value)\n\n fallbackFocus()\n parseValue(parsedValue)\n emitEvent(props.onShortcut as (name: string, value: string | string[]) => void, name, parsedValue)\n finishInput()\n}\n\nfunction toggleCurrentState(type: 'start' | 'end') {\n currentState.value = type\n}\n\nfunction enterColumn(type: 'prev' | 'next') {\n if (props.range) {\n if (type === 'prev' && currentState.value === 'start' && !startState.column) {\n toggleCurrentState('end')\n }\n\n const state = getCurrentState()\n const currentColumn = state.column\n\n state.enterColumn(type, !currentColumn)\n\n if (currentColumn === state.column) {\n const isStart = currentState.value === 'start'\n const otherState = isStart ? endState : startState\n\n otherState.resetColumn(type === 'prev' ? 'second' : 'hour', type === 'prev')\n toggleCurrentState(isStart ? 'end' : 'start')\n }\n } else {\n startState.enterColumn(type)\n }\n}\n\nfunction handleStartInput(type: TimeType) {\n toggleCurrentState('start')\n handleInputFocus(type)\n}\n\nfunction handleEndInput(type: TimeType) {\n toggleCurrentState('end')\n handleInputFocus(type)\n}\n\nfunction exchangeValue() {\n ;(Object.keys(startState.timeValue) as TimeType[]).forEach(type => {\n const temp = endState.timeValue[type]\n endState.timeValue[type] = startState.timeValue[type]\n startState.timeValue[type] = temp\n })\n}\n\nfunction handleExchangeClick(event: MouseEvent) {\n if (props.exchange) {\n !currentVisible.value && event.stopPropagation()\n exchangeValue()\n }\n}\n\nfunction handleClickOutside() {\n emitEvent(props.onClickOutside)\n\n if (props.outsideClose && currentVisible.value) {\n finishInput(!props.outsideCancel)\n handleBlur()\n emitEvent(props.onOutsideClose)\n }\n}\n</script>\n\n<template>\n <div\n :id=\"idFor\"\n ref=\"wrapper\"\n :class=\"className\"\n role=\"group\"\n :aria-disabled=\"toAttrValue(props.disabled)\"\n :aria-expanded=\"toAttrValue(currentVisible)\"\n aria-haspopup=\"dialog\"\n :aria-labelledby=\"labelId\"\n @click=\"showPanel\"\n >\n <div\n ref=\"reference\"\n :class=\"selectorClass\"\n tabindex=\"0\"\n @keydown.space.prevent=\"showPanel\"\n @keydown.backspace.prevent=\"handleClear(false)\"\n >\n <div\n v-if=\"hasPrefix\"\n :class=\"[nh.be('icon'), nh.be('prefix')]\"\n :style=\"{ color: props.prefixColor }\"\n >\n <slot name=\"prefix\">\n <Renderer :renderer=\"props.slots.prefix\">\n <Icon :icon=\"props.prefix\"></Icon>\n </Renderer>\n </slot>\n </div>\n <div :class=\"nh.be('control')\">\n <TimeControl\n ref=\"startInput\"\n :unit-type=\"currentState === 'start' ? startState.column! : ''\"\n :enabled=\"startState.enabled\"\n :activated=\"startState.activated\"\n :time-value=\"startState.timeValue\"\n :steps=\"props.steps\"\n :ctrl-steps=\"props.ctrlSteps\"\n :focused=\"focused\"\n :visible=\"currentVisible\"\n :separator=\"props.separator\"\n :filler=\"props.filler\"\n :labels=\"props.labels\"\n :has-error=\"startError\"\n :placeholder=\"startPlaceholder\"\n :readonly=\"props.unitReadonly\"\n :labeled-by=\"labelId\"\n :locale=\"locale\"\n @input=\"handleInput\"\n @plus=\"handlePlus\"\n @minus=\"handleMinus\"\n @enter=\"handleEnter\"\n @cancel=\"handleCancel\"\n @unit-focus=\"handleStartInput\"\n @prev-unit=\"enterColumn('prev')\"\n @next-unit=\"enterColumn('next')\"\n @blur=\"startState.column = null\"\n ></TimeControl>\n <template v-if=\"props.range\">\n <div\n :class=\"[nh.be('exchange'), props.exchange ? nh.bem('exchange', 'enabled') : '']\"\n @click=\"handleExchangeClick\"\n >\n <slot name=\"exchange\">\n <Renderer :renderer=\"props.slots.exchange\">\n <Icon v-bind=\"icons.exchange\" style=\"padding-top: 1px\"></Icon>\n </Renderer>\n </slot>\n </div>\n <TimeControl\n ref=\"endInput\"\n :unit-type=\"currentState === 'end' ? endState.column! : ''\"\n :enabled=\"endState.enabled\"\n :activated=\"endState.activated\"\n :time-value=\"endState.timeValue\"\n :steps=\"props.steps\"\n :ctrl-steps=\"props.ctrlSteps\"\n :focused=\"focused\"\n :visible=\"currentVisible\"\n :separator=\"props.separator\"\n :filler=\"props.filler\"\n :labels=\"props.labels\"\n :has-error=\"endError\"\n :placeholder=\"endPlaceholder\"\n :readonly=\"props.unitReadonly\"\n :labeled-by=\"labelId\"\n :locale=\"locale\"\n @input=\"handleInput\"\n @plus=\"handlePlus\"\n @minus=\"handleMinus\"\n @enter=\"handleEnter\"\n @cancel=\"handleCancel\"\n @unit-focus=\"handleEndInput\"\n @prev-unit=\"enterColumn('prev')\"\n @next-unit=\"enterColumn('next')\"\n @blur=\"endState.column = null\"\n ></TimeControl>\n </template>\n </div>\n <div\n v-if=\"!props.noSuffix\"\n :class=\"[nh.be('icon'), nh.be('suffix')]\"\n :style=\"{\n color: props.suffixColor,\n opacity: showClear || props.loading ? '0%' : ''\n }\"\n >\n <slot name=\"suffix\">\n <Renderer :renderer=\"props.slots.suffix\">\n <Icon v-bind=\"icons.clock\" :icon=\"props.suffix || icons.clock.icon\"></Icon>\n </Renderer>\n </slot>\n </div>\n <div\n v-else-if=\"props.clearable || props.loading\"\n :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n ></div>\n <Transition :name=\"nh.ns('fade')\" appear>\n <button\n v-if=\"showClear\"\n :class=\"[nh.be('icon'), nh.be('clear')]\"\n type=\"button\"\n tabindex=\"-1\"\n :aria-label=\"locale.ariaLabel.clear\"\n @click.stop=\"handleClear()\"\n >\n <Icon v-bind=\"icons.clear\"></Icon>\n </button>\n <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n <Icon\n v-bind=\"icons.loading\"\n :effect=\"props.loadingEffect || icons.loading.effect\"\n :icon=\"props.loadingIcon || icons.loading.icon\"\n ></Icon>\n </div>\n </Transition>\n </div>\n <Popper\n ref=\"popper\"\n :class=\"[nh.be('popper'), nh.bs('vars')]\"\n :visible=\"currentVisible\"\n :to=\"transferTo\"\n :transition=\"props.transitionName\"\n :alive=\"props.popperAlive ?? !transferTo\"\n @click.stop=\"handleFocused\"\n @before-enter=\"staticWheel = true\"\n @before-leave=\"staticWheel = true\"\n @after-enter=\"staticWheel = false\"\n @after-leave=\"staticWheel = false\"\n >\n <div\n :class=\"{\n [nh.be('panel')]: true,\n [nh.bem('panel', 'vertical')]:\n props.shortcuts.length &&\n (props.shortcutsPlacement === 'top' || props.shortcutsPlacement === 'bottom')\n }\"\n :aria-labelledby=\"labelId\"\n >\n <div\n v-if=\"props.shortcuts.length\"\n :class=\"[\n nh.be('list'),\n nh.bem('list', 'sub'),\n nh.be('shortcuts'),\n nh.bem('shortcuts', props.shortcutsPlacement)\n ]\"\n >\n <div\n v-for=\"(item, index) in props.shortcuts\"\n :key=\"index\"\n :class=\"nh.be('shortcut')\"\n :title=\"item.name\"\n @click=\"handleShortcut(index)\"\n >\n {{ item.name }}\n </div>\n </div>\n <div :class=\"nh.be('list')\">\n <div :class=\"nh.be('wheels')\">\n <TimeWheel\n v-model:hour=\"startState.timeValue.hour\"\n v-model:minute=\"startState.timeValue.minute\"\n v-model:second=\"startState.timeValue.second\"\n :no-arrow=\"props.noArrow\"\n :candidate=\"props.candidate\"\n :steps=\"props.steps\"\n :pointer=\"props.pointer\"\n :disabled-time=\"isTimeDisabled\"\n :no-transition=\"staticWheel\"\n @change=\"handleWheelChange\"\n @toggle-col=\"toggleCurrentState('start')\"\n ></TimeWheel>\n <TimeWheel\n v-if=\"props.range\"\n v-model:hour=\"endState.timeValue.hour\"\n v-model:minute=\"endState.timeValue.minute\"\n v-model:second=\"endState.timeValue.second\"\n :no-arrow=\"props.noArrow\"\n :candidate=\"props.candidate\"\n :steps=\"props.steps\"\n :pointer=\"props.pointer\"\n :disabled-time=\"isTimeDisabled\"\n :no-transition=\"staticWheel\"\n @change=\"handleWheelChange\"\n @toggle-col=\"toggleCurrentState('end')\"\n ></TimeWheel>\n </div>\n <div v-if=\"!props.noAction\" :class=\"nh.be('action')\">\n <Button\n inherit\n text\n size=\"small\"\n @click.stop=\"handleCancel\"\n >\n {{ props.cancelText || locale.cancel }}\n </Button>\n <Button\n inherit\n type=\"primary\"\n size=\"small\"\n :disabled=\"startError || endError\"\n @click.stop=\"handleEnter\"\n >\n {{ props.confirmText || locale.confirm }}\n </Button>\n </div>\n </div>\n </div>\n </Popper>\n </div>\n</template>\n"],"names":["idFor","labelId","state","disabled","loading","size","validateField","clearField","getFieldValue","setFieldValue","useFieldStore","_a","reference","nh","useNameHelper","props","useProps","__props","createSizeProp","createStateProp","value","placementWhileList","USE_TOUCH","createIconProp","emit","__emit","slots","_useSlots","locale","useLocale","toRef","icons","useIcons","wordSpace","useWordSpace","placement","transfer","currentVisible","ref","focused","lastValue","startState","createTimeState","endState","currentState","staticWheel","timer","useSetTimeout","wrapper","useClickOutside","handleClickOutside","popper","transferTo","updatePopper","usePopper","computed","isHover","useHover","isTimeDisabled","useTimeBound","startInput","endInput","startPlaceholder","select","start","time","makeSentence","endPlaceholder","end","className","readonly","selectorClass","baseCls","hasPrefix","currentValue","values","doubleDigits","showClear","startError","hour","minute","second","endError","watch","parseValue","getStringValue","parseFormat","emitEvent","getCurrentState","setVisible","handleBlur","__expose","options","currentColumn","enabled","resetColumn","enterColumn","useColumn","timeValue","reactive","activated","defaultDate","i","match","TIME_REG","toggleActivated","date","valueType","type","verifyTime","visible","emitChange","handleFocused","_b","showPanel","event","target","unit","finishInput","shouldChange","handleClear","finish","nextTick","emitValue","handleWheelChange","handleInputFocus","handleInput","handleInputNumber","number","prev","verifyValue","boundRange","getStep","handlePlus","ctrlKey","getCtrlStep","handleMinus","fallbackFocus","handleEnter","handleCancel","handleShortcut","index","name","parsedValue","callIfFunc","toggleCurrentState","isStart","handleStartInput","handleEndInput","exchangeValue","temp","handleExchangeClick"],"mappings":"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"}