UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 6.42 kB
{"version":3,"file":"VMenu.mjs","names":["VDialogTransition","VDefaultsProvider","VOverlay","forwardRefs","useProxiedModel","useScopeId","computed","inject","mergeProps","provide","ref","watch","genericComponent","getUid","omit","useRender","filterVOverlayProps","makeVOverlayProps","VMenuSymbol","VMenu","name","props","id","String","closeDelay","closeOnContentClick","locationStrategy","openDelay","scrim","scrollStrategy","transition","component","emits","value","setup","slots","isActive","scopeId","uid","overlay","parent","openChildren","register","unregister","closeParents","setTimeout","val","onClickOutside","activatorProps","overlayProps","activator","default","args","ΨopenChildren"],"sources":["../../../src/components/VMenu/VMenu.tsx"],"sourcesContent":["// Styles\nimport './VMenu.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VOverlay } from '@/components/VOverlay'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useScopeId } from '@/composables/scopeId'\n\n// Utilities\nimport { computed, inject, mergeProps, provide, ref, watch } from 'vue'\nimport { genericComponent, getUid, omit, useRender } from '@/util'\nimport { filterVOverlayProps, makeVOverlayProps } from '@/components/VOverlay/VOverlay'\nimport { VMenuSymbol } from './shared'\n\n// Types\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const VMenu = genericComponent<OverlaySlots>()({\n name: 'VMenu',\n\n props: {\n // TODO\n // disableKeys: Boolean,\n id: String,\n\n ...omit(makeVOverlayProps({\n closeDelay: 250,\n closeOnContentClick: true,\n locationStrategy: 'connected' as const,\n openDelay: 300,\n scrim: false,\n scrollStrategy: 'reposition' as const,\n transition: { component: VDialogTransition },\n }), ['absolute']),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { scopeId } = useScopeId()\n\n const uid = getUid()\n const id = computed(() => props.id || `v-menu-${uid}`)\n\n const overlay = ref<VOverlay>()\n\n const parent = inject(VMenuSymbol, null)\n const openChildren = ref(0)\n provide(VMenuSymbol, {\n register () {\n ++openChildren.value\n },\n unregister () {\n --openChildren.value\n },\n closeParents () {\n setTimeout(() => {\n if (!openChildren.value) {\n isActive.value = false\n parent?.closeParents()\n }\n }, 40)\n },\n })\n\n watch(isActive, val => {\n val ? parent?.register() : parent?.unregister()\n })\n\n function onClickOutside () {\n parent?.closeParents()\n }\n\n const activatorProps = computed(() =>\n mergeProps({\n 'aria-haspopup': 'menu',\n 'aria-expanded': String(isActive.value),\n 'aria-owns': id.value,\n }, props.activatorProps)\n )\n\n useRender(() => {\n const [overlayProps] = filterVOverlayProps(props)\n\n return (\n <VOverlay\n ref={ overlay }\n class={[\n 'v-menu',\n ]}\n { ...overlayProps }\n v-model={ isActive.value }\n absolute\n activatorProps={ activatorProps.value }\n onClick:outside={ onClickOutside }\n { ...scopeId }\n >\n {{\n activator: slots.activator,\n default: (...args) => (\n <VDefaultsProvider root>\n { slots.default?.(...args) }\n </VDefaultsProvider>\n ),\n }}\n </VOverlay>\n )\n })\n\n return forwardRefs({ id, ΨopenChildren: openChildren }, overlay)\n },\n})\n\nexport type VMenu = InstanceType<typeof VMenu>\n"],"mappings":"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"}