{"version":3,"file":"picker.mjs","sources":["../../../../../../../packages/components/time-picker/src/common/picker.vue"],"sourcesContent":["<template>\n  <b-tooltip\n    ref=\"refPopper\"\n    :visible=\"pickerVisible\"\n    effect=\"light\"\n    pure\n    trigger=\"click\"\n    v-bind=\"$attrs\"\n    role=\"dialog\"\n    teleported\n    :transition=\"`${nsDate.namespace.value}-zoom-in-top`\"\n    :popper-class=\"[`${nsDate.namespace.value}-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    @before-show=\"onBeforeShow\"\n    @show=\"onShow\"\n    @hide=\"onHide\"\n  >\n    <template #default>\n      <b-input\n        v-if=\"!isRangeInput\"\n        :id=\"(id as string | undefined)\"\n        ref=\"inputRef\"\n        container-role=\"combobox\"\n        :model-value=\"(displayValue as string)\"\n        :name=\"name\"\n        :size=\"pickerSize\"\n        :disabled=\"pickerDisabled\"\n        :placeholder=\"placeholder\"\n        :class=\"[\n          nsDate.b('editor'),\n          nsDate.bm('editor', type),\n          nsDate.is('focus', pickerVisible),\n          $attrs.class,\n        ]\"\n        :style=\"$attrs.style\"\n        :readonly=\"!editable || readonly || isDatesPicker || type === 'week'\"\n        :label=\"label\"\n        :tabindex=\"tabindex\"\n        suffix-class=\"is-action\"\n        @input=\"onUserInput\"\n        @focus=\"handleFocusInput\"\n        @blur=\"handleBlurInput\"\n        @keydown=\"handleKeydownInput\"\n        @change=\"handleChange\"\n        @mousedown=\"onMouseDownInput\"\n        @mouseenter=\"onMouseEnter\"\n        @mouseleave=\"onMouseLeave\"\n        @touchstart=\"onTouchStartInput\"\n        @click.stop\n      >\n        <template #suffix>\n          <b-icon\n            v-if=\"showClose && clearIcon\"\n            :class=\"`${nsInput.e('icon')} clear-icon`\"\n            @click.stop=\"onClearIconClick\"\n          >\n            <component :is=\"clearIcon\" />\n          </b-icon>\n          <b-icon\n            v-else-if=\"triggerIcon\"\n            :class=\"nsInput.e('icon')\"\n            @click.stop=\"onMouseDownInput\"\n            @touchstart=\"onTouchStartInput\"\n          >\n            <component :is=\"triggerIcon\" />\n          </b-icon>\n        </template>\n      </b-input>\n      <div\n        v-else\n        ref=\"inputRef\"\n        :class=\"[\n          nsDate.b('editor'),\n          nsDate.bm('editor', type),\n          nsInput.e('wrapper'),\n          nsDate.is('disabled', pickerDisabled),\n          nsDate.is('active', pickerVisible),\n          nsRange.b('editor'),\n          pickerSize ? nsRange.bm('editor', pickerSize) : '',\n          $attrs.class,\n        ]\"\n        :style=\"($attrs.style as any)\"\n        @click=\"handleFocusInput\"\n        @mouseenter=\"onMouseEnter\"\n        @mouseleave=\"onMouseLeave\"\n        @touchstart=\"onTouchStartInput\"\n        @keydown=\"handleKeydownInput\"\n      >\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=\"nsRange.b('input')\"\n          @mousedown=\"onMouseDownInput\"\n          @input=\"handleStartInput\"\n          @change=\"handleStartChange\"\n          @focus=\"handleFocusInput\"\n          @blur=\"handleBlurInput\"\n        />\n        <slot name=\"range-separator\">\n          <span :class=\"nsRange.b('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=\"nsRange.b('input')\"\n          @mousedown=\"onMouseDownInput\"\n          @focus=\"handleFocusInput\"\n          @blur=\"handleBlurInput\"\n          @input=\"handleEndInput\"\n          @change=\"handleEndChange\"\n        />\n        <b-icon\n          v-if=\"clearIcon && showClose\"\n          :class=\"[nsInput.e('icon'), nsRange.e('close-icon')]\"\n          @click=\"onClearIconClick\"\n        >\n          <component :is=\"clearIcon\" />\n        </b-icon>\n        <b-icon\n          v-else-if=\"triggerIcon\"\n          :class=\"[nsInput.e('icon'), nsRange.e('icon')]\"\n          @mousedown.prevent=\"onMouseDownInput\"\n          @touchstart=\"onTouchStartInput\"\n        >\n          <component :is=\"triggerIcon\" />\n        </b-icon>\n      </div>\n    </template>\n    <template #content>\n      <slot\n        :visible=\"pickerVisible\"\n        :actual-visible=\"pickerActualVisible\"\n        :parsed-value=\"parsedValue\"\n        :format=\"format\"\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        @keydown=\"onKeydownPopperContent\"\n        @mousedown.stop\n      />\n    </template>\n  </b-tooltip>\n</template>\n<script lang=\"ts\" setup>\nimport { computed, inject, nextTick, provide, ref, unref, watch } from 'vue'\nimport { isEqual, isNil } from 'lodash-unified'\nimport { onClickOutside } from '@vueuse/core'\nimport { useLocale, useNamespace, useSize } from '@bigin/hooks'\nimport BInput from '@bigin/components/input'\nimport BIcon from '@bigin/components/icon'\nimport BTooltip from '@bigin/components/tooltip'\nimport { isArray } from '@bigin/utils'\nimport { EVENT_CODE } from '@bigin/constants'\nimport { Calendar, History } from '@bigin/icons-vue'\nimport { formatter, parseDate, valueEquals } from '../utils'\nimport { timePickerDefaultProps } from './props'\n\nimport type { Dayjs } from 'dayjs'\nimport type { ComponentPublicInstance } from 'vue'\nimport type { Options } from '@bigin/popperjs-es'\nimport type {\n  DateModelType,\n  DateOrDates,\n  DayOrDays,\n  PickerOptions,\n  SingleOrRange,\n  TimePickerDefaultProps,\n  UserInput,\n} from './props'\nimport type { TooltipInstance } from '@bigin/components/tooltip'\n\n// Date object and string\n\ndefineOptions({\n  name: 'Picker',\n})\n\nconst props = defineProps(timePickerDefaultProps)\nconst emit = defineEmits([\n  'update:modelValue',\n  'change',\n  'focus',\n  'blur',\n  'calendar-change',\n  'panel-change',\n  'visible-change',\n  'keydown',\n])\n\nconst { lang } = useLocale()\n\nconst nsDate = useNamespace('date')\nconst nsInput = useNamespace('input')\nconst nsRange = useNamespace('range')\n\nconst elPopperOptions = inject('BPopperOptions', {} as Options)\n\nconst refPopper = ref<TooltipInstance>()\nconst inputRef = ref<HTMLElement | ComponentPublicInstance>()\nconst pickerVisible = ref(false)\nconst pickerActualVisible = ref(false)\nconst valueOnOpen = ref<TimePickerDefaultProps['modelValue'] | null>(null)\n\nlet hasJustTabExitedInput = false\nlet ignoreFocusEvent = false\n\nwatch(pickerVisible, (val) => {\n  if (!val) {\n    userInput.value = null\n    nextTick(() => {\n      emitChange(props.modelValue)\n    })\n  } else {\n    valueOnOpen.value = props.modelValue\n  }\n})\nconst emitChange = (\n  val: TimePickerDefaultProps['modelValue'] | null,\n  isClear?: boolean\n) => {\n  // determine user real change only\n  if (isClear || !valueEquals(val, valueOnOpen.value)) {\n    emit('change', val)\n  }\n}\nconst emitInput = (input: SingleOrRange<DateModelType | Dayjs> | null) => {\n  if (!valueEquals(props.modelValue, input)) {\n    let formatted\n    if (isArray(input)) {\n      formatted = input.map((item) =>\n        formatter(item, props.valueFormat, lang.value)\n      )\n    } else if (input) {\n      formatted = formatter(input, props.valueFormat, lang.value)\n    }\n    emit('update:modelValue', input ? formatted : input, lang.value)\n  }\n}\nconst emitKeydown = (e: KeyboardEvent) => {\n  emit('keydown', e)\n}\n\nconst 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\nconst setSelectionRange = (start: number, end: number, pos?: 'min' | 'max') => {\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}\nconst focusOnInputBox = () => {\n  focus(true, true)\n  nextTick(() => {\n    ignoreFocusEvent = false\n  })\n}\n\nconst onPick = (date: any = '', visible = false) => {\n  if (!visible) {\n    focusOnInputBox()\n  }\n  pickerVisible.value = visible\n  let result\n  if (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\nconst onBeforeShow = () => {\n  pickerActualVisible.value = true\n}\n\nconst onShow = () => {\n  emit('visible-change', true)\n}\n\nconst onKeydownPopperContent = (event: KeyboardEvent) => {\n  if ((event as KeyboardEvent)?.key === EVENT_CODE.esc) {\n    focus(true, true)\n  }\n}\n\nconst onHide = () => {\n  pickerActualVisible.value = false\n  ignoreFocusEvent = false\n  emit('visible-change', false)\n}\n\nconst handleOpen = () => {\n  pickerVisible.value = true\n}\n\nconst handleClose = () => {\n  pickerVisible.value = false\n}\n\nconst focus = (focusStartInput = true, isIgnoreFocusEvent = false) => {\n  ignoreFocusEvent = isIgnoreFocusEvent\n  const [leftInput, rightInput] = unref(refInput)\n  let input = leftInput\n  if (!focusStartInput && isRangeInput.value) {\n    input = rightInput\n  }\n  if (input) {\n    input.focus()\n  }\n}\n\nconst handleFocusInput = (e?: FocusEvent) => {\n  if (\n    props.readonly ||\n    pickerDisabled.value ||\n    pickerVisible.value ||\n    ignoreFocusEvent\n  ) {\n    return\n  }\n  pickerVisible.value = isNil(e?.relatedTarget)\n  emit('focus', e)\n}\n\nlet currentHandleBlurDeferCallback:\n  | (() => Promise<void> | undefined)\n  | undefined = undefined\n\n// Check if document.activeElement is inside popper or any input before popper close\nconst handleBlurInput = (e?: FocusEvent) => {\n  const handleBlurDefer = async () => {\n    setTimeout(() => {\n      if (currentHandleBlurDeferCallback === handleBlurDefer) {\n        if (\n          !(\n            refPopper.value?.isFocusInsideContent() && !hasJustTabExitedInput\n          ) &&\n          refInput.value.filter((input) => {\n            return input.contains(document.activeElement)\n          }).length === 0\n        ) {\n          handleChange()\n          pickerVisible.value = false\n          emit('blur', e)\n        }\n        hasJustTabExitedInput = false\n      }\n    }, 0)\n  }\n  currentHandleBlurDeferCallback = handleBlurDefer\n  handleBlurDefer()\n}\n\nconst pickerDisabled = computed(() => {\n  return props.disabled\n})\n\nconst parsedValue = computed(() => {\n  let dayOrDays: DayOrDays\n  if (valueIsEmpty.value) {\n    if (pickerOptions.value.getDefaultValue) {\n      dayOrDays = pickerOptions.value.getDefaultValue()\n    }\n  } else {\n    if (isArray(props.modelValue)) {\n      dayOrDays = props.modelValue.map((d) =>\n        parseDate(d, props.valueFormat, lang.value)\n      ) as [Dayjs, Dayjs]\n    } else {\n      dayOrDays = parseDate(props.modelValue, props.valueFormat, lang.value)!\n    }\n  }\n\n  if (pickerOptions.value.getRangeAvailableTime) {\n    const availableResult = pickerOptions.value.getRangeAvailableTime(\n      dayOrDays!\n    )\n    if (!isEqual(availableResult, dayOrDays!)) {\n      dayOrDays = availableResult\n      emitInput(\n        (isArray(dayOrDays)\n          ? dayOrDays.map((_) => _.toDate())\n          : dayOrDays.toDate()) as SingleOrRange<Date>\n      )\n    }\n  }\n  if (isArray(dayOrDays!) && dayOrDays.some((day) => !day)) {\n    dayOrDays = [] as unknown as DayOrDays\n  }\n  return dayOrDays!\n})\n\nconst displayValue = computed<UserInput>(() => {\n  if (!pickerOptions.value.panelReady) return ''\n  const formattedValue = formatDayjsToString(parsedValue.value)\n  if (isArray(userInput.value)) {\n    return [\n      userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n      userInput.value[1] || (formattedValue && formattedValue[1]) || '',\n    ]\n  } else if (userInput.value !== null) {\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\nconst isTimeLikePicker = computed(() => props.type.includes('time'))\n\nconst isTimePicker = computed(() => props.type.startsWith('time'))\n\nconst isDatesPicker = computed(() => props.type === 'dates')\n\nconst triggerIcon = computed(\n  () => props.suffixIcon || (isTimeLikePicker.value ? History : Calendar)\n)\n\nconst showClose = ref(false)\n\nconst onClearIconClick = (event: MouseEvent) => {\n  if (props.readonly || pickerDisabled.value) return\n  if (showClose.value) {\n    event.stopPropagation()\n    focusOnInputBox()\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\nconst valueIsEmpty = computed(() => {\n  const { modelValue } = props\n  return (\n    !modelValue || (isArray(modelValue) && !modelValue.filter(Boolean).length)\n  )\n})\n\nconst onMouseDownInput = async () => {\n  if (props.readonly || pickerDisabled.value) return\n  // if (\n  //   (event.target as HTMLElement)?.tagName !== 'INPUT' ||\n  //   refInput.value.includes(document.activeElement as HTMLInputElement)\n  // ) {\n  //   pickerVisible.value = true\n  // }\n  pickerVisible.value = true\n}\nconst onMouseEnter = () => {\n  if (props.readonly || pickerDisabled.value) return\n  if (!valueIsEmpty.value && props.clearable) {\n    showClose.value = true\n  }\n}\nconst onMouseLeave = () => {\n  showClose.value = false\n}\nconst onTouchStartInput = (event: TouchEvent) => {\n  if (\n    (event.touches[0].target as HTMLElement)?.tagName !== 'INPUT' ||\n    refInput.value.includes(document.activeElement as HTMLInputElement)\n  ) {\n    pickerVisible.value = true\n  }\n}\nconst isRangeInput = computed(() => {\n  return props.type.includes('range')\n})\n\nconst pickerSize = useSize()\n\nconst popperEl = computed(() => unref(refPopper)?.popperRef?.contentRef)\nconst actualInputRef = computed(() => {\n  if (unref(isRangeInput)) {\n    return unref(inputRef)\n  }\n\n  return (unref(inputRef) as ComponentPublicInstance)?.$el\n})\n\nonClickOutside(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\nconst userInput = ref<UserInput>(null)\n\nconst handleChange = () => {\n  if (userInput.value) {\n    const value = parseUserInputToDayjs(displayValue.value)\n    if (value) {\n      if (isValidValue(value)) {\n        emitInput(\n          (isArray(value)\n            ? value.map((_) => _.toDate())\n            : value.toDate()) as DateOrDates\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\nconst parseUserInputToDayjs = (value: UserInput) => {\n  if (!value) return null\n  return pickerOptions.value.parseUserInput!(value)\n}\n\nconst formatDayjsToString = (value: DayOrDays) => {\n  if (!value) return null\n  return pickerOptions.value.formatToString!(value)\n}\n\nconst isValidValue = (value: DayOrDays) => {\n  return pickerOptions.value.isValidValue!(value)\n}\n\nconst handleKeydownInput = async (event: Event | KeyboardEvent) => {\n  if (props.readonly || pickerDisabled.value) return\n\n  const { code } = event as KeyboardEvent\n  emitKeydown(event as KeyboardEvent)\n  if (code === EVENT_CODE.esc) {\n    if (pickerVisible.value === true) {\n      pickerVisible.value = false\n      event.preventDefault()\n      event.stopPropagation()\n    }\n    return\n  }\n\n  if (code === EVENT_CODE.down) {\n    if (pickerOptions.value.handleFocusPicker) {\n      event.preventDefault()\n      event.stopPropagation()\n    }\n    if (pickerVisible.value === false) {\n      pickerVisible.value = true\n      await nextTick()\n    }\n    if (pickerOptions.value.handleFocusPicker) {\n      pickerOptions.value.handleFocusPicker()\n      return\n    }\n  }\n\n  if (code === EVENT_CODE.tab) {\n    hasJustTabExitedInput = true\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) as DayOrDays)\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  if (pickerOptions.value.handleKeydownInput) {\n    pickerOptions.value.handleKeydownInput(event as KeyboardEvent)\n  }\n}\nconst onUserInput = (e: string) => {\n  userInput.value = e\n  // Temporary fix when the picker is dismissed and the input box\n  // is focused, just mimic the behavior of antdesign.\n  if (!pickerVisible.value) {\n    pickerVisible.value = true\n  }\n}\n\nconst handleStartInput = (event: Event) => {\n  const target = event.target as HTMLInputElement\n  if (userInput.value) {\n    userInput.value = [target.value, userInput.value[1]]\n  } else {\n    userInput.value = [target.value, null]\n  }\n}\n\nconst handleEndInput = (event: Event) => {\n  const target = event.target as HTMLInputElement\n  if (userInput.value) {\n    userInput.value = [userInput.value[0], target.value]\n  } else {\n    userInput.value = [null, target.value]\n  }\n}\n\nconst handleStartChange = () => {\n  const values = userInput.value as string[]\n  const value = parseUserInputToDayjs(values && values[0]) as Dayjs\n  const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n  if (value && value.isValid()) {\n    userInput.value = [\n      formatDayjsToString(value) as string,\n      displayValue.value?.[1] || null,\n    ]\n    const newValue = [value, parsedVal && (parsedVal[1] || null)] as DayOrDays\n    if (isValidValue(newValue)) {\n      emitInput(newValue)\n      userInput.value = null\n    }\n  }\n}\n\nconst handleEndChange = () => {\n  const values = unref(userInput) as string[]\n  const value = parseUserInputToDayjs(values && values[1]) as Dayjs\n  const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n  if (value && value.isValid()) {\n    userInput.value = [\n      unref(displayValue)?.[0] || null,\n      formatDayjsToString(value) as string,\n    ]\n    const newValue = [parsedVal && parsedVal[0], value] as DayOrDays\n    if (isValidValue(newValue)) {\n      emitInput(newValue)\n      userInput.value = null\n    }\n  }\n}\n\nconst pickerOptions = ref<Partial<PickerOptions>>({})\nconst 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\nconst onCalendarChange = (e: [Date, false | Date]) => {\n  emit('calendar-change', e)\n}\n\nconst onPanelChange = (\n  value: [Dayjs, Dayjs],\n  mode: 'month' | 'year',\n  view: unknown\n) => {\n  emit('panel-change', value, mode, view)\n}\n\nprovide('EP_PICKER_BASE', {\n  props,\n})\n\ndefineExpose({\n  /**\n   * @description focus input box.\n   */\n  focus,\n  /**\n   * @description emit focus event\n   */\n  handleFocusInput,\n  /**\n   * @description emit blur event\n   */\n  handleBlurInput,\n  /**\n   * @description opens picker\n   */\n  handleOpen,\n  /**\n   * @description closes picker\n   */\n  handleClose,\n  /**\n   * @description pick item manually\n   */\n  onPick,\n})\n</script>\n"],"names":[],"mappings":"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"}