reka-ui
Version:
Vue port for Radix UI Primitives.
1 lines • 3.97 kB
Source Map (JSON)
{"version":3,"file":"NavigationMenuContent.cjs","sources":["../../src/NavigationMenu/NavigationMenuContent.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { NavigationMenuContentImplEmits, NavigationMenuContentImplProps } from './NavigationMenuContentImpl.vue'\n\nexport type NavigationMenuContentEmits = NavigationMenuContentImplEmits\n\nexport interface NavigationMenuContentProps extends NavigationMenuContentImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with Vue animation libraries.\n */\n forceMount?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { injectNavigationMenuContext } from './NavigationMenuRoot.vue'\nimport { injectNavigationMenuItemContext } from './NavigationMenuItem.vue'\nimport { getOpenState, whenMouse } from './utils'\nimport { Presence } from '@/Presence'\nimport { useForwardExpose, useForwardPropsEmits } from '@/shared'\nimport { isClient, reactiveOmit } from '@vueuse/shared'\nimport NavigationMenuContentImpl from './NavigationMenuContentImpl.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<NavigationMenuContentProps>()\nconst emits = defineEmits<NavigationMenuContentEmits>()\n\nconst forwarded = useForwardPropsEmits(reactiveOmit(props, 'forceMount'), emits)\nconst { forwardRef } = useForwardExpose()\n\nconst menuContext = injectNavigationMenuContext()\nconst itemContext = injectNavigationMenuItemContext()\n\nconst open = computed(() => itemContext.value === menuContext.modelValue.value)\n\n// We persist the last active content value as the viewport may be animating out\n// and we want the content to remain mounted for the lifecycle of the viewport.\nconst isLastActiveValue = computed(() => {\n if (menuContext.viewport.value) {\n if (!menuContext.modelValue.value && menuContext.previousValue.value)\n return (menuContext.previousValue.value === itemContext.value)\n }\n return false\n})\n</script>\n\n<template>\n <Teleport\n :to=\"isClient && menuContext.viewport.value ? menuContext.viewport.value : 'body'\"\n :disabled=\"isClient && menuContext.viewport.value ? !menuContext.viewport.value : true\"\n >\n <Presence\n v-slot=\"{ present }\"\n :present=\"forceMount || open || isLastActiveValue\"\n :force-mount=\"!menuContext.unmountOnHide.value\"\n >\n <NavigationMenuContentImpl\n :ref=\"forwardRef\"\n :data-state=\"getOpenState(open)\"\n :style=\"{\n pointerEvents: !open && menuContext.isRootMenu ? 'none' : undefined,\n }\"\n v-bind=\"{ ...$attrs, ...forwarded }\"\n :hidden=\"!present\"\n @pointerenter=\"menuContext.onContentEnter(itemContext.value)\"\n @pointerleave=\"whenMouse(() => menuContext.onContentLeave())($event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n @focus-outside=\"emits('focusOutside', $event)\"\n @interact-outside=\"emits('interactOutside', $event)\"\n >\n <slot />\n </NavigationMenuContentImpl>\n </Presence>\n </Teleport>\n</template>\n"],"names":["useForwardPropsEmits","reactiveOmit","useForwardExpose","injectNavigationMenuContext","injectNavigationMenuItemContext","computed"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAA,MAAM,KAAQ,GAAA,MAAA;AAEd,IAAA,MAAM,YAAYA,gDAAqB,CAAAC,mBAAA,CAAa,KAAO,EAAA,YAAY,GAAG,KAAK,CAAA;AAC/E,IAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,wCAAiB,EAAA;AAExC,IAAA,MAAM,cAAcC,6DAA4B,EAAA;AAChD,IAAA,MAAM,cAAcC,iEAAgC,EAAA;AAEpD,IAAA,MAAM,OAAOC,YAAS,CAAA,MAAM,YAAY,KAAU,KAAA,WAAA,CAAY,WAAW,KAAK,CAAA;AAI9E,IAAM,MAAA,iBAAA,GAAoBA,aAAS,MAAM;AACvC,MAAI,IAAA,WAAA,CAAY,SAAS,KAAO,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAA,CAAY,UAAW,CAAA,KAAA,IAAS,YAAY,aAAc,CAAA,KAAA;AAC7D,UAAQ,OAAA,WAAA,CAAY,aAAc,CAAA,KAAA,KAAU,WAAY,CAAA,KAAA;AAAA;AAE5D,MAAO,OAAA,KAAA;AAAA,KACR,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}