{"version":3,"file":"picker.vue2.mjs","sources":["../../../../../../packages/components/time-picker/src/common/picker.vue"],"sourcesContent":["<template>\n  <el-tooltip\n    ref=\"refPopper\"\n    v-model:visible=\"pickerVisible\"\n    effect=\"light\"\n    pure\n    trigger=\"click\"\n    v-bind=\"$attrs\"\n    append-to-body\n    transition=\"el-zoom-in-top\"\n    :popper-class=\"`el-picker__popper ${popperClass}`\"\n    :popper-options=\"elPopperOptions\"\n    :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\n    :gpu-acceleration=\"false\"\n    :stop-popper-mouse-event=\"false\"\n    :hide-after=\"0\"\n    persistent\n    @show=\"onShow\"\n    @hide=\"onHide\"\n  >\n    <template #default>\n      <el-input\n        v-if=\"!isRangeInput\"\n        :id=\"id\"\n        ref=\"inputRef\"\n        :model-value=\"displayValue\"\n        :name=\"name\"\n        :size=\"pickerSize\"\n        :disabled=\"pickerDisabled\"\n        :placeholder=\"placeholder\"\n        class=\"el-date-editor\"\n        :class=\"['el-date-editor--' + type, $attrs.class || undefined]\"\n        :style=\"$attrs.style || undefined\"\n        :readonly=\"!editable || readonly || isDatesPicker || type === 'week'\"\n        @input=\"onUserInput\"\n        @focus=\"handleFocus\"\n        @keydown=\"handleKeydown\"\n        @change=\"handleChange\"\n        @mouseenter=\"onMouseEnter\"\n        @mouseleave=\"onMouseLeave\"\n        @click.stop\n      >\n        <template #prefix>\n          <el-icon\n            v-if=\"triggerIcon\"\n            class=\"el-input__icon\"\n            @click=\"handleFocus\"\n          >\n            <component :is=\"triggerIcon\"></component>\n          </el-icon>\n        </template>\n        <template #suffix>\n          <el-icon\n            v-if=\"showClose && clearIcon\"\n            class=\"el-input__icon clear-icon\"\n            @click=\"onClearIconClick\"\n          >\n            <component :is=\"clearIcon\" />\n          </el-icon>\n        </template>\n      </el-input>\n      <div\n        v-else\n        ref=\"inputRef\"\n        class=\"el-date-editor el-range-editor el-input__inner\"\n        :class=\"[\n          'el-date-editor--' + type,\n          pickerSize ? `el-range-editor--${pickerSize}` : '',\n          pickerDisabled ? 'is-disabled' : '',\n          pickerVisible ? 'is-active' : '',\n          $attrs.class || undefined\n        ]\"\n        :style=\"$attrs.style || undefined\"\n        @click=\"handleFocus\"\n        @mouseenter=\"onMouseEnter\"\n        @mouseleave=\"onMouseLeave\"\n        @keydown=\"handleKeydown\"\n      >\n        <el-icon\n          v-if=\"triggerIcon\"\n          class=\"el-input__icon el-range__icon\"\n          @click=\"handleFocus\"\n        >\n          <component :is=\"triggerIcon\"></component>\n        </el-icon>\n        <input\n          :id=\"id && id[0]\"\n          autocomplete=\"off\"\n          :name=\"name && name[0]\"\n          :placeholder=\"startPlaceholder\"\n          :value=\"displayValue && displayValue[0]\"\n          :disabled=\"pickerDisabled\"\n          :readonly=\"!editable || readonly\"\n          class=\"el-range-input\"\n          @input=\"handleStartInput\"\n          @change=\"handleStartChange\"\n          @focus=\"handleFocus\"\n        />\n        <slot name=\"range-separator\">\n          <span class=\"el-range-separator\">{{ rangeSeparator }}</span>\n        </slot>\n        <input\n          :id=\"id && id[1]\"\n          autocomplete=\"off\"\n          :name=\"name && name[1]\"\n          :placeholder=\"endPlaceholder\"\n          :value=\"displayValue && displayValue[1]\"\n          :disabled=\"pickerDisabled\"\n          :readonly=\"!editable || readonly\"\n          class=\"el-range-input\"\n          @focus=\"handleFocus\"\n          @input=\"handleEndInput\"\n          @change=\"handleEndChange\"\n        />\n        <el-icon\n          v-if=\"clearIcon\"\n          class=\"el-input__icon el-range__close-icon\"\n          :class=\"{\n            'el-range__close-icon--hidden': !showClose\n          }\"\n          @click=\"onClearIconClick\"\n        >\n          <component :is=\"clearIcon\" />\n        </el-icon>\n      </div>\n    </template>\n    <template #content>\n      <slot\n        :visible=\"pickerVisible\"\n        :actual-visible=\"pickerActualVisible\"\n        :parsed-value=\"parsedValue\"\n        :format=\"computedValueFormat\"\n        :unlink-panels=\"unlinkPanels\"\n        :type=\"type\"\n        :default-value=\"defaultValue\"\n        @pick=\"onPick\"\n        @select-range=\"setSelectionRange\"\n        @set-picker-option=\"onSetPickerOption\"\n        @calendar-change=\"onCalendarChange\"\n        @panel-change=\"onPanelChange\"\n        @mousedown.stop\n      ></slot>\n    </template>\n  </el-tooltip>\n</template>\n<script lang=\"ts\">\nimport {\n  defineComponent,\n  ref,\n  computed,\n  nextTick,\n  inject,\n  watch,\n  provide,\n  unref\n} from 'vue'\nimport dayjs from 'dayjs'\nimport { isEqual } from 'lodash-unified'\nimport { onClickOutside } from '@vueuse/core'\nimport { useFormItem, useSize } from '@element-ultra/hooks'\nimport ElInput from '@element-ultra/components/input'\nimport ElIcon from '@element-ultra/components/icon'\nimport ElTooltip from '@element-ultra/components/tooltip'\nimport { isEmpty } from '@element-ultra/utils'\nimport { EVENT_CODE } from '@element-ultra/shared'\nimport { Clock, Calendar } from 'icon-ultra'\nimport { timePickerDefaultProps } from './props'\n\nimport type { Dayjs } from 'dayjs'\nimport type { ComponentPublicInstance } from 'vue'\nimport type { Options } from '@popperjs/core'\n\ninterface PickerOptions {\n  isValidValue: (date: Dayjs) => boolean\n  handleKeydown: (event: KeyboardEvent) => void\n  parseUserInput: (value: Dayjs) => dayjs.Dayjs\n  formatToString: (value: Dayjs) => string | string[]\n  getRangeAvailableTime: (date: Dayjs) => dayjs.Dayjs\n  getDefaultValue: () => Dayjs\n  panelReady: boolean\n  handleClear: () => void\n}\n\n// Date object and string\nconst dateEquals = function (a: Date | any, b: Date | any) {\n  const aIsDate = a instanceof Date\n  const bIsDate = b instanceof Date\n  if (aIsDate && bIsDate) {\n    return a.getTime() === b.getTime()\n  }\n  if (!aIsDate && !bIsDate) {\n    return a === b\n  }\n  return false\n}\n\nconst valueEquals = function (a: Array<Date> | any, b: Array<Date> | any) {\n  const aIsArray = a instanceof Array\n  const bIsArray = b instanceof Array\n  if (aIsArray && bIsArray) {\n    if (a.length !== b.length) {\n      return false\n    }\n    return (a as Array<Date>).every((item, index) => dateEquals(item, b[index]))\n  }\n  if (!aIsArray && !bIsArray) {\n    return dateEquals(a, b)\n  }\n  return false\n}\n\nconst parser = function (\n  date: string | number | Date,\n  format: string | undefined,\n  lang: string\n) {\n\n  const day =\n    isEmpty(format) || format === 'x'\n      ? dayjs(date).locale(lang)\n      : dayjs(date, format).locale(lang)\n  return day.isValid() ? day : undefined\n}\n\nconst formatter = function (\n  date: string | number | Date | null,\n  format: string,\n  lang: string\n) {\n  if (!date) return ''\n  if (isEmpty(format)) return date\n  if (format === 'x') return +date\n  return dayjs(date).locale(lang).format(format)\n}\n\nexport default defineComponent({\n  name: 'Picker',\n  components: {\n    ElInput,\n    ElTooltip,\n    ElIcon\n  },\n  props: timePickerDefaultProps,\n  emits: [\n    'update:modelValue',\n    'change',\n    'focus',\n    'blur',\n    'calendar-change',\n    'panel-change',\n    'visible-change'\n  ],\n  setup(props, ctx) {\n    const { formItem, form } = useFormItem()\n    const elPopperOptions = inject('ElPopperOptions', {} as Options)\n\n    const refPopper = ref<InstanceType<typeof ElTooltip>>()\n    const inputRef = ref<HTMLElement | ComponentPublicInstance>()\n    const pickerVisible = ref(false)\n    const pickerActualVisible = ref(false)\n    const valueOnOpen = ref(null)\n\n    const lang = 'zh-cn'\n\n    const computedValueFormat = computed(() => {\n      if (props.valueFormat) return props.valueFormat\n      if (props.type === 'year') {\n        return 'YYYY'\n      }\n      if (props.type === 'month') {\n        return 'YYYY-MM'\n      }\n      if (props.type.includes('time')) {\n        return 'YYYY-MM-DD HH:mm:ss'\n      }\n      return 'YYYY-MM-DD'\n    })\n\n    watch(pickerVisible, val => {\n      if (!val) {\n        userInput.value = null\n        nextTick(() => {\n          emitChange(props.modelValue)\n        })\n        ctx.emit('blur')\n        blurInput()\n      } else {\n        valueOnOpen.value = props.modelValue\n      }\n    })\n    const emitChange = (val: any, isClear?: boolean) => {\n      // determine user real change only\n      if (isClear || !valueEquals(val, valueOnOpen.value)) {\n        ctx.emit('change', val)\n        formItem?.validate()\n      }\n    }\n    const emitInput = (val: any) => {\n      if (!val && props.type.endsWith('range')) {\n        val = [null, null]\n      }\n      if (!valueEquals(props.modelValue, val)) {\n        let formatValue\n\n        if (Array.isArray(val)) {\n          formatValue = val.map(_ => formatter(_, computedValueFormat.value, lang))\n        } else if (val) {\n          formatValue = formatter(val, computedValueFormat.value, lang)\n        }\n        ctx.emit('update:modelValue', val ? formatValue : val, lang)\n      }\n    }\n    const refInput = computed<HTMLInputElement[]>(() => {\n      if (inputRef.value) {\n        const _r = isRangeInput.value\n          ? inputRef.value\n          : (inputRef.value as any as ComponentPublicInstance).$el\n        return Array.from<HTMLInputElement>(_r.querySelectorAll('input'))\n      }\n      return []\n    })\n    const refStartInput = computed(() => {\n      return refInput?.value[0]\n    })\n    const refEndInput = computed(() => {\n      return refInput?.value[1]\n    })\n    const setSelectionRange = (start, end, pos) => {\n      const _inputs = refInput.value\n      if (!_inputs.length) return\n      if (!pos || pos === 'min') {\n        _inputs[0].setSelectionRange(start, end)\n        _inputs[0].focus()\n      } else if (pos === 'max') {\n        _inputs[1].setSelectionRange(start, end)\n        _inputs[1].focus()\n      }\n    }\n    const onPick = (date: any = '', visible = false) => {\n      pickerVisible.value = visible\n      let result\n      if (Array.isArray(date)) {\n        result = date.map(_ => _.toDate())\n      } else {\n        // clear btn emit null\n        result = date ? date.toDate() : date\n      }\n      userInput.value = null\n      emitInput(result)\n    }\n\n    const onShow = () => {\n      pickerActualVisible.value = true\n      ctx.emit('visible-change', true)\n    }\n\n    const onHide = () => {\n      pickerActualVisible.value = false\n      ctx.emit('visible-change', false)\n    }\n\n    const focus = (focusStartInput = true) => {\n      let input = refStartInput.value\n      if (!focusStartInput && isRangeInput.value) {\n        input = refEndInput.value\n      }\n      if (input) {\n        input.focus()\n      }\n    }\n\n    const handleFocus = e => {\n      if (props.readonly || pickerDisabled.value || pickerVisible.value) return\n      pickerVisible.value = true\n      ctx.emit('focus', e)\n    }\n\n    const handleBlur = () => {\n      refPopper.value?.onClose()\n      blurInput()\n    }\n\n    const pickerDisabled = computed(() => {\n      return props.disabled ?? form?.props.disabled\n    })\n\n    const parsedValue = computed(() => {\n      let result\n      if (valueIsEmpty.value) {\n        if (pickerOptions.value.getDefaultValue) {\n          result = pickerOptions.value.getDefaultValue()\n        }\n      } else {\n        if (Array.isArray(props.modelValue)) {\n          result = props.modelValue.map(_ => parser(_, computedValueFormat.value, lang))\n        } else if (props.start && props.end) {\n          result = [\n            parser(props.start, computedValueFormat.value, lang),\n            parser(props.end, computedValueFormat.value, lang)\n          ]\n        } else {\n          result = parser(props.modelValue, computedValueFormat.value, lang)\n        }\n      }\n\n      if (pickerOptions.value.getRangeAvailableTime) {\n        const availableResult =\n          pickerOptions.value.getRangeAvailableTime(result)\n        if (!isEqual(availableResult, result)) {\n          result = availableResult\n          emitInput(\n            Array.isArray(result)\n              ? result.map(_ => _.toDate())\n              : result.toDate()\n          )\n        }\n      }\n      if (Array.isArray(result) && result.some(_ => !_)) {\n        result = []\n      }\n      return result\n\n    })\n\n    const displayValue = computed(() => {\n      if (!pickerOptions.value.panelReady) return\n      const formattedValue = formatDayjsToString(parsedValue.value)\n\n     if (Array.isArray(userInput.value)) {\n\n        return [\n          userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n          userInput.value[1] || (formattedValue && formattedValue[1]) || ''\n        ]\n      } else if (userInput.value !== null) {\n\n        return userInput.value\n      }\n      if (!isTimePicker.value && valueIsEmpty.value) return\n      if (!pickerVisible.value && valueIsEmpty.value) return\n      if (formattedValue) {\n        return isDatesPicker.value\n          ? (formattedValue as Array<string>).join(', ')\n          : formattedValue\n      }\n      return ''\n    })\n\n    const isTimeLikePicker = computed(() => props.type.includes('time'))\n\n    const isTimePicker = computed(() => props.type.startsWith('time'))\n\n    const isDatesPicker = computed(() => props.type === 'dates')\n\n    const triggerIcon = computed(\n      () => props.prefixIcon || (isTimeLikePicker.value ? Clock : Calendar)\n    )\n\n    const showClose = ref(false)\n\n    const onClearIconClick = event => {\n      if (props.readonly || pickerDisabled.value) return\n      if (showClose.value) {\n        event.stopPropagation()\n        emitInput(null)\n        emitChange(null, true)\n        showClose.value = false\n        pickerVisible.value = false\n        pickerOptions.value.handleClear && pickerOptions.value.handleClear()\n      }\n    }\n    const valueIsEmpty = computed(() => {\n      return (\n        (!props.modelValue ||\n          (Array.isArray(props.modelValue) && !props.modelValue.length)) &&\n        !props.start &&\n        !props.end\n      )\n    })\n    const onMouseEnter = () => {\n      if (props.readonly || pickerDisabled.value) return\n      if (!valueIsEmpty.value && props.clearable) {\n        showClose.value = true\n      }\n    }\n    const onMouseLeave = () => {\n      showClose.value = false\n    }\n    const isRangeInput = computed(() => {\n      return props.type.indexOf('range') > -1\n    })\n\n    const pickerSize = useSize({ props })\n\n    const popperPaneRef = computed(() => {\n      return refPopper.value?.popperRef?.contentRef\n    })\n\n    const popperEl = computed(() => unref(refPopper)?.popperRef?.contentRef)\n    const actualInputRef = computed(() => {\n      if (unref(isRangeInput)) {\n        return unref(inputRef)\n      }\n\n      return (unref(inputRef) as ComponentPublicInstance)?.$el\n    })\n\n    onClickOutside(actualInputRef, (e: PointerEvent) => {\n      const unrefedPopperEl = unref(popperEl)\n      const inputEl = unref(actualInputRef)\n      if (\n        (unrefedPopperEl &&\n          (e.target === unrefedPopperEl ||\n            e.composedPath().includes(unrefedPopperEl))) ||\n        e.target === inputEl ||\n        e.composedPath().includes(inputEl)\n      )\n        return\n      pickerVisible.value = false\n    })\n\n    const userInput = ref(null)\n\n    const handleChange = () => {\n      if (userInput.value) {\n        const value = parseUserInputToDayjs(displayValue.value)\n        if (value) {\n          if (isValidValue(value)) {\n            emitInput(\n              Array.isArray(value) ? value.map(_ => _.toDate()) : value.toDate()\n            )\n            userInput.value = null\n          }\n        }\n      }\n      if (userInput.value === '') {\n        emitInput(null)\n        emitChange(null)\n        userInput.value = null\n      }\n    }\n\n    const blurInput = () => {\n      refInput.value.forEach(input => input.blur())\n    }\n\n    const parseUserInputToDayjs = value => {\n      if (!value) return null\n      return pickerOptions.value.parseUserInput?.(value)\n    }\n\n    const formatDayjsToString = value => {\n      if (!value) return null\n      return pickerOptions.value.formatToString?.(value)\n    }\n\n    const isValidValue = value => {\n      return pickerOptions.value.isValidValue(value)\n    }\n\n    const handleKeydown = event => {\n      const code = event.code\n\n      if (code === EVENT_CODE.esc) {\n        pickerVisible.value = false\n        event.stopPropagation()\n        return\n      }\n\n      if (code === EVENT_CODE.tab) {\n        if (!isRangeInput.value) {\n          handleChange()\n          pickerVisible.value = false\n          event.stopPropagation()\n        } else {\n          // user may change focus between two input\n          setTimeout(() => {\n            if (refInput.value.indexOf(document.activeElement) === -1) {\n              pickerVisible.value = false\n              blurInput()\n            }\n          }, 0)\n        }\n        return\n      }\n\n      if (code === EVENT_CODE.enter || code === EVENT_CODE.numpadEnter) {\n        if (\n          userInput.value === null ||\n          userInput.value === '' ||\n          isValidValue(parseUserInputToDayjs(displayValue.value))\n        ) {\n          handleChange()\n          pickerVisible.value = false\n        }\n        event.stopPropagation()\n        return\n      }\n\n      // if user is typing, do not let picker handle key input\n      if (userInput.value) {\n        event.stopPropagation()\n        return\n      }\n\n      if (pickerOptions.value.handleKeydown) {\n        pickerOptions.value.handleKeydown(event)\n      }\n    }\n    const onUserInput = e => {\n      userInput.value = e\n    }\n\n    const handleStartInput = event => {\n      if (userInput.value) {\n        userInput.value = [event.target.value, userInput.value[1]]\n      } else {\n        userInput.value = [event.target.value, null]\n      }\n    }\n\n    const handleEndInput = event => {\n      if (userInput.value) {\n        userInput.value = [userInput.value[0], event.target.value]\n      } else {\n        userInput.value = [null, event.target.value]\n      }\n    }\n\n    const handleStartChange = () => {\n      const value = parseUserInputToDayjs(userInput.value && userInput.value[0])\n      if (value && value.isValid()) {\n        userInput.value = [formatDayjsToString(value), displayValue.value[1]]\n        const newValue = [value, parsedValue.value && parsedValue.value[1]]\n        if (isValidValue(newValue)) {\n          emitInput(newValue)\n          userInput.value = null\n        }\n      }\n    }\n\n    const handleEndChange = () => {\n      const value = parseUserInputToDayjs(userInput.value && userInput.value[1])\n      if (value && value.isValid()) {\n        userInput.value = [displayValue.value[0], formatDayjsToString(value)]\n        const newValue = [parsedValue.value && parsedValue.value[0], value]\n        if (isValidValue(newValue)) {\n          emitInput(newValue)\n          userInput.value = null\n        }\n      }\n    }\n\n    const pickerOptions = ref<Partial<PickerOptions>>({})\n    const onSetPickerOption = <T extends keyof PickerOptions>(\n      e: [T, PickerOptions[T]]\n    ) => {\n      pickerOptions.value[e[0]] = e[1]\n      pickerOptions.value.panelReady = true\n    }\n\n    const onCalendarChange = e => {\n      ctx.emit('calendar-change', e)\n    }\n\n    const onPanelChange = (value, mode, view) => {\n      ctx.emit('panel-change', value, mode, view)\n    }\n\n    provide('EP_PICKER_BASE', {\n      props\n    })\n\n    return {\n      // injected popper options\n      elPopperOptions,\n      computedValueFormat,\n      isDatesPicker,\n      handleEndChange,\n      handleStartChange,\n      handleStartInput,\n      handleEndInput,\n      onUserInput,\n      handleChange,\n      handleKeydown,\n      popperPaneRef,\n      onClickOutside,\n      pickerSize,\n      isRangeInput,\n      onMouseLeave,\n      onMouseEnter,\n      onClearIconClick,\n      showClose,\n      triggerIcon,\n      onPick,\n      handleFocus,\n      handleBlur,\n      pickerVisible,\n      pickerActualVisible,\n      displayValue,\n      parsedValue,\n      setSelectionRange,\n      refPopper,\n      inputRef,\n      pickerDisabled,\n      onSetPickerOption,\n      onCalendarChange,\n      onPanelChange,\n      focus,\n      onShow,\n      onHide\n    }\n  }\n})\n</script>\n"],"names":[],"mappings":"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"}