{"version":3,"file":"date-trigger.vue.mjs","sources":["../../../../../packages/components/common/date-trigger.vue"],"sourcesContent":["<script lang=\"ts\">\n  import { computed, defineComponent, onMounted, onUnmounted, ref, watch } from 'vue'\n  import { getNamespace } from '../../utils/global-config'\n  import { Input } from '../input'\n  import type { InputInstance } from '../input'\n  import { BnIconCalendar } from '../icon'\n  import { isElement } from '../../utils/is'\n  import { definePropType } from '../../utils/vue-utils'\n\n  export default defineComponent({\n    name: 'DateTrigger',\n    components: {\n      Input,\n      BnIconCalendar\n    },\n    props: {\n      inputValue: {\n        type: definePropType<string[]>(Array),\n        default: () => []\n      },\n      clearable: {\n        type: Boolean,\n        default: false\n      },\n      disabled: {\n        type: Boolean,\n        default: false\n      },\n      rangeSeparator: {\n        type: String,\n        default: '~'\n      },\n      placeholder: {\n        type: String,\n        required: true\n      },\n      size: {\n        type: definePropType<'small' | 'default' | 'large'>(String),\n        required: true\n      },\n      popupRef: {\n        type: Object,\n        default: undefined\n      },\n      rangePattern: {\n        type: Boolean,\n        default: false\n      },\n      card: {\n        type: Boolean,\n        default: false\n      }\n    },\n    emits: ['clear'],\n    setup(props, { emit }) {\n      const ns = getNamespace('date-trigger')\n      const inputComponentRef = ref<InputInstance>()\n      const selectTriggerDomRef = ref()\n      const computedInputValue = computed(() => {\n        if (props.rangePattern) {\n          if (props.inputValue.length) {\n            return ' '\n          }\n          return ''\n        }\n        return props.inputValue[0]\n      })\n\n      const isFocus = ref(false)\n\n      const computedPlaceholder = computed(() => {\n        if (props.rangePattern) {\n          return ''\n        }\n        return props.placeholder\n      })\n\n      const computedReadonly = computed(() => true)\n\n      const inputRange = ref<{ l: string; r: string }>({ l: '', r: '' })\n\n      watch(\n        () => props.inputValue,\n        (values) => {\n          if (props.rangePattern) {\n            inputRange.value.l = values[0]\n            inputRange.value.r = values[1]\n          }\n        },\n        {\n          immediate: true\n        }\n      )\n\n      const handleClear = () => {\n        emit('clear')\n      }\n\n      const clickOutside = (e: MouseEvent) => {\n        const el = e.target as HTMLElement\n        const deps: HTMLElement[] = [popupTargetElement.value, selectTriggerDomRef.value]\n        const inner = deps.some((container) => container.contains(el))\n        requestAnimationFrame(() => {\n          inputComponentRef.value?.setFocus(inner)\n          isFocus.value = inner\n        })\n      }\n\n      const popupTargetElement = computed(() => {\n        if (isElement(props.popupRef)) return props.popupRef\n        if (isElement(props.popupRef?.$el)) return props.popupRef?.$el\n        return null\n      })\n\n      onMounted(() => {\n        document.documentElement.addEventListener('mousedown', clickOutside, true)\n      })\n\n      onUnmounted(() => {\n        document.documentElement.removeEventListener('mousedown', clickOutside, true)\n      })\n\n      return {\n        ns,\n        isFocus,\n        inputComponentRef,\n        selectTriggerDomRef,\n        computedInputValue,\n        computedPlaceholder,\n        computedReadonly,\n        inputRange,\n        handleClear\n      }\n    }\n  })\n</script>\n\n<template>\n  <div ref=\"selectTriggerDomRef\" :class=\"[ns]\">\n    <Input\n      ref=\"inputComponentRef\"\n      :model-value=\"computedInputValue\"\n      :validate-event=\"false\"\n      :readonly=\"computedReadonly\"\n      :placeholder=\"computedPlaceholder\"\n      :clearable=\"clearable\"\n      :size=\"size\"\n      :disabled=\"disabled\"\n      :card=\"card\"\n      @clear=\"handleClear\"\n    >\n      <template #suffix-icon>\n        <BnIconCalendar />\n      </template>\n    </Input>\n\n    <div\n      v-if=\"rangePattern\"\n      :class=\"[`${ns}__range`, disabled && 'is-disabled', isFocus && 'is-focus']\"\n    >\n      <input\n        v-model=\"inputRange.l\"\n        :class=\"[`${ns}__range-input`]\"\n        type=\"text\"\n        :disabled=\"disabled\"\n        placeholder=\"开始时间\"\n      />\n      <span :class=\"[`${ns}__range-separator`]\">{{ rangeSeparator }}</span>\n      <input\n        v-model=\"inputRange.r\"\n        :class=\"[`${ns}__range-input`]\"\n        type=\"text\"\n        :disabled=\"disabled\"\n        placeholder=\"结束时间\"\n      />\n    </div>\n  </div>\n</template>\n"],"names":["_resolveComponent","_openBlock","_createElementBlock","_normalizeClass","computedInputValue","computedReadonly","computedPlaceholder","clearable","size","disabled","card","handleClear","rangePattern","ns","_createElementVNode","_vModelText","rangeSeparator"],"mappings":";;;;;;;;2BA0IEA,iBAsCM,OAAA,CAAA,CAAA;AAtC+B,EAAA,OAAAC,WAAA,EAAAC,kBAAA;AAAA,IAAK,KAAA;AAAA,IAAA;AAAA,MAAA,GAAA,EAAA,qBAAA;AAAA,MACxC,KAeQ,EAAAC,cAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA;kBAbL,gBAAaC,EAAAA;AAAAA,QACb,GAAA,EAAA,mBAAA;AAAA,QACA,eAAUC,IAAAA,CAAAA,kBAAAA;AAAAA,QACV,gBAAaC,EAAAA,KAAAA;AAAAA,QACb,UAAS,IAAEC,CAAAA,gBAAAA;AAAAA,QACX,aAAMC,IAAI,CAAA,mBAAA;AAAA,QACV,WAAUC,IAAAA,CAAAA,SAAAA;AAAAA,QACV,MAAMC,IAAAA,CAAAA,IAAAA;AAAAA,QACN,UAAOC,IAAAA,CAAAA,QAAAA;AAAAA,QAAAA,MAAAA,IAAAA,CAAAA,IAAAA;AAAAA,QAEG,SAAW,IAAA,CAAA,WAAA;AAAA,OAAA,EAAA;AAAA;;;QAMhBC,CAAAA,EAAAA,CAAAA;AAAAA;AAAAA,OAAAA,EAAAA,CAAAA,EAAAA,CADR,aAmBM,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,CAAA,CAAA;AAAA,MAjBE,IAAA,CAAA,YAAA,IAAAX,SAAA,EAAA,EAAAC,kBAAA;AAAA,QAAMW,KAAAA;AAAAA,QAAE;AAAA,UAAA,GAAA,EAAA,CAAA;AAAA,gCAEd,CAME,CAAA,EAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,IAAA,CAAA,QAAA,IAAA,aAAA,EAAA,IAAA,CAAA,OAAA,IAAA,UAAA,CAAA,CAAA;AAAA,SAAA;AAAA;yBAJMC,mBAAQ,OAAA,EAAA;AAAA,YACd,qBAAA,EAAW,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,UAAA,CAAA,CAAA,GAAA,MAAA,CAAA;AAAA,YACV,OAAkBX,cAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,iBAAA,CAAA,CAAA;AAAA,YACnB,IAAA,EAAA,MAAA;AAAA,YAAA,UAAA,IAAA,CAAA,QAAA;AAAA;;YAEF,CAAqEY,UAAA,EAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,WAAA,CAAA;AAAA;YAAxBC,MAAAA;AAAAA,YAAAA;AAAAA,cAAAA,OAAAA,cAC7C,CAAA,CAME,CAAA,EAAA,IAAA,CAAA,qBAAA,CAAA,CAAA;AAAA,aAAA;AAAA;;;;yBAJMF,mBAAQ,OAAA,EAAA;AAAA,YACd,qBAAA,EAAW,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,UAAA,CAAA,CAAA,GAAA,MAAA,CAAA;AAAA,YACV,OAAkBX,cAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,iBAAA,CAAA,CAAA;AAAA,YACnB,IAAA,EAAA,MAAA;AAAA,YAAA,UAAA,IAAA,CAAA,QAAA;AAAA;;;;;;;;;;;;;;;;;"}