reka-ui
Version:
Vue port for Radix UI Primitives.
1 lines • 3.21 kB
Source Map (JSON)
{"version":3,"file":"DropdownMenuTrigger.cjs","sources":["../../src/DropdownMenu/DropdownMenuTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose, useId } from '@/shared'\n\nexport interface DropdownMenuTriggerProps extends PrimitiveProps {\n /** When `true`, prevents the user from interacting with item */\n disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted } from 'vue'\nimport { injectDropdownMenuRootContext } from './DropdownMenuRoot.vue'\nimport {\n Primitive,\n} from '@/Primitive'\nimport { MenuAnchor } from '@/Menu'\n\nconst props = withDefaults(defineProps<DropdownMenuTriggerProps>(), {\n as: 'button',\n})\n\nconst rootContext = injectDropdownMenuRootContext()\n\nconst { forwardRef, currentElement: triggerElement } = useForwardExpose()\n\nonMounted(() => {\n rootContext.triggerElement = triggerElement\n})\n\nrootContext.triggerId ||= useId(undefined, 'reka-dropdown-menu-trigger')\n</script>\n\n<template>\n <MenuAnchor as-child>\n <Primitive\n :id=\"rootContext.triggerId\"\n :ref=\"forwardRef\"\n :type=\"as === 'button' ? 'button' : undefined\"\n :as-child=\"props.asChild\"\n :as=\"as\"\n aria-haspopup=\"menu\"\n :aria-expanded=\"rootContext.open.value\"\n :aria-controls=\"rootContext.open.value ? rootContext.contentId : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :disabled=\"disabled\"\n :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n @click=\"\n async (event) => {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n rootContext?.onOpenToggle();\n await nextTick()\n // prevent trigger focusing when opening\n // this allows the content to be given focus without competition\n if (rootContext.open.value) event.preventDefault();\n }\n }\n \"\n @keydown.enter.space.arrow-down=\"\n (event) => {\n if (disabled) return;\n if (['Enter', ' '].includes(event.key)) rootContext.onOpenToggle();\n if (event.key === 'ArrowDown') rootContext.onOpenChange(true);\n // prevent keydown from scrolling window / first focused item to execute\n // that keydown (inadvertently closing the menu)\n if (['Enter', ' ', 'ArrowDown'].includes(event.key))\n event.preventDefault();\n }\n \"\n >\n <slot />\n </Primitive>\n </MenuAnchor>\n</template>\n"],"names":["injectDropdownMenuRootContext","useForwardExpose","onMounted","useId"],"mappings":";;;;;;;;;;;;;;;;;AAkBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,MAAM,cAAcA,2DAA8B,EAAA;AAElD,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,cAAA,KAAmBC,wCAAiB,EAAA;AAExE,IAAAC,aAAA,CAAU,MAAM;AACd,MAAA,WAAA,CAAY,cAAiB,GAAA,cAAA;AAAA,KAC9B,CAAA;AAED,IAAY,WAAA,CAAA,SAAA,KAAcC,kBAAM,CAAA,MAAA,EAAW,4BAA4B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}