{"version":3,"file":"dropdown-menu.mjs","sources":["../../../../../../packages/components/dropdown/src/dropdown-menu.vue"],"sourcesContent":["<template>\n  <ul\n    :ref=\"dropdownListWrapperRef\"\n    :class=\"dropdownKls\"\n    :style=\"rovingFocusGroupRootStyle\"\n    :tabindex=\"-1\"\n    :role=\"role\"\n    :aria-labelledby=\"triggerId\"\n    data-test-name=\"dropdown-menu\"\n    data-test-variant=\"\"\n    data-test-state=\"\"\n    @blur=\"onBlur\"\n    @focus=\"onFocus\"\n    @keydown=\"handleKeydown\"\n    @mousedown=\"onMousedown\"\n  >\n    <slot />\n  </ul>\n</template>\n<script lang=\"ts\">\n// @ts-nocheck\nimport { computed, defineComponent, inject, unref } from 'vue'\nimport { composeEventHandlers, composeRefs } from '@bigin/utils'\nimport { EVENT_CODE } from '@bigin/constants'\nimport { FOCUS_TRAP_INJECTION_KEY } from '@bigin/components/focus-trap'\nimport {\n  ROVING_FOCUS_COLLECTION_INJECTION_KEY,\n  ROVING_FOCUS_GROUP_INJECTION_KEY,\n  focusFirst,\n} from '@bigin/components/roving-focus-group'\nimport { useNamespace } from '@bigin/hooks'\nimport { DROPDOWN_INJECTION_KEY } from './tokens'\nimport {\n  DROPDOWN_COLLECTION_INJECTION_KEY,\n  FIRST_LAST_KEYS,\n  LAST_KEYS,\n  dropdownMenuProps,\n} from './dropdown'\nimport { useDropdown } from './useDropdown'\n\nexport default defineComponent({\n  name: 'BDropdownMenu',\n  props: dropdownMenuProps,\n  setup(props) {\n    const ns = useNamespace('dropdown')\n    const { _BDropdownSize } = useDropdown()\n    const size = _BDropdownSize.value\n\n    const { focusTrapRef, onKeydown } = inject(\n      FOCUS_TRAP_INJECTION_KEY,\n      undefined\n    )!\n\n    const { contentRef, role, triggerId } = inject(\n      DROPDOWN_INJECTION_KEY,\n      undefined\n    )!\n\n    const { collectionRef: dropdownCollectionRef, getItems } = inject(\n      DROPDOWN_COLLECTION_INJECTION_KEY,\n      undefined\n    )!\n\n    const {\n      rovingFocusGroupRef,\n      rovingFocusGroupRootStyle,\n      tabIndex,\n      onBlur,\n      onFocus,\n      onMousedown,\n    } = inject(ROVING_FOCUS_GROUP_INJECTION_KEY, undefined)!\n\n    const { collectionRef: rovingFocusGroupCollectionRef } = inject(\n      ROVING_FOCUS_COLLECTION_INJECTION_KEY,\n      undefined\n    )!\n\n    const dropdownKls = computed(() => {\n      return [ns.b('menu'), ns.bm('menu', size?.value)]\n    })\n\n    const dropdownListWrapperRef = composeRefs(\n      contentRef,\n      dropdownCollectionRef,\n      focusTrapRef,\n      rovingFocusGroupRef,\n      rovingFocusGroupCollectionRef\n    )\n\n    const composedKeydown = composeEventHandlers(\n      (e: KeyboardEvent) => {\n        props.onKeydown?.(e)\n      },\n      (e) => {\n        const { currentTarget, code, target } = e\n        const isKeydownContained = (currentTarget as Node).contains(\n          target as Node\n        )\n\n        if (isKeydownContained) {\n          // TODO: implement typeahead search\n        }\n\n        if (EVENT_CODE.tab === code) {\n          e.stopImmediatePropagation()\n        }\n\n        e.preventDefault()\n\n        if (target !== unref(contentRef)) return\n        if (!FIRST_LAST_KEYS.includes(code)) return\n        const items = getItems<{ disabled: boolean }>().filter(\n          (item) => !item.disabled\n        )\n        const targets = items.map((item) => item.ref!)\n        if (LAST_KEYS.includes(code)) {\n          targets.reverse()\n        }\n        focusFirst(targets)\n      }\n    )\n\n    const handleKeydown = (e: KeyboardEvent) => {\n      composedKeydown(e)\n      onKeydown(e)\n    }\n\n    return {\n      size,\n      rovingFocusGroupRootStyle,\n      tabIndex,\n      dropdownKls,\n      role,\n      triggerId,\n      dropdownListWrapperRef,\n      handleKeydown,\n      onBlur,\n      onFocus,\n      onMousedown,\n    }\n  },\n})\n</script>\n"],"names":["DROPDOWN_COLLECTION_INJECTION_KEY","ROVING_FOCUS_COLLECTION_INJECTION_KEY","_createElementBlock","_normalizeClass","_normalizeStyle","_renderSlot"],"mappings":"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"}