|
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