{"version":3,"file":"time-control.vue2.cjs","sources":["../../../components/date-picker/time-control.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { doubleDigits } from '@vexip-ui/utils'\nimport { handleKeyEnter } from './helper'\n\nimport type { PropType } from 'vue'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { TimeType } from './symbol'\n\ndefineOptions({ name: 'TimeControl' })\n\nconst props = defineProps({\n  unitType: {\n    type: String as PropType<TimeType | ''>,\n    default: '',\n  },\n  enabled: {\n    type: Object as PropType<Record<TimeType, boolean>>,\n    default: () => ({}),\n  },\n  activated: {\n    type: Object as PropType<Record<TimeType, boolean>>,\n    default: () => ({}),\n  },\n  timeValue: {\n    type: Object as PropType<Record<TimeType, number>>,\n    default: () => ({}),\n  },\n  separator: {\n    type: String,\n    default: ':',\n  },\n  visible: {\n    type: Boolean,\n    default: false,\n  },\n  focused: {\n    type: Boolean,\n    default: false,\n  },\n  filler: {\n    type: String,\n    default: '-',\n    validator: (value: string) => value.length === 1,\n  },\n  steps: {\n    type: Array as PropType<number[]>,\n    default: () => [1, 1, 1],\n  },\n  ctrlSteps: {\n    type: Array as PropType<number[]>,\n    default: () => [5, 5, 5],\n  },\n  labels: {\n    type: Object as PropType<Partial<Record<TimeType, string>>>,\n    default: () => ({}),\n  },\n  hasError: {\n    type: Boolean,\n    default: false,\n  },\n  placeholder: {\n    type: String,\n    default: '',\n  },\n  readonly: {\n    type: Boolean,\n    default: false,\n  },\n  labeledBy: {\n    type: String,\n    default: undefined,\n  },\n  locale: {\n    type: Object as PropType<LocaleConfig['timePicker']>,\n    default: () => ({}),\n  },\n})\n\nconst emit = defineEmits([\n  'input',\n  'plus',\n  'minus',\n  'enter',\n  'cancel',\n  'unit-focus',\n  'unit-blur',\n  'prev-unit',\n  'next-unit',\n  'blur',\n])\n\nconst nh = useNameHelper('time-picker')\n\nconst wrapper = ref<HTMLElement>()\n\nconst label = computed(() => props.locale.ariaLabel ?? {})\nconst isActivated = computed(() => {\n  return (Object.keys(props.enabled) as TimeType[]).every(type => {\n    return !props.enabled[type] || props.activated[type]\n  })\n})\nconst formattedHour = computed(() => {\n  return formatValue('hour')\n})\nconst formattedMinute = computed(() => {\n  return formatValue('minute')\n})\nconst formattedSecond = computed(() => {\n  return formatValue('second')\n})\n\ndefineExpose({\n  isActivated,\n  wrapper,\n  focus: () => {\n    wrapper.value?.focus()\n  },\n  blur: () => {\n    wrapper.value?.blur()\n  },\n})\n\nfunction formatValue(type: TimeType) {\n  return props.activated[type]\n    ? doubleDigits(props.timeValue[type])\n    : `${props.filler}${props.filler}`\n}\n\nfunction getUnitFocusClass(type: TimeType) {\n  return props.visible && props.unitType === type ? nh.bem('unit', 'focused') : null\n}\n\nfunction handleInputFocus(type: TimeType) {\n  if (props.readonly) return\n\n  emit('unit-focus', type)\n}\n\nfunction handleInput(event: KeyboardEvent) {\n  if (!props.visible) return\n\n  const type = handleKeyEnter(event)\n\n  if (props.readonly) {\n    switch (type) {\n      case 'ok': {\n        emit('enter')\n        break\n      }\n      case 'esc': {\n        emit('cancel')\n        break\n      }\n    }\n\n    return\n  }\n\n  switch (type) {\n    case 'next': {\n      emit('next-unit')\n      break\n    }\n    case 'prev': {\n      emit('prev-unit')\n      break\n    }\n    case 'up': {\n      emit('minus', event.ctrlKey)\n      break\n    }\n    case 'down': {\n      emit('plus', event.ctrlKey)\n      break\n    }\n    case 'ok': {\n      handleEnter()\n      break\n    }\n    case 'esc': {\n      handleCancel()\n      break\n    }\n    default: {\n      if (typeof type === 'number') {\n        emit('input', type)\n      }\n    }\n  }\n}\n\nfunction handleEnter() {\n  emit('enter')\n}\n\nfunction handleCancel() {\n  emit('cancel')\n}\n\nfunction handleBlur() {\n  emit('blur')\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"[nh.be('input'), hasError && nh.bem('input', 'error')]\"\n    role=\"none\"\n    tabindex=\"-1\"\n    @keydown=\"handleInput\"\n    @blur=\"handleBlur\"\n  >\n    <div v-if=\"!focused && !isActivated\" :class=\"nh.be('placeholder')\">\n      {{ placeholder }}\n    </div>\n    <template v-else>\n      <div\n        v-if=\"enabled.hour\"\n        :class=\"[nh.be('unit'), getUnitFocusClass('hour')]\"\n        role=\"spinbutton\"\n        :aria-label=\"label.hour\"\n        :aria-valuenow=\"props.timeValue.hour\"\n        :aria-valuetext=\"formattedHour\"\n        :aria-valuemin=\"0\"\n        :aria-valuemax=\"23\"\n        :aria-labelledby=\"labeledBy\"\n        @click=\"handleInputFocus('hour')\"\n      >\n        {{ formattedHour }}\n      </div>\n      <div\n        v-if=\"labels.hour\"\n        :class=\"nh.be('label')\"\n        aria-hidden\n        @click=\"handleInputFocus('hour')\"\n      >\n        {{ labels.hour }}\n      </div>\n      <template v-if=\"enabled.minute\">\n        <div v-if=\"enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\n          {{ separator }}\n        </div>\n        <div\n          :class=\"[nh.be('unit'), getUnitFocusClass('minute')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.minute\"\n          :aria-valuenow=\"props.timeValue.minute\"\n          :aria-valuetext=\"formattedMinute\"\n          :aria-valuemin=\"0\"\n          :aria-valuemax=\"59\"\n          :aria-labelledby=\"labeledBy\"\n          @click=\"handleInputFocus('minute')\"\n        >\n          {{ formattedMinute }}\n        </div>\n        <div\n          v-if=\"labels.minute\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          @click=\"handleInputFocus('minute')\"\n        >\n          {{ labels.minute }}\n        </div>\n      </template>\n      <template v-if=\"enabled.second\">\n        <div v-if=\"enabled.minute || enabled.hour\" :class=\"nh.be('separator')\" aria-hidden>\n          {{ separator }}\n        </div>\n        <div\n          :class=\"[nh.be('unit'), getUnitFocusClass('second')]\"\n          role=\"spinbutton\"\n          :aria-label=\"label.second\"\n          :aria-valuenow=\"props.timeValue.second\"\n          :aria-valuetext=\"formattedSecond\"\n          :aria-valuemin=\"0\"\n          :aria-valuemax=\"59\"\n          :aria-labelledby=\"labeledBy\"\n          @click=\"handleInputFocus('second')\"\n        >\n          {{ formattedSecond }}\n        </div>\n        <div\n          v-if=\"labels.second\"\n          :class=\"nh.be('label')\"\n          aria-hidden\n          @click=\"handleInputFocus('second')\"\n        >\n          {{ labels.second }}\n        </div>\n      </template>\n    </template>\n  </div>\n</template>\n"],"names":["props","__props","emit","__emit","nh","useNameHelper","wrapper","ref","label","computed","isActivated","type","formattedHour","formatValue","formattedMinute","formattedSecond","__expose","_a","doubleDigits","getUnitFocusClass","handleInputFocus","handleInput","event","handleKeyEnter","handleEnter","handleCancel","handleBlur","_createElementBlock","_normalizeClass","_unref","_Fragment","_hoisted_1","_toDisplayString","_createElementVNode","_hoisted_2","_hoisted_3"],"mappings":"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"}