feat: expose open state to slots

This commit is contained in:
Benjamin Canac
2024-05-30 12:36:48 +02:00
parent 85c4226bd0
commit ed2c45ac76
7 changed files with 31 additions and 24 deletions

View File

@@ -43,7 +43,7 @@ export interface DropdownMenuEmits extends DropdownMenuRootEmits {}
type SlotProps<T> = (props: { item: T, active?: boolean, index: number }) => any
export type DropdownMenuSlots<T extends { slot?: string }> = {
'default'(): any
'default'(props: { open: boolean }): any
'item': SlotProps<T>
'item-leading': SlotProps<T>
'item-label': SlotProps<T>
@@ -75,9 +75,9 @@ const ui = computed(() => tv({ extend: dropdownMenu, slots: props.ui })())
</script>
<template>
<DropdownMenuRoot v-bind="rootProps">
<DropdownMenuRoot v-slot="{ open }" v-bind="rootProps">
<DropdownMenuTrigger v-if="!!slots.default" as-child :disabled="disabled">
<slot />
<slot :open="open" />
</DropdownMenuTrigger>
<UDropdownMenuContent :class="ui.content({ class: props.class })" :ui="ui" v-bind="contentProps" :items="items" :portal="portal">