{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/dropdown-v2/src/index.ts"],"sourcesContent":["import { computed, defineComponent, h, mergeProps, ref, unref } from 'vue'\nimport { ElButton, ElButtonGroup, ElIcon, useNamespace } from 'element-plus'\nimport { ArrowDown } from '@element-plus/icons-vue'\nimport { dropdownV2Props } from './dropdown-v2'\nimport Panel from './panel'\nimport type { DropdownOption, DropdownValue } from './types'\nimport type { VNode } from 'vue'\n\nconst TRIGGER = 'trigger'\n\nexport default defineComponent({\n  name: 'ElDropdownV2',\n  props: dropdownV2Props,\n  setup(props, { attrs, emit, slots }) {\n    const ns = useNamespace('dropdown-v2')\n    const panelRef = ref()\n\n    const renderIcon = (attrs?: Record<string, any>) => {\n      return h(ElIcon, { ...attrs }, { default: () => h(ArrowDown) })\n    }\n\n    const renderButton = (\n      attrs: Record<string, any> = {},\n      children: VNode[]\n    ) => {\n      const { triggerProps } = props\n      return h(\n        ElButton,\n        {\n          type: 'primary',\n          ...mergeProps(attrs, { ...triggerProps }),\n          role: 'trigger',\n        },\n        { default: () => [triggerProps?.triggerText, ...children] }\n      )\n    }\n\n    let tick: any\n    const rednerButtonGroup = () => {\n      return h(\n        ElButtonGroup,\n        {},\n        {\n          default: () => [\n            renderButton(\n              {\n                trigger: 'disabled',\n                onClick(e: Event) {\n                  e.stopPropagation()\n                },\n                onMouseenter() {\n                  clearTimeout(tick)\n                  tick = setTimeout(() => {\n                    panelRef.value.close(TRIGGER)\n                  }, 200)\n                },\n                onMouseleave() {\n                  clearTimeout(tick)\n                },\n              },\n              []\n            ),\n            h(\n              ElButton,\n              {\n                type: 'primary',\n                ...{\n                  ...iconProps.value,\n                  onMouseenter() {\n                    panelRef.value.openItem(TRIGGER, [TRIGGER])\n                  },\n                },\n                role: 'icon',\n              },\n              {\n                default: () => renderIcon(),\n              }\n            ),\n          ],\n        }\n      )\n    }\n\n    const renderTrigger = (option: DropdownOption) => {\n      const { splitButton } = props\n      if (slots.default) {\n        return slots.default(option)\n      } else {\n        return splitButton\n          ? rednerButtonGroup()\n          : renderButton({}, [renderIcon({ style: { marginLeft: '8px' } })])\n      }\n    }\n\n    const hasLabelSlot = computed(() => !!slots.label)\n\n    const recursion = (options: DropdownOption[]) => {\n      return options.map((option: DropdownOption) => {\n        const newOption = {\n          children: [],\n          disabled: false,\n          divided: false,\n          ...option,\n        }\n        if (hasLabelSlot.value) {\n          newOption.renderLabel = (option: DropdownOption) =>\n            slots.label?.(option)\n        }\n        if (option.children) {\n          newOption.children = recursion(option.children)\n        }\n        return newOption\n      })\n    }\n\n    const iconProps = computed(() => {\n      const { triggerProps = {} } = props\n      return Object.keys(triggerProps).reduce(\n        (pre: Record<string, any>, key: string) => {\n          if (!key.startsWith('on')) {\n            pre[key] = (triggerProps as Record<string, any>)[key]\n          }\n          return pre\n        },\n        {}\n      )\n    })\n\n    const userOptions = computed(() => recursion(props.options))\n\n    const options = computed(() => {\n      return [\n        {\n          label: TRIGGER,\n          value: TRIGGER,\n          children: userOptions.value,\n          renderLabel: (option: DropdownOption) => renderTrigger(option),\n        },\n      ]\n    })\n\n    const handleSelect = (value: DropdownValue, valuePath: DropdownValue[]) => {\n      emit(\n        'change',\n        value,\n        valuePath.filter((_: DropdownValue) => _ !== TRIGGER)\n      )\n    }\n\n    return () => {\n      return h(Panel, {\n        ref: panelRef,\n        tooltipOptions: {\n          offset: 12,\n          placement: 'bottom-start',\n        },\n        ...attrs,\n        class: props.splitButton ? ns.m('split-button') : '',\n        pure: true,\n        options: unref(options),\n        onSelect: handleSelect,\n      })\n    }\n  },\n})\n"],"names":["attrs","options","option","Panel"],"mappings":"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"}