@@ -115,70 +115,72 @@ const groups = computed<DropdownMenuItem[][]>(() =>
115115 <component :is =" sub ? DropdownMenu.SubContent : DropdownMenu.Content" :class =" props.class" v-bind =" contentProps" >
116116 <slot name =" content-top" />
117117
118- <DropdownMenu .Group v-for =" (group, groupIndex) in groups" :key =" `group-${groupIndex}`" :class =" ui.group({ class: uiOverride?.group })" >
119- <template v-for =" (item , index ) in group " :key =" ` group-${groupIndex }-${index } ` " >
120- <DropdownMenu .Label v-if =" item.type === 'label'" :class =" ui.label({ class: [uiOverride?.label, item.ui?.label, item.class] })" >
121- <ReuseItemTemplate :item =" item" :index =" index" />
122- </DropdownMenu .Label >
123- <DropdownMenu .Separator v-else-if =" item.type === 'separator'" :class =" ui.separator({ class: [uiOverride?.separator, item.ui?.separator, item.class] })" />
124- <DropdownMenu .Sub v-else-if =" item?.children?.length" :open =" item.open" :default-open =" item.defaultOpen" >
125- <DropdownMenu .SubTrigger
126- as =" button"
127- type =" button"
118+ <div role =" presentation" :class =" ui.viewport({ class: props.ui?.viewport })" >
119+ <DropdownMenu .Group v-for =" (group, groupIndex) in groups" :key =" `group-${groupIndex}`" :class =" ui.group({ class: uiOverride?.group })" >
120+ <template v-for =" (item , index ) in group " :key =" ` group-${groupIndex }-${index } ` " >
121+ <DropdownMenu .Label v-if =" item.type === 'label'" :class =" ui.label({ class: [uiOverride?.label, item.ui?.label, item.class] })" >
122+ <ReuseItemTemplate :item =" item" :index =" index" />
123+ </DropdownMenu .Label >
124+ <DropdownMenu .Separator v-else-if =" item.type === 'separator'" :class =" ui.separator({ class: [uiOverride?.separator, item.ui?.separator, item.class] })" />
125+ <DropdownMenu .Sub v-else-if =" item?.children?.length" :open =" item.open" :default-open =" item.defaultOpen" >
126+ <DropdownMenu .SubTrigger
127+ as =" button"
128+ type =" button"
129+ :disabled =" item.disabled"
130+ :text-value =" get(item, props.labelKey as string)"
131+ :class =" ui.item({ class: [uiOverride?.item, item.ui?.item, item.class], color: item?.color })"
132+ >
133+ <ReuseItemTemplate :item =" item" :index =" index" />
134+ </DropdownMenu .SubTrigger >
135+
136+ <UDropdownMenuContent
137+ sub
138+ :class =" props.class"
139+ :ui =" ui"
140+ :ui-override =" uiOverride"
141+ :portal =" portal"
142+ :items =" (item.children as T)"
143+ align =" start"
144+ :align-offset =" -4"
145+ :side-offset =" 3"
146+ :label-key =" labelKey"
147+ :checked-icon =" checkedIcon"
148+ :loading-icon =" loadingIcon"
149+ :external-icon =" externalIcon"
150+ v-bind =" item.content"
151+ >
152+ <template v-for =" (_ , name ) in proxySlots " #[name ]=" slotData " >
153+ <slot :name =" (name as keyof DropdownMenuContentSlots<T>)" v-bind =" slotData" />
154+ </template >
155+ </UDropdownMenuContent >
156+ </DropdownMenu .Sub >
157+ <DropdownMenu .CheckboxItem
158+ v-else-if =" item.type === 'checkbox'"
159+ :model-value =" item.checked"
128160 :disabled =" item.disabled"
129161 :text-value =" get(item, props.labelKey as string)"
130162 :class =" ui.item({ class: [uiOverride?.item, item.ui?.item, item.class], color: item?.color })"
163+ @update:model-value =" item.onUpdateChecked"
164+ @select =" item.onSelect"
131165 >
132166 <ReuseItemTemplate :item =" item" :index =" index" />
133- </DropdownMenu .SubTrigger >
134-
135- <UDropdownMenuContent
136- sub
137- :class =" props.class"
138- :ui =" ui"
139- :ui-override =" uiOverride"
140- :portal =" portal"
141- :items =" (item.children as T)"
142- align =" start"
143- :align-offset =" -4"
144- :side-offset =" 3"
145- :label-key =" labelKey"
146- :checked-icon =" checkedIcon"
147- :loading-icon =" loadingIcon"
148- :external-icon =" externalIcon"
149- v-bind =" item.content"
167+ </DropdownMenu .CheckboxItem >
168+ <DropdownMenu .Item
169+ v-else
170+ as-child
171+ :disabled =" item.disabled"
172+ :text-value =" get(item, props.labelKey as string)"
173+ @select =" item.onSelect"
150174 >
151- <template v-for =" (_ , name ) in proxySlots " #[name ]=" slotData " >
152- <slot :name =" (name as keyof DropdownMenuContentSlots<T>)" v-bind =" slotData" />
153- </template >
154- </UDropdownMenuContent >
155- </DropdownMenu .Sub >
156- <DropdownMenu .CheckboxItem
157- v-else-if =" item.type === 'checkbox'"
158- :model-value =" item.checked"
159- :disabled =" item.disabled"
160- :text-value =" get(item, props.labelKey as string)"
161- :class =" ui.item({ class: [uiOverride?.item, item.ui?.item, item.class], color: item?.color })"
162- @update:model-value =" item.onUpdateChecked"
163- @select =" item.onSelect"
164- >
165- <ReuseItemTemplate :item =" item" :index =" index" />
166- </DropdownMenu .CheckboxItem >
167- <DropdownMenu .Item
168- v-else
169- as-child
170- :disabled =" item.disabled"
171- :text-value =" get(item, props.labelKey as string)"
172- @select =" item.onSelect"
173- >
174- <ULink v-slot =" { active, ...slotProps }" v-bind =" pickLinkProps(item as Omit<DropdownMenuItem, 'type'>)" custom >
175- <ULinkBase v-bind =" slotProps" :class =" ui.item({ class: [uiOverride?.item, item.ui?.item, item.class], color: item?.color, active })" >
176- <ReuseItemTemplate :item =" item" :active =" active" :index =" index" />
177- </ULinkBase >
178- </ULink >
179- </DropdownMenu .Item >
180- </template >
181- </DropdownMenu .Group >
175+ <ULink v-slot =" { active, ...slotProps }" v-bind =" pickLinkProps(item as Omit<DropdownMenuItem, 'type'>)" custom >
176+ <ULinkBase v-bind =" slotProps" :class =" ui.item({ class: [uiOverride?.item, item.ui?.item, item.class], color: item?.color, active })" >
177+ <ReuseItemTemplate :item =" item" :active =" active" :index =" index" />
178+ </ULinkBase >
179+ </ULink >
180+ </DropdownMenu .Item >
181+ </template >
182+ </DropdownMenu .Group >
183+ </div >
182184
183185 <slot />
184186
0 commit comments