{"version":3,"file":"dropdown-item.mjs","sources":["../../../../../../packages/components/dropdown/src/dropdown-item.vue"],"sourcesContent":["<template>\n  <hl-dropdown-collection-item\n    :disabled=\"disabled\"\n    :text-value=\"textValue ?? textContent\"\n  >\n    <hl-roving-focus-item :focusable=\"!disabled\">\n      <hl-dropdown-item-impl\n        v-bind=\"propsAndAttrs\"\n        @pointerleave=\"handlePointerLeave\"\n        @pointermove=\"handlePointerMove\"\n        @clickimpl=\"handleClick\"\n      >\n        <slot name=\"icon\"></slot>\n        <slot></slot>\n      </hl-dropdown-item-impl>\n    </hl-roving-focus-item>\n  </hl-dropdown-collection-item>\n</template>\n<script lang=\"ts\">\nimport {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  inject,\n  ref,\n  unref,\n} from 'vue'\nimport { HlRovingFocusItem } from '@hongluan-ui/components/roving-focus-group'\nimport { composeEventHandlers, whenMouse } from '@hongluan-ui/utils'\nimport HlDropdownItemImpl from './dropdown-item-impl.vue'\nimport { useDropdown } from './useDropdown'\nimport {\n  HlCollectionItem as HlDropdownCollectionItem,\n  dropdownItemProps,\n} from './dropdown'\nimport { DROPDOWN_INJECTION_KEY } from './tokens'\n\nexport default defineComponent({\n  name: 'DropdownItem',\n  components: {\n    HlDropdownCollectionItem,\n    HlRovingFocusItem,\n    HlDropdownItemImpl,\n  },\n  inheritAttrs: false,\n  props: dropdownItemProps,\n  emits: ['pointermove', 'pointerleave', 'click'],\n  setup(props, { emit, attrs }) {\n    const { hlDropdown } = useDropdown()\n    const _instance = getCurrentInstance()\n    const itemRef = ref<HTMLElement | null>(null)\n    const textContent = computed(() => unref(itemRef)?.textContent ?? '')\n    const { onItemEnter, onItemLeave } = inject(\n      DROPDOWN_INJECTION_KEY,\n      undefined,\n    )\n\n    const handlePointerMove = composeEventHandlers(\n      (e: PointerEvent) => {\n        emit('pointermove', e)\n        return e.defaultPrevented\n      },\n      whenMouse(e => {\n        if (props.disabled) {\n          onItemLeave(e)\n          return\n        }\n\n        const target = e.currentTarget as HTMLElement\n        /**\n         * This handles the following scenario:\n         *   when the item contains a form element such as input element\n         *   when the mouse is moving over the element itself which is contained by\n         *   the item, the default focusing logic should be prevented so that\n         *   it won't cause weird action.\n         */\n        if (\n          target === document.activeElement ||\n          target.contains(document.activeElement)\n        ) {\n          return\n        }\n\n        onItemEnter(e)\n        if (!e.defaultPrevented) {\n          target?.focus()\n        }\n      }),\n    )\n\n    const handlePointerLeave = composeEventHandlers((e: PointerEvent) => {\n      emit('pointerleave', e)\n      return e.defaultPrevented\n    }, whenMouse(onItemLeave))\n\n    const handleClick = composeEventHandlers(\n      (e: PointerEvent) => {\n        if (props.disabled) {\n          return\n        }\n        emit('click', e)\n        return e.type !== 'keydown' && e.defaultPrevented\n      },\n      e => {\n        if (props.disabled) {\n          e.stopImmediatePropagation()\n          return\n        }\n        if (hlDropdown?.hideOnClick?.value) {\n          hlDropdown.handleClick?.()\n        }\n        hlDropdown.commandHandler?.(props.command, _instance, e)\n      },\n    )\n\n    // direct usage of v-bind={ ...$props, ...$attrs } causes type errors\n    const propsAndAttrs = computed(() => ({ ...props, ...attrs }))\n\n    return {\n      handleClick,\n      handlePointerMove,\n      handlePointerLeave,\n      textContent,\n      propsAndAttrs,\n    }\n  },\n})\n</script>\n"],"names":["HlDropdownCollectionItem"],"mappings":";;;;;;;;;;;AAqCA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,8BACVA;AAAA,IACA;AAAA,IACA;AAAA;AACF,EACA,cAAc;AAAA,EACd,OAAO;AAAA,EACP,OAAO,CAAC,eAAe,gBAAgB,OAAO;AAAA,EAC9C,MAAM,OAAO,EAAE,MAAM,SAAS;AAC5B,UAAM,EAAE,eAAe;AACvB,UAAM,YAAY;AAClB,UAAM,UAAU,IAAwB,IAAI;AAC5C,UAAM,cAAc,SAAS,MAAM;AACnC,UAAM,EAAE;AAKR,8BAA0B,qBACxB;AACE;AACA;AAAS,IACX;AAEE,UAAI,gBAAgB;AAClB;AACA;AAAA,MACF;AAEA,qBAAe,EAAE;AAQjB;AAIE;AAAA,MACF;AAEA;AACA;AACE;AAAc,MAChB;AAAA,MAEJ;AAEA,+BAA2B;AACzB;AACA;AAAS,IACX,wBAAwB;AAExB,UAAM;AAEF;AACE;AAAA;AAEF;AACA,eAAS;AAAwB,OAEnC;AACE,UAAI;AACF;AACA;AAAA,MACF;AACA,UAAI;AACF;AAAyB;AAE3B;AAAuD;AAK3D,yCAAsC,gBAAe,QAAQ;AAE7D;AAAO,MACL;AAAA,MACA;AAAA;AACA;AACA,MACA;AAAA;AACF;AAEJ;;;;;;AA9GgC;AAdjB;AACe;;AAYH,kBAAA;AAAA,mBAVS;AAAG;;AAST;AAPD;AACN;AACD;AACF;;AAEa,0BAAA;AAAA;AACZ;;;;;;;;;;;;;;;;;;;"}