{"version":3,"file":"dropdown.vue2.cjs","sources":["../../../components/dropdown/dropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Popper } from '@/components/popper'\n\nimport { computed, inject, nextTick, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport {\n  placementWhileList,\n  useClickOutside,\n  usePopper,\n  useRtl,\n  useSetTimeout,\n} from '@vexip-ui/hooks'\nimport { emitEvent, useHoverDelay, useNameHelper, useProps } from '@vexip-ui/config'\nimport DropdownDrop from './dropdown-drop'\nimport { dropdownProps } from './props'\nimport { useLabel } from './hooks'\nimport { DROPDOWN_STATE, SELECT_HANDLER } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { Placement } from '@vexip-ui/hooks'\n\ndefineOptions({ name: 'Dropdown' })\n\nconst nh = useNameHelper('dropdown')\n\nconst _props = defineProps(dropdownProps)\nconst props = useProps('dropdown', _props, {\n  visible: {\n    default: false,\n    static: true,\n  },\n  placement: {\n    default: 'bottom',\n    validator: value => placementWhileList.includes(value),\n  },\n  outsideClose: true,\n  trigger: {\n    default: 'hover',\n    validator: value => ['hover', 'click', 'custom'].includes(value),\n  },\n  label: {\n    default: null,\n    static: true,\n  },\n  transitionName: () => nh.ns('drop'),\n  transfer: false,\n  dropClass: null,\n  appear: false,\n  meta: null,\n  alive: false,\n  custom: false,\n  shift: true,\n})\n\nconst emit = defineEmits(['update:visible'])\n\nconst parentState = inject(DROPDOWN_STATE, null)\nconst { isRtl } = useRtl()\nconst hoverDelay = useHoverDelay()\n\nconst isNested = !!parentState\nconst label = toRef(props, 'label')\nconst placement = ref(props.placement)\nconst currentVisible = ref(props.visible)\nconst popperAlive = ref(false)\n\nconst transfer = isNested ? ref(false) : toRef(props, 'transfer')\n\nconst shift = computed(() => !!(parentState?.shift || props.shift))\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n  placement,\n  shift,\n  transfer,\n  wrapper,\n  popper: computed(() => popper.value?.wrapper),\n  isDrop: true,\n  offset: isNested ? [-5, 0] : undefined,\n})\nconst currentLabel = useLabel(label, reference)\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('visible')]: currentVisible.value,\n  }\n})\nconst isAlive = computed(() => parentState?.alive || props.alive)\n\nprovide(SELECT_HANDLER, null!)\n!props.custom &&\n  provide(\n    DROPDOWN_STATE,\n    reactive({\n      alive: isAlive,\n      shift,\n      handleSelect,\n      handleTriggerEnter,\n      handleTriggerLeave,\n    }),\n  )\n\nwatch(\n  () => props.visible,\n  value => {\n    currentVisible.value = value\n  },\n)\n\nwatch(\n  () => props.placement,\n  value => {\n    setPlacement(value)\n  },\n)\n\nwatch(currentVisible, value => {\n  if (value) {\n    updatePopper()\n  }\n})\n\nonMounted(() => {\n  nextTick(() => {\n    setPlacement(props.placement)\n  })\n})\n\ndefineExpose({\n  isNested,\n  currentVisible,\n  isAlive,\n  wrapper,\n  reference,\n  popper,\n  handleTriggerEnter,\n  handleTriggerLeave,\n  handleTriggerClick,\n})\n\nfunction setVisible(visible: boolean) {\n  if (currentVisible.value === visible) return\n\n  currentVisible.value = visible\n\n  emit('update:visible', visible)\n  emitEvent(props.onToggle, visible)\n}\n\nfunction handleClickOutside() {\n  emitEvent(props.onClickOutside)\n\n  if (props.outsideClose && props.trigger !== 'custom' && currentVisible.value) {\n    setVisible(false)\n    emitEvent(props.onOutsideClose)\n  }\n}\n\nfunction handleSelect(labels: (string | number)[], metaList: Array<Record<string, any>>) {\n  if (props.trigger !== 'custom') {\n    setVisible(false)\n    emitEvent(props.onSelect, labels, metaList)\n  }\n\n  if (typeof parentState?.handleSelect === 'function') {\n    parentState.handleSelect([currentLabel.value!, ...labels], [props.meta || {}, ...metaList])\n  }\n}\n\nfunction setPlacement(value: Placement) {\n  const [xPlacement] = value.split('-')\n\n  if (isNested && xPlacement !== 'right' && xPlacement !== 'left') {\n    placement.value = isRtl.value ? 'left-start' : 'right-start'\n  } else {\n    placement.value = value\n  }\n}\n\nconst { timer } = useSetTimeout()\n\nfunction handleTriggerEnter() {\n  if (props.trigger === 'hover') {\n    clearTimeout(timer.hover)\n\n    if (typeof parentState?.handleTriggerEnter === 'function') {\n      parentState.handleTriggerEnter()\n    }\n\n    timer.hover = setTimeout(() => {\n      setVisible(true)\n    }, hoverDelay.value)\n  }\n}\n\nfunction handleTriggerLeave() {\n  if (props.trigger === 'hover') {\n    clearTimeout(timer.hover)\n\n    if (typeof parentState?.handleTriggerLeave === 'function') {\n      parentState.handleTriggerLeave()\n    }\n\n    timer.hover = setTimeout(() => {\n      setVisible(false)\n    }, hoverDelay.value)\n  }\n}\n\nfunction handleTriggerClick() {\n  if (props.trigger === 'click') {\n    setVisible(!currentVisible.value)\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    @mouseenter=\"handleTriggerEnter\"\n    @mouseleave=\"handleTriggerLeave\"\n  >\n    <div\n      ref=\"reference\"\n      :class=\"[nh.be('trigger'), currentVisible ? nh.bem('trigger', 'active') : '']\"\n      @click=\"handleTriggerClick\"\n      @keydown.enter.prevent=\"handleTriggerClick\"\n      @keydown.space.prevent=\"handleTriggerClick\"\n    >\n      <slot></slot>\n    </div>\n    <DropdownDrop>\n      <Popper\n        ref=\"popper\"\n        :class=\"[\n          nh.be('popper'),\n          nh.bs('vars'),\n          isNested ? nh.bem('popper', 'nested') : null,\n          props.dropClass\n        ]\"\n        :visible=\"currentVisible\"\n        :alive=\"isAlive || popperAlive\"\n        :to=\"transferTo\"\n        :transition=\"props.transitionName\"\n        :appear=\"props.appear\"\n        @mouseenter=\"handleTriggerEnter\"\n        @mouseleave=\"handleTriggerLeave\"\n        @after-enter=\"popperAlive = true\"\n        @after-leave=\"popperAlive = false\"\n      >\n        <slot name=\"drop\"></slot>\n      </Popper>\n    </DropdownDrop>\n  </div>\n</template>\n"],"names":["nh","useNameHelper","_props","__props","props","useProps","value","placementWhileList","emit","__emit","parentState","inject","DROPDOWN_STATE","isRtl","useRtl","hoverDelay","useHoverDelay","isNested","label","toRef","placement","ref","currentVisible","popperAlive","transfer","shift","computed","wrapper","useClickOutside","handleClickOutside","popper","reference","transferTo","updatePopper","usePopper","currentLabel","useLabel","className","isAlive","provide","SELECT_HANDLER","reactive","handleSelect","handleTriggerEnter","handleTriggerLeave","watch","setPlacement","onMounted","nextTick","__expose","handleTriggerClick","setVisible","visible","emitEvent","labels","metaList","xPlacement","timer","useSetTimeout","_createElementBlock","_createElementVNode","_normalizeClass","_unref","_renderSlot","_ctx","_createVNode","DropdownDrop","Popper"],"mappings":"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"}