{"version":3,"file":"dropdown.mjs","sources":["../../../../../../packages/components/dropdown/src/dropdown.tsx"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  nextTick,\n  provide,\n  reactive,\n  ref,\n  toRefs,\n  watch\n} from 'vue'\nimport type { PropType } from 'vue'\nimport { getComponentNamespace, getNamespace } from '../../../utils/global-config'\nimport Trigger from '../../trigger'\nimport { isUndefined } from '../../../utils/is'\nimport { getAllElements, isComponent } from '../../../utils/vue-utils'\nimport { dropdownContextKey } from './context'\nimport type { DropdownItemProxyData } from './types'\n\nexport default defineComponent({\n  name: getComponentNamespace('Dropdown'),\n  props: {\n    command: {\n      type: [String, Number],\n      default: undefined\n    },\n    trigger: {\n      type: String as PropType<'click' | 'hover'>,\n      default: 'click'\n    },\n    showArrow: {\n      type: Boolean,\n      default: false\n    },\n    contentClass: {\n      type: String,\n      default: undefined\n    },\n    offset: {\n      type: Number,\n      default: undefined\n    },\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    size: {\n      type: String as PropType<'small' | 'default'>,\n      default: 'default'\n    },\n    hideOnClick: {\n      type: Boolean,\n      default: true\n    },\n    placement: {\n      type: String as PropType<'top' | 'tl' | 'tr' | 'bottom' | 'bl' | 'br'>,\n      default: 'bl'\n    }\n  },\n  emits: ['show', 'hide', 'command', 'update:command'],\n  setup(props, { emit, slots }) {\n    const ns = getNamespace('dropdown')\n    const cacheDropdownItemMap = ref<Map<any, DropdownItemProxyData>>(new Map())\n    const popupVisible = ref<boolean>(false)\n    const computedCommand = computed<number | string | undefined>(() => props.command)\n\n    const contentCls = computed(() => [\n      `${ns}__content`,\n      props.contentClass,\n      `${ns}--${props.size}`\n    ])\n    const arrowStyle = computed(() => {\n      const style: Record<string, string> = {\n        '--bn-trigger-arrow-background-color': '#fff'\n      }\n      return style\n    })\n\n    const computedOffset = computed(() => {\n      if (isUndefined(props.offset) && props.showArrow) return 12\n      if (isUndefined(props.offset)) return 6\n      return props.offset\n    })\n\n    const onPopupVisibleChange = (value: boolean) => {\n      popupVisible.value = value\n    }\n\n    const instance = getCurrentInstance()\n\n    const isModelCommand = computed(() => instance?.vnode?.props?.['onUpdate:command'])\n\n    const currentDropdownItemData = ref({})\n\n    const updateCurrentDropdownItemData = async () => {\n      await nextTick()\n      const proxy = cacheDropdownItemMap.value.get(props.command)\n      currentDropdownItemData.value = {\n        label: proxy?.label,\n        command: proxy?.command\n      }\n    }\n\n    const handleDropdownItem = (proxy: DropdownItemProxyData) => {\n      if (proxy.disabled) return\n      if (props.hideOnClick) {\n        popupVisible.value = false\n      }\n      const { command } = proxy\n      emit('command', command)\n      if (isUndefined(command)) return\n      if (isModelCommand.value) {\n        emit('update:command', command)\n      }\n    }\n\n    const dropdownItemCreate = (proxy: DropdownItemProxyData) => {\n      cacheDropdownItemMap.value.set(proxy.command, proxy)\n    }\n\n    const dropdownItemDestroy = (proxy: DropdownItemProxyData) => {\n      if (cacheDropdownItemMap.value.get(proxy.command)) {\n        cacheDropdownItemMap.value.delete(proxy.command)\n      }\n    }\n\n    const { size } = toRefs(props)\n\n    provide(\n      dropdownContextKey,\n      reactive({\n        handleDropdownItem,\n        dropdownItemCreate,\n        dropdownItemDestroy,\n        command: computedCommand,\n        size\n      })\n    )\n\n    watch(\n      () => props.command,\n      (newCommand) => {\n        if (isUndefined(newCommand)) return\n        updateCurrentDropdownItemData()\n      },\n      { immediate: true }\n    )\n\n    watch(\n      () => slots.dropdown?.(),\n      () => {\n        updateCurrentDropdownItemData()\n      }\n    )\n\n    return () => {\n      const dropdownChildren = getAllElements(slots.dropdown?.())\n        .filter((vn) => isComponent(vn, vn.type) && vn.type.name === 'BnDropdownItem')\n        .map((vn) => {\n          if (!isUndefined(vn.props?.divided)) {\n            return [<div class={`${ns}-item__divided`} />, vn]\n          }\n          return vn\n        })\n      return (\n        <Trigger\n          popupVisible={popupVisible.value}\n          unmount-on-close={false}\n          trigger={props.trigger}\n          position={props.placement}\n          show-arrow={props.showArrow}\n          popup-offset={computedOffset.value}\n          arrow-style={arrowStyle.value}\n          disabled={props.disabled}\n          onShow={() => emit('show')}\n          onHide={() => emit('hide')}\n          onPopupVisibleChange={onPopupVisibleChange}\n          v-slots={{\n            default: () =>\n              slots.trigger?.({ show: popupVisible.value, data: currentDropdownItemData.value }),\n            content: () => <div class={contentCls.value}>{dropdownChildren}</div>\n          }}\n        ></Trigger>\n      )\n    }\n  }\n})\n"],"names":["name","getComponentNamespace","props","command","type","String","Number","default","undefined","trigger","showArrow","Boolean","contentClass","offset","disabled","size","hideOnClick","placement","emits","setup","emit","slots","ns","getNamespace","cacheDropdownItemMap","ref","Map","popupVisible","computedCommand","computed","contentCls","arrowStyle","style","computedOffset","isUndefined","onPopupVisibleChange","value","instance","getCurrentInstance","isModelCommand","vnode","currentDropdownItemData","updateCurrentDropdownItemData","nextTick","proxy","get","label","handleDropdownItem","dropdownItemCreate","set","dropdownItemDestroy","delete","toRefs","provide","dropdownContextKey","reactive","watch","newCommand","immediate","dropdown","dropdownChildren","getAllElements","filter","vn","isComponent","map","_a","divided","_createVNode","Trigger","onShow","onHide","show","data","content"],"mappings":"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"}