{"version":3,"file":"time-wheel.vue2.cjs","sources":["../../../components/date-picker/time-wheel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Wheel } from '@/components/wheel'\n\nimport { ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { USE_TOUCH, doubleDigits, range } from '@vexip-ui/utils'\n\nimport type { WheelExposed } from '@/components/wheel'\nimport type { PropType } from 'vue'\nimport type { DisabledTime, TimeType, TimeWheelSlots } from './symbol'\n\ndefineOptions({ name: 'TimeWheel' })\n\nconst props = defineProps({\n  noArrow: {\n    type: Boolean,\n    default: false,\n  },\n  hour: {\n    type: Number,\n    default: 0,\n    validator: (value: number) => value >= 0 && value <= 23,\n  },\n  minute: {\n    type: Number,\n    default: 0,\n    validator: (value: number) => value >= 0 && value <= 59,\n  },\n  second: {\n    type: Number,\n    default: 0,\n    validator: (value: number) => value >= 0 && value <= 59,\n  },\n  candidate: {\n    default: 2 as 0 | 1 | 2 | 3,\n    validator: (value: number) => [0, 1, 2, 3].includes(value),\n  },\n  steps: {\n    type: Array as PropType<number[]>,\n    default: () => [1, 1, 1],\n    validator: (value: [number, number, number]) => {\n      if (value[0] && 24 % value[0] !== 0) {\n        return false\n      }\n\n      for (let i = 1; i < 3; ++i) {\n        if (value[i] && 60 % value[i] !== 0) {\n          return false\n        }\n      }\n\n      return true\n    },\n  },\n  pointer: {\n    type: Boolean,\n    default: USE_TOUCH,\n  },\n  disabledTime: {\n    type: Object as PropType<DisabledTime>,\n    default: () => ({}),\n  },\n  noTransition: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst emit = defineEmits(['change', 'toggle-col', 'update:hour', 'update:minute', 'update:second'])\n\ndefineSlots<TimeWheelSlots>()\n\nconst nh = useNameHelper('time-picker')\n\nconst currentHour = ref(props.hour)\nconst currentMinute = ref(props.minute)\nconst currentSecond = ref(props.second)\nconst hourRange = ref<number[]>([])\nconst minuteRange = ref<number[]>([])\nconst secondRange = ref<number[]>([])\n\nconst hourWheel = ref<WheelExposed>()\nconst minuteWheel = ref<WheelExposed>()\nconst secondWheel = ref<WheelExposed>()\n\nwatch(() => props.steps, updateTimeRange, { immediate: true })\nwatch(\n  () => props.hour,\n  value => {\n    currentHour.value = value\n  },\n)\nwatch(\n  () => props.minute,\n  value => {\n    currentMinute.value = value\n  },\n)\nwatch(\n  () => props.second,\n  value => {\n    currentSecond.value = value\n  },\n)\nwatch(currentHour, value => {\n  emit('update:hour', value)\n  emit('change', 'hour', value)\n})\nwatch(currentMinute, value => {\n  emit('update:minute', value)\n  emit('change', 'minute', value)\n})\nwatch(currentSecond, value => {\n  emit('update:second', value)\n  emit('change', 'second', value)\n})\n\ndefineExpose({ refreshWheel })\n\nfunction isHourDisabled(hour: number) {\n  return typeof props.disabledTime.hour === 'function' && props.disabledTime.hour(hour)\n}\n\nfunction isMinuteDisabled(minute: number) {\n  return (\n    typeof props.disabledTime.minute === 'function' &&\n    props.disabledTime.minute(currentHour.value, minute)\n  )\n}\n\nfunction isSecondDisabled(second: number) {\n  return (\n    typeof props.disabledTime.second === 'function' &&\n    props.disabledTime.second(currentHour.value, currentMinute.value, second)\n  )\n}\n\nfunction updateTimeRange() {\n  const [hourStep = 1, minuteStep = 1, secondStep = 1] = props.steps\n\n  hourRange.value = range(24 / hourStep, 0, hourStep)\n  minuteRange.value = range(60 / minuteStep, 0, minuteStep)\n  secondRange.value = range(60 / secondStep, 0, secondStep)\n}\n\nfunction handleToggleColumn(type: TimeType) {\n  emit('toggle-col', type)\n}\n\nfunction refreshWheel() {\n  ;[hourWheel.value, minuteWheel.value, secondWheel.value].forEach(wheel => {\n    wheel?.refreshScroll()\n  })\n}\n</script>\n\n<template>\n  <div :class=\"nh.be('wheel')\">\n    <Wheel\n      ref=\"hourWheel\"\n      v-model:value=\"currentHour\"\n      inherit\n      :class=\"nh.be('hour-wheel')\"\n      :pointer=\"pointer\"\n      :arrow=\"!noArrow\"\n      :candidate=\"candidate\"\n      :options=\"hourRange\"\n      tabindex=\"-1\"\n      :no-transition=\"noTransition\"\n      @mouseenter=\"handleToggleColumn('hour')\"\n      @touchstart=\"handleToggleColumn('hour')\"\n      @keydown.stop\n      @item-click=\"currentHour = $event\"\n    >\n      <template #default=\"{ option, index }\">\n        <span\n          :class=\"[\n            nh.be('option'),\n            nh.be('hour'),\n            isHourDisabled(option.value as number) && nh.bem('option', 'disabled')\n          ]\"\n        >\n          <slot name=\"hour\" :option=\"option\" :index=\"index\">\n            {{ doubleDigits(option.value as number) }}\n          </slot>\n        </span>\n      </template>\n    </Wheel>\n    <Wheel\n      ref=\"minuteWheel\"\n      v-model:value=\"currentMinute\"\n      inherit\n      :class=\"nh.be('minute-wheel')\"\n      :pointer=\"pointer\"\n      :arrow=\"!noArrow\"\n      :candidate=\"candidate\"\n      :options=\"minuteRange\"\n      tabindex=\"-1\"\n      :no-transition=\"noTransition\"\n      @mouseenter=\"handleToggleColumn('minute')\"\n      @touchstart=\"handleToggleColumn('minute')\"\n      @keydown.stop\n      @item-click=\"currentMinute = $event\"\n    >\n      <template #default=\"{ option, index }\">\n        <span\n          :class=\"[\n            nh.be('option'),\n            nh.be('minute'),\n            isMinuteDisabled(option.value as number) && nh.bem('option', 'disabled')\n          ]\"\n        >\n          <slot name=\"minute\" :option=\"option\" :index=\"index\">\n            {{ doubleDigits(option.value as number) }}\n          </slot>\n        </span>\n      </template>\n    </Wheel>\n    <Wheel\n      ref=\"secondWheel\"\n      v-model:value=\"currentSecond\"\n      inherit\n      :class=\"nh.be('second-wheel')\"\n      :pointer=\"pointer\"\n      :arrow=\"!noArrow\"\n      :candidate=\"candidate\"\n      :options=\"secondRange\"\n      tabindex=\"-1\"\n      :no-transition=\"noTransition\"\n      @mouseenter=\"handleToggleColumn('second')\"\n      @touchstart=\"handleToggleColumn('second')\"\n      @keydown.stop\n      @item-click=\"currentSecond = $event\"\n    >\n      <template #default=\"{ option, index }\">\n        <span\n          :class=\"[\n            nh.be('option'),\n            nh.be('second'),\n            isSecondDisabled(option.value as number) && nh.bem('option', 'disabled')\n          ]\"\n        >\n          <slot name=\"second\" :option=\"option\" :index=\"index\">\n            {{ doubleDigits(option.value as number) }}\n          </slot>\n        </span>\n      </template>\n    </Wheel>\n  </div>\n</template>\n"],"names":["props","__props","emit","__emit","nh","useNameHelper","currentHour","ref","currentMinute","currentSecond","hourRange","minuteRange","secondRange","hourWheel","minuteWheel","secondWheel","watch","updateTimeRange","value","__expose","refreshWheel","isHourDisabled","hour","isMinuteDisabled","minute","isSecondDisabled","second","hourStep","minuteStep","secondStep","range","handleToggleColumn","type","wheel","_createElementBlock","_normalizeClass","_unref","_createVNode","Wheel","$event","_cache","_withCtx","option","index","_createElementVNode","_renderSlot","_ctx","doubleDigits"],"mappings":"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"}