{"version":3,"file":"time-select.mjs","sources":["../../../../../../packages/components/time-select/src/time-select.vue"],"sourcesContent":["<template>\n  <el-select\n    ref=\"select\"\n    :model-value=\"value\"\n    :disabled=\"disabled\"\n    :clearable=\"clearable\"\n    :clear-icon=\"clearIcon\"\n    :size=\"size\"\n    :effect=\"effect\"\n    :placeholder=\"placeholder\"\n    default-first-option\n    :filterable=\"editable\"\n    @update:model-value=\"(event) => $emit('update:modelValue', event)\"\n    @change=\"(event) => $emit('change', event)\"\n    @blur=\"(event) => $emit('blur', event)\"\n    @focus=\"(event) => $emit('focus', event)\"\n  >\n    <el-option\n      v-for=\"item in items\"\n      :key=\"item.value\"\n      :label=\"item.value\"\n      :value=\"item.value\"\n      :disabled=\"item.disabled\"\n    />\n    <template #prefix>\n      <el-icon v-if=\"prefixIcon\" class=\"el-input__prefix-icon\">\n        <component :is=\"prefixIcon\" />\n      </el-icon>\n    </template>\n  </el-select>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue'\nimport dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js'\nimport ElSelect from '@element-plus/components/select'\nimport ElIcon from '@element-plus/components/icon'\nimport { CircleClose, Clock } from '@element-plus/icons-vue'\n\nimport type { Component, PropType } from 'vue'\nimport type { ComponentSize } from '@element-plus/constants'\ndayjs.extend(customParseFormat)\n\nconst { Option: ElOption } = ElSelect\n\ninterface Time {\n  hours: number\n  minutes: number\n}\n\nconst parseTime = (time: string): null | Time => {\n  const values = (time || '').split(':')\n  if (values.length >= 2) {\n    let hours = Number.parseInt(values[0], 10)\n    const minutes = Number.parseInt(values[1], 10)\n    const timeUpper = time.toUpperCase()\n    if (timeUpper.includes('AM') && hours === 12) {\n      hours = 0\n    } else if (timeUpper.includes('PM') && hours !== 12) {\n      hours += 12\n    }\n    return {\n      hours,\n      minutes,\n    }\n  }\n  return null\n}\nconst compareTime = (time1: string, time2: string): number => {\n  const value1 = parseTime(time1)\n  const value2 = parseTime(time2)\n  const minutes1 = value1.minutes + value1.hours * 60\n  const minutes2 = value2.minutes + value2.hours * 60\n  if (minutes1 === minutes2) {\n    return 0\n  }\n  return minutes1 > minutes2 ? 1 : -1\n}\nconst padTime = (time: number | string) => {\n  return `${time}`.padStart(2, '0')\n}\nconst formatTime = (time: Time): string => {\n  return `${padTime(time.hours)}:${padTime(time.minutes)}`\n}\nconst nextTime = (time: string, step: string): string => {\n  const timeValue = parseTime(time)\n  const stepValue = parseTime(step)\n  const next = {\n    hours: timeValue.hours,\n    minutes: timeValue.minutes,\n  }\n  next.minutes += stepValue.minutes\n  next.hours += stepValue.hours\n  next.hours += Math.floor(next.minutes / 60)\n  next.minutes = next.minutes % 60\n  return formatTime(next)\n}\n\nexport default defineComponent({\n  name: 'ElTimeSelect',\n  components: { ElSelect, ElOption, ElIcon },\n  model: {\n    prop: 'value',\n    event: 'change',\n  },\n  props: {\n    format: {\n      type: String,\n      default: 'HH:mm',\n    },\n    modelValue: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    editable: {\n      type: Boolean,\n      default: true,\n    },\n    effect: {\n      type: String as PropType<'light' | 'dark' | string>,\n      default: 'light',\n    },\n    clearable: {\n      type: Boolean,\n      default: true,\n    },\n    size: {\n      type: String as PropType<ComponentSize>,\n      default: 'default',\n      validator: (value: string) =>\n        !value || ['large', 'default', 'small'].includes(value),\n    },\n    placeholder: {\n      type: String,\n      default: '',\n    },\n    start: {\n      type: String,\n      default: '09:00',\n    },\n    end: {\n      type: String,\n      default: '18:00',\n    },\n    step: {\n      type: String,\n      default: '00:30',\n    },\n    minTime: {\n      type: String,\n      default: '',\n    },\n    maxTime: {\n      type: String,\n      default: '',\n    },\n    name: {\n      type: String,\n      default: '',\n    },\n    prefixIcon: {\n      type: [String, Object] as PropType<string | Component>,\n      default: Clock,\n    },\n    clearIcon: {\n      type: [String, Object] as PropType<string | Component>,\n      default: CircleClose,\n    },\n  },\n  emits: ['change', 'blur', 'focus', 'update:modelValue'],\n  setup(props) {\n    // computed\n    const select = ref(null)\n    const value = computed(() => props.modelValue)\n    const start = computed(() => {\n      const time = parseTime(props.start)\n      return formatTime(time)\n    })\n    const end = computed(() => {\n      const time = parseTime(props.end)\n      return formatTime(time)\n    })\n    const step = computed(() => {\n      const time = parseTime(props.step)\n      return formatTime(time)\n    })\n    const minTime = computed(() => {\n      const time = parseTime(props.minTime)\n      return time ? formatTime(time) : null\n    })\n    const maxTime = computed(() => {\n      const time = parseTime(props.maxTime)\n      return time ? formatTime(time) : null\n    })\n    const items = computed(() => {\n      const result = []\n      if (props.start && props.end && props.step) {\n        let current = start.value\n        let currentTime\n        while (compareTime(current, end.value) <= 0) {\n          currentTime = dayjs(current, 'HH:mm').format(props.format)\n          result.push({\n            value: currentTime,\n            disabled:\n              compareTime(current, minTime.value || '-1:-1') <= 0 ||\n              compareTime(current, maxTime.value || '100:100') >= 0,\n          })\n          current = nextTime(current, step.value)\n        }\n      }\n      return result\n    })\n    const blur = () => {\n      select.value?.blur?.()\n    }\n    const focus = () => {\n      select.value?.focus?.()\n    }\n\n    return {\n      select,\n      value,\n      items,\n      blur,\n      focus,\n    }\n  },\n})\n</script>\n"],"names":["_resolveComponent","_openBlock","_createBlock","_withCtx","_resolveDynamicComponent","_createElementBlock","_Fragment","_renderList"],"mappings":";;;;;;;;AA0CA,KAAA,CAAM,MAAO,CAAA,iBAAA,CAAA,CAAA;AAEb,MAAM,EAAE,QAAQ,QAAa,EAAA,GAAA,QAAA,CAAA;AAO7B,MAAM,SAAA,GAAY,CAAC,IAA8B,KAAA;AAC/C,EAAM,MAAA,MAAA,GAAU,CAAQ,IAAA,IAAA,EAAA,EAAI,KAAM,CAAA,GAAA,CAAA,CAAA;AAClC,EAAI,IAAA,MAAA,CAAO,UAAU,CAAG,EAAA;AACtB,IAAA,IAAI,KAAQ,GAAA,MAAA,CAAO,QAAS,CAAA,MAAA,CAAO,CAAI,CAAA,EAAA,EAAA,CAAA,CAAA;AACvC,IAAA,MAAM,OAAU,GAAA,MAAA,CAAO,QAAS,CAAA,MAAA,CAAO,CAAI,CAAA,EAAA,EAAA,CAAA,CAAA;AAC3C,IAAA,MAAM,YAAY,IAAK,CAAA,WAAA,EAAA,CAAA;AACvB,IAAA,IAAI,SAAU,CAAA,QAAA,CAAS,IAAS,CAAA,IAAA,KAAA,KAAU,EAAI,EAAA;AAC5C,MAAQ,KAAA,GAAA,CAAA,CAAA;AAAA,KAAA,MAAA,IACC,SAAU,CAAA,QAAA,CAAS,IAAS,CAAA,IAAA,KAAA,KAAU,EAAI,EAAA;AACnD,MAAS,KAAA,IAAA,EAAA,CAAA;AAAA,KAAA;AAEX,IAAO,OAAA;AAAA,MACL,KAAA;AAAA,MACA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAGJ,EAAO,OAAA,IAAA,CAAA;AAAA,CAAA,CAAA;AAET,MAAM,WAAA,GAAc,CAAC,KAAA,EAAe,KAA0B,KAAA;AAC5D,EAAA,MAAM,SAAS,SAAU,CAAA,KAAA,CAAA,CAAA;AACzB,EAAA,MAAM,SAAS,SAAU,CAAA,KAAA,CAAA,CAAA;AACzB,EAAA,MAAM,QAAW,GAAA,MAAA,CAAO,OAAU,GAAA,MAAA,CAAO,KAAQ,GAAA,EAAA,CAAA;AACjD,EAAA,MAAM,QAAW,GAAA,MAAA,CAAO,OAAU,GAAA,MAAA,CAAO,KAAQ,GAAA,EAAA,CAAA;AACjD,EAAA,IAAI,aAAa,QAAU,EAAA;AACzB,IAAO,OAAA,CAAA,CAAA;AAAA,GAAA;AAET,EAAO,OAAA,QAAA,GAAW,WAAW,CAAI,GAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAEnC,MAAM,OAAA,GAAU,CAAC,IAA0B,KAAA;AACzC,EAAO,OAAA,CAAA,EAAG,IAAO,CAAA,CAAA,CAAA,QAAA,CAAS,CAAG,EAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAE/B,MAAM,UAAA,GAAa,CAAC,IAAuB,KAAA;AACzC,EAAA,OAAO,CAAG,EAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAA,CAAA,CAAA,EAAU,QAAQ,IAAK,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAEhD,MAAM,QAAA,GAAW,CAAC,IAAA,EAAc,IAAyB,KAAA;AACvD,EAAA,MAAM,YAAY,SAAU,CAAA,IAAA,CAAA,CAAA;AAC5B,EAAA,MAAM,YAAY,SAAU,CAAA,IAAA,CAAA,CAAA;AAC5B,EAAA,MAAM,IAAO,GAAA;AAAA,IACX,OAAO,SAAU,CAAA,KAAA;AAAA,IACjB,SAAS,SAAU,CAAA,OAAA;AAAA,GAAA,CAAA;AAErB,EAAA,IAAA,CAAK,WAAW,SAAU,CAAA,OAAA,CAAA;AAC1B,EAAA,IAAA,CAAK,SAAS,SAAU,CAAA,KAAA,CAAA;AACxB,EAAA,IAAA,CAAK,KAAS,IAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,OAAU,GAAA,EAAA,CAAA,CAAA;AACxC,EAAK,IAAA,CAAA,OAAA,GAAU,KAAK,OAAU,GAAA,EAAA,CAAA;AAC9B,EAAA,OAAO,UAAW,CAAA,IAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAGpB,MAAK,YAAa,eAAa,CAAA;AAAA,EAC7B,IAAM,EAAA,cAAA;AAAA,EACN,UAAA,EAAY,EAAE,QAAA,EAAU,QAAU,EAAA,MAAA,EAAA;AAAA,EAClC,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,OAAA;AAAA,IACN,KAAO,EAAA,QAAA;AAAA,GAAA;AAAA,EAET,KAAO,EAAA;AAAA,IACL,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,OAAA;AAAA,KAAA;AAAA,IAEX,UAAY,EAAA,MAAA;AAAA,IACZ,QAAU,EAAA;AAAA,MACR,IAAM,EAAA,OAAA;AAAA,MACN,OAAS,EAAA,KAAA;AAAA,KAAA;AAAA,IAEX,QAAU,EAAA;AAAA,MACR,IAAM,EAAA,OAAA;AAAA,MACN,OAAS,EAAA,IAAA;AAAA,KAAA;AAAA,IAEX,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,OAAA;AAAA,KAAA;AAAA,IAEX,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,OAAA;AAAA,MACN,OAAS,EAAA,IAAA;AAAA,KAAA;AAAA,IAEX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,SAAA;AAAA,MACT,SAAA,EAAW,CAAC,KACV,KAAA,CAAC,SAAS,CAAC,OAAA,EAAS,SAAW,EAAA,OAAA,CAAA,CAAS,QAAS,CAAA,KAAA,CAAA;AAAA,KAAA;AAAA,IAErD,WAAa,EAAA;AAAA,MACX,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,EAAA;AAAA,KAAA;AAAA,IAEX,KAAO,EAAA;AAAA,MACL,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,OAAA;AAAA,KAAA;AAAA,IAEX,GAAK,EAAA;AAAA,MACH,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,OAAA;AAAA,KAAA;AAAA,IAEX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,OAAA;AAAA,KAAA;AAAA,IAEX,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,EAAA;AAAA,KAAA;AAAA,IAEX,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,EAAA;AAAA,KAAA;AAAA,IAEX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,EAAA;AAAA,KAAA;AAAA,IAEX,UAAY,EAAA;AAAA,MACV,IAAA,EAAM,CAAC,MAAQ,EAAA,MAAA,CAAA;AAAA,MACf,OAAS,EAAA,KAAA;AAAA,KAAA;AAAA,IAEX,SAAW,EAAA;AAAA,MACT,IAAA,EAAM,CAAC,MAAQ,EAAA,MAAA,CAAA;AAAA,MACf,OAAS,EAAA,WAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAGb,KAAO,EAAA,CAAC,QAAU,EAAA,MAAA,EAAQ,OAAS,EAAA,mBAAA,CAAA;AAAA,EACnC,MAAM,KAAO,EAAA;AAEX,IAAA,MAAM,SAAS,GAAI,CAAA,IAAA,CAAA,CAAA;AACnB,IAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,MAAM,KAAM,CAAA,UAAA,CAAA,CAAA;AACnC,IAAM,MAAA,KAAA,GAAQ,SAAS,MAAM;AAC3B,MAAM,MAAA,IAAA,GAAO,UAAU,KAAM,CAAA,KAAA,CAAA,CAAA;AAC7B,MAAA,OAAO,UAAW,CAAA,IAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAEpB,IAAM,MAAA,GAAA,GAAM,SAAS,MAAM;AACzB,MAAM,MAAA,IAAA,GAAO,UAAU,KAAM,CAAA,GAAA,CAAA,CAAA;AAC7B,MAAA,OAAO,UAAW,CAAA,IAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAEpB,IAAM,MAAA,IAAA,GAAO,SAAS,MAAM;AAC1B,MAAM,MAAA,IAAA,GAAO,UAAU,KAAM,CAAA,IAAA,CAAA,CAAA;AAC7B,MAAA,OAAO,UAAW,CAAA,IAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAEpB,IAAM,MAAA,OAAA,GAAU,SAAS,MAAM;AAC7B,MAAM,MAAA,IAAA,GAAO,UAAU,KAAM,CAAA,OAAA,CAAA,CAAA;AAC7B,MAAO,OAAA,IAAA,GAAO,WAAW,IAAQ,CAAA,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAEnC,IAAM,MAAA,OAAA,GAAU,SAAS,MAAM;AAC7B,MAAM,MAAA,IAAA,GAAO,UAAU,KAAM,CAAA,OAAA,CAAA,CAAA;AAC7B,MAAO,OAAA,IAAA,GAAO,WAAW,IAAQ,CAAA,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAEnC,IAAM,MAAA,KAAA,GAAQ,SAAS,MAAM;AAC3B,MAAA,MAAM,MAAS,GAAA,EAAA,CAAA;AACf,MAAA,IAAI,KAAM,CAAA,KAAA,IAAS,KAAM,CAAA,GAAA,IAAO,MAAM,IAAM,EAAA;AAC1C,QAAA,IAAI,UAAU,KAAM,CAAA,KAAA,CAAA;AACpB,QAAI,IAAA,WAAA,CAAA;AACJ,QAAA,OAAO,WAAY,CAAA,OAAA,EAAS,GAAI,CAAA,KAAA,CAAA,IAAU,CAAG,EAAA;AAC3C,UAAA,WAAA,GAAc,KAAM,CAAA,OAAA,EAAS,OAAS,CAAA,CAAA,MAAA,CAAO,KAAM,CAAA,MAAA,CAAA,CAAA;AACnD,UAAA,MAAA,CAAO,IAAK,CAAA;AAAA,YACV,KAAO,EAAA,WAAA;AAAA,YACP,QAAA,EACE,WAAY,CAAA,OAAA,EAAS,OAAQ,CAAA,KAAA,IAAS,OAAY,CAAA,IAAA,CAAA,IAClD,WAAY,CAAA,OAAA,EAAS,OAAQ,CAAA,KAAA,IAAS,SAAc,CAAA,IAAA,CAAA;AAAA,WAAA,CAAA,CAAA;AAExD,UAAU,OAAA,GAAA,QAAA,CAAS,SAAS,IAAK,CAAA,KAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAGrC,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAET,IAAA,MAAM,OAAO,MAAM;AACjB,MAAA,IAAA,EAAA,EAAc,EAAA,CAAA;AAAA,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,KAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA;AAEhB,KAAA,CAAA;AACE,IAAA,MAAA,KAAc,GAAA,MAAA;AAAA,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAGhB,MAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,KAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KACL,CAAA;AAAA,IACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MAAA,IAAA;AAAA,MAAA,KAAA;AAAA,KAAA,CAAA;;;;;0BArMQ,GAAAA,gBAAA,CAAA,SAAA,CAAA,CAAA;AAAA,EAAA,MA3BN,oBAAA,GAAAA,gBAAA,CAAA,WAAA,CAAA,CAAA;AAAA,EAAA,OACUC,SAAA,EAAA,EAAAC,WAAA,CAAA,oBAAA,EAAA;AAAA,IACb,GAAU,EAAA,QAAA;AAAA,IACV,aAAW,EAAA,IAAA,CAAA,KAAA;AAAA,IACX,QAAY,EAAA,IAAA,CAAA,QAAA;AAAA,IACZ,SAAM,EAAA,IAAA,CAAA,SAAA;AAAA,IACN,YAAQ,EAAA,IAAA,CAAA,SAAA;AAAA,IACR,IAAa,EAAA,IAAA,CAAA,IAAA;AAAA,IACd,MAAA,EAAA,IAAA,CAAA,MAAA;AAAA,IACC,WAAY,EAAA,IAAA,CAAA,WAAA;AAAA,IACZ,sBAAkB,EAAA,EAAA;AAAwC,IAC1D,UAAM,EAAA,IAAA,CAAA,QAAA;AAA6B,IACnC,qBAAI,EAAA,MAAA,CAAA,CAAA,CAAA,KAAa,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,KAAA,KAAc,IAAA,CAAA,KAAA,CAAA,mBAAA,EAAA,KAAA,CAAA,CAAA;AAAA,IAC/B,QAAK,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAG,CAAU,KAAA,KAAA,IAAA,CAAA,KAAK,CAAU,QAAA,EAAA,KAAA,CAAA,CAAA;AAAA,IAAA,MAAA,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,KAAA,KAAA,IAAA,CAAA,KAAA,CAAA,MAAA,EAAA,KAAA,CAAA,CAAA;AASvB,IAAA,OAAA,UACT,CAEU,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,KAAA,KAAA,IAAA,CAAA,KAAA,CAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AAAA,GAAA,EAAA;AAAA,IAAA,MAAA,EAAAC,OAAA,CAAA,MAAA;UAFuB,CAAA,UAAA,IAAAF,SAAA,EAAA,EAAAC,WAAA,CAAA,kBAAA,EAAA;AAAA,QAAA,GAAA,EAAA,CAAA;sCACD;AAAA,OAAA,EAAA;AAAd,QAAA,OAAA,EAAAC,OAAA,CAAA,MAAA;AAAA,WAAAF,SAAA,EAAA,EAAAC,WAAA,CAAAE,uBAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA;;;8BARG,CAAA,MAAA,EAAA,IAAA,CAAA;AAAA,KAAA,CAAA;;AAKrB,OAAAH,SAJW,CAAA,IAAA,CAAA,EAAAI,kBAAA,CAAAC,QAAA,EAAA,IAAA,EAAAC,UAAA,CAAA,IAAA,CAAA,KAAA,EAAA,CAAA,IAAA,KAAA;AAAA,QAAA,gBACE,EAAA,EAAAL,WAAA,CAAA,oBAAA,EAAA;AAAA,UACZ,SAAY,CAAA,KAAA;AAAA,UACZ,WAAe,CAAA,KAAA;AAAA,UAAA,KAAA,EAAA,IAAA,CAAA,KAAA;;;;;;;;;;;;"}