|
1 | 1 | <script setup lang="ts"> |
2 | 2 | import { useTemplateRef } from 'vue'; |
3 | | -import PanelMenu from 'primevue/panelmenu'; |
| 3 | +import PanelMenu, { type PanelMenuPassThroughOptions, type PanelMenuProps } from 'primevue/panelmenu'; |
4 | 4 | import { ChevronDown, ChevronRight } from 'lucide-vue-next'; |
5 | 5 | import type { ExtendedMenuItem } from '@/types'; |
| 6 | +import { ptViewMerge } from '@/utils'; |
6 | 7 |
|
7 | | -const componentProps = defineProps<{ |
8 | | - model: ExtendedMenuItem[] |
9 | | -}>(); |
| 8 | +interface ExtendedPanelMenuProps extends Omit<PanelMenuProps, 'model'> { |
| 9 | + model: ExtendedMenuItem[]; |
| 10 | +} |
| 11 | +const componentProps = defineProps<ExtendedPanelMenuProps>(); |
| 12 | +
|
| 13 | +const defaultPt: PanelMenuPassThroughOptions = { |
| 14 | + root: 'p-0 m-0 gap-1', |
| 15 | + panel: 'p-0 bg-transparent border-0', |
| 16 | + header: 'p-0 border-0', |
| 17 | + itemContent: 'gap-1', |
| 18 | +}; |
10 | 19 |
|
11 | 20 | type PanelMenuType = InstanceType<typeof PanelMenu>; |
12 | 21 | const childRef = useTemplateRef<PanelMenuType>('child-ref'); |
13 | | -defineExpose({ |
14 | | - childRef, |
15 | | -}); |
| 22 | +defineExpose({ el: childRef }); |
16 | 23 | </script> |
17 | 24 |
|
18 | 25 | <template> |
19 | 26 | <PanelMenu |
20 | 27 | ref="child-ref" |
21 | | - :model="componentProps.model" |
22 | | - pt:root:class="p-0 m-0 gap-1" |
23 | | - pt:panel:class="p-0 border-0" |
24 | | - pt:header:class="p-0 border-0" |
25 | | - pt:itemContent:class="gap-1" |
| 28 | + v-bind="{ ...componentProps, pt: defaultPt, ptOptions: { mergeProps: ptViewMerge } }" |
26 | 29 | > |
27 | 30 | <template #item="{ item, root, active, hasSubmenu }"> |
28 | 31 | <RouterLink |
|
0 commit comments