{"version":3,"file":"basic-time-spinner.mjs","sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue"],"sourcesContent":["<template>\n  <div :class=\"[ns.b('spinner'), { 'has-seconds': showSeconds }]\">\n    <template v-if=\"!arrowControl\">\n      <b-scrollbar\n        v-for=\"item in spinnerItems\"\n        :key=\"item\"\n        :ref=\"(scrollbar: unknown) => setRef(scrollbar as any, item)\"\n        :class=\"ns.be('spinner', 'wrapper')\"\n        wrap-style=\"max-height: inherit;\"\n        :view-class=\"ns.be('spinner', 'list')\"\n        noresize\n        tag=\"ul\"\n        :bar-size=\"2\"\n        @mouseenter=\"emitSelectRange(item)\"\n        @mousemove=\"adjustCurrentSpinner(item)\"\n      >\n        <li\n          v-for=\"(disabled, key) in timeList[item]\"\n          :key=\"key\"\n          :class=\"[\n            ns.be('spinner', 'item'),\n            ns.is('active', key === timePartials[item]),\n            ns.is('disabled', disabled),\n          ]\"\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      </b-scrollbar>\n    </template>\n    <template v-if=\"arrowControl\">\n      <div\n        v-for=\"item in spinnerItems\"\n        :key=\"item\"\n        :class=\"[ns.be('spinner', 'wrapper'), ns.is('arrow')]\"\n        @mouseenter=\"emitSelectRange(item)\"\n      >\n        <b-icon\n          v-repeat-click=\"onDecrement\"\n          :class=\"['action-up', ns.be('spinner', 'arrow')]\"\n        >\n          <action-up />\n        </b-icon>\n        <b-icon\n          v-repeat-click=\"onIncrement\"\n          :class=\"['action-down', ns.be('spinner', 'arrow')]\"\n        >\n          <action-down />\n        </b-icon>\n        <ul :class=\"ns.be('spinner', 'list')\">\n          <li\n            v-for=\"(time, key) in arrowControlTimeList[item]\"\n            :key=\"key\"\n            :class=\"[\n              ns.be('spinner', 'item'),\n              ns.is('active', time === timePartials[item]),\n              ns.is('disabled', timeList[item][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 { computed, nextTick, onMounted, ref, unref, watch } from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { vRepeatClick } from '@bigin/directives'\nimport BScrollbar from '@bigin/components/scrollbar'\nimport BIcon from '@bigin/components/icon'\nimport { ActionDown, ActionUp } from '@bigin/icons-vue'\nimport { useNamespace } from '@bigin/hooks'\nimport { timeUnits } from '../constants'\nimport { buildTimeList } from '../utils'\nimport { basicTimeSpinnerProps } from '../props/basic-time-spinner'\nimport { getTimeLists } from '../composables/use-time-picker'\n\nimport type { Ref } from 'vue'\nimport type { ScrollbarInstance } from '@bigin/components/scrollbar'\nimport type { TimeUnit } from '../constants'\nimport type { TimeList } from '../utils'\n\nconst props = defineProps(basicTimeSpinnerProps)\nconst emit = defineEmits(['change', 'select-range', 'set-option'])\n\nconst ns = useNamespace('time')\n\nconst { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n  props.disabledHours,\n  props.disabledMinutes,\n  props.disabledSeconds\n)\n\n// data\nlet isScrolling = false\n\nconst currentScrollbar = ref<TimeUnit>()\nconst listHoursRef = ref<ScrollbarInstance>()\nconst listMinutesRef = ref<ScrollbarInstance>()\nconst listSecondsRef = ref<ScrollbarInstance>()\nconst listRefsMap: Record<TimeUnit, Ref<ScrollbarInstance | undefined>> = {\n  hours: listHoursRef,\n  minutes: listMinutesRef,\n  seconds: listSecondsRef,\n}\n\n// computed\nconst spinnerItems = computed(() => {\n  return props.showSeconds ? timeUnits : timeUnits.slice(0, 2)\n})\n\nconst timePartials = computed<Record<TimeUnit, number>>(() => {\n  const { spinnerDate } = props\n  const hours = spinnerDate.hour()\n  const minutes = spinnerDate.minute()\n  const seconds = spinnerDate.second()\n  return { hours, minutes, seconds }\n})\n\nconst timeList = computed(() => {\n  const { hours, minutes } = unref(timePartials)\n  return {\n    hours: getHoursList(props.role),\n    minutes: getMinutesList(hours, props.role),\n    seconds: getSecondsList(hours, minutes, props.role),\n  }\n})\n\nconst arrowControlTimeList = computed<Record<TimeUnit, TimeList>>(() => {\n  const { hours, minutes, seconds } = unref(timePartials)\n\n  return {\n    hours: buildTimeList(hours, 23),\n    minutes: buildTimeList(minutes, 59),\n    seconds: buildTimeList(seconds, 59),\n  }\n})\n\nconst debouncedResetScroll = debounce((type) => {\n  isScrolling = false\n  adjustCurrentSpinner(type)\n}, 200)\n\nconst getAmPmFlag = (hour: number) => {\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: TimeUnit) => {\n  let range\n\n  switch (type) {\n    case 'hours':\n      range = [0, 2]\n      break\n    case 'minutes':\n      range = [3, 5]\n      break\n    case 'seconds':\n      range = [6, 8]\n      break\n  }\n  const [left, right] = range\n\n  emit('select-range', left, right)\n  currentScrollbar.value = type\n}\n\nconst adjustCurrentSpinner = (type: TimeUnit) => {\n  adjustSpinner(type, unref(timePartials)[type])\n}\n\nconst adjustSpinners = () => {\n  adjustCurrentSpinner('hours')\n  adjustCurrentSpinner('minutes')\n  adjustCurrentSpinner('seconds')\n}\n\nconst getScrollbarElement = (el: HTMLElement) =>\n  el.querySelector(`.${ns.namespace.value}-scrollbar__wrap`) as HTMLElement\n\nconst adjustSpinner = (type: TimeUnit, value: number) => {\n  if (props.arrowControl) return\n  const scrollbar = unref(listRefsMap[type])\n  if (scrollbar && scrollbar.$el) {\n    getScrollbarElement(scrollbar.$el).scrollTop = Math.max(\n      0,\n      value * typeItemHeight(type)\n    )\n  }\n}\n\nconst typeItemHeight = (type: TimeUnit): number => {\n  const scrollbar = unref(listRefsMap[type])\n  return scrollbar?.$el.querySelector('li').offsetHeight || 0\n}\n\nconst onIncrement = () => {\n  scrollDown(1)\n}\n\nconst onDecrement = () => {\n  scrollDown(-1)\n}\n\nconst scrollDown = (step: number) => {\n  if (!currentScrollbar.value) {\n    emitSelectRange('hours')\n  }\n\n  const label = currentScrollbar.value!\n  const now = unref(timePartials)[label]\n  const total = currentScrollbar.value === 'hours' ? 24 : 60\n  const next = findNextUnDisabled(label, now, step, total)\n\n  modifyDateField(label, next)\n  adjustSpinner(label, next)\n  nextTick(() => emitSelectRange(label))\n}\n\nconst findNextUnDisabled = (\n  type: TimeUnit,\n  now: number,\n  step: number,\n  total: number\n) => {\n  let next = (now + step + total) % total\n  const list = unref(timeList)[type]\n  while (list[next] && next !== now) {\n    next = (next + step + total) % total\n  }\n  return next\n}\n\nconst modifyDateField = (type: TimeUnit, value: number) => {\n  const list = unref(timeList)[type]\n  const isDisabled = list[value]\n  if (isDisabled) return\n\n  const { hours, minutes, seconds } = unref(timePartials)\n\n  let changeTo\n  switch (type) {\n    case 'hours':\n      changeTo = props.spinnerDate.hour(value).minute(minutes).second(seconds)\n      break\n    case 'minutes':\n      changeTo = props.spinnerDate.hour(hours).minute(value).second(seconds)\n      break\n    case 'seconds':\n      changeTo = props.spinnerDate.hour(hours).minute(minutes).second(value)\n      break\n  }\n  emit('change', changeTo)\n}\n\nconst handleClick = (\n  type: TimeUnit,\n  { value, disabled }: { value: number; disabled: boolean }\n) => {\n  if (!disabled) {\n    modifyDateField(type, value)\n    emitSelectRange(type)\n    adjustSpinner(type, value)\n  }\n}\n\nconst handleScroll = (type: TimeUnit) => {\n  isScrolling = true\n  debouncedResetScroll(type)\n  const value = Math.min(\n    Math.round(\n      (getScrollbarElement(unref(listRefsMap[type])!.$el).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: TimeUnit) => {\n  return unref(listRefsMap[type])!.$el.offsetHeight\n}\n\nconst bindScrollEvent = () => {\n  const bindFunction = (type: TimeUnit) => {\n    const scrollbar = unref(listRefsMap[type])\n    if (scrollbar && scrollbar.$el) {\n      getScrollbarElement(scrollbar.$el).onscroll = () => {\n        // TODO: scroll is emitted when set scrollTop programmatically\n        // should find better solutions in the future!\n        handleScroll(type)\n      }\n    }\n  }\n  bindFunction('hours')\n  bindFunction('minutes')\n  bindFunction('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: ScrollbarInstance, type: TimeUnit) => {\n  listRefsMap[type].value = scrollbar\n}\n\nemit('set-option', [`${props.role}_scrollDown`, scrollDown])\nemit('set-option', [`${props.role}_emitSelectRange`, emitSelectRange])\n\nwatch(\n  () => props.spinnerDate,\n  () => {\n    if (isScrolling) return\n    adjustSpinners()\n  }\n)\n</script>\n"],"names":[],"mappings":"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"}