{"version":3,"file":"picker.vue.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":["_resolveComponent","_openBlock","_createBlock","_mergeProps","_withCtx","_normalizeClass","_normalizeStyle","_withModifiers","_createCommentVNode","_createElementBlock","_createElementVNode","_renderSlot","_toDisplayString"],"mappings":"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"}