{"version":3,"file":"basic-time-spinner.vue2.mjs","sources":["../../../../../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue"],"sourcesContent":["<template>\n  <div class=\"el-time-spinner\" :class=\"{ 'has-seconds': showSeconds }\">\n    <template v-if=\"!arrowControl\">\n      <el-scrollbar\n        v-for=\"item in spinnerItems\"\n        :key=\"item\"\n        :ref=\"scollbar => setRef(scollbar, item)\"\n        class=\"el-time-spinner__wrapper\"\n        :wrap-style=\"{ 'max-height': 'inherit' }\"\n        view-class=\"el-time-spinner__list\"\n        noresize\n        tag=\"ul\"\n        @mouseenter=\"emitSelectRange(item)\"\n        @mousemove=\"adjustCurrentSpinner(item)\"\n      >\n        <li\n          v-for=\"(disabled, key) in listMap[item].value\"\n          :key=\"key\"\n          class=\"el-time-spinner__item\"\n          :class=\"{ active: key === timePartsMap[item].value, disabled }\"\n          @click=\"handleClick(item, { value: key, disabled })\"\n        >\n          <template v-if=\"item === 'hours'\">\n            {{ ('0' + (amPmMode ? key % 12 || 12 : key)).slice(-2)\n            }}{{ getAmPmFlag(key) }}\n          </template>\n          <template v-else>\n            {{ ('0' + key).slice(-2) }}\n          </template>\n        </li>\n      </el-scrollbar>\n    </template>\n    <!-- <template v-if=\"arrowControl\">\n      <div\n        v-for=\"item in spinnerItems\"\n        :key=\"item\"\n        class=\"el-time-spinner__wrapper is-arrow\"\n        @mouseenter=\"emitSelectRange(item)\"\n      >\n        <el-icon\n          v-repeat-click=\"onDecreaseClick\"\n          class=\"el-time-spinner__arrow arrow-up\"\n        >\n          <arrow-up />\n        </el-icon>\n        <el-icon\n          v-repeat-click=\"onIncreaseClick\"\n          class=\"el-time-spinner__arrow arrow-down\"\n        >\n          <arrow-down />\n        </el-icon>\n        <ul class=\"el-time-spinner__list\">\n          <li\n            v-for=\"(time, key) in arrowListMap[item].value\"\n            :key=\"key\"\n            class=\"el-time-spinner__item\"\n            :class=\"{\n              active: time === timePartsMap[item].value,\n              disabled: listMap[item].value[time]\n            }\"\n          >\n            <template v-if=\"typeof time === 'number'\">\n              <template v-if=\"item === 'hours'\">\n                {{ ('0' + (amPmMode ? time % 12 || 12 : time)).slice(-2)\n                }}{{ getAmPmFlag(time) }}\n              </template>\n              <template v-else>\n                {{ ('0' + time).slice(-2) }}\n              </template>\n            </template>\n          </li>\n        </ul>\n      </div>\n    </template> -->\n  </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ref, nextTick, computed, onMounted, watch } from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { RepeatClick as vRepeatClick } from '@element-ultra/directives'\nimport ElScrollbar from '@element-ultra/components/scrollbar'\nimport ElIcon from '@element-ultra/components/icon'\nimport { ArrowUp, ArrowDown } from 'icon-ultra'\nimport { getTimeLists } from './useTimePicker'\n\nimport type { PropType, Ref } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type { Nullable } from '@element-ultra/utils'\n\nconst props = defineProps({\n  role: {\n    type: String,\n    required: true\n  },\n  spinnerDate: {\n    type: Object as PropType<Dayjs>,\n    required: true\n  },\n  showSeconds: {\n    type: Boolean,\n    default: true\n  },\n  arrowControl: Boolean,\n  amPmMode: {\n    type: String,\n    default: '' // 'a': am/pm; 'A': AM/PM\n  },\n  disabledHours: {\n    type: Function\n  },\n  disabledMinutes: {\n    type: Function\n  },\n  disabledSeconds: {\n    type: Function\n  }\n})\nconst emit = defineEmits(['change', 'select-range', 'set-option'])\n\n// data\nlet isScrolling = false\nconst debouncedResetScroll = debounce(type => {\n  isScrolling = false\n  adjustCurrentSpinner(type)\n}, 200)\nconst currentScrollbar = ref(null)\nconst listHoursRef: Ref<Nullable<HTMLElement>> = ref(null)\nconst listMinutesRef: Ref<Nullable<HTMLElement>> = ref(null)\nconst listSecondsRef: Ref<Nullable<HTMLElement>> = ref(null)\nconst listRefsMap = {\n  hours: listHoursRef,\n  minutes: listMinutesRef,\n  seconds: listSecondsRef\n}\n\n// computed\nconst spinnerItems = computed(() => {\n  const arr = ['hours', 'minutes', 'seconds']\n  return props.showSeconds ? arr : arr.slice(0, 2)\n})\nconst hours = computed(() => {\n  return props.spinnerDate.hour()\n})\nconst minutes = computed(() => {\n  return props.spinnerDate.minute()\n})\nconst seconds = computed(() => {\n  return props.spinnerDate.second()\n})\nconst timePartsMap = computed(() => ({\n  hours,\n  minutes,\n  seconds\n}))\nconst hoursList = computed(() => {\n  return getHoursList(props.role)\n})\nconst minutesList = computed(() => {\n  return getMinutesList(hours.value, props.role)\n})\nconst secondsList = computed(() => {\n  return getSecondsList(hours.value, minutes.value, props.role)\n})\nconst listMap = computed(() => ({\n  hours: hoursList,\n  minutes: minutesList,\n  seconds: secondsList\n}))\nconst arrowHourList = computed(() => {\n  const hour = hours.value\n  return [\n    hour > 0 ? hour - 1 : undefined,\n    hour,\n    hour < 23 ? hour + 1 : undefined\n  ]\n})\nconst arrowMinuteList = computed(() => {\n  const minute = minutes.value\n  return [\n    minute > 0 ? minute - 1 : undefined,\n    minute,\n    minute < 59 ? minute + 1 : undefined\n  ]\n})\nconst arrowSecondList = computed(() => {\n  const second = seconds.value\n  return [\n    second > 0 ? second - 1 : undefined,\n    second,\n    second < 59 ? second + 1 : undefined\n  ]\n})\nconst arrowListMap = computed(() => ({\n  hours: arrowHourList,\n  minutes: arrowMinuteList,\n  seconds: arrowSecondList\n}))\nconst getAmPmFlag = hour => {\n  const shouldShowAmPm = !!props.amPmMode\n  if (!shouldShowAmPm) return ''\n  const isCapital = props.amPmMode === 'A'\n  // todo locale\n  let content = hour < 12 ? ' am' : ' pm'\n  if (isCapital) content = content.toUpperCase()\n  return content\n}\n\nconst emitSelectRange = type => {\n  if (type === 'hours') {\n    emit('select-range', 0, 2)\n  } else if (type === 'minutes') {\n    emit('select-range', 3, 5)\n  } else if (type === 'seconds') {\n    emit('select-range', 6, 8)\n  }\n  currentScrollbar.value = type\n}\n\nconst adjustCurrentSpinner = type => {\n  adjustSpinner(type, timePartsMap.value[type].value)\n}\n\n// NOTE: used by datetime / date-range panel\n//       renamed from adjustScrollTop\n//       should try to refactory it\nconst adjustSpinners = () => {\n  adjustCurrentSpinner('hours')\n  adjustCurrentSpinner('minutes')\n  adjustCurrentSpinner('seconds')\n}\n\nconst adjustSpinner = (type, value) => {\n  if (props.arrowControl) return\n  const el = listRefsMap[type]\n  if (el && el.$el) {\n    el.$el.querySelector('.el-scrollbar__wrap').scrollTop = Math.max(\n      0,\n      value * typeItemHeight(type)\n    )\n  }\n}\n\nconst typeItemHeight = type => {\n  const el = listRefsMap[type]\n  return el.$el.querySelector('li').offsetHeight\n}\n\nconst onIncreaseClick = () => {\n  scrollDown(1)\n}\n\nconst onDecreaseClick = () => {\n  scrollDown(-1)\n}\n\nconst scrollDown = step => {\n  if (!currentScrollbar.value) {\n    emitSelectRange('hours')\n  }\n\n  const label = currentScrollbar.value\n  let now = timePartsMap.value[label].value\n  const total = currentScrollbar.value === 'hours' ? 24 : 60\n  now = (now + step + total) % total\n\n  modifyDateField(label, now)\n  adjustSpinner(label, now)\n  nextTick(() => emitSelectRange(currentScrollbar.value))\n}\n\nconst modifyDateField = (type, value) => {\n  const list = listMap.value[type].value\n  const isDisabled = list[value]\n  if (isDisabled) return\n  switch (type) {\n    case 'hours':\n      emit(\n        'change',\n        props.spinnerDate\n          .hour(value)\n          .minute(minutes.value)\n          .second(seconds.value)\n      )\n      break\n    case 'minutes':\n      emit(\n        'change',\n        props.spinnerDate.hour(hours.value).minute(value).second(seconds.value)\n      )\n      break\n    case 'seconds':\n      emit(\n        'change',\n        props.spinnerDate.hour(hours.value).minute(minutes.value).second(value)\n      )\n      break\n  }\n}\n\nconst handleClick = (type, { value, disabled }) => {\n  if (!disabled) {\n    modifyDateField(type, value)\n    emitSelectRange(type)\n    adjustSpinner(type, value)\n  }\n}\n\nconst handleScroll = type => {\n  isScrolling = true\n  debouncedResetScroll(type)\n  const value = Math.min(\n    Math.round(\n      (listRefsMap[type].$el.querySelector('.el-scrollbar__wrap').scrollTop -\n        (scrollBarHeight(type) * 0.5 - 10) / typeItemHeight(type) +\n        3) /\n        typeItemHeight(type)\n    ),\n    type === 'hours' ? 23 : 59\n  )\n  modifyDateField(type, value)\n}\n\nconst scrollBarHeight = type => {\n  return listRefsMap[type].$el.offsetHeight\n}\n\nconst bindScrollEvent = () => {\n  const bindFuntion = type => {\n    if (listRefsMap[type] && listRefsMap[type].$el) {\n      listRefsMap[type].$el.querySelector('.el-scrollbar__wrap').onscroll =\n        () => {\n          // TODO: scroll is emitted when set scrollTop programatically\n          // should find better solutions in the future!\n          handleScroll(type)\n        }\n    }\n  }\n  bindFuntion('hours')\n  bindFuntion('minutes')\n  bindFuntion('seconds')\n}\n\nonMounted(() => {\n  nextTick(() => {\n    !props.arrowControl && bindScrollEvent()\n    adjustSpinners()\n    // set selection on the first hour part\n    if (props.role === 'start') emitSelectRange('hours')\n  })\n})\n\nconst setRef = (scrollbar, type) => {\n  listRefsMap[type] = scrollbar\n}\n\nemit('set-option', [`${props.role}_scrollDown`, scrollDown])\nemit('set-option', [`${props.role}_emitSelectRange`, emitSelectRange])\n\nconst { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n  props.disabledHours,\n  props.disabledMinutes,\n  props.disabledSeconds\n)\n\nwatch(\n  () => props.spinnerDate,\n  () => {\n    if (isScrolling) return\n    adjustSpinners()\n  }\n)\n</script>\n"],"names":[],"mappings":"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"}